Файл: CMS/core/admin/forum.php
Строк: 361
<?php
if (!defined('CMS')) { die('Access Denied!'); }
$fid = !empty($_REQUEST['fid']) ? num($_REQUEST['fid']) : 0;
$tid = !empty($_REQUEST['tid']) ? num($_REQUEST['tid']) : 0;
# Вывод страниц в форуме
function forum_navigation($link = '', $id = '', $posts, $total) {
global $page;
if ($total > 0) {
$ba = ceil($total / $posts);
$ba2 = $ba * $posts - $posts;
$max = $posts * 5;
for($i = 0; $i < $max;) {
if ($i < $total && $i >= 0) {
$ii = floor(1 + $i / $posts);
echo ' <a href="?m=topic&tid=' . $id . '&page=' . $ii . '&' . RND . '">' . $ii . '</a> ';
}
$i += $posts;
}
if ($max < $total) {
if ($max + $posts < $total) {
echo ' ... <a href="' . $link . 'page=' . $ba . '&' . RND . '">' . $ba . '</a>';
} else {
echo ' <a href="' . $link . 'page=' . $ba . '&' . RND . '">' . $ba . '</a>';
}
}
echo '<br />';
}
}
if (is_admin()) {
if (!empty($_GET['restatement'])) { // Пересчет счетчиков
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$db->query("UPDATE ?_forums SET `forums_topics` = (SELECT COUNT(*) FROM ?_forums_topics
WHERE ?_forums.`forums_id` = ?_forums_topics.`topics_forums_id`);");
$db->query("UPDATE ?_forums SET `forums_posts` = (SELECT COUNT(*) FROM ?_forums_posts
WHERE ?_forums.`forums_id` = ?_forums_posts.`posts_forums_id`);");
$db->query("UPDATE ?_forums_topics SET `topics_posts` = (SELECT COUNT(*) FROM ?_forums_posts
WHERE ?_forums_topics.`topics_id` = ?_forums_posts.`posts_topics_id`);");
$inSes->addMessage('Все данные успешно пересчитаны!', 'ok');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Пересчитывать сообщения могут только суперадмины!');
}
if (!empty($_POST['add_forum'])) { // Добавление разделов
$title = !empty($_POST['title']) ? check($_POST['title']) : '';
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 3 && cms_strlen($title) <= 100) {
$maxorder = $db->selectCell("SELECT IFNULL(MAX(`forums_order`),0)+1 FROM ?_forums;");
$db->query("INSERT INTO ?_forums (`forums_order`, `forums_title`) VALUES (?, ?);", $maxorder, $title);
$inSes->addMessage('Новый раздел успешно добавлен!', 'ok');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Добавлять разделы могут только суперадмины!');
}
switch($mod):
default:
show_header('Управление форумом');
$forums = $db->selectPage($total, "SELECT * FROM ?_forums ORDER BY `forums_order` ASC;");
if ( !empty($forums) && $total > 0 ) {
$output = array();
foreach( $forums as $row ) {
$id = $row['forums_id'];
$fp = $row['forums_parent'];
$output[$fp][$id] = $row;
}
echo '<div class="b">';
echo '<a href="#down">' . icon('down.png') . '</a> ';
echo '<a href="../forum/' . gen_uri('index', '', RND) . '">Обзор форума</a><br /></div>';
foreach($output[0] as $key => $data) {
echo '<div class="b">' . icon('forums.gif');
echo ' <b>' . $data['forums_order'] . '. <a href="?m=forums&fid=' . $data['forums_id'] . '&' . RND . '">' . $data['forums_title'] . '</a></b> (' . $data['forums_topics'] . '/' . $data['forums_posts'] . ')<br />';
if (is_admin(array(101))) {
echo '<a href="?m=edit_forum&id=' . $data['forums_id'] . '&' . RND . '">Редактировать</a> | ';
echo '<a href="?m=del_forum&id=' . $data['forums_id'] . '&' . RND . '">Удалить</a>';
}
//echo '</div><div class="b">';
echo '<hr />';
if (!empty($output[$key])) {
foreach($output[$key] as $datasub) {
echo icon('topics-small.gif');
echo ' <b>' . $datasub['forums_order'] . '. <a href="?m=forums&fid=' . $datasub['forums_id'] . '&' . RND . '">' . $datasub['forums_title'] . '</a></b> (' . $datasub['forums_topics'] . '/' . $datasub['forums_posts'] . ') ';
if (is_admin(array(101))) {
echo '(<a href="?m=edit_forum&id=' . $datasub['forums_id'] . '&' . RND . '">Редактировать</a> | ';
echo '<a href="?m=del_forum&id=' . $datasub['forums_id'] . '&' . RND . '">Удалить</a>)';
}
echo '<br />';
}
}
if ($data['forums_last_id'] > 0) {
echo 'Тема: <a href="?m=topic&tid=' . $data['forums_last_id'] . '&' . RND . '">' . $data['forums_last_themes'] . '</a><br />';
echo 'Сообщение: ' . nickname($data['forums_last_user']) . ' (' . get_date($data['forums_last_time']) . ')';
}
else echo 'Темы еще не созданы!';
echo '</div>';
}
}
else {
show_error('Разделы форума еще не созданы!');
}
if (is_admin(array(101))) {
echo '<div class="b">';
echo '<form action="?m=forum&rnd=' . $_SESSION['token'] . '&' . RND . '" method="post">';
echo 'Заголовок:<br />';
echo '<input type="text" name="title" maxlength="100" />';
echo '<input type="submit" name="add_forum" class="btns" value="Создать раздел" /></form><br />';
echo icon('mail.png');
echo '<a href="?m=forum&restatement=1&rnd=' . $_SESSION['token'] . '&' . RND . '">Пересчитать</a> | ';
echo '<a href="?m=set_forum&&&' . RND . '">Настройки</a><br /></div>';
}
break;
case 'edit_forum':
if (is_admin(array(101))) {
$forums = $db->selectRow("SELECT * FROM ?_forums WHERE `forums_id` = ? LIMIT 1;", $id);
if (!empty($forums)) {
if (!empty($_POST['cancel'])) {
redirect('?m=forum&' . RND);
}
if (!empty($_POST['submit'])) {
$keyw = !empty($_POST['keyw']) ? check($_POST['keyw']) : '';
$desc = !empty($_POST['desc']) ? check($_POST['desc']) : '';
$title = !empty($_POST['title']) ? check($_POST['title']) : '';
$order = abs(intval($_POST['order']));
$parent = abs(intval($_POST['parent']));
$keyw = cms_tolower($keyw);
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 3 && cms_strlen($title) <= 100) {
if ($id != $parent) {
$forums = $db->query("SELECT forums_id FROM ?_forums WHERE forums_parent = ? LIMIT 1;", $id);
if (empty($forums) || $parent == 0) {
$db->query("UPDATE ?_forums SET `forums_order` = ?, `forums_parent` = ?, `forums_title` = ?, `forums_keywords` = ?, `forums_description` = ? WHERE `forums_id` = ?;", $order, $parent, $title, $keyw, $desc, $id);
$inSes->addMessage('Раздел успешно отредактирован!', 'ok');
redirect('?m=forum&' . RND);
}
else $inSes->addMessage('Ошибка! Данный раздел имеет подфорумы!');
}
else $inSes->addMessage('Ошибка! Недопустимый выбор родительского форума!');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Редактирование - ' . $forums['forums_title']);
$section = $db->select("SELECT * FROM ?_forums WHERE `forums_parent` = '0' ORDER BY `forums_order` ASC;");
$show[0] = 'Основной форум';
foreach($section as $data) {
if ($id != $data['forums_id']) {
$show[$data['forums_id']] = $data['forums_title'];
}
}
$form = new cmsForm('?m=edit_forum&id=' . $id . '&rnd=' . $_SESSION['token'] . '&' . RND);
$form->addText('Раздел:', 'title', $forums['forums_title']);
$form->addSelect('Родительский форум:', 'parent', $forums['forums_parent'], $show);
$form->addTextarea('Keywords:', 'keyw', $forums['forums_keywords']);
$form->addTextarea('Description:', 'desc', $forums['forums_description']);
$form->addText('Положение:', 'order', $forums['forums_order']);
echo $form->Submit(array('Изменить', 'Отмена'), array('submit', 'cancel'));
unset($form);
}
else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=forum&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Изменять разделы могут только суперадмины!');
redirect('?m=forum&' . RND);
}
break;
case 'del_forum':
if (is_admin(array(101))) {
$forums = $db->selectRow("SELECT `f1`.*, count(`f2`.`forums_id`) AS `subcnt` FROM ?_forums `f1`
LEFT JOIN ?_forums `f2`
ON `f2`.`forums_parent` = `f1`.`forums_id`
WHERE `f1`.`forums_id` = ?
GROUP BY `forums_id` LIMIT 1;", $id);
if (!empty($forums['forums_id'])) {
if (empty($forums['subcnt'])) {
if (!empty($_GET['del']) && $_GET['del'] == $_SESSION['token']) {
$db->query("DELETE FROM ?_forums_posts WHERE `posts_forums_id` = ?", $id);
$db->query("DELETE FROM ?_forums_topics WHERE `topics_forums_id` = ?", $id);
$db->query("DELETE FROM ?_forums WHERE `forums_id` = ?", $id);
$db->query("OPTIMIZE TABLE ?_forums, ?_forums_topics, ?_forums_posts");
del_vars('forum_select_search');
del_vars('forum_select_addtheme');
$inSes->addMessage('Раздел успешно удален!', 'ok');
redirect('?m=forum&' . RND);
}
show_header('Управление форумом - Удаление');
echo '<div class="b">Вы уверены что хотите удалить раздел <b>' . $forums['forums_title'] . '</b> в форуме?<br /><br />';
echo icon('error.gif', 'icons');
echo ' <a href="?m=del_forum&id=' . $id . '&del=' . $_SESSION['token'] . '&' . RND . '"><b>Да, уверен!</b></a>';
echo '<br /></div>';
echo '<div class="b">' . icon('return.png') . ' <a href="?m=forum&' . RND . '">Вернуться</a><br /></div>';
}
else {
$inSes->addMessage('Ошибка! Данный раздел имеет подфорумы!');
redirect('?m=forum&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=forum&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Удалять разделы могут только суперадмины!');
redirect('?m=forum&' . RND);
}
break;
case 'forums':
$forums = $db->selectRow("SELECT * FROM ?_forums WHERE forums_id = ? LIMIT 1;", $fid);
if (!empty($forums)) {
if (!empty($_REQUEST['delt'])) {
$del = intar($_REQUEST['delt']);
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!is_array($del)) $del = array($del);
if ($del > 0) {
$del = implode(',', $del);
$oldlast = $db->selectRow("SELECT * FROM ?_forums_topics
WHERE `topics_forums_id` = ? ORDER BY `topics_last_time` DESC LIMIT 1;", $fid);
$deltopics = $db->query("DELETE FROM ?_forums_topics WHERE `topics_id` IN (" . $del . ");");
$delposts = $db->query("DELETE FROM ?_forums_posts WHERE `posts_topics_id` IN (" . $del . ");");
// Обновление счетчиков
$db->query("UPDATE ?_forums SET `forums_topics` = `forums_topics` - ?, `forums_posts` = `forums_posts` - ?
WHERE `forums_id` = ?", $deltopics, $delposts, $fid);
$db->query("UPDATE ?_forums SET `forums_last_id` = ?, `forums_last_themes` = ?, `forums_last_user` = ?, `forums_last_time` = ? WHERE `forums_id` = ?", $oldlast['topics_id'], $oldlast['topics_title'], $oldlast['topics_last_user'], $oldlast['topics_last_time'], $fid);
del_vars('forum_select_search');
del_vars('forum_select_addtheme');
$inSes->addMessage('Выбранные темы успешно удалены!', 'ok');
}
else $inSes->addMessage('Ошибка! Отсутствуют выбранные темы форума!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Управление форумом');
echo '<div class="b">';
echo '<div class="right"><a href="../forum/' . gen_uri('forum', $fid, RND) . '">Обзор раздела</a></div>';
echo '<a href="#down">' . icon('down.png') . '</a> ';
echo '<a href="?m=forum&' . RND . '">Форум</a> | ';
echo '<b>' . $forums['forums_title'] . '</b><br /></div>';
$onpage = !empty($config['themes_num']) ? num($config['themes_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT * FROM ?_forums_topics
WHERE `topics_forums_id` = ?
ORDER BY `topics_locked` DESC, `topics_last_time` DESC
LIMIT ?d, ?d", $fid, $from, $onpage);
if (!empty($rows) && $total > 0) {
echo '<form action="?m=forums&fid=' . $fid . '&rnd=' . $_SESSION['token'] . '&' . RND . '" method="post">';
foreach($rows as $row) {
if ($row['topics_locked'] == 1) {
$icon = icon('sticky-notes-pin.png', 'icons');
}
else if ($row['topics_closed'] == 1) {
$icon = icon('lock.png', 'icons');
}
else $icon = icon('post_new.png', 'icons');
echo '<div class="b"> ' . $icon;
echo '<a href="?m=topic&tid=' . $row['topics_id'] . '&' . RND . '"><b>' . $row['topics_title'] . '</b></a> (' . $row['topics_posts'] . ')<br />';
echo '<input type="checkbox" name="delt[]" value="' . $row['topics_id'] . '" /> ';
echo '<a href="?m=edit_topic&tid=' . $row['topics_id'] . '&page=' . $page . '&' . RND . '">Редактировать</a> | ';
echo '<a href="?m=move_topic&tid=' . $row['topics_id'] . '&page=' . $page . '&' . RND . '">Переместить</a>';
echo '<br />Страницы: ';
forum_navigation('?', $row['topics_id'], $config['post_num'], $row['topics_posts']);
echo 'Сообщение: ' . nickname($row['topics_last_user']) . ' (' . get_date($row['topics_last_time']) . ')</div>';
}
echo '<div class="b"><input type="submit" class="btns" value="Удалить выбранное" /></form></div>';
echo show_pages('?m=forums&fid=' . $fid);
}
else {
show_error('В данном форуме еще нет тем!');
}
}
else {
show_error('Ошибка! Данного раздела не существует!');
}
echo '<div class="b">' . icon('return.png') . ' <a href="?m=forum&' . RND . '">К форумам</a><br /></div>';
break;
case 'edit_topic':
$topics = $db->selectRow("SELECT `t`.*, `f`.`forums_id`
FROM ?_forums_topics `t`
LEFT JOIN ?_forums `f`
ON `t`.`topics_forums_id` = `f`.`forums_id`
WHERE `t`.`topics_id` = ? LIMIT 1;", $tid);
if (!empty($topics)) {
if (!empty($_POST['cancel'])) {
redirect('?m=forums&fid=' . $topics['forums_id'] . '&page=' . $page);
}
if (!empty($_POST['submit'])) {
$title = !empty($_POST['title']) ? check($_POST['title']) : '';
$mod = !empty($_POST['mod']) ? check($_POST['mod']) : '';
$locked = !empty($_POST['locked']) ? 1 : 0;
$closed = !empty($_POST['closed']) ? 1 : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 3 && cms_strlen($title) <= 100) {
$db->query("UPDATE ?_forums_topics SET `topics_title` = ?, `topics_closed` = ?, `topics_locked` = ?, `topics_mod` = ?
WHERE `topics_id` = ?;", $title, $closed, $locked, $mod, $tid);
if ($locked == 1) { $page = 1; }
$inSes->addMessage('Тема успешно отредактирована!', 'ok');
redirect('?m=forums&fid=' . $topics['forums_id'] . '&page=' . $page);
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название темы!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Управление форумом - Редактирование');
$form = new cmsForm('?m=edit_topic&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND, 'post');
$form->addText('Тема:', 'title', $topics['topics_title']);
$form->addTextarea('Кураторы темы:', 'mod', $topics['topics_mod']);
$form->addCheckbox(array('', '- Закрепить тему'), 'locked', $topics['topics_locked']);
$form->addCheckbox(array('', '- Закрыть тему'), 'closed', $topics['topics_closed']);
$form->addHidden('fid', $topics['forums_id']);
$form->addHidden('tid', $tid);
echo $form->Submit(array('Изменить', 'Отмена'), array('submit', 'cancel'));
unset($form);
}
else {
$inSes->addMessage('Ошибка! Данной темы не существует!');
redirect('?m=forum&' . RND);
}
break;
case 'move_topic':
$topics = $db->selectRow("SELECT * FROM ?_forums_topics WHERE `topics_id` = ? LIMIT 1;", $tid);
if (!empty($topics)) {
if (!empty($_POST['cancel'])) {
redirect('?m=forums&fid=' . $topics['topics_forums_id'] . '&page=' . $page);
}
if (!empty($_POST['submit'])) {
$section = !empty($_POST['section']) ? num($_POST['section']) : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$forums = $db->selectRow("SELECT * FROM ?_forums WHERE `forums_id` = ? LIMIT 1;", $section);
if (!empty($forums)) {
if (strpos($topics['topics_title'], 'Перемещено') == false) $title = $topics['topics_title'] . ' (Перемещено)';
else $title = $topics['topics_title'];
$msg = 'Тема была перемещена в раздел [b]' . $forums['forums_title'] . '[/b] по адресу ';
$msg .= $config['site_url'] . '/forum/' . gen_uri('topic', $tid, RND);
$lastid = $db->query("INSERT INTO ?_forums_topics (topics_forums_id, topics_title, topics_author, topics_closed, topics_posts, topics_last_user, topics_last_time) VALUES (?, ?, ?, ?, ?, ?, ?);", $topics['topics_forums_id'], $title, $topics['topics_author'], 1, 1, $log, SITE_TIME);
$db->query("INSERT INTO ?_forums_posts (posts_topics_id, posts_forums_id, posts_user, posts_text, posts_time, posts_ip, posts_brow) VALUES (?, ?, ?, ?, ?, ?, ?);", $lastid, $topics['topics_forums_id'], $log, $msg, SITE_TIME, $ip, $brow);
// Обновление номера раздела
$db->query("UPDATE ?_forums_topics SET `topics_forums_id` = ? WHERE `topics_id` = ?;", $section, $tid);
$db->query("UPDATE ?_forums_posts SET `posts_forums_id` = ? WHERE `posts_topics_id` = ?;", $section, $tid);
// Обновление счетчиков
$db->query("UPDATE ?_forums SET `forums_topics` = (`forums_topics` + 1), `forums_posts` = `forums_posts`+?
WHERE `forums_id` = ?", $topics['topics_posts'], $section);
$db->query("UPDATE ?_forums SET `forums_posts` = `forums_posts` + 1 - ?
WHERE `forums_id` = ?", $topics['topics_posts'], $topics['topics_forums_id']);
$oldlast = $db->selectRow("SELECT * FROM ?_forums_topics
WHERE `topics_forums_id` = ?
ORDER BY `topics_last_time` DESC LIMIT 1;", $topics['topics_forums_id']);
$newlast = $db->selectRow("SELECT * FROM ?_forums_topics
WHERE `topics_forums_id` = ?
ORDER BY `topics_last_time` DESC LIMIT 1;", $section);
$db->query("UPDATE ?_forums SET `forums_last_id` = ?, `forums_last_themes` = ?, `forums_last_user` = ?, `forums_last_time` = ?
WHERE `forums_id` = ?", $oldlast['topics_id'], $oldlast['topics_title'], $oldlast['topics_last_user'], $oldlast['topics_last_time'], $oldlast['topics_forums_id']);
$db->query("UPDATE ?_forums SET `forums_last_id` = ?, `forums_last_themes` = ?, `forums_last_user` = ?, `forums_last_time` = ?
WHERE `forums_id` = ?", $newlast['topics_id'], $newlast['topics_title'], $newlast['topics_last_user'], $newlast['topics_last_time'], $newlast['topics_forums_id']);
$inSes->addMessage('Тема успешно перемещена!', 'ok');
redirect('?m=forums&fid=' . $topics['topics_forums_id'] . '&page=' . $page);
}
else $inSes->addMessage('Ошибка! Выбранного раздела не существует!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Управление форумом - Перемещение темы');
echo '<div class="b">' . icon('post_new.png', 'icons');
echo ' <b>' . $topics['topics_title'] . '</b> (Автор темы: ' . nickname($topics['topics_author']) . ')</div>';
$forums = $db->select("SELECT forums_id, forums_parent, forums_title FROM ?_forums ORDER BY forums_order ASC;");
if (count($forums) > 0) {
$output = array();
foreach ($forums as $row) {
$i = $row['forums_id'];
$p = $row['forums_parent'];
$output[$p][$i] = $row;
}
$show = array();
foreach($output[0] as $key => $data) {
if ($topics['topics_forums_id'] != $data['forums_id']) {
$show[$data['forums_id']] = $data['forums_title'];
}
if (isset($output[$key])) {
foreach($output[$key] as $datasub) {
if ($topics['topics_forums_id'] != $datasub['forums_id']) {
$show[$datasub['forums_id']] = '– ' . $datasub['forums_title'];
}
}
}
}
echo '</select>';
$form = new cmsForm('?m=move_topic&rnd=' . $_SESSION['token'] . '&' . RND, 'post');
$form->addSelect('Выберите раздел для перемещения:', 'section', '', $show);
$form->addHidden('fid', $topics['topics_forums_id']);
$form->addHidden('tid', $tid);
echo $form->Submit(array('Переместить', 'Отмена'), array('submit', 'cancel'));
unset($form);
}
else {
$inSes->addMessage('Разделы форума еще не созданы!');
redirect('?m=forum&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Данной темы не существует!');
redirect('?m=forum&' . RND);
}
break;
case 'act_topic':
$do = !empty($_GET['do']) ? check($_GET['do']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$topics = $db->selectRow("SELECT * FROM ?_forums_topics WHERE `topics_id` = ? LIMIT 1;", $tid);
if (!empty($topics)) {
switch ($do):
case 'closed':
$db->query("UPDATE ?_forums_topics SET `topics_closed` = ? WHERE `topics_id` = ?;", 1, $tid);
$inSes->addMessage('Тема успешно закрыта!', 'ok');
break;
case 'open':
$db->query("UPDATE ?_forums_topics SET `topics_closed` = ? WHERE `topics_id` = ?;", 0, $tid);
$inSes->addMessage('Тема успешно открыта!', 'ok');
break;
case 'locked':
$db->query("UPDATE ?_forums_topics SET `topics_locked` = ? WHERE `topics_id` = ?;", 1, $tid);
$inSes->addMessage('Тема успешно закреплена!', 'ok');
break;
case 'unlocked':
$db->query("UPDATE ?_forums_topics SET `topics_locked` = ? WHERE `topics_id` = ?;", 0, $tid);
$inSes->addMessage('Тема успешно откреплена!', 'ok');
break;
default:
$inSes->addMessage('Ошибка! Не выбрано действие для темы!');
endswitch;
}
else $inSes->addMessage('Ошибка! Данной темы не существует!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
redirect('?m=topic&tid=' . $tid . '&page=' . $page);
break;
case 'topic':
if (!empty($_POST['del'])) {
$del = intar($_POST['del']);
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!empty($del)) {
$topics = $db->selectRow("SELECT * FROM ?_forums_topics WHERE `topics_id` = ? LIMIT 1;", $tid);
$del = implode(',', $del);
$delposts = $db->query("DELETE FROM ?_forums_posts WHERE `posts_id` IN(" . $del . ") AND `posts_topics_id` = ?", $tid);
$db->query("UPDATE ?_forums_topics SET `topics_posts` = `topics_posts` - ? WHERE `topics_id` = ?", $delposts, $tid);
$db->query("UPDATE ?_forums SET `forums_posts` = `forums_posts` - ?
WHERE `forums_id` = ?", $delposts, $topics['topics_forums_id']);
$db->query("OPTIMIZE TABLE ?_forums, ?_forums_topics, ?_forums_posts");
$inSes->addMessage('Выбранные сообщения успешно удалены!', 'ok');
}
else $inSes->addMessage('Ошибка! Отсутствуют выбранные сообщения!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Управление форумом - Просмотр сообщений');
$topic = $db->selectRow("SELECT `t`.*, `f`.`forums_id`, `f`.`forums_title`
FROM ?_forums_topics `t`
LEFT JOIN ?_forums `f`
ON `t`.`topics_forums_id` = `f`.`forums_id`
WHERE `t`.`topics_id` = ? LIMIT 1;", $tid);
if (!empty($topic)) {
echo '<div class="b">';
echo '<div class="right"><a href="' . $config['site_url'] . '/forum/' . gen_uri('topic', $tid, RND) . '">Обзор темы</a></div>';
echo '<a href="#down">' . icon('down.png') . '</a> ';
echo '<a href="?m=forum&' . RND . '">Форум</a> | ';
echo '<a href="?m=forums&fid=' . $topic['forums_id'] . '&' . RND . '">' . $topic['forums_title'] . '</a> | ';
echo '<b>' . $topic['topics_title'] . '</b></div>';
if (!empty($topic['topics_mod'])) {
$topics_mod = explode(',', $topic['topics_mod']);
$kur = array();
foreach($topics_mod as $mkey => $mval) {
$kur[] = users_anketa($mval);
}
echo '<div class="b">Кураторы темы: ' . implode(', ', $kur) . '...</div>';
}
echo '<div class="b">';
if (empty($topic['topics_closed'])) {
echo '<a href="?m=act_topic&do=closed&tid=' . $tid . '&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Закрыть</a> | ';
}
else
{
echo '<a href="?m=act_topic&do=open&tid=' . $tid . '&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Открыть</a> | ';
}
if (empty($topic['topics_locked'])) {
echo '<a href="?m=act_topic&do=locked&tid=' . $tid . '&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Закрепить</a> | ';
}
else
{
echo '<a href="?m=act_topic&do=unlocked&tid=' . $tid . '&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Открепить</a> | ';
}
echo '<a href="?m=edit_topic&tid=' . $tid . '&page=' . $page . '&' . RND . '">Изменить</a> | ';
echo '<a href="?m=move_topic&tid=' . $tid . '&' . RND . '">Переместить</a> | ';
echo '<a href="?m=forums&fid=' . $topic['forums_id'] . '&delt=' . $tid . '&rnd=' . $_SESSION['token'] . '&' . RND . '" onclick="return confirm('Вы действительно хотите удалить данную тему?')">Удалить</a><br /></div>';
$onpage = !empty($config['post_num']) ? num($config['post_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT * FROM ?_forums_posts WHERE `posts_topics_id` = ?
ORDER BY `posts_time` ASC
LIMIT ?d, ?d", $tid, $from, $onpage);
if ($total > 0) {
echo '<form action="?m=topic&tid=' . $tid . '&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND . '" method="post" name="topic">';
$i = 0;
foreach($rows as $data) {
++$i;
echo '<div class="b">' . user_avatars($data['posts_user']);
echo ($from + $i) . '. <b>' . users_anketa($data['posts_user']) . '</a></b> ';
echo user_title($data['posts_user']) . user_online($data['posts_user']);
echo ' <small>(' . get_date($data['posts_time']) . ')</small><br />';
echo '<input type="checkbox" name="del[]" value="' . $data['posts_id'] . '" /> ';
echo '<a href="?m=edit_post&tid=' . $tid . '&pid=' . $data['posts_id'] . '&page=' . $page . '&' . RND . '">Редактировать</a><br />';
echo nl2br(bb_code($data['posts_text'])) . '<br />';
if (!empty($data['posts_edit'])) {
echo icon('exclamation_small.gif') . ' <small>Отредактировано: ' . nickname($data['posts_edit']) . ' (' . get_date($data['posts_edit_time']) . ')</small><br />';
}
echo '<span class="data">(' . $data['posts_brow'] . ', ' . $data['posts_ip'] . ')</span></div>';
}
echo '<div class="b">';
echo '<input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()">';
echo '<input type="submit" class="btns" value="Удалить выбранное" /></form><br /></div>';
echo show_pages('?m=topic&tid=' . $tid);
}
else {
show_error('Сообщений еще нет, будь первым!');
}
if ($topic['topics_closed'] == 0) {
$form = new cmsForm('../forum/' . gen_uri('add', $tid, 'page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND), 'post', ' name="post" id="post"');
$form->addTextarea('Сообщение:', 'msg', '', ' id="msg"');
echo $form->submit('Написать','submit');
unset($form);
}
else {
show_error('Данная тема закрыта для обсуждения!');
}
}
else {
show_error('Ошибка! Данной темы не существует!');
}
echo '<div class="b">' . icon('return.png') . ' <a href="?m=forum&' . RND . '">К форумам</a><br /></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.topic;
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
//if(frm.master_box.checked == true){ frm.master_box.checked = false; }
//else{ frm.master_box.checked = true; }
}
-->
</script>
JSCRIPT;
break;
case 'edit_post':
$pid = !empty($_GET['pid']) ? num($_GET['pid']) : 0;
$post = $db->selectRow("SELECT * FROM ?_forums_posts WHERE `posts_id` = ? LIMIT 1;", $pid);
if (!empty($post)) {
if (!empty($_POST['cancel'])) {
redirect('?m=topic&tid=' . $post['posts_topics_id'] . '&page=' . $page . '&' . RND);
}
if (!empty($_POST['submit'])) {
$text = !empty($_POST['text']) ? check($_POST['text']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($text) >= 5 && cms_strlen($text) <= $config['forum_max_text']) {
$text = smiles($text);
if (is_admin(array(101))) {
$db->query("UPDATE ?_forums_posts SET `posts_text` = ? WHERE `posts_id` = ?", $text, $pid);
}
else {
$db->query("UPDATE ?_forums_posts SET `posts_text` = ?, `posts_edit` = ?, `posts_edit_time` = ?
WHERE `posts_id` = ?", $text, $log, SITE_TIME, $pid);
}
$inSes->addMessage('Сообщение успешно отредактировано!', 'ok');
redirect('?m=topic&tid=' . $post['posts_topics_id'] . '&page=' . $page . '&' . RND);
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое сообщение!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Управление форумом');
$post['posts_text'] = nosmiles($post['posts_text']);
$post['posts_text'] = str_replace('<br />', "rn", $post['posts_text']);
$text = !empty($_POST['text']) ? $_POST['text'] : $post['posts_text'];
echo '<div class="b">' . icon('edit.png', 'icons');
echo ' <b>' . users_anketa($post['posts_user']) . '</b> <small>(' . get_date($post['posts_time']) . ')</small><br /></div>';
if (!empty($_GET['code'])) include( MODULES_PATH . 'code.inc.php' );
else if (!empty($_GET['smiles'])) include( MODULES_PATH . 'smiles.inc.php' );
$form = new cmsForm('?m=edit_post&pid=' . $pid . '&page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND, 'post', ' name="form" id="post"');
$form->addCode(blink('*') . ' Сообщение: <small>');
$form->addCode('[<a href="?m=edit_post&pid=' . $pid . '&smiles=1&page=' . $page . '">Смайлы</a>] ');
$form->addCode('[<a href="?m=edit_post&pid=' . $pid . '&code=1&page=' . $page . '">ББ-коды</a>]</small>');
$form->addCode(' [<a href="#post" onclick="document.post.msg.rows += 5;">+</a>]');
$form->addCode(' [<a href="#post" onclick="document.post.msg.rows -= 5;">-</a>]');
$form->addTextarea('Сообщение:', 'text', $text, ' id="msg" style="width:98%;"');
$form->addHidden('tid', $post['posts_topics_id']);
echo $form->Submit(array('Редактировать', 'Отмена'), array('submit', 'cancel'));
unset($form);
echo '<div class="b">' . icon('return.png');
echo '<a href="?m=topic&tid=' . $post['posts_topics_id'] . '&page=' . $page . '&' . RND . '">Вернуться</a></div>';
}
else {
$inSes->addMessage('Ошибка! Данного сообщения не существует!');
redirect('?m=forum&' . RND);
}
break;
endswitch;
echo '<div class="b">' . icon('return.png') . ' <a href="?' . RND . '">В админку</a><br /></div>';
show_footer();
}
else {
header ('Location: ' . $config['site_url'] . '/out/');
exit;
}
?>