Просмотр файла modules/forum/post.php

Размер файла: 16.53Kb
  1. <?
  2. define('SHCMS_ENGINE',true);
  3. include_once('../../engine/system/core.php');
  4. switch($act):
  5. default:
  6. //Если вместо id num попытаются вставить текст то выводит ошибку
  7. if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
  8. $templates->template(Lang::__('Форум - Ошибка')); //Название страницы
  9. engine::error(Lang::__('Ошибка при выводе сообщений из темы')); //При ошибке
  10. header('Refresh: 1; url=index.php');
  11. exit;
  12. }
  13. //Из $_GET в обычную
  14. $id = (int) $_GET['id'];
  15.  
  16. //Вытаскиваем из таблицы `forum_topics` все данные
  17. $posts = $db->get_array($db->query('SELECT * FROM `forum_topics` WHERE `id` = '.$id.''));
  18. $templates->template(''.$posts['name'].' - '.Lang::__('Форум')); //Название страницы
  19.  
  20. //Отключения форума
  21. //Вывод определенных данных
  22. $off_forum = $db->get_array($db->query("SELECT * FROM `off_modules`"));
  23. if($off_forum['off_forum'] == 1) {
  24. echo engine::error(Lang::__('Форум приостановлен с ').date::make_date($off_forum['time_forum']),$off_forum['text_forum']); //Ошибка об отключении и дополнительный текст
  25. echo engine::home(array('Назад','/index.php'));
  26. exit;
  27. }
  28. $db->query( "UPDATE `forum_topics` SET `views` = '".($posts['views']+1)."' WHERE `id` = '".$id."'" );
  29. //Если уже нажата кнопка Отправить и введена текст сообщения выполняет функицию которая ниже
  30. if($id_user == true) {
  31. if(isset($_POST['submit']) and isset($_POST['text'])) {
  32. //Обрабатывает описание
  33. $text = $_POST['text'];
  34. $file_post = intval($_POST['file']);
  35. //Если не введена текст сообщения выводит эту ошибку
  36. if(trim($text) == false) {
  37. echo engine::error(Lang::__('Введите текст сообщения'));
  38. }else {
  39. $update = false; //Отключаем эту переменную временно
  40. //Вытаскиваем те посты которые находится в теме $posts[id]
  41. $query = $db->query('SELECT * FROM `forum_post` WHERE `id_top` = '.$posts['id'].' ORDER BY `id` DESC LIMIT 1');
  42. //Проверям если ли посты в теме
  43. if($db->num_rows($query)) {
  44. //Через $user_post вытакиваем данные
  45. $user_post = $db->get_array($query);
  46. //Смотрим кто написал последний пост и время публикования
  47. if($user_post['id_user'] == $id_user && $user_post['time'] > time - 7200) {
  48. $update = false; //Выключаем переменную для обновления поста последнего пользователя
  49. $id_post = $user_post['id']; //даем простую переменную $id_post
  50. }
  51. }
  52. //Проверяем если $update есть какая нибудь данная она ее выполняет
  53. if($update == true) {
  54. //Это функция обновляет последний пост пользователя и добавляет еще текст туда
  55. $text = $user_post['text'] . "\n\n[small]".Lang::__('Пост обновлен:')." ".date::make_date($posts['last_time'] + time).":[/small]\n".$text;
  56. //Идет обновление поста ...
  57. $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");
  58. }else {
  59. //Иначе добавляем в новый столбик новые данные
  60. $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()."')");
  61. $id_post = $db->insert_id();
  62. }
  63. //Обновляем время добавления последнего поста
  64. $db->query('UPDATE `forum_topics` SET `last_time` = '.time().' WHERE `id` = '.$posts['id'].'');
  65. $db->query("UPDATE `users` SET `points` = '".($users['points']+1)."' WHERE `id` = '".intval($id_user)."'"); // Начисление баллов
  66. echo engine::success(Lang::__('Сообщение успешно добавлено')); // Успешно
  67. if($file_post == 1) {
  68. header('Location: post_file.php?id='.$id);
  69. }else {
  70. header('Refresh: 1; url=post.php?id='.$id.''); //Автоматическое переадресация
  71. }
  72. echo engine::home(array('Назад','post.php?id='.$id.'')); //Переадресация на пред. старницу
  73. exit; //Закрываем
  74. }
  75. }
  76. } //Ник добавленного
  77. $nick_author = $user->users($posts['id_user'],array('nick'),false);
  78. if(isset($id_user)) {
  79. //Мне нравится
  80. $like = $db->get_array($db->query("SELECT * FROM `like` WHERE `id_user` = '".$id_user."' AND `id_list` = '".$id."'"));
  81. //Выводим счетчик мне нравится
  82. $row2 = $db->get_array($db->query("SELECT COUNT(*) FROM `like` WHERE `id_list` = '".$id."'"));
  83. //Если вы хотите снять тему из вашего мне нравится то выполните действие ниже
  84. if($like['id_list'] == $id) {
  85. $viewlike = '<img src="/engine/template/icons/delete.png">&nbsp;<a href="post.php?id='.$id.'&do=likeexit"><b>'.Lang::__('Мне не нравится').'</b></a>';
  86. $viewlike .= '&nbsp;&nbsp;<img title="'.Lang::__('Тема понравилась').'&nbsp;'.$row2[0].'" src="/engine/template/icons/icon_users.png">&nbsp;<span style="font-size:11px;color: #5c5c5c;">'.$row2[0].'</span>';
  87. }else {
  88. //Если вы хотите добавить тему мне нравится то выполните действие ниже
  89. $viewlike .= '<img src="/engine/template/icons/fave_on_alt.png">&nbsp;<a href="post.php?id='.$id.'&do=like"><b>'.Lang::__('Мне нравится').'</b></a>';
  90. $viewlike .= '&nbsp;&nbsp;<img title="'.Lang::__('Тема понравилась').'&nbsp;'.$row2[0].'" src="/engine/template/icons/icon_users.png">&nbsp;<span style="font-size:11px;color: #5c5c5c;">'.$row2[0].'</span>';
  91. }
  92. }
  93. echo '<div class="mainpost">
  94. <span style="font-size:15px;color: #323232;">'.engine::ucfirst($posts['name']).'</span><div class="time">'.$viewlike.'</div><br/>
  95. <span style="font-size:10px;">Автор:&nbsp;<a href="/modules/profile.php?id='.$posts['id_user'].'">'.$nick_author.'</a>&nbsp;,&nbsp;'.date::make_date($posts['time']).'</span>
  96. </div>';
  97. //Если пользователь является автором темы то он может выполнять нужные ему действие
  98. if($id_user == $posts['id_user'] or $users['group'] == 15) {
  99. echo '<div class="mainpost"><img src="/engine/template/icons/app.png">&nbsp;<a href="setting.topic.php?id='.$id.'">'.Lang::__('Опция темы').'</a></div>';
  100. }
  101. //Если сработало закрытие темы то она закроется
  102. if($posts['close'] == 1) {
  103. if($id_user == true) {
  104. //Форма
  105. echo '<div class="mainname">'.Lang::__('Добавить комментрий').'</div><div class="mainpost">';
  106. $form = new form('?id='.$id.'');
  107. $form->textarea(Lang::__('Текст комментария'),'text');
  108. $form->text('<label>');
  109. $form->input2(false,'file','checkbox','1',false,Lang::__('Прикрепить файл'));
  110. $form->text('</label>');
  111. $form->submit(Lang::__('Отправить'),'submit');
  112. $form->display();
  113. echo '</div>';
  114. }
  115. }else {
  116. echo engine::error('Тема закрыта для обсуждений');
  117. }
  118. //Функция мне нравится для авторизованных действует
  119. if(isset($id_user)) {
  120. switch($do):
  121. //Обработка функции мне нравится
  122. case 'like':
  123. if(isset($_GET['id']) and is_numeric($_GET['id'])) {
  124. $id = (int) $_GET['id'];
  125. //Добавим в базу мне нравится
  126. $db->query('INSERT INTO `like` (`id_list`,`id_user`,`action`,`text`) VALUES ("'.$id.'","'.$id_user.'","2","'.Lang::__('Вам понравилась тема из форума').'")');
  127. header('Location: post.php?id='.$id.'');
  128. }
  129. break;
  130. //Если вам понравилось то это функция выполняет отмену мне нравится
  131. case 'likeexit':
  132. if(isset($_GET['id']) and is_numeric($_GET['id'])) {
  133. $id = (int) $_GET['id'];
  134. //Удаляем из базы функция мне нравится
  135. $db->query('DELETE FROM `like` WHERE `id_list` = "'.$id.'" AND `id_user` = "'.$id_user.'"');
  136. header('Location: post.php?id='.$id.'');
  137. }
  138. break;
  139. endswitch;
  140. }
  141. $client = array(NULL => 'Гости',1 => 'Клиент',15 =>'Админ');
  142. //Выводим счетчик тем
  143. if ($result = $db->query("SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$id."'")) {
  144. /* Переход к строке №400 */
  145. $result->data_seek(399);
  146. /* Получение строки */
  147. $row = $result->fetch_row();
  148. }
  149. $newlist = new Navigation($row[0],10,true);
  150. //Если счетчик на 0 выведит
  151. if($row[0] == false) {
  152. echo engine::error(Lang::__('В данной теме нет постов!'));
  153. exit;
  154. }
  155. //Вытаскиваем все посты
  156. $messag = $db->query("SELECT * FROM `forum_post` WHERE `id_top` = '".$posts['id']."' ORDER BY `id` DESC ". $newlist->limit()."");
  157. //Проверяем есть ли посты
  158. if($db->num_rows($messag) > 0) {
  159. //Выводим все
  160. while($message = $db->get_array($messag)) {
  161. //Ник добавленного
  162. $nick = $user->users($message['id_user'],array('nick'),true);
  163. //ID добавленного
  164. $id_users = $user->users($message['id_user'],array('id'));
  165. //Группы
  166. $group_list = $user->users($message['id_user'],array('group'));
  167. //Сам пост
  168. if($posts['id_user'] == $message['id_user']) {
  169. $notify = '<img src="/engine/template/icons/author.png">&nbsp;'.Lang::__('Автор темы');
  170. }
  171. $like = $db->get_array($db->query(" SELECT COUNT(*) FROM `forum_like` WHERE `id_topic` = '".$id."' AND `id_post` = '".$message['id']."' AND `like` = 'plus'"));
  172. $dislike = $db->get_array($db->query(" SELECT COUNT(*) FROM `forum_like` WHERE `id_topic` = '".$id."' AND `id_post` = '".$message['id']."' AND `like` = 'minus'"));
  173. $countm = $db->get_array($db->query( "SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$posts['id']."'" ));
  174. if(isset($id_user)) {
  175. $isset = '<a style="color:green;" href="post.php?id='.$id.'&id_post='.$message['id'].'&act=like">'.$like[0].'</a>';
  176. $disisset = '<a style="color:red;" href="post.php?id='.$id.'&id_post='.$message['id'].'&act=dislike">'.$dislike[0].'</a>';
  177. }else {
  178. $isset = '<font color="green">'.$like[0].'</font>';
  179. $disisset = '<font color="red">'.$like[0].'</font>';
  180. }
  181. echo '<div class="mainpost"><b style="font-size:14px;">
  182. <a style="color:#1E90FF;" href="'.MODULE.'profile.php?act=view&id='.$id_users.'">'.$nick.'</a></b>';
  183. echo '<span class="time"><img src="/engine/template/icons/like.png">'.$isset.'';
  184. echo '&nbsp;&nbsp;<img src="/engine/template/icons/dislike.png">'.$disisset.'</span>';
  185. echo '<div class="details">';
  186. echo '<span><img src="/engine/template/icons/group.png">&nbsp;<font color="green">'.$client[$group_list].'</font></span>';
  187. echo '<span><img src="/engine/template/icons/date.png">&nbsp;'.date::make_date($message['time']).'</span>';
  188. echo '<span>'.$notify.'</span>';
  189. echo '</div>';
  190. $file_theme = $db->query("SELECT * FROM `forum_file` WHERE `id_them` = '".intval($id)."' and `id_post` = '".intval($message['id'])."'");
  191. if($db->num_rows($file_theme) > 0) {
  192. echo '<div class="mainname">'.Lang::__('Прикрепленные файлы').'</div>';
  193. echo '<div class="mainpost">';
  194. while($file_them = $db->get_array($file_theme)) {
  195.  
  196. echo '<div class="_sharedMediaBbcode"><b>'.$file_them['text'].'</b>';
  197. echo '<div class="desc">'.Lang::__('Размер файла').' '.engine::filesize($file_them['size']).'<br/>';
  198. echo date::make_date($file_them['time']);
  199. echo '</div></div>';
  200. }
  201. echo '</div>';
  202. }
  203. echo '<div class="row">'.engine::input_text($message['text']).'</div>';
  204. echo '</div>';
  205. }
  206. //Вывод навигации
  207. echo $newlist->pagination('id='.$id.'');
  208. }else {
  209. echo engine::error(Lang::__('В теме отсутствуют посты'));
  210. }
  211. break;
  212. case 'download':
  213. $file = htmlspecialchars($_GET['file']);
  214. $file = str_replace('../','',$file);
  215. $file = str_replace('./','',$file);
  216. $filename = H.'upload/forum/files/'.$file.'';
  217.  
  218. if($file == '.htaccess' || $file == 'index.php'){
  219. echo engine::error(Lang::__('Ошибка! Файл входит в состав запрещеных!'));
  220. }else{
  221. if (file_exists($filename)) {
  222. $list = $filename;
  223. $name = explode("/",$list);
  224. $name = $name[count($name)-1];
  225. header('Content-type: text/plain');
  226. header("Content-disposition: attachment; filename=$name");
  227. header('Content-Description: File Transfer');
  228. header('Content-Transfer-Encoding: binary');
  229. header('Expires: 0');
  230. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  231. header('Pragma: public');
  232. header('Content-Length: ' . filesize($list));
  233. ob_clean();
  234. flush();
  235. readfile($list);
  236. } else {
  237. echo engine::error(Lang::__('Файл не существует!'));
  238. }
  239. }
  240.  
  241. break;
  242. case 'like':
  243. $templates->template('Форум'); //Название страницы
  244. $id_topic = intval($_GET['id']);
  245. $id_post= intval($_GET['id_post']);
  246. $likes = $db->super_query("SELECT * FROM `forum_like` WHERE `id_post` = '".$id_post."' AND `id_topic` = '".$id_topic."' AND `id_user` = '".$id_user."'");
  247.  
  248.  
  249. if($likes['id_user'] != $id_user) {
  250. $db->query("INSERT INTO `forum_like` (`id_post`,`id_topic`,`id_user`,`like`) VALUES ('".$id_post."','".$id_topic."','".$id_user."','plus')");
  251. header("Location: post.php?id={$id_topic}");
  252. }else{
  253. header("Location: post.php?id={$id_topic}");
  254. }
  255. break;
  256. case 'dislike':
  257. $templates->template('Форум'); //Название страницы
  258. $id_topic = intval($_GET['id']);
  259. $id_post= intval($_GET['id_post']);
  260. $likes = $db->super_query("SELECT * FROM `forum_like` WHERE `id_post` = '".$id_post."' AND `id_topic` = '".$id_topic."' AND `id_user` = '".$id_user."'");
  261.  
  262.  
  263. if($likes['id_user'] != $id_user) {
  264. $db->query("INSERT INTO `forum_like` (`id_post`,`id_topic`,`id_user`,`like`) VALUES ('".$id_post."','".$id_topic."','".$id_user."','minus')");
  265. header("Location: post.php?id={$id_topic}");
  266. }else{
  267. header("Location: post.php?id={$id_topic}");
  268. }
  269. break;
  270.  
  271. endswitch;
  272. echo engine::home(array('Назад','section.php?id='.$posts['id_sec'].''));
  273. ?>