Просмотр файла news.php

Размер файла: 16.92Kb
  1. <?php
  2. define( 'WBCAT', 1 );
  3. require_once ('inc/head.php');
  4. if ($settings['news'] == false && !$allow) {
  5. echo '<div class="title">Данный модуль закрыт администратором !</div>';
  6. require_once ('inc/foot.php');
  7. exit;
  8. }
  9. if ($allow) {
  10. echo ''.($settings['news'] == false ? '<div class="title"><img src="images/red.png" alt="off"/><small> <b>Модуль отключен для гостей ! Включить можно в <a href="adm/index.php?mod=set">Общих настройках</a></b></small></div>' : '<div class="title"><small>Статус модуля</small> : <img src="images/green.png" alt="on"/></div> ').'';
  11. }
  12. //Проверка и фильтрация переменной $id
  13. if (isset($_GET['id'])){ $id = intval($_GET['id']) ;
  14. if(empty($_GET['id'])) exit('Неверный запрос');
  15. $req = mysql_query("SELECT * FROM `news` WHERE `id` = '$id' LIMIT 1");
  16. $res = mysql_fetch_assoc($req);
  17. if (mysql_num_rows($req) == 0 ) {
  18. echo '<div class="title">Такой записи не существует</div>';
  19. require_once ('inc/foot.php');
  20. exit; }
  21. }
  22.  
  23. $mod = isset($_GET['mod']) ? $_GET['mod'] : '';
  24. switch ($mod) {
  25.  
  26. # Вывод комментариев к новости #
  27.  
  28. case 'view' :
  29.  
  30.  
  31. // Получаем результаты запросов
  32. $view = mysql_fetch_array(mysql_query("SELECT * FROM `news` WHERE id='$id';"));
  33. $view['text'] = tags($view['text']);
  34. $view['text'] = smileys($view['text']);
  35. echo '<div class="zag">Новость</div>';
  36. echo '<div class="title"><b>'.$view['name'].'</b> ['.date('d.m.y/H:i' , $view['date']).']</div>';
  37. echo '<div class="title">'.nl2br($view['text']).'</div>';
  38. echo'<div class="zag">Комментарии</div>';
  39.  
  40. // Формируем вывод комментариев + постраничная навигация
  41. $num = $settings['on_page'];
  42. $page = intval($_GET['page']);
  43. $result = mysql_query('SELECT COUNT(*) FROM `komm` WHERE `id_news`="'.$id.'"');
  44. $posts = mysql_result($result, 0);
  45. $total = intval(($posts - 1) / $num) + 1;
  46. if(empty($page) or $page < 0) $page = 1;
  47. if($page > $total) $page = $total;
  48. $start = $page * $num - $num;
  49. $result = mysql_query('SELECT * FROM `komm` WHERE `id_news`='.$id.' ORDER BY `id` DESC LIMIT '.$start.', '.$num.'');
  50. if ($posts >0) {
  51. while ($m = mysql_fetch_array($result))
  52. {
  53. if ($setnews['bbcode'] == true or $allow) {
  54. $m['text'] = tags($m['text']);
  55. }
  56. if ($setnews['smileys'] == true or $allow) {
  57. $m['text'] = smileys($m['text']);
  58. }
  59. echo '<div class="title">'.$m['name'].' <small>['.date('d.m.y H:i',$m['date']).']</small><br/>'.nl2br($m['text']).'</div>';
  60. if ($allow) {
  61. echo '<div class="min"><a href="adm/komm_news.php?mod=edit_komm&id='.$m['id'].'">[Ред]</a>|<a href="adm/komm_news.php?mod=del_komm&id='.$m['id'].'">[Уд]</a>
  62. <br/><u>IP</u> : <i>'.int2ip($m['ip']).'</i><br/>
  63. <u>USER AGENT</u> : <i>'.$m['browser'].'</i></div>';
  64. }
  65. }
  66.  
  67. if ($page != 1) $pervpage = ' <a href= "news.php?mod=view&id='.$id.'&page='. ($page - 1) .'">Назад</a> ';
  68. // Проверяем нужны ли стрелки вперед
  69. if ($page != $total) $nextpage = ' <a href="news.php?mod=view&id='.$id.'&page='. ($page + 1) .'">Вперед</a>';
  70. if ($page !=1 AND $page != $total) $i = '|';
  71. if ($page - 4 > 0) $first = '<a href="news.php?mod=view&id='.$id.'&page=1">1</a>...';
  72. if ($page + 4 <= $total) $last = '...<a href="news.php?mod=view&id='.$id.'&page='.$total.'">'.$total.'</a>';
  73. // Находим две ближайшие станицы с обоих краев, если они есть
  74. if($page - 2 > 0) $page2left = ' <a href= "news.php?mod=view&id='.$id.'&page='. ($page - 2) .'">'. ($page - 2) .'</a> ';
  75. if($page - 1 > 0) $page1left = '<a href= "news.php?mod=view&id='.$id.'&page='. ($page - 1) .'">'. ($page - 1) .'</a> ';
  76. if($page + 2 <= $total) $page2right = ' <a href= "news.php?mod=view&id='.$id.'&page='. ($page + 2) .'">'. ($page + 2) .'</a>';
  77. if($page + 1 <= $total) $page1right = ' <a href="news.php?mod=view&id='.$id.'&page='. ($page + 1) .'">'. ($page + 1) .'</a>';
  78.  
  79. // Вывод меню
  80. if ($posts > $num) {
  81. echo '<div class="title"><small>Навигация :<br/>Страница '.$page.' из '.$total.'</small><br/>'.$pervpage.$i.$nextpage.'<br/>'.$first.$page2left.$page1left.'['.$page.']'.$page1right.$page2right.$last.'</div>';
  82. }
  83. }
  84. else {
  85. echo '<div class="title">Комментариев нет</div>';
  86. }
  87. if ($allow) {
  88. if($posts>1) {echo '<div class="func"><a href="news.php?mod=del_all_komm&id='.$id.'">Удалить все комментарии</a></div>'; }
  89. }
  90. echo '<div class="main"><a href="news.php?mod=add_komm&id='.$id.'">Добавить комментарий</a></div>';
  91. echo '<div class="main"><a href="faq.php?mod=bbcode">Теги</a>|<a href="faq.php?mod=smileys">Смайлы</a></div>';
  92. echo '<div class="main"><a href="news.php">К новостям</a></div>';
  93. break;
  94.  
  95. # Добавление новостей #
  96.  
  97. case 'add' :
  98. if (!$allow) exit ('Доступ закрыт !');
  99. if (isset($_POST['submit'])) {
  100. if (empty($_POST['name'])) {
  101. $error[1] = 'Вы не ввели заголовок новости !';
  102. }
  103. if (empty($_POST['text'])) {
  104. $error[2] = 'Вы не ввели текст новости !';
  105. }
  106. if (!empty($error)) {
  107. echo '<div class="title">';
  108. foreach($error as $value) {
  109. echo "<b>$value</b> <br />";
  110. }
  111. }
  112. else {
  113. //Обрезаем заголовк и текст новости
  114. $name = substr($_POST['name'], 0, 100);
  115. $text = substr($_POST['text'], 0, 500);
  116. // Фильтрируем переменные и заносим данные в базу
  117. $name = htmlspecialchars(trim($_POST['name']));
  118. $text = htmlspecialchars(trim($_POST['text']));
  119. $result = mysql_query("insert into `news` SET
  120. `name`='" . mysql_real_escape_string($name) . "',
  121. `date`='".$time."' ,
  122. `text`='" . mysql_real_escape_string($text) . "';");
  123. if ($result == true) {
  124. header('Location: '.$settings['url'].'/news.php');
  125. }
  126. else {exit ('Ошибка добавление новости в базу данных');}
  127. }
  128. }
  129. echo "<div class='zag'>
  130. Добавление новости</div><div class='title'>
  131. <form action='news.php?mod=add' method='post'>Заголов новости <small>[max 100]</small> :<br/>
  132. <input type='text' name='name'/><br/>
  133. Текст новости <small>[max 500]</small> :<br/>
  134. <textarea rows='3' name='text'></textarea><br>
  135. <input type='submit' name='submit' value='Создать новость'/></form><br/><a href='news.php'>Назад</a></div>";
  136.  
  137. break;
  138.  
  139. # Удаление новостей #
  140.  
  141. case 'del' :
  142. if (!$allow) exit ('Доступ закрыт !');
  143. echo '<div class="zag">Удаление новостей</div>';
  144. if (isset($_POST['submit'])) {
  145. $result = mysql_query("UPDATE `news` SET `count`=`count`-1 WHERE `id`='" .$id. "';");
  146. $result2 = mysql_query("DELETE FROM `news` WHERE `id`='" .$id. "';");
  147. $result3 = mysql_query ("DELETE FROM `komm` WHERE `id_news`='" .$id. "';");
  148. if ($result = true && $result2 = true && $result3 == true){
  149. header('Location: '.$settings['url'].'/news.php');
  150. }
  151. else {
  152. echo 'Ошибка удаление новости';
  153. }
  154.  
  155. }
  156. echo '<div class="title"><form action="news.php?mod=del&id=' .$id. '" method="post">
  157. Вы действительно желаете удалить новость ?<br />
  158. <input type="submit" name="submit" value="Удалить"/>
  159. </form><br/>
  160. <a href="'.$settings['url'].'/news.php">Назад</a></div>';
  161. break;
  162.  
  163. # Редактирование новостей #
  164.  
  165. case 'edit' :
  166. if (!$allow) exit ('Доступ закрыт !');
  167. echo '<div class="zag">Редактирование новостей</div>';
  168. if (isset($_POST['go'])) {
  169. if (empty($_POST['name'])) {
  170. $error[1] = 'Вы не ввели заголовок новости !';
  171. }
  172. if (empty($_POST['text'])) {
  173. $error[2] = 'Вы не ввели текст новости !';
  174. }
  175. if (!empty($error)) {
  176. echo '<div class="title">';
  177. foreach($error as $value) {
  178. echo "<b>$value</b> <br />";
  179. }
  180. }
  181. else {
  182. //Обрезаем заголовк и текст новости
  183. $name = substr($_POST['name'], 0, 100);
  184. $text = substr($_POST['text'], 0, 500);
  185. // Фильтрируем переменные и заносим данные в базу
  186. $name = htmlspecialchars(trim($_POST['name']));
  187. $text = htmlspecialchars(trim($_POST['text']));
  188. $result = mysql_query("UPDATE `news` SET
  189. `name`='" . mysql_real_escape_string($name). "',
  190. `text`='".mysql_real_escape_string($text)."'
  191. WHERE `id`='".$id."';");
  192. if ($result == true) {
  193. header('Location: '.$settings['url'].'/news.php');
  194. }
  195. else {exit ('Ошибка добавление новости в базу данных');}
  196. }
  197. }
  198. $ms = mysql_fetch_array(mysql_query("SELECT `text` , `name` FROM `news` WHERE id='" .$id. "' ;"));
  199. echo '<div class="title"><form action = "news.php?mod=edit&id='.$id.'" method = "post" name = "form">
  200. Заголовок <small>[max 100]</small><br/>
  201. <input name="name" type="text" maxlength="100" value="'.$ms['name'].'" /><br/>
  202. Комментарий <small>[max 500]</small><br/>
  203. <textarea rows="3" name="text" >'.$ms['text'].'</textarea><br/>
  204. <input name="go" type="submit" value="Изменить" />
  205. </form></div>';
  206.  
  207.  
  208. break;
  209.  
  210. # Добавление комментариев #
  211.  
  212. case 'add_komm' :
  213.  
  214. // Статус комментариев
  215. if ($setnews['komm'] == false && (!$allow)) {
  216. echo 'Комментарии закрыты администратором';
  217. echo '<div class="main"><a href="'.$settings['url'].'">Главная</a></div>';
  218. require_once ('inc/foot.php');
  219. exit;
  220. }
  221.  
  222. echo '<div class="zag">Добавление комментариев</div>';
  223. if (isset($_POST['go'])) {
  224. if (empty($_POST['name'])) $error[1] = 'Вы не заполнили поле "Ваш ник"';
  225. if (empty($_POST['text'])) $error[2] = 'Вы не заполнили поле "Комментарий"';
  226. if (!empty($error)) {
  227. echo '<div class="title">';
  228. foreach($error as $value) {
  229. echo "<b>$value</b> <br />";
  230. }
  231. echo '</div>';
  232. }
  233. else {
  234. // ip
  235. if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))$ip = htmlspecialchars($_SERVER['HTTP_X_FORWARDED_FOR']);
  236. elseif(isset($_SERVER['REMOTE_ADDR'])) $ip = htmlspecialchars($_SERVER['REMOTE_ADDR']);
  237. else $ip = 'Не определн';
  238. // User agent
  239. if (isset($_SERVER['HTTP_USER_AGENT'])) $ua = htmlspecialchars($_SERVER['HTTP_USER_AGENT']);
  240. else $ua = 'Не определен';
  241. // Система антифлуда
  242. $spam = $setnews['antiflood'];
  243. $antiflood = mysql_query("SELECT COUNT(*) FROM `komm` WHERE `id_news`='" .$id. "' AND `date` >='" . ($time - $spam) . "' AND `ip` = '".ip2int($ip)."' AND `browser` = '".mysql_real_escape_string($ua)."'");
  244. $flood = mysql_result($antiflood, 0) > 0 ? 1 : false;
  245. if ($flood) {
  246. echo '<div class="title"><b>Антифлуд !</b> Запрещенно часто добавлять сообщения ! <small>[порого '.$spam.' секунд]</small><br/>
  247. <a href="news.php?mod=view&id='.$id.'">Назад</a></div>';
  248. require_once ("inc/foot.php");
  249. exit;
  250. }
  251. $name = htmlspecialchars(trim($_POST['name']));
  252. $text = htmlspecialchars(trim($_POST['text']));
  253. $result = mysql_query("insert into `komm` SET
  254. `text`='" . mysql_real_escape_string($text) . "',
  255. `id_news`='".$id."',
  256. `date`='" . $time . "',
  257. `ip`='" .ip2int($ip). "',
  258. `browser`='" . $ua . "',
  259. `name`='" . mysql_real_escape_string($name) . "';");
  260. $result2 = mysql_query("UPDATE `news` SET `count`=`count`+1 WHERE id='".$id."';");
  261. if ($result == true && $result2 == true) {header('Location: '.$settings['url'].'/news.php?mod=view&id='.$id.'');}
  262. else {
  263. exit ('Ошибка добавления отзыва в базу данных');
  264. }
  265. }
  266. }
  267. echo '<div class="title"><form action = "news.php?mod=add_komm&id='.$id.'" method = "post" name = "form">
  268. Ваш ник <small>[max 100]</small><br/>
  269. <input name="name" type="text" maxlength="100" value="" /><br/>
  270. Комментарий <small>[max 255]</small><br/>
  271. <textarea rows="3" name="text"></textarea><br/>
  272. <input name="go" type="submit" value="Добавить" />
  273. </form></div>';
  274.  
  275. break;
  276.  
  277. case 'del_all_komm' :
  278.  
  279. # Удаление всех комментариев новости #
  280.  
  281. if (!$allow) exit ('Доступ закрыт !');
  282. echo '<div class="zag" Удаление всех комментариев новости</div>';
  283. if (isset($_POST['submit'])) {
  284. $result2 = mysql_query("UPDATE `news` SET `count`='0' WHERE `id`='" .$id. "';");
  285. $result = mysql_query("DELETE FROM `komm` WHERE `id_news`='" .$id. "';");
  286. if ($result2 == true && $result == true){
  287. header('Location: '.$settings['url'].'/news.php?mod=view&id='.$id.'');
  288. }
  289. else {echo 'Ошибка удаление всех комментариев . Код ошибки <br/>'.mysql_error();}
  290.  
  291. } else {
  292.  
  293. echo '<div class="title"><form action="news.php?mod=del_all_komm&id=' .$id. '" method="post">
  294. Вы действительно желаете удалить все комментарии ?<br />
  295. <input type="submit" name="submit" value="Удалить"/>
  296. </form><br/>
  297. <a href="'.$settings['url'].'/news.php?mod=view&id='.$id.'">Назад</a></div>';
  298. }
  299.  
  300. break;
  301.  
  302. default :
  303. echo '<div class="zag">Новости каталога</div>';
  304. $num = $settings['on_page'];
  305. $page = intval($_GET['page']);
  306. $result = mysql_query('SELECT COUNT(*) FROM `news`');
  307. $posts = mysql_result($result, 0);
  308. $total = intval(($posts - 1) / $num) + 1;
  309. if(empty($page) or $page < 0) $page = 1;
  310. if($page > $total) $page = $total;
  311. $start = $page * $num - $num;
  312. $result = mysql_query('SELECT * FROM `news` ORDER BY id DESC LIMIT '.$start.', '.$num.'');
  313. if ($posts >0) {
  314. while ($m = mysql_fetch_array($result))
  315. {
  316. $m['text'] = tags($m['text']);
  317. $m['text'] = smileys($m['text']);
  318. echo '<div class="title"><b>'.$m['name'].'</b> ['.date('d.m.y / H:i',$m['date']).']<br/>'.nl2br($m['text']).'<br/>';
  319. if ($setnews['komm'] == true || $allow) echo '<a href="news.php?mod=view&id='.$m['id'].'">Комментарии</a> ('.$m['count'].')</div>'; else echo '</div>';
  320. if ($allow) echo '<div class="min"><a href="news.php?mod=edit&id='.$m['id'].'">Редактировать</a>|<a href="news.php?mod=del&id='.$m['id'].'">Удалить</a></div>';
  321. }
  322.  
  323. if ($page != 1) $pervpage = ' <a href= "news.php?page='. ($page - 1) .'">Назад</a> ';
  324. // Проверяем нужны ли стрелки вперед
  325. if ($page != $total) $nextpage = ' <a href="news.php?page='. ($page + 1) .'">Вперед</a>';
  326. if ($page !=1 AND $page != $total) $i = '|';
  327. if ($page - 4 > 0) $first = '<a href="news.php?page=1">1</a>...';
  328. if ($page + 4 <= $total) $last = '...<a href="news.php?page='.$total.'">'.$total.'</a>';
  329. // Находим две ближайшие станицы с обоих краев, если они есть
  330. if($page - 2 > 0) $page2left = ' <a href= "news.php?page='. ($page - 2) .'">'. ($page - 2) .'</a> ';
  331. if($page - 1 > 0) $page1left = '<a href= "news.php?page='. ($page - 1) .'">'. ($page - 1) .'</a> ';
  332. if($page + 2 <= $total) $page2right = ' <a href= "news.php?page='. ($page + 2) .'">'. ($page + 2) .'</a>';
  333. if($page + 1 <= $total) $page1right = ' <a href="news.php?page='. ($page + 1) .'">'. ($page + 1) .'</a>';
  334.  
  335. // Вывод меню
  336. if ($posts > $num) {
  337. echo '<div class="title"><small>Навигация :<br/>Страница '.$page.' из '.$total.'</small><br/>'.$pervpage.$i.$nextpage.'<br/>'.$first.$page2left.$page1left.'['.$page.']'.$page1right.$page2right.$last.'</div>';
  338. }
  339. }
  340. else {
  341. echo '<div class="title">Новостей нет</div>';
  342. }
  343. if ($allow) echo '<div class="func"><a href="news.php?mod=add">Дабавить новость</a></div>';
  344. echo '<div class="zag">Всего новостей : '.$posts.'</div>';
  345. }
  346. echo '<div class="main"><a href="'.$settings['url'].'">Главная</a></div>';
  347. require_once ('inc/foot.php');
  348. ?>