Просмотр файла lib/includes/panel/movdel.php

Размер файла: 11.94Kb
  1. <?php
  2.  
  3. if ($admin)
  4. {
  5.  
  6. $id = $id ? $id : 0;
  7.  
  8. if ((!empty($_POST['data']) && (isset($_POST['move']) || isset($_POST['delete']))))
  9. {
  10.  
  11. /* Получаем и обрабатываем идентификаторы объектов */
  12. $ids = (isset($_POST['cat']) && isset($_POST['move'])) ? unserialize($_POST['data']) : $_POST['data'];
  13. $ids = array_map('intval', $ids);
  14.  
  15. /* Перемещение категорий и статей */
  16. if (isset($_POST['move']))
  17. {
  18.  
  19. /* Проверяем список объектов на тип и существование */
  20. $sql->query(
  21. "SELECT `id`, `refid`, `type` " .
  22. "FROM `mod_lib` WHERE `id` IN ('" . implode('\',\'', $ids) .
  23. "') AND (`type` = 'arc' OR `type` = 'cat')"
  24. );
  25. /* Список объектов прошедших проверку */
  26. $moves = array();
  27. $total_cats = 0;
  28. $total_arcs = 0;
  29.  
  30. while($data = $sql->fetch())
  31. {
  32.  
  33. if($data['type'] == 'cat')
  34. $total_cats++;
  35. else
  36. $total_arcs++;
  37. $moves[$data['refid']][] = $data['id'];
  38.  
  39. }
  40.  
  41. unset($data, $ids);
  42.  
  43. /* Все ли объекты находятся в одной и той же категории? */
  44. if (count($moves) > 1)
  45. {
  46.  
  47. $error = 'Ошибка принятых данных';
  48.  
  49. }
  50. else
  51. {
  52.  
  53. /* Идентификатор категории в которой находятся объекты */
  54. $refid = key($moves);
  55. /* Список объетов */
  56. $moves = array_shift($moves);
  57. /* Перемещаем объекты */
  58. if (isset($_POST['cat']))
  59. {
  60.  
  61. $cat = isset($_POST['cat']) ? abs(intval($_POST['cat'])) : 0;
  62. if ( /* Проверка категории на существование */
  63. isset($_POST['cat'])
  64. && ($newcat = $sql->query(
  65. "SELECT `counter`, `count_arc` FROM `mod_lib` " .
  66. "WHERE `type` = 'cat' AND `id` = '" . $cat . "'"
  67. )->fetch()) !== FALSE
  68. )
  69. {
  70.  
  71. if ($refid != 0)
  72. {
  73. /* Обновляем счетчики объектов в предыдущей категории */
  74. $refcat = $sql->query("SELECT `counter`, `count_arc` FROM `mod_lib` WHERE `id` = '" . $refid . "'")->fetch();
  75. $sql->query(
  76. "UPDATE `mod_lib` SET " .
  77. "`counter` = '" . ($refcat['counter'] - $total_cats) . "', " .
  78. "`count_arc` = '" . ($refcat['count_arc'] - $total_arcs) . "' " .
  79. "WHERE `id` = '" . $refid . "'"
  80. );
  81.  
  82. }
  83.  
  84. if ($cat != 0)
  85. {
  86. /* Обновляем счетчики объектов в новой категории */
  87. $newcat = $sql->query("SELECT `counter`, `count_arc` FROM `mod_lib` WHERE `id` = '" . $cat . "'")->fetch();
  88. $sql->query(
  89. "UPDATE `mod_lib` SET " .
  90. "`counter` = '" . ($newcat['counter'] + $total_cats) . "', " .
  91. "`count_arc` = '" . ($newcat['count_arc'] + $total_arcs) . "' " .
  92. "WHERE `id` = '" . $cat . "'"
  93. );
  94.  
  95. }
  96. /* Перемещаем объекты */
  97. $sql->query("UPDATE `mod_lib` SET `refid` = '" . $cat . "' WHERE `id` IN ('" . implode('\',\'', $moves) . "')");
  98. $message = 'Отмеченные статьи и категории перемещены';
  99.  
  100. }
  101. else
  102. {
  103.  
  104. $error = 'Категория не найдена';
  105.  
  106. }
  107.  
  108. }
  109. else
  110. {
  111.  
  112. /* Получаем список категорий */
  113. $sql->query(
  114. "SELECT `id`, `name` FROM `mod_lib` WHERE `id` NOT IN ('" .
  115. implode('\',\'', $moves) . "', '" . $refid .
  116. "') AND `type` = 'cat'"
  117. );
  118.  
  119.  
  120. echo '<div class="fmenu">' . 'Библиотека' . ' | ' . $set['title'] . '</div>' .
  121. '<div class="menu"><form action="?act=panel&amp;mod=movdel&amp;id=' . $id . '" method="post">' .
  122. 'Выберите категорию<br /><select name="cat">' .
  123. ($refid !== 0 ? '<option value="0">В корень</option>' : '');
  124.  
  125. while($data = $sql->fetch())
  126. {
  127. echo '<option value="' . $data['id'] . '">' . htmlentities($data['name'], ENT_QUOTES, 'UTF-8') . '</option>';
  128. }
  129.  
  130.  
  131. echo '</select><input type="hidden" name="data" value=\'' . (serialize($moves)) . '\' />' .
  132. '<input type="submit" name="move" value="Переместить" /></form></div>' .
  133. '<div class="fmenu"><a href="?act=panel&amp;mod=view&amp;id=' . $id . '">Назад</a></div>';
  134.  
  135. }
  136.  
  137. }
  138.  
  139.  
  140. }
  141. /* Удаляем объекты */
  142. elseif (isset($_POST['delete']))
  143. {
  144.  
  145. /* Проверка объектов на тип и существование */
  146. $data = array('arc' => array(), 'cat' => array());
  147. $sql->query(
  148. "SELECT `refid`, `type`, `id` " .
  149. "FROM `mod_lib` WHERE `id` IN ('" .
  150. implode("', '", $ids) . "') AND " .
  151. "(`type` = 'arc' OR `type` = 'cat')"
  152. );
  153. while ($obj = $sql->fetch())
  154. {
  155.  
  156. switch($obj['type'])
  157. {
  158.  
  159. case 'arc':
  160. $data['arc'][$obj['refid']][] = $obj['id'];
  161. break;
  162. case 'cat':
  163. $data['cat'][$obj['refid']][] = $obj['id'];
  164. break;
  165. default:
  166.  
  167. }
  168.  
  169. }
  170.  
  171. /* Все ли объекты на ходятся в одной категории? */
  172. if ((count($data['arc']) > 1)
  173. || (count($data['cat']) > 1)
  174. || ( (key($data['arc']) != key($data['cat']))
  175. && (!empty($data['cat']) && !empty($data['arc']))
  176. )
  177. )
  178. {
  179.  
  180. $error = 'Ошибка принятых данных';
  181.  
  182. }
  183. else
  184. {
  185.  
  186. $refid = !empty($data['arc']) ? key($data['arc']) : key($data['cat']);
  187. $cats = array_shift($data['cat']);
  188. $arcs = array_shift($data['arc']);
  189.  
  190. /* Удаляем категории */
  191. if (!empty($cats))
  192. {
  193.  
  194. $sql->query("DELETE FROM `mod_lib` WHERE `id` IN('" . implode('\',\'', $cats) . "') AND `count_arc` = '0' AND `counter` = '0'");
  195. if ($refid != 0)
  196. {
  197. $total_cats = mysqli_affected_rows($sql->db);
  198. $refcat = $sql->query("SELECT `counter` FROM `mod_lib` WHERE `id` = '" . $refid . "'")->fetch();
  199. $sql->query("UPDATE `mod_lib` SET `counter` = '" . ($refcat['counter'] - $total_cats) . "' WHERE `id` = '" . $refid . "'");
  200.  
  201. }
  202.  
  203. }
  204.  
  205. /* Удаляем статьи */
  206. if (!empty($arcs))
  207. {
  208.  
  209. $arcs_q = implode('\',\'', $arcs);
  210. /* Удаляем комментарии */
  211. $sql->query("DELETE FROM `mod_lib_comments` WHERE `sub_id` IN('" . $arcs_q . "')");
  212. /* Удаляем счетчики и закладки */
  213. $sql->query("DELETE FROM `mod_lib_counters` WHERE `aid` IN('" . $arcs_q . "')");
  214. /* Удаляем файлы */
  215. $sql->query("SELECT `name` FROM `mod_lib_files` WHERE `aid` IN('" . $arcs_q . "')");
  216. if ($sql->num_rows())
  217. {
  218.  
  219. while ($file = $sql->fetch())
  220. {
  221.  
  222. $filename = FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $file['name'];
  223. $ext = explode('.', $file['name']);
  224.  
  225. if (isImage($ext[1]))
  226. {
  227.  
  228. if (file_exists(FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $ext[0] . '_preview.png'))
  229. {
  230.  
  231. unlink(FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $ext[0] . '_preview.png');
  232.  
  233. }
  234.  
  235. }
  236.  
  237. if (file_exists($filename))
  238. {
  239. unlink($filename);
  240. }
  241.  
  242. }
  243.  
  244. $sql->query("DELETE FROM `mod_lib_files` WHERE `aid` IN('" . $arcs_q . "')");
  245.  
  246. }
  247.  
  248. foreach($arcs as $aid)
  249. {
  250.  
  251. if (file_exists(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . $aid . '.zip'))
  252. {
  253.  
  254. unlink(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . $aid . '.zip');
  255.  
  256. }
  257. if (file_exists(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'txt' . DIRECTORY_SEPARATOR . $aid . '.zip'))
  258. {
  259.  
  260. unlink(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'txt' . DIRECTORY_SEPARATOR . $aid . '.zip');
  261.  
  262. }
  263.  
  264. }
  265.  
  266. $sql->query("DELETE FROM `mod_lib` WHERE `id` IN('" . $arcs_q . "')");
  267. if ($refid != 0)
  268. {
  269. $total_arcs = mysqli_affected_rows($sql->db);
  270. $refcat = $sql->query("SELECT `count_arc` FROM `mod_lib` WHERE `id` = '" . $refid . "'")->fetch();
  271. $sql->query("UPDATE `mod_lib` SET `count_arc` = '" . ($refcat['count_arc'] - $total_arcs) . "' WHERE `id` = '" . $refid . "'");
  272. }
  273.  
  274. }
  275.  
  276.  
  277. }
  278.  
  279. $message = 'Отмеченные статьи и категории удалены';
  280.  
  281. }
  282.  
  283. }
  284. else
  285. {
  286.  
  287. $message = 'Ошибка принятых данных';
  288.  
  289. }
  290.  
  291. if (!empty($message) && empty($error))
  292. {
  293.  
  294. echo '<div class="fmenu">' . 'Библиотека' . ' | ' . $set['title'] . '</div>' .
  295. '<div class="menu">' . $message . '.<br /><a href="' .
  296. (isset($_GET['moderation']) ? '?act=panel&amp;mod=moderation' : '?act=panel&amp;mod=view&amp;id=' . $id) .
  297. '">Назад</a></div><div class="fmenu"><a href="index.php">В библиотеку</a></div>';
  298.  
  299. }
  300.  
  301. }
  302. else
  303. {
  304.  
  305. $error = 'Доступ запрещен';
  306.  
  307. }