File size: 11.94Kb
<?php
if ($admin)
{
$id = $id ? $id : 0;
if ((!empty($_POST['data']) && (isset($_POST['move']) || isset($_POST['delete']))))
{
/* Получаем и обрабатываем идентификаторы объектов */
$ids = (isset($_POST['cat']) && isset($_POST['move'])) ? unserialize($_POST['data']) : $_POST['data'];
$ids = array_map('intval', $ids);
/* Перемещение категорий и статей */
if (isset($_POST['move']))
{
/* Проверяем список объектов на тип и существование */
$sql->query(
"SELECT `id`, `refid`, `type` " .
"FROM `mod_lib` WHERE `id` IN ('" . implode('\',\'', $ids) .
"') AND (`type` = 'arc' OR `type` = 'cat')"
);
/* Список объектов прошедших проверку */
$moves = array();
$total_cats = 0;
$total_arcs = 0;
while($data = $sql->fetch())
{
if($data['type'] == 'cat')
$total_cats++;
else
$total_arcs++;
$moves[$data['refid']][] = $data['id'];
}
unset($data, $ids);
/* Все ли объекты находятся в одной и той же категории? */
if (count($moves) > 1)
{
$error = 'Ошибка принятых данных';
}
else
{
/* Идентификатор категории в которой находятся объекты */
$refid = key($moves);
/* Список объетов */
$moves = array_shift($moves);
/* Перемещаем объекты */
if (isset($_POST['cat']))
{
$cat = isset($_POST['cat']) ? abs(intval($_POST['cat'])) : 0;
if ( /* Проверка категории на существование */
isset($_POST['cat'])
&& ($newcat = $sql->query(
"SELECT `counter`, `count_arc` FROM `mod_lib` " .
"WHERE `type` = 'cat' AND `id` = '" . $cat . "'"
)->fetch()) !== FALSE
)
{
if ($refid != 0)
{
/* Обновляем счетчики объектов в предыдущей категории */
$refcat = $sql->query("SELECT `counter`, `count_arc` FROM `mod_lib` WHERE `id` = '" . $refid . "'")->fetch();
$sql->query(
"UPDATE `mod_lib` SET " .
"`counter` = '" . ($refcat['counter'] - $total_cats) . "', " .
"`count_arc` = '" . ($refcat['count_arc'] - $total_arcs) . "' " .
"WHERE `id` = '" . $refid . "'"
);
}
if ($cat != 0)
{
/* Обновляем счетчики объектов в новой категории */
$newcat = $sql->query("SELECT `counter`, `count_arc` FROM `mod_lib` WHERE `id` = '" . $cat . "'")->fetch();
$sql->query(
"UPDATE `mod_lib` SET " .
"`counter` = '" . ($newcat['counter'] + $total_cats) . "', " .
"`count_arc` = '" . ($newcat['count_arc'] + $total_arcs) . "' " .
"WHERE `id` = '" . $cat . "'"
);
}
/* Перемещаем объекты */
$sql->query("UPDATE `mod_lib` SET `refid` = '" . $cat . "' WHERE `id` IN ('" . implode('\',\'', $moves) . "')");
$message = 'Отмеченные статьи и категории перемещены';
}
else
{
$error = 'Категория не найдена';
}
}
else
{
/* Получаем список категорий */
$sql->query(
"SELECT `id`, `name` FROM `mod_lib` WHERE `id` NOT IN ('" .
implode('\',\'', $moves) . "', '" . $refid .
"') AND `type` = 'cat'"
);
echo '<div class="fmenu">' . 'Библиотека' . ' | ' . $set['title'] . '</div>' .
'<div class="menu"><form action="?act=panel&mod=movdel&id=' . $id . '" method="post">' .
'Выберите категорию<br /><select name="cat">' .
($refid !== 0 ? '<option value="0">В корень</option>' : '');
while($data = $sql->fetch())
{
echo '<option value="' . $data['id'] . '">' . htmlentities($data['name'], ENT_QUOTES, 'UTF-8') . '</option>';
}
echo '</select><input type="hidden" name="data" value=\'' . (serialize($moves)) . '\' />' .
'<input type="submit" name="move" value="Переместить" /></form></div>' .
'<div class="fmenu"><a href="?act=panel&mod=view&id=' . $id . '">Назад</a></div>';
}
}
}
/* Удаляем объекты */
elseif (isset($_POST['delete']))
{
/* Проверка объектов на тип и существование */
$data = array('arc' => array(), 'cat' => array());
$sql->query(
"SELECT `refid`, `type`, `id` " .
"FROM `mod_lib` WHERE `id` IN ('" .
implode("', '", $ids) . "') AND " .
"(`type` = 'arc' OR `type` = 'cat')"
);
while ($obj = $sql->fetch())
{
switch($obj['type'])
{
case 'arc':
$data['arc'][$obj['refid']][] = $obj['id'];
break;
case 'cat':
$data['cat'][$obj['refid']][] = $obj['id'];
break;
default:
}
}
/* Все ли объекты на ходятся в одной категории? */
if ((count($data['arc']) > 1)
|| (count($data['cat']) > 1)
|| ( (key($data['arc']) != key($data['cat']))
&& (!empty($data['cat']) && !empty($data['arc']))
)
)
{
$error = 'Ошибка принятых данных';
}
else
{
$refid = !empty($data['arc']) ? key($data['arc']) : key($data['cat']);
$cats = array_shift($data['cat']);
$arcs = array_shift($data['arc']);
/* Удаляем категории */
if (!empty($cats))
{
$sql->query("DELETE FROM `mod_lib` WHERE `id` IN('" . implode('\',\'', $cats) . "') AND `count_arc` = '0' AND `counter` = '0'");
if ($refid != 0)
{
$total_cats = mysqli_affected_rows($sql->db);
$refcat = $sql->query("SELECT `counter` FROM `mod_lib` WHERE `id` = '" . $refid . "'")->fetch();
$sql->query("UPDATE `mod_lib` SET `counter` = '" . ($refcat['counter'] - $total_cats) . "' WHERE `id` = '" . $refid . "'");
}
}
/* Удаляем статьи */
if (!empty($arcs))
{
$arcs_q = implode('\',\'', $arcs);
/* Удаляем комментарии */
$sql->query("DELETE FROM `mod_lib_comments` WHERE `sub_id` IN('" . $arcs_q . "')");
/* Удаляем счетчики и закладки */
$sql->query("DELETE FROM `mod_lib_counters` WHERE `aid` IN('" . $arcs_q . "')");
/* Удаляем файлы */
$sql->query("SELECT `name` FROM `mod_lib_files` WHERE `aid` IN('" . $arcs_q . "')");
if ($sql->num_rows())
{
while ($file = $sql->fetch())
{
$filename = FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $file['name'];
$ext = explode('.', $file['name']);
if (isImage($ext[1]))
{
if (file_exists(FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $ext[0] . '_preview.png'))
{
unlink(FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $ext[0] . '_preview.png');
}
}
if (file_exists($filename))
{
unlink($filename);
}
}
$sql->query("DELETE FROM `mod_lib_files` WHERE `aid` IN('" . $arcs_q . "')");
}
foreach($arcs as $aid)
{
if (file_exists(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . $aid . '.zip'))
{
unlink(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . $aid . '.zip');
}
if (file_exists(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'txt' . DIRECTORY_SEPARATOR . $aid . '.zip'))
{
unlink(FILESDIR . 'download' .DIRECTORY_SEPARATOR . 'txt' . DIRECTORY_SEPARATOR . $aid . '.zip');
}
}
$sql->query("DELETE FROM `mod_lib` WHERE `id` IN('" . $arcs_q . "')");
if ($refid != 0)
{
$total_arcs = mysqli_affected_rows($sql->db);
$refcat = $sql->query("SELECT `count_arc` FROM `mod_lib` WHERE `id` = '" . $refid . "'")->fetch();
$sql->query("UPDATE `mod_lib` SET `count_arc` = '" . ($refcat['count_arc'] - $total_arcs) . "' WHERE `id` = '" . $refid . "'");
}
}
}
$message = 'Отмеченные статьи и категории удалены';
}
}
else
{
$message = 'Ошибка принятых данных';
}
if (!empty($message) && empty($error))
{
echo '<div class="fmenu">' . 'Библиотека' . ' | ' . $set['title'] . '</div>' .
'<div class="menu">' . $message . '.<br /><a href="' .
(isset($_GET['moderation']) ? '?act=panel&mod=moderation' : '?act=panel&mod=view&id=' . $id) .
'">Назад</a></div><div class="fmenu"><a href="index.php">В библиотеку</a></div>';
}
}
else
{
$error = 'Доступ запрещен';
}