Вход Регистрация
Файл: system/controllers/search/actions/index.php
Строк: 82
<?php

class actionSearchIndex extends cmsAction {

    public function 
run($ctype_name=false){

        
$query $this->request->get('q'false);
        
$type $this->request->get('type''words');
        
$date $this->request->get('date''all');
        
$page $this->request->get('page'1);

        if (!
in_array($type, array('words''exact'))){ cmsCore::error404(); }
        if (!
in_array($date, array('all''w''m''y'))){ cmsCore::error404(); }
        if (!
is_numeric($page)){ cmsCore::error404(); }

        if (
$this->request->has('q')){
            if (!
$query) { $this->redirectToAction(''); }
            
$results $this->search($query$type$date$ctype_name$page);
            if (
$results && !$ctype_name){
                
$ctype_name $results[0]['name'];
                
$page_url href_to($this->name);
            } else {
                
$page_url href_to($this->name'index'$ctype_name);
            }
        }

        return 
cmsTemplate::getInstance()->render('index', array(
            
'query' => $query,
            
'type' => $type,
            
'date' => $date,
            
'ctype_name' => $ctype_name,
            
'page' => $page,
            
'perpage' => $this->options['perpage'],
            
'results' => isset($results) ? $results false,
            
'page_url' => isset($page_url) ? $page_url false
        
));

    }

    public function 
search($query$type$date$ctype_name$page=1){

        
$user cmsUser::getInstance();

        
$content_model cmsCore::getModel('content');

        
$ctypes $content_model->getContentTypes();

        
$results = array();

        if (!
$this->model->setQuery($query)){
            
cmsUser::addSessionMessage(LANG_SEARCH_TOO_SHORT'error');
            return 
false;
        }

        
$this->model->setSearchType($type);
        
$this->model->setDateInterval($date);

        
$is_results_found false;

        
$allowed_ctypes $this->options['ctypes'];
        
$perpage $this->options['perpage'];

        foreach(
$ctypes as $ctype){

            if (!
in_array($ctype['name'], $allowed_ctypes)) { continue; }

            
$result = array();

            
$fields $content_model->getContentFields($ctype['name']);
            
$sql_fields = array();

            foreach(
$fields as $field){
                
$is_text in_array($field['type'], array('caption''text''html'));
                if (
$is_text && !$field['is_private'] && (!$field['groups_read'] || $user->isInGroups($field['groups_read']))){
                    
$sql_fields[] = $field['name'];
                }
            }

            
$table_name $content_model->getContentTypeTableName($ctype['name']);

            
$results_count $this->model->getSearchResultsCount($table_name$sql_fields);

            if (
$results_count){

                if (
$ctype_name == $ctype['name'] || (!$ctype_name && !$is_results_found)){
                    
$result $this->model->getSearchResults($table_name$sql_fields$page$perpage);
                    
$is_results_found true;
                }

                
$results[] = array(
                    
'title' => $ctype['title'],
                    
'name' => $ctype['name'],
                    
'items' => $result,
                    
'count' => $results_count
                
);

            }

        }

        return 
$results;

    }

}
Онлайн: 1
Реклама