Файл: modules/forum/post.php
Строк: 274
<?php
define('SHCMS_ENGINE',true);
include_once('../../engine/system/core.php');
switch($act):
default:
//Обработка полученного $_GET и фильтруем ее
$id = filter_input(INPUT_GET,'id',FILTER_SANITIZE_NUMBER_INT);
//Проверка на нумерование
$id = intval($id);
//Если произойдет неправильные действия то exit
if (!isset($id) || !is_numeric($id)) {
header('Location: index.php');
exit;
}
//Выводим заголовок темы из базы
$posts = $db->get_array($db->query('SELECT * FROM `forum_topics` WHERE `id` = '.$id.''));
//Название страницы
$templates->template(''.$posts['name'].' - '.Lang::__('Форум'));
//Отключения форума
$off_forum = $db->get_array($db->query("SELECT * FROM `off_modules`"));
//Если включена отключение форума то выйдет эта ошибка
if($off_forum['off_forum'] == 1) {
echo engine::error(Lang::__('Форум приостановлен с ').date::make_date($off_forum['time_forum']),$off_forum['text_forum']); //Ошибка об отключении и дополнительный текст
echo engine::home(array('Назад','/index.php'));
exit;
}
//Обновляем счетчик просмотров
$db->query( "UPDATE `forum_topics` SET `views` = '".($posts['views']+1)."' WHERE `id` = '".$id."'" );
//Обработка кнопки
$submit = filter_input(INPUT_POST, 'submit');
//Если пользователь авторизован
if($id_user == true) {
//Если нажата кнопка
if(isset($submit)) {
//Обрабатывает описание
$text = filter_input(INPUT_POST,'text',FILTER_SANITIZE_STRING);
//Обработка checkbox 0/1
$pfile = filter_input(INPUT_POST,'file',FILTER_SANITIZE_NUMBER_INT);
$file_post = intval( $pfile);
//Если текст пуст то получаем ошибку
if(engine::trim($text) == false) {
echo engine::error(Lang::__('Введите текст сообщения'));
}else {
//Отключаем эту переменную временно
$update = false;
//Вытаскиваем те посты которые находится в теме $posts[id]
$query = $db->query('SELECT * FROM `forum_post` WHERE `id_top` = '.$posts['id'].' ORDER BY `id` DESC LIMIT 1');
//Проверям если ли посты в теме
if($db->num_rows($query)) {
//Через $user_post вытакиваем данные
$user_post = $db->get_array($query);
//Смотрим кто написал последний пост и время публикования
if($user_post['id_user'] == $id_user && $user_post['time'] > time - 7200) {
//Выключаем переменную для обновления поста последнего пользователя
$update = false;
//даем простую переменную $id_post
$id_post = $user_post['id'];
}
}
//Проверяем если $update есть какая нибудь данная она ее выполняет
if($update == true) {
//Это функция обновляет последний пост пользователя и добавляет еще текст туда
$text = $user_post['text'] . "nn[small]".Lang::__('Пост обновлен:')." ".date::make_date($posts['last_time'] + time).":[/small]n".$text;
//Идет обновление поста ...
$db->query("UPDATE `forum_post` SET `text` = '".$db->safesql($text)."' WHERE `id_top` = '".intval($posts['id'])."' AND `id_user` = '".$id_user."' ORDER BY `id` DESC LIMIT 1");
}else {
//Иначе добавляем в новый столбик новые данные
$db->query("INSERT INTO `forum_post` (`id_cat`,`id_sec`,`id_top`,`id_user`,`text`,`time`) VALUES ('".intval($posts['id_cat'])."','".intval($posts['id_sec'])."',".intval($posts['id']).",'".intval($id_user)."','".$db->safesql($text)."','".time()."')");
$id_post = $db->insert_id();
}
//Обновляем время добавления последнего поста
$db->query('UPDATE `forum_topics` SET `last_time` = '.time().' WHERE `id` = '.$posts['id'].'');
//Даем пользователю балл за пост
$db->query("UPDATE `users` SET `points` = '".($users['points']+1)."' WHERE `id` = '".intval($id_user)."'"); // Начисление баллов
//Если получена данные о добавление файлов то переадресуем
if($file_post == 1) {
header('Location: post_file.php?id='.$id);
}else {
//Автоматическое переадресация на тему
header('Location: post.php?id='.$id.'');
}
//Переадресация на пред. старницу
echo engine::home(array('Назад','post.php?id='.$id.''));
exit;
}
}
}
//Ник добавленного
$nick_author = $user->users($posts['id_user'],array('nick'),false);
//Если пользователь авторизован
if(isset($id_user)) {
//Мне нравится
$like = $db->get_array($db->query("SELECT * FROM `like` WHERE `id_user` = '".$id_user."' AND `id_list` = '".$id."'"));
//Выводим счетчик мне нравится
$row2 = $db->get_array($db->query("SELECT COUNT(*) FROM `like` WHERE `id_list` = '".$id."'"));
//Если вы хотите удалить тему из закладок
if($like['id_list'] == $id) {
$viewlike = '<img src="/engine/template/icons/delete.png"> <a href="post.php?id='.$id.'&do=likeexit"><b>'.Lang::__('Мне не нравится').'</b></a>';
$viewlike .= ' <img title="'.Lang::__('Тема понравилась').' '.$row2[0].'" src="/engine/template/icons/icon_users.png"> <span style="font-size:11px;color: #5c5c5c;">'.$row2[0].'</span>';
}else {
//Если вы хотите добавить тему мне нравится
$viewlike .= '<img src="/engine/template/icons/fave_on_alt.png"> <a href="post.php?id='.$id.'&do=like"><b>'.Lang::__('Мне нравится').'</b></a>';
$viewlike .= ' <img title="'.Lang::__('Тема понравилась').' '.$row2[0].'" src="/engine/template/icons/icon_users.png"> <span style="font-size:11px;color: #5c5c5c;">'.$row2[0].'</span>';
}
}
//Выводим необходимые данные о теме
echo '<div class="titleBox">';
//Название темы
echo '<span style="font-size:15px;color: #323232;">'.engine::ucfirst($posts['name']).'</span>';
//Кнопки Мне нравится / Мне не нравится
echo '<div class="time">'.$viewlike.'</div><br/>';
//Автор темы
echo '<span style="font-size:10px;">Автор: ';
echo '<a href="/modules/profile.php?id='.$posts['id_user'].'">'.$nick_author.'</a>';
//Дата создания темы
echo ' , '.date::make_date($posts['time']).'</span></div>';
//Если пользователь является автором темы
if($id_user == $posts['id_user'] or $users['group'] == 15) {
//Настройка темы
echo '<div style="text-align:right;margin-bottom:10px;">';
echo '<a class="btn btn-info" href="setting.topic.php?id='.$id.'">';
echo '<img src="/engine/template/icons/app.png"> '.Lang::__('Опция темы').'</a>';
echo '</div>';
}
//Если авторизован пользователь
if(isset($id_user)) {
switch($do):
//Обработка функции мне нравится
case 'like':
if(isset($id) and is_numeric($id)) {
//Добавим в базу мне нравится
$db->query('INSERT INTO `like` (`id_list`,`id_user`,`action`,`text`) VALUES ("'.$id.'","'.$id_user.'","2","'.Lang::__('Вам понравилась тема из форума').'")');
header('Location: post.php?id='.$id.'');
}
break;
//Если вам не нравится тема
case 'likeexit':
if(isset($id) and is_numeric($id)) {
//Удаляем из базы функция мне нравится
$db->query('DELETE FROM `like` WHERE `id_list` = "'.$id.'" AND `id_user` = "'.$id_user.'"');
header('Location: post.php?id='.$id.'');
}
break;
endswitch;
}
//Определение категорий пользователей
//Выводим счетчик тем
$row = $db->get_array($db->query("SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$id."'"));
//Объявляем навигацию
$newlist = new Navigation($row[0],15,true);
//Если счетчик на 0 выведит
if($row[0] == false) {
echo engine::error(Lang::__('В данной теме нет постов!'));
exit;
}
//Вытаскиваем все посты
$messag = $db->query("SELECT * FROM `forum_post` WHERE `id_top` = '".$posts['id']."' ". $newlist->limit()."");
//Проверяем есть ли посты
if($db->num_rows($messag) > 0) {
//Выводим все посты
echo '<div class="mainpost">';
echo '<ul class="List_withminiphoto Pad_list">';
while($message = $db->get_array($messag)) {
//Ник добавленного
$nick = $user->users($message['id_user'],array('nick'),false);
//ID добавленного
$id_users = $user->users($message['id_user'],array('id'));
//Данные о пользователе
$profile = $db->get_array($db->query("SELECT * FROM `users` WHERE `id` = '{$message['id_user']}'"));
//Сам пост
if($posts['id_user'] == $message['id_user']) {
$notify = '<img src="/engine/template/icons/author.png"> '.Lang::__('Автор темы');
}
//Количество лайков
$like = $db->get_array($db->query(" SELECT COUNT(*) FROM `forum_like` WHERE `id_topic` = '".$id."' AND `id_post` = '".$message['id']."' AND `like` = 'plus'"));
//Количество дис-лайков
$dislike = $db->get_array($db->query(" SELECT COUNT(*) FROM `forum_like` WHERE `id_topic` = '".$id."' AND `id_post` = '".$message['id']."' AND `like` = 'minus'"));
//Количество постов
$countm = $db->get_array($db->query( "SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$posts['id']."'" ));
//Если авторизован пользователь увидет лайки
if($id_user == true) {
$isset = '<a style="color:green;" href="post.php?id='.$id.'&id_post='.$message['id'].'&act=like">'.$like[0].'</a>';
$disisset = '<a style="color:red;" href="post.php?id='.$id.'&id_post='.$message['id'].'&act=dislike">'.$dislike[0].'</a>';
}else {
$isset = '<font color="green">'.$like[0].'</font>';
$disisset = '<font color="red">'.$dislike[0].'</font>';
}
//По порядку выводим посты
echo '<li class="clearfix row3">';
//Путь к аватарам
$avatar = '/upload/avatar/' . $profile['avatar'];
//Если нет аватара выводим аватар по умолчанию
if ($profile['avatar'] == false and file_exists($avatar) == false) {
echo '<a href="/engine/template/icons/default_large.png" class="UserPhotoLink left">';
echo '<img src="/engine/template/icons/default_large.png" class="UserPhoto UserPhoto_mini"></a>';
} else {
echo '<a href="' . $avatar . '" title="Просмотр профиля" class="UserPhotoLink left">';
echo '<img src="' . $avatar . '" class="UserPhoto UserPhoto_mini"></a>';
}
echo '<div class="list_content">';
//Автор поста
echo '<a href="'.MODULE.'profile.php?act=view&id='.$id_users.'"><b>'.$nick.'</b></a>';
//Понравилось не понравился пост
echo '<span class="time"><img src="/engine/template/icons/like.png">'.$isset.'';
//Не понравился пост
echo ' <img src="/engine/template/icons/dislike.png">'.$disisset.'</span>';
//Дополнительные параметры
echo '<div class="details">';
//Группа пользователя
echo '<span><img src="/engine/template/icons/group.png"> <font color="green">'.user::group($message['id_user']).'</font></span>';
//Дата добавления поста
echo '<span><img src="/engine/template/icons/date.png"> '.date::make_date($message['time']).'</span>';
echo '</div>';
//Файлы пользователя в теме
$file_theme = $db->query("SELECT * FROM `forum_file` WHERE `id_them` = '".intval($id)."' and `id_post` = '".intval($message['id'])."'");
//Если больше 0 то выводим файлы
if($db->num_rows($file_theme) > 0) {
//Выводим все файлы в пост
while($file_them = $db->get_array($file_theme)) {
//Название файла
echo '<div class="_sharedMediaBbcode"><b>'.$file_them['text'].'</b>';
//Размер файла
echo '<div class="desc">'.Lang::__('Размер файла').' '.engine::filesize($file_them['size']).'<br/>';
//Дата добавления
echo date::make_date($file_them['time']);
echo '</div></div>';
}
}
//Сам пост
echo '<div class="row2">'.engine::input_text($message['text']).'</div>';
echo '</div>';
echo '</li>';
}
echo '</ul>';
echo '</div>';
if($row[0] > 15){
//Вывод навигации
echo $newlist->pagination('id='.$id.'');
}
}else {
echo engine::error(Lang::__('В теме отсутствуют посты'));
}
//Если close 1 то темы закрыта
if($posts['close'] == 1) {
//Если авторизован пользователь
if($id_user == true) {
//Форма HTML
echo '<div class="mainname">'.Lang::__('Сообщение').'</div>';
echo '<div class="mainpost">';
$form = new form('?id='.$id.'');
$form->textarea(false,'text');
$form->text('<label>');
$form->input2(false,'file','checkbox','1',false,Lang::__('Прикрепить файл'));
$form->text('</label>');
$form->submit(Lang::__('Отправить'),'submit',true,'btn btn-success');
$form->display();
echo '</div>';
}
}else {
echo engine::error('Тема закрыта для обсуждений');
}
break;
//Скачиваем файл
case 'download':
//Обрабатываем полученный файл
$file = htmlspecialchars($_GET['file']);
$file = str_replace('../','',$file);
$file = str_replace('./','',$file);
//Путь файла
$filename = H.'upload/forum/files/'.$file.'';
//Ограничения
if($file == '.htaccess' || $file == 'index.php'){
echo engine::error(Lang::__('Ошибка! Файл входит в состав запрещеных!'));
}else{
if (file_exists($filename)) {
$list = $filename;
$name = explode("/",$list);
$name = $name[count($name)-1];
header('Content-type: text/plain');
header("Content-disposition: attachment; filename=$name");
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($list));
ob_clean();
flush();
readfile($list);
} else {
echo engine::error(Lang::__('Файл не существует!'));
}
}
break;
//Мне нравится тема
case 'like':
$templates->template('Форум'); //Название страницы
//Сама тема
$id_topic = intval($_GET['id']);
//Пост
$id_post= intval($_GET['id_post']);
//Вытаскиваем данные
$likes = $db->super_query("SELECT * FROM `forum_like` WHERE `id_post` = '".$id_post."' AND `id_topic` = '".$id_topic."' AND `id_user` = '".$id_user."'");
//Добавлем еще один хороший отзыв
if($likes['id_user'] != $id_user) {
$db->query("INSERT INTO `forum_like` (`id_post`,`id_topic`,`id_user`,`like`) VALUES ('".$id_post."','".$id_topic."','".$id_user."','plus')");
header("Location: post.php?id={$id_topic}");
}else{
header("Location: post.php?id={$id_topic}");
}
break;
//Мне не нравится тема
case 'dislike':
$templates->template('Форум'); //Название страницы
//Сама тема
$id_topic = intval($_GET['id']);
//Пост
$id_post = intval($_GET['id_post']);
//Вытаскиваем данные
$likes = $db->super_query("SELECT * FROM `forum_like` WHERE `id_post` = '".$id_post."' AND `id_topic` = '".$id_topic."' AND `id_user` = '".$id_user."'");
//Добавляем не хороший отзыв
if($likes['id_user'] != $id_user) {
$db->query("INSERT INTO `forum_like` (`id_post`,`id_topic`,`id_user`,`like`) VALUES ('".$id_post."','".$id_topic."','".$id_user."','minus')");
header("Location: post.php?id={$id_topic}");
}else{
header("Location: post.php?id={$id_topic}");
}
break;
endswitch;
//Переадресация
echo engine::home(array('Назад','section.php?id='.$posts['id_sec'].''));