Файл: CMS/core/modules/blog_search.php
Строк: 121
<?php
if (!defined('CMS')) { die('Access Denied!'); }
$q = !empty($_REQUEST['q']) ? (string) $_REQUEST['q'] : '';
$logic = !empty($_REQUEST['logic']) ? (string) $_REQUEST['logic'] : 'or';
$lang['OR'] = 'или';
$lang['AND'] = 'и';
$lang['SEARCH_WORD'] = '«%s»';
$error = '';
$search_counts = get_vars('search_counts_blog'); // Всего запросов
$search_results = (array) get_vars('search_results_blog'); // Последние запросы
$bad_querius = array("x22", "x60", "t", "n", "r", "¬"); // Удаляемые символы из запроса
if (!empty($_REQUEST['q'])) {
if (isset($_REQUEST['s'])) {
if (is_array($_REQUEST['s'])) {
$s = $_REQUEST['s'];
}
else $s = explode(';', $_REQUEST['s']);
}
else $s = array_keys($categories);
$s = array_map('intval', $s);
if (!in_array($logic, array('and', 'or'))) {
$logic = 'or';
}
$logic = strtoupper( $logic );
$q = preg_replace('#[^a-zA-Zа-яА-Я0-9 -_@:;()+=.,&*!?<>#$"'/\]#siu', '', $q);
$q = preg_replace('/s/u', ' ', $q);
$q = preg_replace('/ {2,}/u', ' ', $q);
$q = str_replace($bad_querius, '', strip_tags($q));
if (get_magic_quotes_gpc()) {
$q = stripslashes($q);
}
$q = trim( $q );
if ( $q == '' ) {
$error = 'Произошла Ошибка! Вы не ввели запрос "Что искать?"';
}
else if ( empty($s) ) {
$error = 'Произошла Ошибка! Вы не выбрали категорию "Где искать?"';
}
else {
$q = explode(' ', $q);
array_splice($q, 3);
$escape_array = array(
"x2a" => "", //*
"x22" => "", //"
"x2b" => "", //+
"x2d" => "", //-
"x7e" => "", //~
"x28" => "", //(
"x29" => "", //)
"x3c" => "", //<
"x3e" => "" //>
);
for($i = 0, $query = array(); $i < count( $q ); $i++) {
$query[] = sprintf($lang['SEARCH_WORD'], check($q[$i]));
$q[$i] = strtr($q[$i], $escape_array);
}
$query = implode(' ' . $lang[$logic] . ' ', $query);
for($i = 0, $part_of_query = '', $sep = ''; $i < count( $q ); $i++, $sep = $logic) {
$part_of_query .= $sep . " MATCH(`blog_title`,`blog_text`) AGAINST('" . mysql_escape_string($q[$i]) . "*' IN BOOLEAN MODE) AND `blog_cats_id` IN(" . implode(', ', $s) . ") AND `blog_moders` = '0' ";
//$part_of_query .= $sep . " (`text` LIKE '%" . mysql_escape_string($q[$i]) . "%' OR `title` LIKE '%" . mysql_escape_string($q[$i]) . "%') ";
//$part_of_query .= "AND`cid` IN(" . implode(', ', $s) . ") ";
}
$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 * FROM ?_blog_posts
WHERE " . $part_of_query . "
ORDER BY `blog_time` DESC
LIMIT ?d, ?d", $from, $onpage);
if ( $total == 0 ) {
$error = 'По вашему запросу ' . $query . ' ни чего не найдено!';
}
else { // Запись последних поисков
$sq = function_exists('cms_substr') ? cms_substr(implode(' ', $q), 0, 64) : substr(implode(' ', $q), 0, 64);
if ( count($search_results) > 25 ) {
unset($search_results[0], $search_results[1]);
}
if (empty($search_results) || !in_array($sq,$search_results)) {
$search_counts[0] = round(num($search_counts[0]) + 1);
array_push($search_results,$sq);
set_vars('search_counts_blog',array($search_counts[0]));
set_vars('search_results_blog',$search_results);
}
}
}
if (!empty($error)) {
$inSes->addMessage($error, 'error');
show_header('Поиск в блогах');
}
else {
$c = $from + 1;
$start = ($page - 1) * $onpage;
if ($start < 0) $start = 0;
if ($start > $total - 1) $start = $total - 1;
$stop = $start + $onpage;
if ($stop > $total) $stop = $total;
$desc[] = 'Поиск в блогах';
$desc[] = 'Результаты поиска - ' . $query;
$v[] = '<div class="b">';
$v[] = '- Всего найдено: <strong>' . intval( $total ) . '</strong><br />';
$v[] = '- Показаны результаты с <strong>' . intval( $start + 1) . '</strong>';
$v[] = ' по <strong>' . intval( $stop ) . '</strong> место<br /></div>';
foreach( $rows as $row ) {
$idk = num($row['blog_id']);
$cid = num($row['blog_cats_id']);
$desc[] = $row['blog_title'];
$v[] = '<div class="b">' . icon('list.gif', 'icons');
$v[] = ' <a href="' . gen_uri('post', $idk) . '"><b>' . $row['blog_title'] . '</b></a> (' . get_date($row['blog_time']) . ')';
$v[] = '<br />';
$v[] = format_text($row['blog_text']) . '...<br />';
$v[] = '<a href="/' . gen_uri('post', $idk) . '">Читать далее »</a> | ';
$v[] = ' <a href="/' . gen_uri('comments', $idk) . '">Комментарии</a> (' . $row['blog_comments'] . ')';
$v[] = '</div>';
}
show_header('Результаты поиска - ' . $query, implode(' ', $desc), implode(' ', $desc));
echo implode('',$v);
$_q = 'q=' . urlencode(implode(' ', $q));
$_q .= '&s=' . urlencode(implode(';', $s));
$_q .= '&logic=' . strtolower($logic);
echo show_pages('search', $_q, 'p');
}
}
else
{
show_header('Поиск в блогах');
}
echo '<div class="b"><form action="' . gen_uri('search') . '" method="post"><span class="blink">*</span> Ваш запрос:<br /><input name="q" type="text" value="' . request('q') . '" /><br />Искать в:<br /><select name="s[]" multiple="multiple">';
if (!empty($categories)) {
foreach( $categories as $key => $val ) {
list($name,$text,$count) = $val;
echo '<option value="' . $key . '">' . $name . '</option>';
}
}
else echo '<option>Разделы ещё не созданы!</option>';
echo '</select><br />';
if ($logic == 'AND') {
echo '<input type="radio" name="logic" value="and" checked="checked"> Все слова<br />';
echo '<input type="radio" name="logic" value="or"> Любое из слов<br />';
}
else {
echo '<input type="radio" name="logic" value="and"> Все слова<br />';
echo '<input type="radio" name="logic" value="or" checked="checked"> Любое из слов<br />';
}
echo '<input name="send" type="submit" class="btns" value="Искать" /></form></div>';
echo '<div class="b"><b>Последние запросы:</b><br />';
$search_results = get_vars('search_results_blog');
if (is_array($search_results)) {
$search_results = array_reverse( $search_results );
$count = count( $search_results );
$show = array();
if ( $count > 25 ) { $count = 25; }
if ( $count > 0 ) {
$sizes = array('12pt', '15.5pt', '19pt', '21.5pt', '25pt');
for ($s = 0; $s < $count; $s++) {
if (empty($search_results[$s])) continue;
$search[$s] = urldecode(preg_replace("|[rnt]+|si", "", $search_results[$s]));
$path = gen_uri('search', '', 'q=' . urlencode($search[$s]));
if ( $config['themes'] == 'web' ) {
$rand_keys = array_rand($sizes, 2);
$show[] = '<a href="' . $path . '" title="' . $search[$s] . '" style="font-size:' . $sizes[$rand_keys[0]] . ';">' . $search[$s] . '</a>';
}
else $show[] = '<a href="' . $path . '" title="' . $search[$s] . '">' . $search[$s] . '</a>';
}
echo implode(', ',$show);
}
else echo '<b>Запросов ещё не было!</b>';
}
echo '</div><div class="b">Всего запросов: <b>' . num($search_counts[0]) . '</b></div>';
echo '<div class="b">' . icon('return.png');
echo ' <a href="' . gen_uri('index') . '">Блоги</a> | ';
echo '<a href="' . gen_uri('new') . '">Новые</a> | ';
echo '<a href="' . gen_uri('top') . '">Топ статей</a> | ';
echo '<b>Поиск</b> / ';
echo '<a href="' . gen_uri('category') . '">Категории</a> | ';
echo '<a href="' . gen_uri('add') . '">Написать</a><br /></div>';
?>