You've already forked joomla_test
							
							
		
			
				
	
	
		
			219 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * @package     Joomla.Site
 | 
						|
 * @subpackage  com_search
 | 
						|
 *
 | 
						|
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 | 
						|
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 | 
						|
 */
 | 
						|
 | 
						|
defined('_JEXEC') or die;
 | 
						|
 | 
						|
/**
 | 
						|
 * Search Component Search Model
 | 
						|
 *
 | 
						|
 * @package     Joomla.Site
 | 
						|
 * @subpackage  com_search
 | 
						|
 * @since       1.5
 | 
						|
 */
 | 
						|
class SearchModelSearch extends JModelLegacy
 | 
						|
{
 | 
						|
	/**
 | 
						|
	 * Search data array
 | 
						|
	 *
 | 
						|
	 * @var array
 | 
						|
	 */
 | 
						|
	protected $_data = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Search total
 | 
						|
	 *
 | 
						|
	 * @var integer
 | 
						|
	 */
 | 
						|
	protected $_total = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Search areas
 | 
						|
	 *
 | 
						|
	 * @var integer
 | 
						|
	 */
 | 
						|
	protected  $_areas = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Pagination object
 | 
						|
	 *
 | 
						|
	 * @var object
 | 
						|
	 */
 | 
						|
	protected $_pagination = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Constructor
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 */
 | 
						|
	public function __construct()
 | 
						|
	{
 | 
						|
		parent::__construct();
 | 
						|
 | 
						|
		//Get configuration
 | 
						|
		$app    = JFactory::getApplication();
 | 
						|
		$config = JFactory::getConfig();
 | 
						|
 | 
						|
		// Get the pagination request variables
 | 
						|
		$this->setState('limit', $app->getUserStateFromRequest('com_search.limit', 'limit', $config->get('list_limit'), 'uint'));
 | 
						|
		$this->setState('limitstart', $app->input->get('limitstart', 0, 'uint'));
 | 
						|
 | 
						|
		// Set the search parameters
 | 
						|
		$keyword  = urldecode($app->input->getString('searchword'));
 | 
						|
		$match    = $app->input->get('searchphrase', 'all', 'word');
 | 
						|
		$ordering = $app->input->get('ordering', 'newest', 'word');
 | 
						|
		$this->setSearch($keyword, $match, $ordering);
 | 
						|
 | 
						|
		//Set the search areas
 | 
						|
		$areas = $app->input->get('areas', null, 'array');
 | 
						|
		$this->setAreas($areas);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Method to set the search parameters
 | 
						|
	 *
 | 
						|
	 * @access	public
 | 
						|
	 * @param string search string
 | 
						|
	 * @param string mathcing option, exact|any|all
 | 
						|
	 * @param string ordering option, newest|oldest|popular|alpha|category
 | 
						|
	 */
 | 
						|
	public function setSearch($keyword, $match = 'all', $ordering = 'newest')
 | 
						|
	{
 | 
						|
		if (isset($keyword))
 | 
						|
		{
 | 
						|
			$this->setState('origkeyword', $keyword);
 | 
						|
			if ($match !== 'exact')
 | 
						|
			{
 | 
						|
				$keyword = preg_replace('#\xE3\x80\x80#s', ' ', $keyword);
 | 
						|
			}
 | 
						|
			$this->setState('keyword', $keyword);
 | 
						|
		}
 | 
						|
 | 
						|
		if (isset($match))
 | 
						|
		{
 | 
						|
			$this->setState('match', $match);
 | 
						|
		}
 | 
						|
 | 
						|
		if (isset($ordering))
 | 
						|
		{
 | 
						|
			$this->setState('ordering', $ordering);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Method to set the search areas
 | 
						|
	 *
 | 
						|
	 * @access	public
 | 
						|
	 * @param   array  Active areas
 | 
						|
	 * @param   array  Search areas
 | 
						|
	 */
 | 
						|
	public function setAreas($active = array(), $search = array())
 | 
						|
	{
 | 
						|
		$this->_areas['active'] = $active;
 | 
						|
		$this->_areas['search'] = $search;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Method to get weblink item data for the category
 | 
						|
	 *
 | 
						|
	 * @access public
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	public function getData()
 | 
						|
	{
 | 
						|
		// Lets load the content if it doesn't already exist
 | 
						|
		if (empty($this->_data))
 | 
						|
		{
 | 
						|
			$areas = $this->getAreas();
 | 
						|
 | 
						|
			JPluginHelper::importPlugin('search');
 | 
						|
			$dispatcher = JEventDispatcher::getInstance();
 | 
						|
			$results = $dispatcher->trigger('onContentSearch', array(
 | 
						|
				$this->getState('keyword'),
 | 
						|
				$this->getState('match'),
 | 
						|
				$this->getState('ordering'),
 | 
						|
				$areas['active'])
 | 
						|
			);
 | 
						|
 | 
						|
			$rows = array();
 | 
						|
			foreach ($results as $result)
 | 
						|
			{
 | 
						|
				$rows = array_merge((array) $rows, (array) $result);
 | 
						|
			}
 | 
						|
 | 
						|
			$this->_total	= count($rows);
 | 
						|
			if ($this->getState('limit') > 0)
 | 
						|
			{
 | 
						|
				$this->_data	= array_splice($rows, $this->getState('limitstart'), $this->getState('limit'));
 | 
						|
			} else {
 | 
						|
				$this->_data = $rows;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return $this->_data;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Method to get the total number of weblink items for the category
 | 
						|
	 *
 | 
						|
	 * @access public
 | 
						|
	 * @return  integer
 | 
						|
	 */
 | 
						|
	public function getTotal()
 | 
						|
	{
 | 
						|
		return $this->_total;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Method to get a pagination object of the weblink items for the category
 | 
						|
	 *
 | 
						|
	 * @access public
 | 
						|
	 * @return  integer
 | 
						|
	 */
 | 
						|
	public function getPagination()
 | 
						|
	{
 | 
						|
		// Lets load the content if it doesn't already exist
 | 
						|
		if (empty($this->_pagination))
 | 
						|
		{
 | 
						|
			$this->_pagination = new JPagination($this->getTotal(), $this->getState('limitstart'), $this->getState('limit'));
 | 
						|
		}
 | 
						|
 | 
						|
		return $this->_pagination;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Method to get the search areas
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 */
 | 
						|
	public function getAreas()
 | 
						|
	{
 | 
						|
		// Load the Category data
 | 
						|
		if (empty($this->_areas['search']))
 | 
						|
		{
 | 
						|
			$areas = array();
 | 
						|
 | 
						|
			JPluginHelper::importPlugin('search');
 | 
						|
			$dispatcher = JEventDispatcher::getInstance();
 | 
						|
			$searchareas = $dispatcher->trigger('onContentSearchAreas');
 | 
						|
 | 
						|
			foreach ($searchareas as $area)
 | 
						|
			{
 | 
						|
				if (is_array($area))
 | 
						|
				{
 | 
						|
					$areas = array_merge($areas, $area);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			$this->_areas['search'] = $areas;
 | 
						|
		}
 | 
						|
 | 
						|
		return $this->_areas;
 | 
						|
	}
 | 
						|
}
 |