PageRenderTime 42ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/titania/manage/categories.php

https://github.com/Lurttinen/customisation-db
PHP | 357 lines | 258 code | 65 blank | 34 comment | 41 complexity | 5684db1dc48c888c623aa3dc21618ef0 MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package Titania
  5. * @version $Id: categories.php 937 2010-03-30 01:21:50Z Tom $
  6. * @copyright (c) 2008 phpBB Customisation Database Team
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. * @ignore
  12. */
  13. if (!defined('IN_TITANIA'))
  14. {
  15. exit;
  16. }
  17. if (!phpbb::$auth->acl_gets('u_titania_admin'))
  18. {
  19. titania::needs_auth();
  20. }
  21. phpbb::$user->add_lang('acp/common');
  22. titania::_include('functions_posting', 'generate_type_select');
  23. $category_id = request_var('c', 0);
  24. $submit = (isset($_POST['submit'])) ? true : false;
  25. $action = request_var('action', '');
  26. switch ($action)
  27. {
  28. case 'add' :
  29. case 'edit' :
  30. $category_object = new titania_category;
  31. if ($action == 'edit')
  32. {
  33. if (!$category_id)
  34. {
  35. trigger_error(phpbb::$user->lang['NO_CATEGORY']);
  36. }
  37. $category_object->load($category_id);
  38. }
  39. // Load the message object
  40. $message_object = new titania_message($category_object);
  41. $message_object->set_auth(array(
  42. 'bbcode' => phpbb::$auth->acl_get('u_titania_bbcode'),
  43. 'smilies' => phpbb::$auth->acl_get('u_titania_smilies'),
  44. ));
  45. $message_object->set_settings(array(
  46. 'display_error' => false,
  47. 'display_subject' => false,
  48. ));
  49. $category_object->post_data($message_object);
  50. $message_object->display();
  51. // Define some variables for use later with keeping language-based category names the same in the DB during submit
  52. $old_category_name = $category_object->category_name;
  53. $old_category_name_clean = $category_object->category_name_clean;
  54. $old_category_name_lang = (isset(phpbb::$user->lang[$old_category_name])) ? phpbb::$user->lang[$old_category_name] : $old_category_name;
  55. $error = array();
  56. if($submit)
  57. {
  58. // Goodbye to some of the old category data...
  59. unset($category_object->category_name);
  60. $category_object->category_id = ($action == 'edit') ? $category_id : '';
  61. $category_name = utf8_normalize_nfc(request_var('category_name', '', true));
  62. $category_object->category_name = ($category_name == $old_category_name_lang) ? $old_category_name : $category_name;
  63. $category_object->category_name_clean = utf8_normalize_nfc(request_var('category_name_clean', '', true));
  64. $category_object->parent_id = request_var('category_parent', 0);
  65. $category_object->category_visible = request_var('category_visible', 1);
  66. $category_object->category_type = request_var('category_type', 0);
  67. // Check for errors
  68. if (!$category_object->category_name || !$category_object->category_name_clean)
  69. {
  70. $error[] = phpbb::$user->lang['NO_CATEGORY_NAME'];
  71. }
  72. if ($action == 'edit' && $category_object->parent_id == $category_object->category_id)
  73. {
  74. $error[] = phpbb::$user->lang['CATEGORY_DUPLICATE_PARENT'];
  75. }
  76. // We have no errors
  77. if (!sizeof($error))
  78. {
  79. // Set left_id and right_id to proper values
  80. if (!$category_object->category_id)
  81. {
  82. // no category_id means we're creating a new category
  83. if ($category_object->parent_id)
  84. {
  85. $sql = 'SELECT left_id, right_id
  86. FROM ' . TITANIA_CATEGORIES_TABLE . '
  87. WHERE category_id = ' . $category_object->parent_id;
  88. $result = phpbb::$db->sql_query($sql);
  89. $row = phpbb::$db->sql_fetchrow($result);
  90. phpbb::$db->sql_freeresult($result);
  91. if (!$row)
  92. {
  93. trigger_error(phpbb::$user->lang['PARENT_NOT_EXIST']);
  94. }
  95. $sql = 'UPDATE ' . TITANIA_CATEGORIES_TABLE . '
  96. SET left_id = left_id + 2, right_id = right_id + 2
  97. WHERE left_id > ' . $row['right_id'];
  98. phpbb::$db->sql_query($sql);
  99. $sql = 'UPDATE ' . TITANIA_CATEGORIES_TABLE . '
  100. SET right_id = right_id + 2
  101. WHERE ' . $row['left_id'] . ' BETWEEN left_id AND right_id';
  102. phpbb::$db->sql_query($sql);
  103. $category_object->left_id = $row['right_id'];
  104. $category_object->right_id = $row['right_id'] + 1;
  105. }
  106. else
  107. {
  108. $sql = 'SELECT MAX(right_id) AS right_id
  109. FROM ' . TITANIA_CATEGORIES_TABLE;
  110. $result = phpbb::$db->sql_query($sql);
  111. $row = phpbb::$db->sql_fetchrow($result);
  112. phpbb::$db->sql_freeresult($result);
  113. $category_object->left_id = $row['right_id'] + 1;
  114. $category_object->right_id = $row['right_id'] + 2;
  115. }
  116. }
  117. else
  118. {
  119. $category_check = new titania_category;
  120. $category_check->load($category_id);
  121. if ($category_check->parent_id != $category_object->parent_id)
  122. {
  123. if ($category_check->category_id != $category_object->parent_id)
  124. {
  125. $errors_extra = $category_object->move_category($category_object->parent_id);
  126. // Check for errors from moving the category
  127. if (sizeof($errors_extra))
  128. {
  129. $error = array_merge($error, $errors_extra);
  130. }
  131. }
  132. else
  133. {
  134. $category_object->parent_id = $category_check->parent_id;
  135. }
  136. }
  137. }
  138. // Only update category if no errors occurred from moving it
  139. if (!sizeof($error))
  140. {
  141. // Now we submit the category information...
  142. $category_object->submit();
  143. // Redirect back to the previous category
  144. redirect(titania_url::build_url('manage/categories', array('c' => $category_object->parent_id)));
  145. }
  146. }
  147. }
  148. // Generate data for category type dropdown box
  149. generate_type_select($category_object->category_type);
  150. phpbb::$template->assign_vars(array(
  151. 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
  152. 'CATEGORY' => $category_id,
  153. 'CATEGORY_NAME' => (isset(phpbb::$user->lang[$category_object->category_name])) ? phpbb::$user->lang[$category_object->category_name] : $category_object->category_name,
  154. 'CATEGORY_NAME_CLEAN' => $category_object->category_name_clean,
  155. 'CATEGORY_VISIBLE' => $category_object->category_visible,
  156. 'SECTION_NAME' => ($action == 'add') ? phpbb::$user->lang['CREATE_CATEGORY'] : phpbb::$user->lang['EDIT_CATEGORY'] . ' - ' . ((isset(phpbb::$user->lang[$old_category_name])) ? phpbb::$user->lang[$old_category_name] : $old_category_name),
  157. 'U_ACTION' => ($action == 'add') ? titania_url::build_url('manage/categories', array('c' => $category_id, 'action' => 'add')) : titania_url::build_url('manage/categories', array('c' => $category_id, 'action' => 'edit')),
  158. 'U_BACK' => ($action == 'add') ? titania_url::build_url('manage/categories', array('c' => $category_id)) : titania_url::build_url('manage/categories', array('c' => $category_object->parent_id)),
  159. 'S_ADD_CATEGORY' => ($action == 'add') ? true : false,
  160. 'S_EDIT_CATEGORY' => ($action == 'edit') ? true : false,
  161. 'S_MOVE_CATEGORY_OPTIONS' => (isset($category_object->parent_id)) ? generate_category_select($category_object->parent_id, true) : generate_category_select($category_id, true),
  162. ));
  163. break;
  164. case 'move_up' :
  165. case 'move_down' :
  166. $category_object = new titania_category;
  167. if (!$category_id)
  168. {
  169. trigger_error(phpbb::$user->lang['NO_CATEGORY']);
  170. }
  171. $category_object->load($category_id);
  172. $category_object->move_category_by($action, 1);
  173. phpbb::$template->assign_vars(array(
  174. 'CATEGORY' => $category_object->category_id,
  175. 'S_MOVE_CATEGORY' => true,
  176. ));
  177. // Redirect back to previous category to avoid problems
  178. redirect(titania_url::build_url('manage/categories', array('c' => $category_object->parent_id)));
  179. break;
  180. case 'delete' :
  181. $category_object = new titania_category;
  182. if (!$category_id)
  183. {
  184. trigger_error(phpbb::$user->lang['NO_CATEGORY']);
  185. }
  186. $category_object->load($category_id);
  187. $parent_id = ($category_object->parent_id == $category_object->category_id) ? 0 : $category_object->parent_id;
  188. $error = array();
  189. if($submit)
  190. {
  191. $action_contribs = request_var('action_contribs', '');
  192. $contribs_to_id = request_var('contribs_to_id', 0);
  193. // Check for errors
  194. $sql = 'SELECT category_id
  195. FROM ' . TITANIA_CATEGORIES_TABLE . "
  196. WHERE parent_id = $category_object->category_id";
  197. $result = phpbb::$db->sql_query($sql);
  198. $children_row = phpbb::$db->sql_fetchrow($result);
  199. phpbb::$db->sql_freeresult($result);
  200. // Check if category contains subcategories. If yes, then return an error.
  201. if ($children_row)
  202. {
  203. $error[] = phpbb::$user->lang['CATEGORY_HAS_CHILDREN'];
  204. }
  205. else
  206. {
  207. if ($action_contribs == 'move' && !empty($contribs_to_id))
  208. {
  209. $error = array_merge($error, $category_object->move_category_content($contribs_to_id));
  210. }
  211. }
  212. if (!sizeof($error))
  213. {
  214. // Delete category
  215. $category_object->delete();
  216. // Redirect back to the previous category
  217. redirect(titania_url::build_url('manage/categories', array('c' => $parent_id)));
  218. }
  219. }
  220. phpbb::$template->assign_vars(array(
  221. 'S_DELETE_CATEGORY' => true,
  222. 'U_ACTION' => titania_url::build_url('manage/categories', array('c' => $category_id, 'action' => 'delete')),
  223. 'U_BACK' => 'c_' . $category_object->parent_id,
  224. 'CATEGORY' => $category_id,
  225. 'CATEGORY_NAME' => (isset(phpbb::$user->lang[$category_object->category_name])) ? phpbb::$user->lang[$category_object->category_name] : $category_object->category_name,
  226. 'SECTION_NAME' => phpbb::$user->lang['DELETE_CATEGORY'] . ' - ' . ((isset(phpbb::$user->lang[$category_object->category_name])) ? phpbb::$user->lang[$category_object->category_name] : $category_object->category_name),
  227. 'S_HAS_SUBCATS' => ($category_object->right_id - $category_object->left_id > 1) ? true : false,
  228. 'S_MOVE_CATEGORY_OPTIONS' => generate_category_select($category_object->parent_id, true),
  229. 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '')
  230. );
  231. break;
  232. default :
  233. titania::_include('functions_display', 'titania_display_categories');
  234. titania_display_categories($category_id, 'categories', true);
  235. if ($category_id != 0)
  236. {
  237. // Breadcrumbs
  238. $category_object = new titania_category;
  239. $categories_ary = titania::$cache->get_categories();
  240. // Parents
  241. foreach (array_reverse(titania::$cache->get_category_parents($category_id)) as $row)
  242. {
  243. $category_object->__set_array($categories_ary[$row['category_id']]);
  244. titania::generate_breadcrumbs(array(
  245. ((isset(phpbb::$user->lang[$categories_ary[$row['category_id']]['category_name']])) ? phpbb::$user->lang[$categories_ary[$row['category_id']]['category_name']] : $categories_ary[$row['category_id']]['category_name']) => titania_url::build_url('manage/categories', array('c' => $row['category_id'])),
  246. ));
  247. }
  248. // Self
  249. $category_object->__set_array($categories_ary[$category_id]);
  250. titania::generate_breadcrumbs(array(
  251. ((isset(phpbb::$user->lang[$categories_ary[$category_id]['category_name']])) ? phpbb::$user->lang[$categories_ary[$category_id]['category_name']] : $categories_ary[$category_id]['category_name']) => titania_url::build_url('manage/categories', array('c' => $category_id)),
  252. ));
  253. // Second set of breadcrumbs for category navigation
  254. // Parents
  255. foreach (array_reverse(titania::$cache->get_category_parents($category_id)) as $row)
  256. {
  257. $category_object->__set_array($categories_ary[$row['category_id']]);
  258. titania::generate_breadcrumbs(array(
  259. ((isset(phpbb::$user->lang[$categories_ary[$row['category_id']]['category_name']])) ? phpbb::$user->lang[$categories_ary[$row['category_id']]['category_name']] : $categories_ary[$row['category_id']]['category_name']) => titania_url::build_url('manage/categories', array('c' => $row['category_id'])),
  260. ), $block = 'nav_categories');
  261. }
  262. // Self
  263. $category_object->__set_array($categories_ary[$category_id]);
  264. titania::generate_breadcrumbs(array(
  265. ((isset(phpbb::$user->lang[$categories_ary[$category_id]['category_name']])) ? phpbb::$user->lang[$categories_ary[$category_id]['category_name']] : $categories_ary[$category_id]['category_name']) => titania_url::build_url('manage/categories', array('c' => $category_id)),
  266. ), $block = 'nav_categories');
  267. unset($categories_ary, $category_object);
  268. }
  269. phpbb::$template->assign_vars(array(
  270. 'ICON_MOVE_UP' => '<img src="' . titania::$images_path . 'icon_up.gif" alt="' . phpbb::$user->lang['MOVE_UP'] . '" title="' . phpbb::$user->lang['MOVE_UP'] . '" />',
  271. 'ICON_MOVE_UP_DISABLED' => '<img src="' . titania::$images_path . 'icon_up_disabled.gif" alt="' . phpbb::$user->lang['MOVE_UP'] . '" title="' . phpbb::$user->lang['MOVE_UP'] . '" />',
  272. 'ICON_MOVE_DOWN' => '<img src="' . titania::$images_path . 'icon_down.gif" alt="' . phpbb::$user->lang['MOVE_DOWN'] . '" title="' . phpbb::$user->lang['MOVE_DOWN'] . '" />',
  273. 'ICON_MOVE_DOWN_DISABLED' => '<img src="' . titania::$images_path . 'icon_down_disabled.gif" alt="' . phpbb::$user->lang['MOVE_DOWN'] . '" title="' . phpbb::$user->lang['MOVE_DOWN'] . '" />',
  274. 'ICON_EDIT' => '<img src="' . titania::$images_path . 'icon_edit.gif" alt="' . phpbb::$user->lang['EDIT'] . '" title="' . phpbb::$user->lang['EDIT'] . '" />',
  275. 'ICON_EDIT_DISABLED' => '<img src="' . titania::$images_path . 'icon_edit_disabled.gif" alt="' . phpbb::$user->lang['EDIT'] . '" title="' . phpbb::$user->lang['EDIT'] . '" />',
  276. 'ICON_DELETE' => '<img src="' . titania::$images_path . 'icon_delete.gif" alt="' . phpbb::$user->lang['DELETE'] . '" title="' . phpbb::$user->lang['DELETE'] . '" />',
  277. 'ICON_DELETE_DISABLED' => '<img src="' . titania::$images_path . 'icon_delete_disabled.gif" alt="' . phpbb::$user->lang['DELETE'] . '" title="' . phpbb::$user->lang['DELETE'] . '" />',
  278. 'SECTION_NAME' => '<a href="' . titania_url::build_url('manage/categories') . '">' . phpbb::$user->lang['MANAGE_CATEGORIES'] . '</a>',
  279. 'U_CREATE_CATEGORY' => titania_url::build_url('manage/categories', array('c' => $category_id, 'action' => 'add')),
  280. 'U_MANAGE_CATEGORIES' => titania_url::build_url('manage/categories'),
  281. 'S_MANAGE' => true,
  282. ));
  283. break;
  284. }
  285. function trigger_back($message)
  286. {
  287. $message = (isset(phpbb::$user->lang[$message])) ? phpbb::$user->lang[$message] : $message;
  288. $message .= '<br /><br /><a href="' . titania_url::build_url('manage/categories') . '">' . phpbb::$user->lang['BACK'] . '</a>';
  289. trigger_error($message);
  290. }
  291. titania::page_header('MANAGE_CATEGORIES');
  292. titania::page_footer(true, 'manage/categories.html');