You've already forked joomla_test
							
							
		
			
				
	
	
		
			226 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			6.8 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;
 | 
						|
 | 
						|
/**
 | 
						|
 * HTML View class for the search component
 | 
						|
 *
 | 
						|
 * @package     Joomla.Site
 | 
						|
 * @subpackage  com_search
 | 
						|
 * @since       1.0
 | 
						|
 */
 | 
						|
class SearchViewSearch extends JViewLegacy
 | 
						|
{
 | 
						|
	/**
 | 
						|
	 * Execute and display a template script.
 | 
						|
	 *
 | 
						|
	 * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
 | 
						|
	 *
 | 
						|
	 * @return  mixed  A string if successful, otherwise a Error object.
 | 
						|
	 */
 | 
						|
	public function display($tpl = null)
 | 
						|
	{
 | 
						|
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/search.php';
 | 
						|
 | 
						|
		$app     = JFactory::getApplication();
 | 
						|
		$uri     = JUri::getInstance();
 | 
						|
 | 
						|
		$error   = null;
 | 
						|
		$rows    = null;
 | 
						|
		$results = null;
 | 
						|
		$total   = 0;
 | 
						|
 | 
						|
		// Get some data from the model
 | 
						|
		$areas      = $this->get('areas');
 | 
						|
		$state      = $this->get('state');
 | 
						|
		$searchword = $state->get('keyword');
 | 
						|
		$params     = $app->getParams();
 | 
						|
 | 
						|
		$menus = $app->getMenu();
 | 
						|
		$menu  = $menus->getActive();
 | 
						|
 | 
						|
		// Because the application sets a default page title, we need to get it right from the menu item itself
 | 
						|
		if (is_object($menu))
 | 
						|
		{
 | 
						|
			$menu_params = new JRegistry;
 | 
						|
			$menu_params->loadString($menu->params);
 | 
						|
 | 
						|
			if (!$menu_params->get('page_title'))
 | 
						|
			{
 | 
						|
				$params->set('page_title', JText::_('COM_SEARCH_SEARCH'));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			$params->set('page_title', JText::_('COM_SEARCH_SEARCH'));
 | 
						|
		}
 | 
						|
 | 
						|
		$title = $params->get('page_title');
 | 
						|
 | 
						|
		if ($app->getCfg('sitename_pagetitles', 0) == 1)
 | 
						|
		{
 | 
						|
			$title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title);
 | 
						|
		}
 | 
						|
		elseif ($app->getCfg('sitename_pagetitles', 0) == 2)
 | 
						|
		{
 | 
						|
			$title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename'));
 | 
						|
		}
 | 
						|
 | 
						|
		$this->document->setTitle($title);
 | 
						|
 | 
						|
		if ($params->get('menu-meta_description'))
 | 
						|
		{
 | 
						|
			$this->document->setDescription($params->get('menu-meta_description'));
 | 
						|
		}
 | 
						|
 | 
						|
		if ($params->get('menu-meta_keywords'))
 | 
						|
		{
 | 
						|
			$this->document->setMetadata('keywords', $params->get('menu-meta_keywords'));
 | 
						|
		}
 | 
						|
 | 
						|
		if ($params->get('robots'))
 | 
						|
		{
 | 
						|
			$this->document->setMetadata('robots', $params->get('robots'));
 | 
						|
		}
 | 
						|
 | 
						|
		// Built select lists
 | 
						|
		$orders   = array();
 | 
						|
		$orders[] = JHtml::_('select.option', 'newest', JText::_('COM_SEARCH_NEWEST_FIRST'));
 | 
						|
		$orders[] = JHtml::_('select.option', 'oldest', JText::_('COM_SEARCH_OLDEST_FIRST'));
 | 
						|
		$orders[] = JHtml::_('select.option', 'popular', JText::_('COM_SEARCH_MOST_POPULAR'));
 | 
						|
		$orders[] = JHtml::_('select.option', 'alpha', JText::_('COM_SEARCH_ALPHABETICAL'));
 | 
						|
		$orders[] = JHtml::_('select.option', 'category', JText::_('JCATEGORY'));
 | 
						|
 | 
						|
		$lists             = array();
 | 
						|
		$lists['ordering'] = JHtml::_('select.genericlist', $orders, 'ordering', 'class="inputbox"', 'value', 'text', $state->get('ordering'));
 | 
						|
 | 
						|
		$searchphrases         = array();
 | 
						|
		$searchphrases[]       = JHtml::_('select.option', 'all', JText::_('COM_SEARCH_ALL_WORDS'));
 | 
						|
		$searchphrases[]       = JHtml::_('select.option', 'any', JText::_('COM_SEARCH_ANY_WORDS'));
 | 
						|
		$searchphrases[]       = JHtml::_('select.option', 'exact', JText::_('COM_SEARCH_EXACT_PHRASE'));
 | 
						|
		$lists['searchphrase'] = JHtml::_('select.radiolist', $searchphrases, 'searchphrase', '', 'value', 'text', $state->get('match'));
 | 
						|
 | 
						|
		// Log the search
 | 
						|
		JSearchHelper::logSearch($searchword, 'com_search');
 | 
						|
 | 
						|
		// Limit searchword
 | 
						|
		$lang        = JFactory::getLanguage();
 | 
						|
		$upper_limit = $lang->getUpperLimitSearchWord();
 | 
						|
		$lower_limit = $lang->getLowerLimitSearchWord();
 | 
						|
 | 
						|
		if (SearchHelper::limitSearchWord($searchword))
 | 
						|
		{
 | 
						|
			$error = JText::sprintf('COM_SEARCH_ERROR_SEARCH_MESSAGE', $lower_limit, $upper_limit);
 | 
						|
		}
 | 
						|
 | 
						|
		// Sanitise searchword
 | 
						|
		if (SearchHelper::santiseSearchWord($searchword, $state->get('match')))
 | 
						|
		{
 | 
						|
			$error = JText::_('COM_SEARCH_ERROR_IGNOREKEYWORD');
 | 
						|
		}
 | 
						|
 | 
						|
		if (!$searchword && !empty($this->input) && count($this->input->post))
 | 
						|
		{
 | 
						|
			// $error = JText::_('COM_SEARCH_ERROR_ENTERKEYWORD');
 | 
						|
		}
 | 
						|
 | 
						|
		// Put the filtered results back into the model
 | 
						|
		// for next release, the checks should be done in the model perhaps...
 | 
						|
		$state->set('keyword', $searchword);
 | 
						|
 | 
						|
		if ($error == null)
 | 
						|
		{
 | 
						|
			$results    = $this->get('data');
 | 
						|
			$total      = $this->get('total');
 | 
						|
			$pagination = $this->get('pagination');
 | 
						|
 | 
						|
			require_once JPATH_SITE . '/components/com_content/helpers/route.php';
 | 
						|
 | 
						|
			for ($i = 0, $count = count($results); $i < $count; $i++)
 | 
						|
			{
 | 
						|
				$row = & $results[$i]->text;
 | 
						|
 | 
						|
				if ($state->get('match') == 'exact')
 | 
						|
				{
 | 
						|
					$searchwords = array($searchword);
 | 
						|
					$needle      = $searchword;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					$searchworda = preg_replace('#\xE3\x80\x80#s', ' ', $searchword);
 | 
						|
					$searchwords = preg_split("/\s+/u", $searchworda);
 | 
						|
					$needle      = $searchwords[0];
 | 
						|
				}
 | 
						|
 | 
						|
				$row         = SearchHelper::prepareSearchContent($row, $needle);
 | 
						|
				$searchwords = array_values(array_unique($searchwords));
 | 
						|
				$srow        = strtolower(SearchHelper::remove_accents($row));
 | 
						|
				$hl1         = '<span class="highlight">';
 | 
						|
				$hl2         = '</span>';
 | 
						|
				$cnt         = 0;
 | 
						|
 | 
						|
				foreach ($searchwords as $hlword)
 | 
						|
				{
 | 
						|
					if (($pos = mb_strpos($srow, strtolower(SearchHelper::remove_accents($hlword)))) !== false)
 | 
						|
					{
 | 
						|
						$pos += $cnt++ * mb_strlen($hl1 . $hl2);
 | 
						|
 | 
						|
						// iconv transliterates '€' to 'EUR'
 | 
						|
						// TODO: add other expanding translations?
 | 
						|
						$eur_compensation = $pos > 0 ? substr_count($row, "\xE2\x82\xAC", 0, $pos) * 2 : 0;
 | 
						|
						$pos -= $eur_compensation;
 | 
						|
						$row = mb_substr($row, 0, $pos) . $hl1 . mb_substr($row, $pos, mb_strlen($hlword)) . $hl2 . mb_substr($row, $pos + mb_strlen($hlword));
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				$result = & $results[$i];
 | 
						|
 | 
						|
				if ($result->created)
 | 
						|
				{
 | 
						|
					$created = JHtml::_('date', $result->created, JText::_('DATE_FORMAT_LC3'));
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					$created = '';
 | 
						|
				}
 | 
						|
 | 
						|
				$result->text    = JHtml::_('content.prepare', $result->text, '', 'com_search.search');
 | 
						|
				$result->created = $created;
 | 
						|
				$result->count   = $i + 1;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Check for layout override
 | 
						|
		$active = JFactory::getApplication()->getMenu()->getActive();
 | 
						|
 | 
						|
		if (isset($active->query['layout']))
 | 
						|
		{
 | 
						|
			$this->setLayout($active->query['layout']);
 | 
						|
		}
 | 
						|
 | 
						|
		// Escape strings for HTML output
 | 
						|
		$this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx'));
 | 
						|
		$this->pagination    = &$pagination;
 | 
						|
		$this->results       = &$results;
 | 
						|
		$this->lists         = &$lists;
 | 
						|
		$this->params        = &$params;
 | 
						|
		$this->ordering      = $state->get('ordering');
 | 
						|
		$this->searchword    = $searchword;
 | 
						|
		$this->origkeyword   = $state->get('origkeyword');
 | 
						|
		$this->searchphrase  = $state->get('match');
 | 
						|
		$this->searchareas   = $areas;
 | 
						|
		$this->total         = $total;
 | 
						|
		$this->error         = $error;
 | 
						|
		$this->action        = $uri;
 | 
						|
 | 
						|
		parent::display($tpl);
 | 
						|
	}
 | 
						|
}
 |