Вход Регистрация
Файл: CMS/comm/comm_forum_search.php
Строк: 161
<?php

if (!defined('CMS')) { die('Access Denied!'); }

$data = '';
$data = $db->selectRow("SELECT ?_comm_comm.*, ?_comm_category.*
                       FROM ?_comm_comm LEFT JOIN ?_comm_category 
                       ON ?_comm_comm.`comm_cats_id` = ?_comm_category.`cats_id` 
                       WHERE `comm_url` = ? LIMIT 1;"
, $soo);


if (empty(
$data) || !is_array($data)) {

    
$inSes->addMessage('Ошибка! Сообщество не найдено или ссылка неверна!');
    
gen_red('index', '', RND);
}

if (empty(
$data['comm_forum'])) {

    
$inSes->addMessage('Ошибка! Форум не найден или ссылка неверна!');
    
gen_red('index', '', RND);
}

$arr_admins = @explode(',', $data['comm_admins']);

$users = array();

if (
$is_logged) {

    
$users = $db->selectRow("SELECT * FROM ?_comm_users WHERE `cu_comm` = ? AND `cu_user` = ? LIMIT 1;", $data['comm_id'], $log);

    if (
$data['comm_user'] == $log) {

        
$is_admin_soo = true;
    }

    if (
in_array($log, $arr_admins) && $users['cu_admin'] == 1) {

        
$is_moder_soo = true;
    }
}

if (
$data['comm_status'] == 1 && empty($users)) {

    
$inSes->addMessage('Форум только для участников сообщества!');
    
gen_red('index', '', RND);
}

$periods = array(
        
'0'   => 'За все время',
        
'7'   => 'Последние 7 дней',
        
'30'  => 'Последние 30 дней',
        
'60'  => 'Последние 60 дней',
        
'90'  => 'Последние 90 дней',
        
'180' => 'Последние 180 дней',
        
'365' => 'Последние 365 дней');

$forums = array();

$rows   = $db->select("SELECT `forums_id`,`forums_name` FROM ?_comm_forums WHERE `forums_comm` = ? ORDER BY `forums_order` ASC;", $data['comm_id']);

$forums[0] = 'Не имеет значения';

if (!empty(
$rows) && count($rows) > 0) {

    foreach(
$rows as $row) {

        
$forums[$row['forums_id']] = $row['forums_name'];
    }
}

$section = !empty($_REQUEST['section']) ? abs(intval($_REQUEST['section'])) : 0; // Раздел
$period = !empty($_REQUEST['period']) ? abs(intval($_REQUEST['period'])) : 0;   // Период
$where = !empty($_REQUEST['where']) ? abs(intval($_REQUEST['where'])) : 0;     // Где Искать
$type = !empty($_REQUEST['type']) ? abs(intval($_REQUEST['type'])) : 0;       // Тип запроса

$lang['OR']          = 'или';
$lang['AND']         = 'и';
$lang['SEARCH_WORD'] = '«%s»';

if (!empty(
$_REQUEST['q'])) {

    
$q = check(trim($_REQUEST['q']));

    
$logic = (empty($type)) ? 'AND' : 'OR';
    
$title = (empty($where)) ? 'в сообщениях' : 'в темах';

    
show_header($q . ' - Результаты поиска ' . $title);

    echo 
'<div class="b"><a href="#down">' . icon('down.png') . '</a> ';
    echo 
'Новые: <a title="Новые темы" href="' . gen_uri('new_themes', '', RND) . '">темы</a>, ';
    echo 
'<a title="Новые сообщения" href="' . gen_uri('new_posts', '', RND) . '">сообщения</a></div>';

    if (
cms_strlen($q) < 50) {

        
$q = explode(' ', $q);

        
$find = $query = array();
        foreach(
$q as $val) {

            if (
cms_strlen($val) >= 3) {

                
$query[] = sprintf($lang['SEARCH_WORD'], check($val));
                
$find[]  = $val;
            }
        }
        
array_splice($find, 3);
        
$query = implode(' ' . $lang[$logic] . ' ', $query);

        if (
count($find) > 0) {

            if (!empty(
$where)) { // Поиск в темах

                
$searchsec = ($section > 0) ? "`topics_forums_id` = " . $section . " AND" : '';
                
$searchper = ($period > 0) ? "`topics_last_time` > " . (SITE_TIME - ($period * 24 * 60 * 60)) . " AND" : '';

                if (
$type == 2) {
                    
$find[0] = implode(' ', $q);
                }
                
$search1 = (isset($find[1]) && $type != 2) ? $logic . " `topics_title` LIKE '%" . $find[1] . "%'" : '';
                
$search2 = (isset($find[2]) && $type != 2) ? $logic . " `topics_title` LIKE '%" . $find[2] . "%'" : '';

                
$onpage = !empty($config['themes_num']) ? num($config['themes_num']) : 10;

                if (
$page > 1) $from = ($page - 1) * $onpage; else $from = 0;

                
$rows = $db->selectPage($total, "SELECT * FROM ?_comm_topics WHERE `topics_comm` = ? AND " . $searchsec . " " . $searchper . " `topics_title` LIKE '%" . $find[0] . "%' " . $search1 . " " . $search2 . " LIMIT ?d, ?d", $data['comm_id'], $from, $onpage);

                if (!empty(
$rows) && $total > 0) {

                    
$c = $from + 1;
                    list(
$start, $stop) = get_page();
                    
?>
                    <div class="b">
                      - Поиск запроса <b><?=$query?></b> в темах<br />
                      - Всего найдено: <strong><?=intval( $total )?></strong><br />
                      - Показаны результаты с <strong><?=intval( $start + 1)?></strong> 
                        по <strong><?=intval( $stop )?></strong> место<br />
                    </div>
                    <?php

                    
foreach($rows as $row) {

                        if (
$row['topics_locked'] == 1) {

                            
$icon = 'sticky-notes-pin.png';
                        }
                        else if (
$row['topics_closed'] == 1) {

                            
$icon = 'lock.png';
                        }
                        else 
$icon = 'post_new.png';

                        echo 
'<div class="b">' . icon($icon, 'icons');
                        echo 
'<a href="' . gen_uri('topic', $row['topics_id'], RND) . '"><b>' . $row['topics_title'] . '</b></a> (' . $row['topics_posts'] . ')<br />Страницы: ' . forum_navigation('topic', $row['topics_id'], $config['post_num'], $row['topics_posts']);
                        echo 
'Сообщение: ' . nickname($row['topics_last_user']) . ' (' . get_date($row['topics_last_time']) . ')</div>';
                    }

                    
$qq  = '';
                    
$qq  = !empty($type) ? 'type=' . $type : '';
                    
$qq  = !empty($where) ? 'where=' . $where : '';
                    
$qq  = !empty($period) ? 'period=' . $period : '';
                    
$qq  = !empty($section) ? 'section=' . $section : '';
                    
$qq .= '&amp;q=' . implode(' ', $q);

                    echo 
show_pages(gen_uri('search', '', $qq) . '&amp;' . RND);
                }
                else {
                    
show_error('По вашему запросу ничего не найдено!');
                }
            }
            else { 
// Поиск в сообщениях

                
$searchsec = ($section > 0) ? "`posts_forums_id` = " . $section . " AND" : '';
                
$searchper = ($period > 0) ? "`posts_time` > " . (SITE_TIME - ($period * 24 * 60 * 60)) . " AND" : '';

                if (
$type == 2) {
                    
$find[0] = implode(' ', $q);
                }
                
$search1 = (isset($find[1]) && $type != 2) ? $logic . " `posts_text` LIKE '%" . $find[1] . "%'" : '';
                
$search2 = (isset($find[2]) && $type != 2) ? $logic . " `posts_text` LIKE '%" . $find[2] . "%'" : '';

                
$onpage = !empty($config['themes_num']) ? num($config['themes_num']) : 10;

                if (
$page > 1) $from = ($page - 1) * $onpage; else $from = 0;

                
$rows = $db->selectPage($total, "SELECT `p`.*, `t`.`topics_title`
                                                 FROM ?_comm_posts `p` LEFT JOIN ?_comm_topics `t`
                                                 ON `p`.`posts_topics_id` = `t`.`topics_id`
                                                 WHERE `p`.`posts_comm` = ? AND " 
. $searchsec . " " . $searchper . " `posts_text` LIKE '%" . $find[0] . "%' " . $search1 . " " . $search2 . "
                                                 LIMIT ?d, ?d"
, $data['comm_id'], $from, $onpage);

                if (!empty(
$rows) && $total > 0) {

                    
$c = $from + 1;
                    list(
$start, $stop) = get_page();
                    
?>
                    <div class="b">
                      - Поиск запроса <b><?=$query?></b> в сообщениях<br />
                      - Всего найдено: <strong><?=intval( $total )?></strong><br />
                      - Показаны результаты с <strong><?=intval( $start + 1)?></strong> 
                        по <strong><?=intval( $stop )?></strong> место<br />
                    </div>
                    <?php

                    
foreach($rows as $row) {

                        if (!empty(
$config['anonymity'])) {

                            
$ip_ua = '<span class="data">(' . $row['posts_brow'] . ', ' . $row['posts_ip'] . ')</span>';
                        }
                        else 
$ip_ua = '';

                        echo 
'<div class="b">' . icon('folder.png', 'icons');
                        echo 
' <a href="' . gen_uri('topic', $row['posts_topics_id'], 'pid=' . $row['posts_id'] . '&amp;' . RND) . '"><b>' . $row['topics_title'] . '</b></a><br />' . nl2br(bb_code($row['posts_text'])) . '<br />';
                        echo 
'Написал: ' . users_anketa($row['posts_user']);
                        echo 
' ' . user_online($row['posts_user']) . ' <small>(' . get_date($row['posts_time']) . ')</small><br />';
                        echo 
$ip_ua . '</div>';
                    }

                    
$qq  = '';
                    
$qq  = !empty($type) ? 'type=' . $type : '';
                    
$qq  = !empty($where) ? 'where=' . $where : '';
                    
$qq  = !empty($period) ? 'period=' . $period : '';
                    
$qq  = !empty($section) ? 'section=' . $section : '';
                    
$qq .= '&amp;q=' . implode(' ', $q);

                    echo 
show_pages(gen_uri('search', '', $qq) . '&amp;' . RND);
                }
                else {
                    
show_error('По вашему запросу ничего не найдено!');
                }
            }
        }
        else {
            
show_error('Ошибка! Необходимо не менее 3-х символов в слове!');
        }
    }
    else {
        
show_error('Ошибка! Запрос должен содержать не более 50 символов!');
    }
}
else {

    
show_header('Поиск по форуму');
    echo 
'<div class="b"><a href="#down">' . icon('down.png') . '</a> ';
    echo 
'Новые: <a title="Новые темы" href="' . gen_uri('new_themes', '', RND) . '">темы</a>, ';
    echo 
'<a title="Новые сообщения" href="' . gen_uri('new_posts', '', RND) . '">сообщения</a></div>';
}

    
$form = new cmsForm(gen_uri('search', $id, RND));
    
$form->addText('Запрос:', 'q', request('q'));
    
$form->addSelect('Раздел:', 'section', $section, $forums);
    
$form->addSelect('Период:', 'period', (int) request('period'), $periods);
    
$form->addRadio('<br />Где Искать:', 'where', (int) request('where'), array('0' => 'В сообщениях', '1' => 'В темах'));
    
$form->addRadio('<br />Тип запроса:', 'type', (int) request('type'), array('0' => 'И', '1' => 'Или', '2' => 'Полный'));
    echo 
$form->Submit('Найти');
    unset(
$form);

    echo 
'<div class="b"><a href="#up">' . icon('up.png') . '</a> ';
    echo 
' <a href="' . gen_uri('index', '', RND) . '">В сообщество</a> | ';
    echo 
'<a href="' . gen_uri('forum', '', RND) . '">Форум</a> | ';
    echo 
'<a href="' . gen_uri('top', '', RND) . '">Топ тем</a> | ';
    echo 
'<b>Поиск</b></div>';
Онлайн: 0
Реклама