PageRenderTime 43ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/src/inc/admcat.php

https://github.com/jacadym/picman
PHP | 363 lines | 297 code | 39 blank | 27 comment | 38 complexity | 3c5dfe16574303f4becc94a935c6df53 MD5 | raw file
  1. <HTML>
  2. <HEAD>
  3. <TITLE>Administrator :: Categories</TITLE>
  4. <STYLE TYPE="text/css"><!--
  5. body {
  6. font-family: arial,helvetica,sans-serif;
  7. font-size: 10pt;
  8. }
  9. a {
  10. font-family: arial,helvetica,sans-serif;
  11. text-decoration: none;
  12. }
  13. a.menu {
  14. font-weight: bold;
  15. color: #6699cc;
  16. font-size: 8pt;
  17. }
  18. td {
  19. font-size: 10pt;
  20. }
  21. th {
  22. font-size: 14pt;
  23. font-weight: bold;
  24. color: #000000;
  25. text-align: left;
  26. }
  27. td.menu, th.menu {
  28. font-size: 10pt;
  29. text-align: left;
  30. color: #000000;
  31. }
  32. div.frame {
  33. background: white;
  34. border: solid 1px black;
  35. width: 700px;
  36. }
  37. //--></STYLE>
  38. </HEAD>
  39. <BODY BGCOLOR="silver">
  40. <DIV ALIGN=center>
  41. <?php
  42. echo AdminMenu();
  43. if (isset($frm[action])) {
  44. switch (strtolower($frm[action])) {
  45. case 'mod' :
  46. $option_hidden = (isset($frm[cathid]) && $frm[cathid] ? 1 : 0);
  47. $parent_id = isset($frm[parent]) ? $frm[parent] : 0;
  48. if (isset($frm[addbr]) && !empty($frm[desc])) {
  49. $out = '';
  50. foreach(split("\n", trim($frm[desc])) as $line) $out .= trim($line)."<BR>\n";
  51. $frm[desc] = $out;
  52. }
  53. if ($page_id) {
  54. $parent_lnum = $parent_rnum = 0;
  55. $oldparent_lnum = $oldparent_rnum = 0;
  56. $result = db_query("SELECT id_parent, lnum, rnum FROM {categories} WHERE id = $page_id");
  57. if (db_num_rows($result)) {
  58. $item = db_fetch_array($result);
  59. $oldparent_id = $item['id_parent'];
  60. $cat_lnum = $item['lnum'];
  61. $cat_rnum = $item['rnum'];
  62. }
  63. if ($oldparent_id != 0) {
  64. $result = db_query("SELECT lnum, rnum FROM {categories} WHERE id = $oldparent_id");
  65. if (db_num_rows($result)) {
  66. $item = db_fetch_array($result);
  67. $oldparent_lnum = $item['lnum'];
  68. $oldparent_rnum = $item['rnum'];
  69. }
  70. }
  71. if ($parent_id) {
  72. $result = db_query("SELECT lnum, rnum FROM {categories} WHERE id = $parent_id");
  73. if (db_num_rows($result)) {
  74. $item = db_fetch_array($result);
  75. $parent_lnum = $item['lnum'];
  76. $parent_rnum = $item['rnum'];
  77. }
  78. }
  79. if (($parent_lnum > $cat_lnum && $parent_rnum < $cat_rnum) || ($parent_id == $page_id)) {
  80. echo "ERROR!!! Podpięcie pod swojego potomka (lub pod siebie samego)!!!";
  81. $parent_id = $oldparent_id;
  82. }
  83. if ($parent_id != $oldparent_id) {
  84. $cat_items = ($cat_rnum - $cat_lnum) + 1;
  85. switch ($frm[inspos]) {
  86. case 1: // First in cat
  87. $new_lnum = ($cat_lnum < $parent_lnum) ? ($parent_lnum - $cat_items) + 1 : $parent_lnum + 1;
  88. break;
  89. case 2: // Last in cat
  90. $new_lnum = ($cat_rnum < $parent_rnum) ? $parent_rnum - $cat_items : $parent_rnum;
  91. break;
  92. default: // Sort
  93. $result = db_query_range("
  94. SELECT rnum + 1 AS new_rnum FROM categories
  95. WHERE id_parent = $parent_id AND lower(name) < lower('".FrmDb($frm[name])."')
  96. ORDER BY name DESC
  97. ", 1, 0);
  98. if (db_num_rows($result)) {
  99. $item = db_fetch_array($result);
  100. $parent_rnum = $item['new_rnum'];
  101. }
  102. $new_lnum = ($cat_rnum < $parent_rnum) ? $parent_rnum - $cat_items : $parent_rnum;
  103. break;
  104. }
  105. /**/
  106. db_query("BEGIN");
  107. // Zmniejszamy wartości lnum, rnum dla obiektu i jego potomków
  108. // Numeracja będzie zaczynała się od 0 dla lnum
  109. db_query("UPDATE {categories} SET lnum = lnum - $cat_lnum, rnum = rnum - $cat_lnum, mod_struct = 1 WHERE id IN (SELECT C.id FROM {categories} C, {categories} PARENT WHERE PARENT.id = $page_id AND (C.id = PARENT.id OR (C.lnum BETWEEN PARENT.lnum AND PARENT.rnum)))");
  110. // Przenumerowujemy wszystkie pozostałe obiekty (tak jakby nie było modyfikowanego)
  111. db_query("UPDATE {categories} SET lnum = lnum - $cat_items WHERE mod_struct = 0 AND lnum > $cat_lnum");
  112. db_query("UPDATE {categories} SET rnum = rnum - $cat_items WHERE mod_struct = 0 AND rnum > $cat_rnum");
  113. // Przesuwamy wszystkie numery aby można było wprowadzić modyfikowany obiekt
  114. db_query("UPDATE {categories} SET lnum = lnum + $cat_items WHERE mod_struct = 0 AND lnum >= $new_lnum");
  115. db_query("UPDATE {categories} SET rnum = rnum + $cat_items WHERE mod_struct = 0 AND rnum >= $new_lnum");
  116. // Wsztawiny w odpowiednie miejsce obiekt wraz z jego potomkami
  117. db_query("UPDATE {categories} SET lnum = lnum + $new_lnum, rnum = rnum + $new_lnum, mod_struct = 0 WHERE mod_struct = 1");
  118. db_query("COMMIT");
  119. /**/
  120. /**/
  121. echo
  122. '<BR><BR>'.
  123. FramedTable1().
  124. '<BR> &nbsp; Wymagana jest zmiana struktury kategorii dla "'.$frm[name].'" &nbsp; <BR><BR>'.
  125. "OldParent :: ID:$oldparent_id ($oldparent_lnum,$oldparent_rnum)<BR>".
  126. "NewParent :: ID:$parent_id ($parent_lnum,$parent_rnum)<BR>".
  127. "Category :: ID:$page_id ($cat_lnum,$cat_rnum) ITEMS:$cat_items <BR>".
  128. "NEW LNUM :: $new_lnum MODE:$frm[inspos]".
  129. '<BR><BR>'.
  130. FramedTable2();
  131. /**/
  132. }
  133. /**/
  134. $result = db_query("
  135. UPDATE {categories} SET
  136. uniqid = '".FrmDb($frm[uniqid])."',
  137. id_parent = $parent_id,
  138. date_create = '".$frm[datecr]."',
  139. name = '".FrmDb($frm[name])."',
  140. title = '".FrmDb($frm[title])."',
  141. header = '".FrmDb($frm[header])."',
  142. description = '".FrmDb($frm[desc])."',
  143. hidden = $option_hidden,
  144. catdir = '".FrmDb($frm[dircat])."',
  145. template = '".FrmDb($frm[dirtem])."',
  146. catrows = $frm[catrow],
  147. catcols = $frm[catcol],
  148. colrows = $frm[grrow],
  149. colcols = $frm[grcol]
  150. WHERE id = $page_id
  151. ");
  152. /**/
  153. echo
  154. '<BR><BR>'.
  155. FramedTable1().
  156. '<BR> &nbsp; OK! Modify category "'.$frm[name].'" &nbsp; <BR><BR>'.
  157. FramedTable2();
  158. } else { // Tworzenie nowej kategorii
  159. $parent_lnum = 0;
  160. $parent_rnum = 0;
  161. // Wyszukanie informacji o przodku
  162. $result = db_query("SELECT lnum, rnum FROM {categories} WHERE id = $parent_id");
  163. if (db_num_rows($result)) {
  164. $item = db_fetch_array($result);
  165. $parent_lnum = $item['lnum'];
  166. $parent_rnum = $item['rnum'];
  167. }
  168. switch ($frm[inspos]) {
  169. case 1: // First in cat
  170. $cat_lnum = $parent_lnum + 1;
  171. break;
  172. case 2: // Last in cat
  173. $cat_lnum = $parent_rnum;
  174. if ($parent_id == 0) {
  175. $result = db_query("SELECT max(rnum) AS max FROM categories");
  176. if (db_num_rows($result)) {
  177. $item = db_fetch_array($result);
  178. $cat_lnum = $item['max'] + 1;
  179. }
  180. }
  181. break;
  182. default: // Sort
  183. // Znalezienie największego ale mniejszego elementu od obecnie wstawianego
  184. $result = db_query_range("
  185. SELECT rnum FROM categories
  186. WHERE id_parent = $parent_id AND lower(name) < lower('".FrmDb($frm[name])."')
  187. ORDER BY name DESC
  188. ", 1, 0);
  189. if (db_num_rows($result)) {
  190. $item = db_fetch_array($result);
  191. $cat_lnum = $item['rnum'] + 1;
  192. } else {
  193. // Nie znaleziono mniejszych więc jest pierwszy
  194. $cat_lnum = $parent_lnum + 1;
  195. }
  196. break;
  197. }
  198. $cat_rnum = $cat_lnum + 1;
  199. /*
  200. echo
  201. '<BR><BR>'.
  202. FramedTable1().
  203. "Parent :: ID:$parent_id ($parent_lnum,$parent_rnum)<BR>".
  204. "Category :: ID:$page_id ($cat_lnum,$cat_rnum)<BR>".
  205. "NEW :: MODE:$frm[inspos]".
  206. '<BR><BR>'.
  207. FramedTable2();
  208. */
  209. db_query("BEGIN");
  210. db_query("UPDATE {categories} SET lnum = lnum + 2 WHERE lnum >= $cat_lnum");
  211. db_query("UPDATE {categories} SET rnum = rnum + 2 WHERE rnum >= $cat_lnum");
  212. db_query("INSERT INTO {categories} (".
  213. "uniqid,id_parent,date_create,".
  214. "name,title,header,description,".
  215. "hidden,catdir,template,options,".
  216. "catrows,catcols,colrows,colcols,".
  217. "lnum, rnum) VALUES (
  218. '".FrmDb($frm[uniqid])."', $parent_id, '".$frm[datecr]."',
  219. '".FrmDb($frm[name])."', '".FrmDb($frm[title])."', '".FrmDb($frm[header])."','".FrmDb($frm[desc])."',
  220. $option_hidden, '".FrmDb($frm[dircat])."', '".FrmDb($frm[dirtem])."', '',
  221. $frm[catrow], $frm[catcol], $frm[grrow], $frm[grcol],
  222. $cat_lnum, $cat_rnum
  223. )");
  224. db_query("COMMIT");
  225. echo
  226. '<BR><BR>'.
  227. FramedTable1().
  228. '<BR> &nbsp; OK! Created new category "'.$frm[name].'" &nbsp; <BR><BR>'.
  229. FramedTable2();
  230. }
  231. break;
  232. case 'del' :
  233. $result = db_query("SELECT uniqid, name, id_parent, lnum, rnum FROM {categories} WHERE id = $page_id");
  234. if (db_num_rows($result)) {
  235. $item = db_fetch_array($result);
  236. $quantity = db_fetch_array(db_query("SELECT count(*) FROM {collections} WHERE uid_cat = '%s'", $item['uniqid']));
  237. if ($quantity['count'] > 0 || ($item['rnum'] - $item['lnum']) > 1) {
  238. echo
  239. '<BR><BR>'.
  240. FramedTable1().
  241. '<BR> &nbsp; Sorry! Category is not empty! &nbsp; <BR><BR>'.
  242. FramedTable2();
  243. }
  244. else {
  245. db_query("BEGIN");
  246. db_query("UPDATE {categories} SET lnum = lnum - 2 WHERE lnum > %d", $item['rnum']);
  247. db_query("UPDATE {categories} SET rnum = rnum - 2 WHERE rnum > %d", $item['rnum']);
  248. db_query("DELETE FROM {categories} WHERE id = %d", $page_id);
  249. db_query("COMMIT");
  250. echo
  251. '<BR><BR>'.
  252. FramedTable1().
  253. '<BR> &nbsp; OK! Category remove: "'.$item['name'].'"! &nbsp; <BR><BR>'.
  254. FramedTable2();
  255. }
  256. }
  257. else {
  258. echo
  259. '<BR><BR>'.
  260. FramedTable1().
  261. '<BR> &nbsp; Sorry! But not found category to delete! &nbsp; <BR><BR>'.
  262. FramedTable2();
  263. }
  264. break;
  265. default:
  266. echo
  267. '<BR><BR>'.
  268. FramedTable1().
  269. '<BR> &nbsp; Sorry! But incorrect action "'.$frm[action].'" &nbsp; <BR><BR>'.
  270. FramedTable2();
  271. break;
  272. }
  273. } else {
  274. DisplayCategoryForm();
  275. }
  276. function DisplayCategoryForm() {
  277. global $page_id, $page_pg, $frm;
  278. // Wartości domyślne
  279. if (!isset($frm)) $frm = array('catcol' => 1, 'catrow' => 8, 'grcol' => 4, 'grrow' => 4, 'datecr' => date('Y-m-d'));
  280. if ($page_id) GetCategoryData($page_id);
  281. $cat_id = $page_id;
  282. // Jeżeli chcemy dodać nową kategorię to miejsce gdzie jesteśmy wskazuje page_pg
  283. if (!$cat_id && $page_pg) $cat_id = $page_pg;
  284. $hier_cat = GetCategoriesHierarchy($frm[parent], $cat_id, 0);
  285. echo
  286. FramedTable1().
  287. '<FORM METHOD="POST">'.
  288. '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1>'.
  289. '<TR><TH> Category </TH><TD> '.FormCheckbox('cathid').'Hidden </TD></TR>'.
  290. '<TR><TD></TD><TD ALIGN=right> '.
  291. FormSelect('action', array('mod' => 'Modify', 'del' => 'Delete', 'sort' => 'Sort')).
  292. ' <INPUT TYPE=submit VALUE=" Send "> '.
  293. '</TD></TR>'.
  294. '<TR><TD> Parent: </TD><TD> '.
  295. '<SELECT NAME="frm[parent]">'.$hier_cat.'</SELECT>'.
  296. FormSelect('inspos', array(1 => 'First', 2 => 'Last', 3 => 'Sort')).
  297. '</TD></TR>'.
  298. '<TR><TD> Uniqid & Date: </TD><TD> '.FormInput('uniqid').' '.FormInput('datecr',12).' </TD></TR>'.
  299. '<TR><TD> Name: </TD><TD> '.FormInput('name').' </TD></TR>'.
  300. '<TR><TD> Title: </TD><TD> '.FormInput('title').' </TD></TR>'.
  301. '<TR><TD> Header: </TD><TD> '.FormInput('header').' </TD></TR>'.
  302. '<TR><TD> Description: </TD><TD> '. FormText('desc', 80, 5).'<BR>'.FormCheckbox('addbr').' Auto add "break line" </TD></TR>'.
  303. '<TR><TD COLSPAN=2><HR></TD></TR>'.
  304. '<TR><TD> Subcats: </TD><TD> '.
  305. FormSelect('catcol', range(1, 10), 0).
  306. ' x '.
  307. FormSelect('catrow', range(1, 20), 0).
  308. ' (columns x rows) '.
  309. '</TD></TR>'.
  310. '<TR><TD> Collections: </TD><TD> '.
  311. FormSelect('grcol', range(1, 10), 0).
  312. ' x '.
  313. FormSelect('grrow', range(1, 20), 0).
  314. ' (columns x rows) '.
  315. '</TD></TR>'.
  316. '<TR><TD> Category directory: </TD><TD> '.FormInput('dircat').' </TD></TR>'.
  317. '<TR><TD> Template directory: </TD><TD> '.FormInput('dirtem', 40, PICMAN_DEFAULT_TEMP).' </TD></TR>'.
  318. '</TABLE>'.
  319. '</FORM>'.
  320. FramedTable2();
  321. }
  322. ?>
  323. </DIV>
  324. </BODY></HTML>