Просмотр файла forum/includes/search.php

Размер файла: 8.36Kb
  1. <?php
  2.  
  3.  
  4. $set['title'] .= ' | Поиск';
  5. include H . 'engine/includes/head.php';
  6.  
  7. if (!$user_id){
  8. echo Core::msg_show('Только для авторизованных!<br /><a href="index.php">Форум</a>');
  9. include H . 'engine/includes/foot.php';
  10. }
  11.  
  12. $search = isset($_GET['text']) ? strtr($_GET['text'], array('_' => '\\_','%' => '\\%')) : false;
  13. $searchT = isset($_GET['t']) ? 1 : 0;
  14. $searchU = isset($_GET['u']) && !$searchT ? 1 : 0;
  15.  
  16. if ($topic){
  17. $tree = '<a href="index.php">Форум</a> / <a href="index.php?topic='.$topic.'">'.text::output($topicRes['name']).'</a> / Поиск в теме';
  18. $num = 2;
  19. }else{
  20. $tree = '<a href="index.php">Форум</a> / Поиск';
  21. $num = 1;
  22. }
  23.  
  24. if ($searchU){
  25. $tree .= ' / Поиск постов пользователя';
  26. if ($search){
  27. $sql->query("SELECT * FROM `user` WHERE `nick` LIKE '".my_esc($search)."' LIMIT 1 ");
  28. if (!$sql->num_rows()){
  29. $error = 'Такого пользователя не существует!<br />';
  30. }
  31. $userRes = $sql->fetch();
  32. }
  33. }
  34.  
  35. echo '<div class="fmenu">'.$tree.'</div>';
  36.  
  37. if ($search && !$searchU && (mb_strlen($search) < 4 || mb_strlen($search) > 64))
  38. $error .= 'Некорректная длинна запроса (для тем и постов от 4 символов)!';
  39. if ($search && $searchU && (mb_strlen($search) < 3 || mb_strlen($search) > 32))
  40. $error .= 'Некорректная длинна запроса (для ника от 3 символов)!';
  41.  
  42. if (isset($error))
  43. echo Core::msg_show($error);
  44.  
  45. echo '<form action="index.php?act=search'.($topic ? '&amp;topic='.$topic : '').'" method="get"><div class="msg">';
  46. echo '<input type="hidden" name="act" value="search" />';
  47. if ($topic)
  48. echo '<input type="hidden" name="topic" value="'.$topic.'" />';
  49. echo 'Запрос <img style="cursor: pointer;" onclick="alert(this.title);" src="images/question.png" alt="?" title="От 4 до 64 символов" />:<br /><input type="text" value="'.text($search).'" name="text" /><input type="submit" value="Поиск" /><br />';
  50. if ($moder)
  51. echo '<label><input name="u" type="checkbox" value="1" '.($searchU ? 'checked="checked"' : '').' /> Поиск постов пользователя</label><br />';
  52. if (!$topic)
  53. echo '<label><input name="t" type="checkbox" value="1" '.($searchT ? 'checked="checked"' : '').' /> Искать в названии темы</label>';
  54. echo '</div></form>';
  55.  
  56. if ($search && !isset($error)){
  57. if ($searchT){
  58. $total = $sql->query("SELECT COUNT(*) FROM `forum_topics` WHERE `name` LIKE '%".my_esc($search)."%' ")->result();
  59. }elseif($searchU){
  60. $total = $sql->query("SELECT COUNT(*) FROM `forum_posts` WHERE `user_id` = '".$userRes['id']."'".($topic ? " AND `refid` = '$topic'" : "")." ")->result();
  61. }else{
  62. $total = $sql->query("SELECT COUNT(*) FROM `forum_posts` WHERE MATCH (`text`) AGAINST ('".my_esc($search)."' IN BOOLEAN MODE)".($topic ? " AND `forum_posts`.`refid` = '$topic'" : "")." ")->result();
  63. }
  64. $page = new page($total, $set['p_str']);
  65. if ($total){
  66. $page->display('index.php?act=search&amp;'.($topic ? 'topic='.$topic.'&amp;' : '').'text='.$search.'&amp;'.($searchT ? 't=1&amp;' : '').($searchU ? 'u=1&amp;' : ''));;
  67. if ($searchT){
  68. $sql->query("SELECT * FROM `forum_topics` WHERE `name` LIKE '%".my_esc($search)."%' ORDER BY `time` DESC LIMIT ".$page->limit());
  69. }elseif($searchU){
  70. $sql->query("SELECT * FROM `forum_posts` WHERE `user_id` = '".$userRes['id']."'".($topic ? " AND `refid` = '$topic'" : "")." ORDER BY `time` DESC LIMIT ".$page->limit());
  71. }else{
  72. $sql->query("SELECT `forum_posts`.*, `forum_posts`.`id` AS `pid`, `user`.`id`, `user`.`nick`, `user`.`pol`, `user`.`group_access` FROM `forum_posts` LEFT JOIN `user` ON `forum_posts`.`user_id`=`user`.`id` WHERE MATCH (`text`) AGAINST ('".my_esc($search)."' IN BOOLEAN MODE) ".($topic ? " AND `forum_posts`.`refid` = '".$topic."'" : "")." ORDER BY `time` DESC LIMIT ".$page->limit());
  73. }
  74. if ($searchT && !$topic){
  75. while ($res = $sql->fetch()){
  76. echo $i % 2 ? '<div class="p_t">' : '<div class="p_m">';
  77.  
  78. $sub = 'Автор: '.$res['user'];
  79. if ($res['count'] > 1){
  80. $lastPost = explode(':|:', $res['lastpost']);
  81. $sub .= ' <a href="index.php?post='.$lastPost[1].'">Последн.</a>: '.$lastPost[0];
  82. }
  83. $sub .= ' '.Core::time($res['time']).'<br />';
  84.  
  85. $sub .= 'Подфорум: <a href="index.php?forum='.$res['refid'].'">'.$res['forum'].'</a>';
  86. echo show_topic($res, $sub);
  87. echo '</div>';
  88. ++$i;
  89. }
  90. if (!$i) echo '<div class="p_m">Неверные данные. Убедитесь в правильности ввода страницы!</div>';
  91. }elseif($searchU){
  92. while ($res = $sql->fetch()){
  93. echo $i % 2 ? '<div class="p_t">' : '<div class="p_m">';
  94. $header = Core::time($res['time']).' <a href="index.php?post='.$res['id'].'">#</a>';
  95. $text = text::output($res['text']);
  96. if ($res['files']){
  97. $file = mysqli_query($sql->db, "SELECT * FROM `forum_files` WHERE `refid`='".$res['id']."' LIMIT ".$res['files']." ");
  98. $text .= '<div class="func">Файл(ы):<br />';
  99. while($fileRes = mysqli_fetch_assoc($file)){
  100. $text .= show_file($fileRes).'<br />';
  101. }
  102. $text .= '</div>';
  103. }
  104. if ($res['edit']){
  105. $edit = explode(':|:', $res['edit']);
  106. $text .= '<div style="font-size: x-small; color: gray">Изменил(а) '.$edit['0'].' '.Core::time($edit['1']).'</div>';
  107. }
  108. $sub = false;
  109. if (!$topic){
  110. $topicRes = mysqli_fetch_assoc(mysqli_query($sql->db, "SELECT * FROM `forum_topics` WHERE `id`='".$res['refid']."' LIMIT 1 "));
  111. $sub = 'Тема: <a href="index.php?topic='.$topicRes['id'].'">'.$topicRes['name'].'</a>';
  112. }
  113. $text .= '<br />'.$sub;
  114. $array = array('status' => $header, 'post' => $text);
  115. echo Core::user_show($userRes, $array);
  116. echo '</div>';
  117. ++$i;
  118. }
  119. if (!$i) echo '<div class="p_m">Неверные данные. Убедитесь в правильности ввода страницы!</div>';
  120. }else{
  121. while ($res = $sql->fetch()){
  122. echo $i % 2 ? '<div class="p_t">' : '<div class="p_m">';
  123.  
  124. $header = ' '.Core::time($res['time']).' <a href="index.php?post='.$res['pid'].'">#</a>';
  125.  
  126. $text = text::output($res['text']);
  127. if ($res['files']){
  128. $file = mysqli_query($sql->db, "SELECT * FROM `forum_files` WHERE `refid`='".$res['fid']."' LIMIT ".$res['files']." ");
  129. if (mysqli_num_rows($file)){
  130. $text .= '<div class="func">Файл(ы):<br />';
  131. while($fileRes = mysqli_fetch_assoc($file)){
  132. $text .= show_file($fileRes).'<br />';
  133. }
  134. $text .= '</div>';
  135. }
  136. }
  137.  
  138. if ($res['edit']){
  139. $edit = explode(':|:', $res['edit']);
  140. $text .= '<div style="font-size: x-small; color: gray">Изменил(а) '.$edit['0'].' '.Core::time($edit['1']).'</div>';
  141. }
  142.  
  143. $sub = false;
  144. if (!$topic){
  145. $topicRes = mysqli_fetch_assoc(mysqli_query($sql->db, "SELECT * FROM `forum_topics` WHERE `id` = '".$res['refid']."' LIMIT 1 "));
  146. $sub = 'Тема: <a href="index.php?topic='.$topicRes['id'].'">'.text::output($topicRes['name']).'</a>';
  147. }
  148. $text .= '<br />'.$sub;
  149. $array = array('status' => $header, 'post' => $text);
  150. echo Core::user_show($res, $array);
  151. echo '</div>';
  152. ++$i;
  153. }
  154. if (!$i) echo '<div class="p_m">Неверные данные. Убедитесь в правильности ввода страницы!</div>';
  155. }
  156. echo '<div class="fmenu">Найдено: '.$total.'</div>';
  157.  
  158. $page->display('index.php?act=search&amp;'.($topic ? 'topic='.$topic.'&amp;' : '').'text='.$search.'&amp;'.($searchT ? 't=1&amp;' : '').($searchU ? 'u=1&amp;' : ''));
  159. }else{
  160. echo '<div class="err">Ничего не надено</div>';
  161. }
  162.  
  163. }
  164.  
  165. if ($search)
  166. echo '<p><a href="index.php?act=search'.($topic ? '&amp;topic='.$topic : '').'">Новый поиск</a></p>';
  167.  
  168. include H . 'engine/includes/foot.php';