Файл: CMS/comm/comm_topic.php
Строк: 209
<?php
if (!defined('CMS')) { die('Access Denied!'); }
$data = array();
$data = $db->selectRow("SELECT ?_comm_comm.*, ?_comm_category.*
FROM ?_comm_comm LEFT JOIN ?_comm_category
ON ?_comm_comm.`comm_cats_id` = ?_comm_category.`cats_id`
WHERE `comm_url` = ? LIMIT 1;", $soo);
if (empty($data) || !is_array($data)) {
$inSes->addMessage('Ошибка! Сообщество не найдено или ссылка неверна!');
gen_red('index', '', RND);
}
if (empty($data['comm_forum'])) {
$inSes->addMessage('Ошибка! Форум не найден или ссылка неверна!');
gen_red('index', '', RND);
}
$arr_admins = @explode(',', $data['comm_admins']);
$parse = parse_url($_SERVER['REQUEST_URI']);
$topics = array();
$topics = $db->selectRow("SELECT `t`.*, `f`.`forums_id`, `f`.`forums_name`,
(SELECT COUNT(1) FROM ?_users_bookmarks WHERE `book_path` = ?) AS `bookmarks`
FROM ?_comm_topics `t`
LEFT JOIN ?_comm_forums `f`
ON `t`.`topics_forums_id` = `f`.`forums_id`
WHERE `t`.`topics_id` = ? AND `topics_comm` = ? LIMIT 1;", $parse['path'], $id, $data['comm_id']);
if (!empty($topics)) {
$users = array();
if ($is_logged) {
$users = $db->selectRow("SELECT * FROM ?_comm_users WHERE `cu_comm` = ? AND `cu_user` = ? LIMIT 1;", $data['comm_id'], $log);
if ($data['comm_user'] == $log) {
$is_admin_soo = true;
$is_moder_soo = true;
if (!empty($_GET['do'])) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
switch ($_GET['do']):
case 'closed':
$db->query("UPDATE ?_comm_topics SET `topics_closed` = 1 WHERE `topics_id` = ? AND `topics_comm` = ?;", $id, $data['comm_id']);
$inSes->addMessage('Тема успешно закрыта!', 'ok');
break;
case 'open':
$db->query("UPDATE ?_comm_topics SET `topics_closed` = 0 WHERE `topics_id` = ? AND `topics_comm` = ?;", $id, $data['comm_id']);
$inSes->addMessage('Тема успешно открыта!', 'ok');
break;
case 'locked':
$db->query("UPDATE ?_comm_topics SET `topics_locked` = 1 WHERE `topics_id` = ? AND `topics_comm` = ?;", $id, $data['comm_id']);
$inSes->addMessage('Тема успешно закреплена!', 'ok');
break;
case 'unlocked':
$db->query("UPDATE ?_comm_topics SET `topics_locked` = 0 WHERE `topics_id` = ? AND `topics_comm` = ?;", $id, $data['comm_id']);
$inSes->addMessage('Тема успешно откреплена!', 'ok');
break;
default:
$inSes->addMessage('Ошибка! Не выбрано действие для темы!');
endswitch;
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
gen_red('topic', $id, RND);
}
if (!empty($_POST['move'])) {
$fid = !empty($_POST['fid']) ? num($_POST['fid']) : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$forums = $db->selectRow("SELECT * FROM ?_comm_forums WHERE `forums_id` = ? AND `forums_comm` = ? LIMIT 1;", $fid, $data['comm_id']);
if (!empty($forums)) {
if (strpos($topics['topics_title'], 'Перемещено') == false) $title = $topics['topics_title'] . ' (Перемещено)';
else $title = $topics['topics_title'];
$msg = 'Тема была перемещена в раздел ';
$msg .= '[url=' . gen_comm($data['comm_url'], 'topic', $id, RND) . ']' . $forums['forums_name'] . '[/url].';
$lastid = $db->query("INSERT INTO ?_comm_topics (`topics_comm`, `topics_forums_id`, `topics_title`, `topics_author`, `topics_closed`, `topics_posts`, `topics_last_user`, `topics_last_time`) VALUES (?, ?, ?, ?, ?, ?, ?, ?);", $data['comm_id'], $topics['topics_forums_id'], $title, $topics['topics_author'], 1, 1, $log, SITE_TIME);
$db->query("INSERT INTO ?_comm_posts (`posts_comm`, `posts_topics_id`, `posts_forums_id`, `posts_user`, `posts_text`, `posts_time`, `posts_ip`, `posts_brow`) VALUES (?, ?, ?, ?, ?, ?, ?, ?);", $data['comm_id'], $lastid, $topics['topics_forums_id'], $log, $msg, SITE_TIME, $ip, $brow);
// Обновление номера раздела
$db->query("UPDATE ?_comm_topics SET `topics_forums_id` = ?
WHERE `topics_id` = ? AND `topics_comm` = ?;", $fid, $id, $data['comm_id']);
$db->query("UPDATE ?_comm_posts SET `posts_forums_id` = ?
WHERE `posts_topics_id` = ? AND `posts_comm` = ?;", $fid, $id, $data['comm_id']);
// Обновление счетчиков
$db->query("UPDATE ?_comm_forums SET `forums_topics` = (`forums_topics` + 1), `forums_posts` = (`forums_posts` + ?)
WHERE `forums_id` = ? AND `forums_comm` = ?", $topics['topics_posts'], $fid, $data['comm_id']);
$db->query("UPDATE ?_comm_forums SET `forums_posts` = `forums_posts` + 1 - ?
WHERE `forums_id` = ? AND `forums_comm` = ?", $topics['topics_posts'], $topics['topics_forums_id'], $data['comm_id']);
$oldlast = $db->selectRow("SELECT * FROM ?_comm_topics
WHERE `topics_forums_id` = ? AND `topics_comm` = ?
ORDER BY `topics_last_time` DESC LIMIT 1;", $topics['topics_forums_id'], $data['comm_id']);
$newlast = $db->selectRow("SELECT * FROM ?_comm_topics
WHERE `topics_forums_id` = ? AND `topics_comm` = ?
ORDER BY `topics_last_time` DESC LIMIT 1;", $fid, $data['comm_id']);
$db->query("UPDATE ?_comm_forums SET `forums_last_id` = ?, `forums_last_themes` = ?, `forums_last_user` = ?, `forums_last_time` = ? WHERE `forums_id` = ? AND `forums_comm` = ?", $oldlast['topics_id'], $oldlast['topics_title'], $oldlast['topics_last_user'], $oldlast['topics_last_time'], $oldlast['topics_forums_id'], $data['comm_id']);
$db->query("UPDATE ?_comm_forums SET `forums_last_id` = ?, `forums_last_themes` = ?, `forums_last_user` = ?, `forums_last_time` = ? WHERE `forums_id` = ? AND `forums_comm` = ?", $newlast['topics_id'], $newlast['topics_title'], $newlast['topics_last_user'], $newlast['topics_last_time'], $newlast['topics_forums_id'], $data['comm_id']);
$inSes->addMessage('Тема успешно перемещена!', 'ok');
gen_red('forum', $fid, RND);
}
else $inSes->addMessage('Ошибка! Выбранного раздела не существует!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
gen_red('topic', $id, RND);
}
}
if (in_array($log, $arr_admins) && $users['cu_admin'] == 1) {
$is_moder_soo = true;
}
if ($is_moder_soo) { // Удаление сообщений
if (!empty($_POST['del'])) {
$del = intar($_POST['del']);
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!empty($del)) {
$minposts = $db->selectCell("SELECT MIN(`posts_id`) FROM ?_comm_posts
WHERE `posts_topics_id` = ? AND `posts_comm` = ?;", $id, $data['comm_id']);
$del = is_array($del) ? $del : array($del);
if (!in_array($minposts, $del)) {
$del = implode(',', $del);
$delposts = $db->query("DELETE FROM ?_comm_posts WHERE `posts_id` IN(" . $del . ")
AND `posts_topics_id` = ? AND `posts_comm` = ?", $id, $data['comm_id']);
$db->query("UPDATE ?_comm_topics SET `topics_posts` = (`topics_posts` - ?)
WHERE `topics_id` = ? AND `topics_comm` = ?", $delposts, $id, $data['comm_id']);
$db->query("UPDATE ?_comm_forums SET `forums_posts` = (`forums_posts` - ?)
WHERE `forums_id` = ? AND `forums_comm` = ?", $delposts, $topics['topics_forums_id'], $data['comm_id']);
$inSes->addMessage('Выбранные сообщения успешно удалены!', 'ok');
}
else $inSes->addMessage('Ошибка! Первое сообщение в теме удалять запрещено!');
}
else $inSes->addMessage('Ошибка! Отстутствуют выбранные сообщения для удаления!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
gen_red('topic', $id, 'page=' . $page . '&' . RND);
}
}
}
if ($data['comm_status'] == 1 && empty($users)) {
$inSes->addMessage('Форум только для участников сообщества!');
gen_red('index', '', RND);
}
if (!empty($_GET['closed'])) { // Закрытие темы юзером
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if ($is_logged) {
if ($uset['users_point'] >= $config['forum_edit_point']) {
if ($topics['topics_author'] == $log) {
if (empty($topics['topics_closed'])) {
$db->query("UPDATE ?_comm_topics SET `topics_closed` = ?
WHERE `topics_id` = ? AND `topics_comm` = ?;", 1, $id, $data['comm_id']);
$inSes->addMessage('Тема успешно закрыта!', 'ok');
}
else $inSes->addMessage('Ошибка! Данная тема уже закрыта!', 'valid');
}
else $inSes->addMessage('Ошибка! Вы не автор данной темы!');
}
else $inSes->addMessage('Ошибка! У вас недостаточно актива для закрытия тем!');
}
else $inSes->addMessage('Ошибка! Вы не автозизованы!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
gen_red('topic', $id, 'page=' . $page . '&' . RND);
}
show_header($topics['topics_title']);
if (!empty($topics['topics_password']) && !$is_moder_soo) show_auth_form($topics['topics_id'],$topics['topics_password']);
echo '<div class="b"><a href="#down">' . icon('down.png') . '</a> ';
echo '<a href="' . gen_uri('forum', '', RND) . '">Форум</a> | ';
echo '<a href="' . gen_uri('forum', $topics['forums_id'], RND) . '">' . $topics['forums_name'] . '</a> | ';
echo '<b>' . $topics['topics_title'] . '</b>';
echo '<div class="imgrss">';
echo '<a href="' . gen_uri('print', $id, RND) . '">' . icon('printer.png') . '</a> ';
echo ' <a href="' . gen_uri('rss', $id) . '">' . icon('rss.png') . '</a> </div>';
echo '</div>';
if ($topics['topics_author'] == $log && $topics['topics_closed'] != 1 && $uset['users_point'] >= $config['forum_edit_point'] && !$is_admin_soo) {
echo '<div class="b">' . icon('folder.png') . '<b>' . $topics['topics_title'] . '</b>' ;
echo ' (<a href="' . gen_uri('topic', $id, 'closed=1&page=' . $page . '&rnd=' . $_SESSION['token']) . '">Закрыть</a> | ';
echo ' <a href="' . gen_uri('edittopic', $id, RND) . '">Изменить</a>)</div>';
}
if ($is_admin_soo) {
echo '<div class="b">' . icon('mail.png');
if (empty($topics['topics_closed'])) {
echo '<a href="' . gen_uri('topic', $id, 'do=closed&rnd=' . $_SESSION['token']) . '">Закрыть</a> | ';
}
else {
echo '<a href="' . gen_uri('topic', $id, 'do=open&rnd=' . $_SESSION['token']) . '">Открыть</a> | ';
}
if (empty($topics['topics_locked'])) {
echo '<a href="' . gen_uri('topic', $id, 'do=locked&rnd=' . $_SESSION['token']) . '">Закрепить</a> | ';
}
else {
echo '<a href="' . gen_uri('topic', $id, 'do=unlocked&rnd=' . $_SESSION['token']) . '">Открепить</a> | ';
}
echo '<a href="' . gen_uri('edit_topic', $id, RND) . '">Изменить</a> | ';
echo '<a href="' . gen_uri('topic', $id, 'move=1&' . RND . '#move') . '">Переместить</a> | ';
echo '<a href="' . gen_uri('del_topic', $id, 'del=' . $id . '&rnd=' . $_SESSION['token']) . '" onclick="return confirm('Вы действительно хотите удалить данную тему?')">Удалить</a><br />';
echo '</div>';
if (!empty($_GET['move'])) {
$cats = $db->select("SELECT * FROM ?_comm_forums WHERE `forums_comm` = ? ORDER BY `forums_order` ASC;", $data['comm_id']);
$forums = array();
if (!empty($cats) && count($cats) > 0) {
foreach($cats as $cat) {
$forums[$cat['forums_id']] = $cat['forums_name'];
}
if (!empty($forums[$topics['forums_id']])) unset($forums[$topics['forums_id']]);
$form = new cmsForm(gen_uri('topic', $id, 'rnd=' . $_SESSION['token']), 'post', ' id="move"');
$form->addSelect('Выберите раздел для перемещения:', 'fid', $topics['forums_id'], $forums);
echo $form->Submit(array('Переместить','Отмена'), array('move','cancel'));
unset($form);
}
else show_error('Разделы для перемещения не найдены!');
}
}
$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 `p`.*, `v`.`visit_nowtime`, `u`.`users_gender`
FROM ?_comm_posts `p`
LEFT JOIN ?_users_visit `v`
ON `p`.`posts_user` = `v`.`visit_user`
LEFT JOIN ?_users `u`
ON `p`.`posts_user` = `u`.`users_login`
WHERE `p`.`posts_topics_id` = ? AND `posts_comm` = ?
ORDER BY `p`.`posts_time` ASC
LIMIT ?d, ?d", $id, $data['comm_id'], $from, $onpage );
if (!empty($rows) && $total > 0) {
if ($is_moder_soo == 1) {
echo '<form action="' . gen_uri('topic', $id, 'rnd=' . $_SESSION['token']) . '" method="post" name="posts">';
}
$i = $from + 1;
foreach( $rows as $row ) {
echo '<div class="b" id="post-' . $row['posts_id'] . '">';
if (!empty($log) && $log != $row['posts_user']) {
echo '<div class="right">';
echo '<a href="' . gen_uri('reply', $id, 'pid=' . $row['posts_id'] . '&num=' . $i . '&page=' . $page . '&' . RND) . '">Отв</a> | ';
echo '<a href="' . gen_uri('quote', $id, 'pid=' . $row['posts_id'] . '&page=' . $page . '&' . RND) . '">Цит</a></div>';
}
if ($log == $row['posts_user'] && $row['posts_time'] + 600 > SITE_TIME || $is_moder_soo) {
echo '<div class="right">';
echo '<a href="' . gen_uri('edit_posts', $row['posts_id'], 'page=' . $page . '&' . RND) . '">Редактировать</a>';
echo '</div>';
}
if ($is_moder_soo == 1) {
echo '<div class="img"><input type="checkbox" name="del[]" value="' . $row['posts_id'] . '" /></div>';
}
echo '<div class="img">' . user_avatars($row['posts_user']) . '</div>';
echo $i . '. <b>' . users_anketa($row['posts_user']) . '</b> <small>(' . get_date($row['posts_time']) . ')</small><br />';
echo user_title($row['posts_user']) . ' ' . user_online($row['posts_user']) . '<br />';
echo nl2br(bb_code($row['posts_text'])) . '<br />';
if (!empty($row['posts_edit'])) {
echo icon('exclamation_small.gif', 'icons');
echo ' <small>Отредактировано: ' . nickname($row['posts_edit']) . ' (' . get_date($row['posts_edit_time']) . ')</small><br />';
}
if (!empty($config['anonymity'])) {
echo '<span class="data">(' . $row['posts_brow'] . ', ' . $row['posts_ip'] . ')</span>';
}
echo '</div>';
$i++;
}
if ($is_moder_soo == 1) {
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 <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.posts;
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; }
}
}
}
-->
</script>
JSCRIPT;
}
echo show_pages(gen_uri('topic', $id, RND));
}
else {
show_error('Сообщений еще нет, будь первым!');
}
if ($is_logged) {
if ($topics['topics_closed'] == 0) {
$form = new cmsForm(gen_uri('add_posts', $id, 'page=' . $page . '&rnd=' . $_SESSION['token'] . '&' . RND), 'post');
$form->addTextarea('Сообщение:', 'text', '', ' id="msg"');
echo $form->submit('Написать');
unset($form);
}
else {
show_error('Данная тема закрыта для обсуждения!');
}
}
else {
show_login('Вы не авторизованы, чтобы добавить сообщение, необходимо');
}
echo show_bookmarks($topics['topics_title'], '', $topics['bookmarks']);
}
else {
show_header('Форум - ' . $data['comm_name']);
show_error('Ошибка! Данной темы не существует!');
}
echo '<div class="b"><a href="#up">' . icon('up.png') . '</a> ';
echo '<a href="' . gen_uri('smiles', $id, RND) . '">Смайлы</a> / ';
echo '<a href="' . gen_uri('tags', $id, RND) . '">Теги</a> / ';
echo '<a href="' . gen_uri('top', '', RND) . '">Топ тем</a> | ';
echo '<a href="' . gen_uri('search', '', RND) . '">Поиск</a><br /></div>';
echo '<div class="b">' . icon('return.png');
echo ' <a href="' . gen_uri('index', '', RND) . '">В сообщество</a> | ';
echo ' <a href="' . gen_uri('forum', '', RND) . '">К форумам</a><br /></div>';
?>