Вход Регистрация
Файл: library/XenForo/Search/Searcher.php
Строк: 228
<?php

/**
 * Handles preparing to search for data and proxying to the source handler.
 *
 * @package XenForo_Search
 */
class XenForo_Search_Searcher
{
    
/**
     * @var XenForo_Search_SourceHandler_Abstract
     */
    
protected $_sourceHandler null;

    
/**
     * @var XenForo_Model_Search
     */
    
protected $_searchModel null;

    
/**
     * Errors are fatal conditions that will prevent the search from happening.
     *
     * @var array
     */
    
protected $_errors = array();

    
/**
     * Warnings are messages that should be shown to the user in the search results,
     * but do not prevent the search from happening.
     *
     * @var array
     */
    
protected $_warnings = array();

    
/**
     * User viewing for permission checks.
     *
     * @var array|null|false Means disable checks; null means current user
     */
    
protected $_viewingUser null;

    
/**
     * Constructor.
     *
     * @param XenForo_Model_Search $searchModel Search model
     * @param XenForo_Search_SourceHandler_Abstract|null $sourceHandler Search source handler. Uses default if not specified.
     */
    
public function __construct($searchModelXenForo_Search_SourceHandler_Abstract $sourceHandler null)
    {
        if (!
$sourceHandler)
        {
            
$sourceHandler XenForo_Search_SourceHandler_Abstract::getDefaultSourceHandler();
        }

        
$this->_sourceHandler $sourceHandler;
        
$this->_sourceHandler->setSearcher($this);

        
$this->_searchModel $searchModel;
    }

    
/**
     * Performs a general search. This will usually be across all types of content, but
     * could be limited but only using standard constraints.
     *
     * @param string $searchQuery Text to search for
     * @param array $constraints Constraints to apply; handled by source handlers
     * @param string $order Ordering; handled by source handlers
     * @param integer $maxResults Maximum number of results to return
     *
     * @return array Search results: [] => array(content type , id)
     */
    
public function searchGeneral($searchQuery, array $constraints = array(), $order 'relevance'$maxResults 0)
    {
        if (
$maxResults 1)
        {
            
$maxResults XenForo_Application::get('options')->maximumSearchResults;
        }

        
$results $this->_sourceHandler->searchGeneral($searchQuery$constraints$order$maxResults);
        if (
$this->_viewingUser !== false)
        {
            
$results $this->_searchModel->getViewableSearchResults($results$this->_viewingUser);
        }

        return 
$results;
    }

    
/**
     * Performs a type specific search.
     *
     * @param XenForo_Search_DataHandler_Abstract $typeHandler Data handler for the type of search
     * @param string $searchQuery Text to search for
     * @param array $constraints Constraints to apply; handled by source handlers
     * @param string $order Ordering; handled by source handlers
     * @param boolean $groupByDiscussion If true, fold/group the results by the discussion_id value
     * @param integer $maxResults Maximum number of results to return
     *
     * @return array Search results: [] => array(content type , id)
     */
    
public function searchType(XenForo_Search_DataHandler_Abstract $typeHandler,
        
$searchQuery, array $constraints = array(), $order 'relevance'$groupByDiscussion false$maxResults 0
    
)
    {
        if (
$maxResults 1)
        {
            
$maxResults XenForo_Application::get('options')->maximumSearchResults;
        }

        
$results $this->_sourceHandler->searchType(
            
$typeHandler$searchQuery$constraints$order$groupByDiscussion$maxResults
        
);
        if (
$this->_viewingUser !== false)
        {
            
$results $this->_searchModel->getViewableSearchResults($results$this->_viewingUser);
        }

        return 
$results;
    }

    
/**
     * Searches for content by a specific user.
     *
     * @param integer $userId
     * @param integer $maxDate If >0, the only messages older than this will be found
     * @param integer $maxResults
     *
     * @return array Search results: [] => array(content type , id)
     */
    
public function searchUser($userId$maxDate 0$maxResults 0)
    {
        if (
$maxResults 1)
        {
            
$maxResults XenForo_Application::get('options')->maximumSearchResults;
        }

        
$results $this->_sourceHandler->executeSearchByUserId($userId$maxDate$maxResults);
        if (
$this->_viewingUser !== false)
        {
            
$results $this->_searchModel->getViewableSearchResults($results$this->_viewingUser);
        }

        return 
$results;
    }

    
/**
     * Sets the viewing user.
     *
     * @param array|null $viewingUser
     */
    
public function setUser(array $viewingUser null)
    {
        
$this->_viewingUser $viewingUser;
    }

    
/**
     * Triggers an error. An error will prevent the search from going through.
     *
     * @param XenForo_Phrase|string $message Error message
     * @param string $field Field error applies to
     */
    
public function error($message$field)
    {
        
$this->_errors[$field] = $message;
    }

    
/**
     * Triggers a warning. This will be shown to the user on the search results
     * page.
     *
     * @param XenForo_Phrase|string $message Warning message
     * @param string $field Field warning applies to
     */
    
public function warning($message$field)
    {
        
$this->_warnings[$field] = $message;
    }

    
/**
     * Determines if the searcher has errors.
     *
     * @return boolean
     */
    
public function hasErrors()
    {
        return (
count($this->_errors) > 0);
    }

    
/**
     * Gets all error messages.
     *
     * @return array Array of strings and/or XenForo_Phrase objects
     */
    
public function getErrors()
    {
        return 
$this->_errors;
    }

    
/**
     * Gets all warning messages.
     *
     * @return array Array of strings and/or XenForo_Phrase objects
     */
    
public function getWarnings()
    {
        return 
$this->_warnings;
    }
}
Онлайн: 1
Реклама