Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/css/ |
| [Home] [System Details] [Kill Me] |
access.xml000064400000001020151165417540006531 0ustar00<?xml
version="1.0" encoding="utf-8" ?>
<access component="com_search">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.options"
title="JACTION_OPTIONS"
description="JACTION_OPTIONS_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="JACTION_EDITSTATE_COMPONENT_DESC" />
</section>
</access>
config.xml000064400000004014151165417540006543 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<config>
<fieldset
name="component"
label="COM_SEARCH_FIELDSET_SEARCH_OPTIONS_LABEL">
<field
name="enabled"
type="radio"
label="COM_SEARCH_CONFIG_GATHER_SEARCH_STATISTICS_LABEL"
description="COM_SEARCH_CONFIG_GATHER_SEARCH_STATISTICS_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="search_phrases"
type="radio"
label="COM_SEARCH_FIELD_SEARCH_PHRASES_LABEL"
description="COM_SEARCH_FIELD_SEARCH_PHRASES_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="search_areas"
type="radio"
label="COM_SEARCH_FIELD_SEARCH_AREAS_LABEL"
description="COM_SEARCH_FIELD_SEARCH_AREAS_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="show_date"
type="radio"
label="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_LABEL"
description="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JSHOW</option>
<option value="0">JHIDE</option>
</field>
<field
name="opensearch_name"
type="text"
label="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_NAME_LABEL"
description="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_NAME_DESC"
default=""
/>
<field
name="opensearch_description"
type="textarea"
label="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_LABEL"
description="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_DESC"
default=""
cols="30"
rows="2"
/>
</fieldset>
<fieldset
name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC"
>
<field
name="rules"
type="rules"
label="JCONFIG_PERMISSIONS_LABEL"
filter="rules"
validate="rules"
component="com_search"
section="component"
/>
</fieldset>
</config>
controller.php000064400000005641151165417540007457 0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 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 Controller
*
* @since 1.5
*/
class SearchController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param bool $cachable If true, the view output will be cached
* @param bool $urlparams An array of safe URL parameters and their
variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
// Force it to be the search view
$this->input->set('view', 'search');
return parent::display($cachable, $urlparams);
}
/**
* Search
*
* @return void
*
* @throws Exception
*/
public function search()
{
// Slashes cause errors, <> get stripped anyway later on. # causes
problems.
$badchars = array('#', '>', '<',
'\\');
$searchword = trim(str_replace($badchars, '',
$this->input->post->getString('searchword')));
// If searchword enclosed in double quotes, strip quotes and do exact
match
if (substr($searchword, 0, 1) === '"' &&
substr($searchword, -1) === '"')
{
$post['searchword'] = substr($searchword, 1, -1);
$this->input->set('searchphrase', 'exact');
}
else
{
$post['searchword'] = $searchword;
}
$post['ordering'] =
$this->input->post->getWord('ordering');
$post['searchphrase'] =
$this->input->post->getWord('searchphrase',
'all');
$post['limit'] =
$this->input->post->getUInt('limit');
if ($post['limit'] === null)
{
unset($post['limit']);
}
$areas = $this->input->post->get('areas', null,
'array');
if ($areas)
{
foreach ($areas as $area)
{
$post['areas'][] =
JFilterInput::getInstance()->clean($area, 'cmd');
}
}
// The Itemid from the request, we will use this if it's a search
page or if there is no search page available
$post['Itemid'] =
$this->input->getInt('Itemid');
// Set Itemid id for links from menu
$app = JFactory::getApplication();
$menu = $app->getMenu();
$item = $menu->getItem($post['Itemid']);
// The requested Item is not a search page so we need to find one
if ($item && ($item->component !== 'com_search' ||
$item->query['view'] !== 'search'))
{
// Get item based on component, not link. link is not reliable.
$item = $menu->getItems('component',
'com_search', true);
// If we found a search page, use that.
if (!empty($item))
{
$post['Itemid'] = $item->id;
}
}
unset($post['task'], $post['submit']);
$uri = JUri::getInstance();
$uri->setQuery($post);
$uri->setVar('option', 'com_search');
$this->setRedirect(JRoute::_('index.php' .
$uri->toString(array('query', 'fragment')), false));
}
}
controllers/searches.php000064400000002270151165417540011432
0ustar00<?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Methods supporting a list of search terms.
*
* @since 1.6
*/
class SearchControllerSearches extends JControllerLegacy
{
/**
* Method to reset the search log table.
*
* @return boolean
*/
public function reset()
{
// Check for request forgeries.
$this->checkToken();
$model = $this->getModel('Searches');
if (!$model->reset())
{
JError::raiseWarning(500, $model->getError());
}
$this->setRedirect('index.php?option=com_search&view=searches');
}
/**
* Method to toggle the view of results.
*
* @return boolean
*/
public function toggleResults()
{
// Check for request forgeries.
$this->checkToken();
if
($this->getModel('Searches')->getState('show_results',
1, 'int') === 0)
{
$this->setRedirect('index.php?option=com_search&view=searches&show_results=1');
}
else
{
$this->setRedirect('index.php?option=com_search&view=searches&show_results=0');
}
}
}
helpers/search.php000064400000021410151165417540010173 0ustar00<?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\String\StringHelper;
/**
* Search component helper.
*
* @since 1.5
*/
class SearchHelper
{
/**
* Configure the Linkbar.
*
* @param string $vName The name of the active view.
*
* @return void
*
* @since 1.6
*/
public static function addSubmenu($vName)
{
// Not required.
}
/**
* Gets a list of the actions that can be performed.
*
* @return JObject
*
* @deprecated 3.2 Use JHelperContent::getActions() instead.
*/
public static function getActions()
{
// Log usage of deprecated function.
try
{
JLog::add(
sprintf('%s() is deprecated. Use JHelperContent::getActions() with
new arguments order instead.', __METHOD__),
JLog::WARNING,
'deprecated'
);
}
catch (RuntimeException $exception)
{
// Informational log only
}
// Get list of actions.
return JHelperContent::getActions('com_search');
}
/**
* Sanitise search word.
*
* @param string &$searchword Search word to be sanitised.
* @param string $searchphrase Either 'all', 'any'
or 'exact'.
*
* @return boolean True if search word needs to be sanitised.
*/
public static function santiseSearchWord(&$searchword, $searchphrase)
{
$ignored = false;
$lang = JFactory::getLanguage();
$tag = $lang->getTag();
$search_ignore = $lang->getIgnoredSearchWords();
// Deprecated in 1.6 use $lang->getIgnoredSearchWords instead.
$ignoreFile = JLanguageHelper::getLanguagePath() . '/' . $tag .
'/' . $tag . '.ignore.php';
if (file_exists($ignoreFile))
{
include $ignoreFile;
}
// Check for words to ignore.
$aterms = explode(' ', StringHelper::strtolower($searchword));
// First case is single ignored word.
if (count($aterms) == 1 &&
in_array(StringHelper::strtolower($searchword), $search_ignore))
{
$ignored = true;
}
// Filter out search terms that are too small.
$lower_limit = $lang->getLowerLimitSearchWord();
foreach ($aterms as $aterm)
{
if (StringHelper::strlen($aterm) < $lower_limit)
{
$search_ignore[] = $aterm;
}
}
// Next is to remove ignored words from type 'all' or
'any' (not exact) searches with multiple words.
if (count($aterms) > 1 && $searchphrase != 'exact')
{
$pruned = array_diff($aterms, $search_ignore);
$searchword = implode(' ', $pruned);
}
return $ignored;
}
/**
* Does search word need to be limited?
*
* @param string &$searchword Search word to be checked.
*
* @return boolean True if search word should be limited; false
otherwise.
*
* @since 1.5
*/
public static function limitSearchWord(&$searchword)
{
$restriction = false;
$lang = JFactory::getLanguage();
// Limit searchword to a maximum of characters.
$upper_limit = $lang->getUpperLimitSearchWord();
if (StringHelper::strlen($searchword) > $upper_limit)
{
$searchword = StringHelper::substr($searchword, 0, $upper_limit - 1);
$restriction = true;
}
// Searchword must contain a minimum of characters.
if ($searchword && StringHelper::strlen($searchword) <
$lang->getLowerLimitSearchWord())
{
$searchword = '';
$restriction = true;
}
return $restriction;
}
/**
* Logs a search term.
*
* @param string $searchTerm The term being searched.
*
* @return void
*
* @since 1.5
* @deprecated 4.0 Use \Joomla\CMS\Helper\SearchHelper::logSearch()
instead.
*/
public static function logSearch($searchTerm)
{
try
{
JLog::add(
sprintf('%s() is deprecated. Use
\Joomla\CMS\Helper\SearchHelper::logSearch() instead.', __METHOD__),
JLog::WARNING,
'deprecated'
);
}
catch (RuntimeException $exception)
{
// Informational log only
}
\Joomla\CMS\Helper\SearchHelper::logSearch($searchTerm,
'com_search');
}
/**
* Prepares results from search for display.
*
* @param string $text The source string.
* @param string $searchword The searchword to select around.
*
* @return string
*
* @since 1.5
*/
public static function prepareSearchContent($text, $searchword)
{
// Strips tags won't remove the actual jscript.
$text =
preg_replace("'<script[^>]*>.*?</script>'si",
'', $text);
$text = preg_replace('/{.+?}/', '', $text);
// $text =
preg_replace('/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is','\2',
$text);
// Replace line breaking tags with whitespace.
$text =
preg_replace("'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si",
' ', $text);
return self::_smartSubstr(strip_tags($text), $searchword);
}
/**
* Checks an object for search terms (after stripping fields of HTML).
*
* @param object $object The object to check.
* @param string $searchTerm Search words to check for.
* @param array $fields List of object variables to check
against.
*
* @return boolean True if searchTerm is in object, false otherwise.
*/
public static function checkNoHtml($object, $searchTerm, $fields)
{
$searchRegex = array(
'#<script[^>]*>.*?</script>#si',
'#<style[^>]*>.*?</style>#si',
'#<!.*?(--|]])>#si',
'#<[^>]*>#i'
);
$terms = explode(' ', $searchTerm);
if (empty($fields))
{
return false;
}
foreach ($fields as $field)
{
if (!isset($object->$field))
{
continue;
}
$text = self::remove_accents($object->$field);
foreach ($searchRegex as $regex)
{
$text = preg_replace($regex, '', $text);
}
foreach ($terms as $term)
{
$term = self::remove_accents($term);
if (StringHelper::stristr($text, $term) !== false)
{
return true;
}
}
}
return false;
}
/**
* Transliterates given text to ASCII.
*
* @param string $str String to remove accents from.
*
* @return string
*
* @since 3.2
*/
public static function remove_accents($str)
{
$str = JLanguageTransliterate::utf8_latin_to_ascii($str);
// @TODO: remove other prefixes as well?
return preg_replace("/[\"'^]([a-z])/ui",
'\1', $str);
}
/**
* Returns substring of characters around a searchword.
*
* @param string $text The source string.
* @param integer $searchword Number of chars to return.
*
* @return string
*
* @since 1.5
*/
public static function _smartSubstr($text, $searchword)
{
$lang = JFactory::getLanguage();
$length = $lang->getSearchDisplayedCharactersNumber();
$ltext = self::remove_accents($text);
$textlen = StringHelper::strlen($ltext);
$lsearchword =
StringHelper::strtolower(self::remove_accents($searchword));
$wordfound = false;
$pos = 0;
$length = $length > $textlen ? $textlen : $length;
while ($wordfound === false && $pos + $length < $textlen)
{
if (($wordpos = @StringHelper::strpos($ltext, ' ', $pos +
$length)) !== false)
{
$chunk_size = $wordpos - $pos;
}
else
{
$chunk_size = $length;
}
$chunk = StringHelper::substr($ltext, $pos, $chunk_size);
$wordfound = StringHelper::strpos(StringHelper::strtolower($chunk),
$lsearchword);
if ($wordfound === false)
{
$pos += $chunk_size + 1;
}
}
if ($wordfound !== false)
{
// Check if original text is different length than searched text
(changed by function self::remove_accents)
// Displayed text only, adjust $chunk_size
if ($pos === 0)
{
$iOriLen = StringHelper::strlen(StringHelper::substr($text, 0, $pos +
$chunk_size));
$iModLen =
StringHelper::strlen(self::remove_accents(StringHelper::substr($text, 0,
$pos + $chunk_size)));
$chunk_size += $iOriLen - $iModLen;
}
else
{
$iOriSkippedLen = StringHelper::strlen(StringHelper::substr($text, 0,
$pos));
$iModSkippedLen =
StringHelper::strlen(self::remove_accents(StringHelper::substr($text, 0,
$pos)));
// Adjust starting position $pos
if ($iOriSkippedLen !== $iModSkippedLen)
{
$pos += $iOriSkippedLen - $iModSkippedLen;
}
$iOriReturnLen = StringHelper::strlen(StringHelper::substr($text, $pos,
$chunk_size));
$iModReturnLen =
StringHelper::strlen(self::remove_accents(StringHelper::substr($text, $pos,
$chunk_size)));
if ($iOriReturnLen !== $iModReturnLen)
{
$chunk_size += $iOriReturnLen - $iModReturnLen;
}
}
$sPre = $pos > 0 ? '... ' : '';
$sPost = ($pos + $chunk_size) >= StringHelper::strlen($text) ?
'' : ' ...';
return $sPre . StringHelper::substr($text, $pos, $chunk_size) . $sPost;
}
else
{
if (($wordpos = @StringHelper::strpos($text, ' ', $length))
!== false)
{
return StringHelper::substr($text, 0, $wordpos) .
' ...';
}
else
{
return StringHelper::substr($text, 0, $length);
}
}
}
}
helpers/site.php000064400000001402151165417540007671 0ustar00<?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Mock JSite class used to fool the frontend search plugins because they
route the results.
*
* @since 1.5
*/
class JSite extends JObject
{
/**
* False method to fool the frontend search plugins.
*
* @return JSite
*
* @since 1.5
*/
public function getMenu()
{
$result = new JSite;
return $result;
}
/**
* False method to fool the frontend search plugins.
*
* @return array
*
* @since 1.5
*/
public function getItems()
{
return array();
}
}
models/forms/filter_searches.xml000064400000001566151165417540013062
0ustar00<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="filter">
<field
name="search"
type="text"
inputmode="search"
label="COM_SEARCH_SEARCH_IN_PHRASE"
description="COM_SEARCH_SEARCH_IN_PHRASE"
hint="JSEARCH_FILTER"
/>
</fields>
<fields name="list">
<field
name="fullordering"
type="list"
onchange="this.form.submit();"
default="a.hits ASC"
validate="options"
>
<option value="">JGLOBAL_SORT_BY</option>
<option value="a.search_term
ASC">COM_SEARCH_HEADING_SEARCH_TERM_ASC</option>
<option value="a.search_term
DESC">COM_SEARCH_HEADING_SEARCH_TERM_DESC</option>
<option value="a.hits
ASC">JGLOBAL_HITS_ASC</option>
<option value="a.hits
DESC">JGLOBAL_HITS_DESC</option>
</field>
<field
name="limit"
type="limitbox"
class="input-mini"
default="25"
onchange="this.form.submit();"
/>
</fields>
</form>
models/searches.php000064400000010665151165417540010356 0ustar00<?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Methods supporting a list of search terms.
*
* @since 1.6
*/
class SearchModelSearches extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JController
* @since 1.6
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'search_term', 'a.search_term',
'hits', 'a.hits',
);
}
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @since 1.6
*/
protected function populateState($ordering = 'a.hits',
$direction = 'asc')
{
// Load the filter state.
$this->setState('filter.search',
$this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search', '',
'string'));
// Special state for toggle results button.
$this->setState('show_results',
$this->getUserStateFromRequest($this->context .
'.show_results', 'show_results', 1, 'int'));
// Load the parameters.
$params = JComponentHelper::getParams('com_search');
$this->setState('params', $params);
// List state information.
parent::populateState($ordering, $direction);
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*
* @since 1.6
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('show_results');
$id .= ':' . $this->getState('filter.search');
return parent::getStoreId($id);
}
/**
* Build an SQL query to load the list data.
*
* @return JDatabaseQuery
*
* @since 1.6
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select',
'a.*'
)
);
$query->from($db->quoteName('#__core_log_searches',
'a'));
// Filter by search in title
if ($search = $this->getState('filter.search'))
{
$search = $db->quote('%' . str_replace(' ',
'%', $db->escape(trim($search), true) . '%'));
$query->where($db->quoteName('a.search_term') . '
LIKE ' . $search);
}
// Add the list ordering clause.
$query->order($db->escape($this->getState('list.ordering',
'a.hits')) . ' ' .
$db->escape($this->getState('list.direction',
'ASC')));
return $query;
}
/**
* Override the parent getItems to inject optional data.
*
* @return mixed An array of objects on success, false on failure.
*
* @since 1.6
*/
public function getItems()
{
$items = parent::getItems();
// Determine if number of results for search item should be calculated
// by default it is `off` as it is highly query intensive
if ($this->getState('show_results'))
{
JPluginHelper::importPlugin('search');
$app = JFactory::getApplication();
if (!class_exists('JSite'))
{
// This fools the routers in the search plugins into thinking it's
in the frontend
JLoader::register('JSite', JPATH_ADMINISTRATOR .
'/components/com_search/helpers/site.php');
}
foreach ($items as &$item)
{
$results = $app->triggerEvent('onContentSearch',
array($item->search_term));
$item->returns = 0;
foreach ($results as $result)
{
$item->returns += count($result);
}
}
}
return $items;
}
/**
* Method to reset the search log table.
*
* @return boolean
*
* @since 1.6
*/
public function reset()
{
$db = $this->getDbo();
$query = $db->getQuery(true)
->delete($db->quoteName('#__core_log_searches'));
$db->setQuery($query);
try
{
$db->execute();
}
catch (RuntimeException $e)
{
$this->setError($e->getMessage());
return false;
}
return true;
}
}
search.php000064400000000643151165417540006536 0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
$controller = JControllerLegacy::getInstance('Search');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
search.xml000064400000002543151165417540006550 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<extension type="component" version="3.1"
method="upgrade">
<name>com_search</name>
<author>Joomla! Project</author>
<creationDate>April 2006</creationDate>
<copyright>(C) 2005 - 2020 Open Source Matters. All rights
reserved.</copyright>
<license>GNU General Public License version 2 or later; see
LICENSE.txt</license>
<authorEmail>admin@joomla.org</authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>3.0.0</version>
<description>COM_SEARCH_XML_DESCRIPTION</description>
<files folder="site">
<filename>controller.php</filename>
<filename>router.php</filename>
<filename>search.php</filename>
<folder>models</folder>
<folder>views</folder>
</files>
<languages folder="site">
<language
tag="en-GB">language/en-GB.com_search.ini</language>
</languages>
<administration>
<menu link="option=com_search"
img="class:search">Search</menu>
<files folder="admin">
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>search.php</filename>
<folder>controllers</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>views</folder>
</files>
<languages folder="admin">
<language
tag="en-GB">language/en-GB.com_search.ini</language>
<language
tag="en-GB">language/en-GB.com_search.sys.ini</language>
</languages>
</administration>
</extension>
views/searches/tmpl/default.php000064400000006020151165417540012616
0ustar00<?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirn =
$this->escape($this->state->get('list.direction'));
?>
<form action="<?php echo
JRoute::_('index.php?option=com_search&view=searches');
?>" method="post" name="adminForm"
id="adminForm">
<?php if (!empty( $this->sidebar)) : ?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar; ?>
</div>
<div id="j-main-container" class="span10">
<?php else : ?>
<div id="j-main-container">
<?php endif; ?>
<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this, 'options' =>
array('filterButton' => false))); ?>
<div class="clearfix"> </div>
<?php if (empty($this->items)) : ?>
<div class="alert alert-no-items">
<?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
</div>
<?php else : ?>
<table class="table table-striped">
<thead>
<tr>
<th class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'COM_SEARCH_HEADING_PHRASE', 'a.search_term',
$listDirn, $listOrder); ?>
</th>
<th width="15%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?>
</th>
<th width="1%" class="nowrap center">
<?php echo JText::_('COM_SEARCH_HEADING_RESULTS'); ?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">
<?php echo $this->pagination->getListFooter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<tr class="row<?php echo $i % 2; ?>">
<td class="break-word">
<?php echo $this->escape($item->search_term); ?>
</td>
<td>
<?php echo (int) $item->hits; ?>
</td>
<?php if ($this->state->get('show_results')) :
?>
<td class="center btns">
<a class="badge <?php if ($item->returns > 0) echo
'badge-success'; ?>" target="_blank"
href="<?php echo JUri::root();
?>index.php?option=com_search&view=search&searchword=<?php
echo JFilterOutput::stringURLSafe($item->search_term); ?>">
<?php echo $item->returns; ?><span
class="icon-out-2"
aria-hidden="true"></span><span
class="element-invisible"><?php echo
JText::_('JBROWSERTARGET_NEW'); ?></span></a>
</td>
<?php else : ?>
<td class="center">
<?php echo JText::_('COM_SEARCH_NO_RESULTS'); ?>
</td>
<?php endif; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="boxchecked"
value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
views/searches/tmpl/default.xml000064400000000313151165417540012626
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_SEARCH_SEARCH_VIEW_DEFAULT_TITLE">
<message>
<![CDATA[COM_SEARCH_SEARCH_VIEW_DEFAULT_DESC]]>
</message>
</layout>
</metadata>views/searches/view.html.php000064400000004764151165417540012150
0ustar00<?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* View class for a list of search terms.
*
* @since 1.5
*/
class SearchViewSearches extends JViewLegacy
{
protected $enabled;
protected $items;
protected $pagination;
protected $state;
/**
* Display the view.
*
* @param string $tpl The name of the template file to parse;
automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*/
public function display($tpl = null)
{
$app = JFactory::getApplication();
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->enabled =
$this->state->params->get('enabled');
$this->canDo =
JHelperContent::getActions('com_search');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new Exception(implode("\n", $errors), 500);
}
// Check if plugin is enabled
if ($this->enabled)
{
$app->enqueueMessage(JText::_('COM_SEARCH_LOGGING_ENABLED'),
'notice');
}
else
{
$app->enqueueMessage(JText::_('COM_SEARCH_LOGGING_DISABLED'),
'warning');
}
$this->addToolbar();
parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*
* @since 1.6
*/
protected function addToolbar()
{
$canDo = $this->canDo;
JToolbarHelper::title(JText::_('COM_SEARCH_MANAGER_SEARCHES'),
'search');
$showResults = $this->state->get('show_results', 1,
'int');
if ($showResults === 0)
{
JToolbarHelper::custom('searches.toggleresults',
'zoom-in.png', null, 'COM_SEARCH_SHOW_SEARCH_RESULTS',
false);
}
else
{
JToolbarHelper::custom('searches.toggleresults',
'zoom-out.png', null, 'COM_SEARCH_HIDE_SEARCH_RESULTS',
false);
}
if ($canDo->get('core.edit.state'))
{
JToolbarHelper::custom('searches.reset',
'refresh.png', 'refresh_f2.png',
'JSEARCH_RESET', false);
}
JToolbarHelper::divider();
if ($canDo->get('core.admin') ||
$canDo->get('core.options'))
{
JToolbarHelper::preferences('com_search');
}
JToolbarHelper::divider();
JToolbarHelper::help('JHELP_COMPONENTS_SEARCH');
}
}
models/search.php000064400000011503151165445310010012 0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 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
*
* @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'));
// Get parameters.
$params = $app->getParams();
if ($params->get('searchphrase') == 1)
{
$searchphrase = 'any';
}
elseif ($params->get('searchphrase') == 2)
{
$searchphrase = 'exact';
}
else
{
$searchphrase = 'all';
}
// Set the search parameters
$keyword =
urldecode($app->input->getString('searchword'));
$match = $app->input->get('searchphrase',
$searchphrase, 'word');
$ordering = $app->input->get('ordering',
$params->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
*
* @param string $keyword string search string
* @param string $match matching option, exact|any|all
* @param string $ordering option,
newest|oldest|popular|alpha|category
*
* @access public
*
* @return void
*/
public function setSearch($keyword, $match = 'all', $ordering =
'newest')
{
if (isset($keyword))
{
$this->setState('origkeyword', $keyword);
if ($match !== 'exact')
{
$keyword = preg_replace('#\xE3\x80\x80#', ' ',
$keyword);
}
$this->setState('keyword', $keyword);
}
if (isset($match))
{
$this->setState('match', $match);
}
if (isset($ordering))
{
$this->setState('ordering', $ordering);
}
}
/**
* 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 set the search areas
*
* @param array $active areas
* @param array $search areas
*
* @return void
*
* @access public
*/
public function setAreas($active = array(), $search = array())
{
$this->_areas['active'] = $active;
$this->_areas['search'] = $search;
}
/**
* 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
*
* @return integer
*
* @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;
}
}
router.php000064400000004056151165445310006607 0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Routing class from com_search
*
* @since 3.3
*/
class SearchRouter extends JComponentRouterBase
{
/**
* Build the route for the com_search component
*
* @param array &$query An array of URL arguments
*
* @return array The URL arguments to use to assemble the subsequent
URL.
*
* @since 3.3
*/
public function build(&$query)
{
$segments = array();
if (isset($query['view']))
{
unset($query['view']);
}
return $segments;
}
/**
* Parse the segments of a URL.
*
* @param array &$segments The segments of the URL to parse.
*
* @return array The URL attributes to be used by the application.
*
* @since 3.3
*/
public function parse(&$segments)
{
$vars = array();
// Fix up search for URL
$total = count($segments);
for ($i = 0; $i < $total; $i++)
{
// Urldecode twice because it is encoded twice
$segments[$i] = urldecode(urldecode(stripcslashes($segments[$i])));
}
$searchword = array_shift($segments);
$vars['searchword'] = $searchword;
$vars['view'] = 'search';
return $vars;
}
}
/**
* searchBuildRoute
*
* These functions are proxies for the new router interface
* for old SEF extensions.
*
* @param array &$query An array of URL arguments
*
* @return array
*
* @deprecated 4.0 Use Class based routers instead
*/
function searchBuildRoute(&$query)
{
$router = new SearchRouter;
return $router->build($query);
}
/**
* searchParseRoute
*
* These functions are proxies for the new router interface
* for old SEF extensions.
*
* @param array $segments The segments of the URL to parse.
*
* @return array
*
* @deprecated 4.0 Use Class based routers instead
*/
function searchParseRoute($segments)
{
$router = new SearchRouter;
return $router->parse($segments);
}
views/search/tmpl/default.php000064400000001634151165445320012271
0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<div class="search<?php echo $this->pageclass_sfx;
?>">
<?php if ($this->params->get('show_page_heading')) :
?>
<h1 class="page-title">
<?php if
($this->escape($this->params->get('page_heading'))) :
?>
<?php echo
$this->escape($this->params->get('page_heading')); ?>
<?php else : ?>
<?php echo
$this->escape($this->params->get('page_title')); ?>
<?php endif; ?>
</h1>
<?php endif; ?>
<?php echo $this->loadTemplate('form'); ?>
<?php if ($this->error == null && count($this->results)
> 0) : ?>
<?php echo $this->loadTemplate('results'); ?>
<?php else : ?>
<?php echo $this->loadTemplate('error'); ?>
<?php endif; ?>
</div>
views/search/tmpl/default.xml000064400000005116151165445320012301
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_SEARCH_SEARCH_VIEW_DEFAULT_TITLE"
option="COM_SEARCH_SEARCH_VIEW_DEFAULT_OPTION">
<help
key = "JHELP_MENUS_MENU_ITEM_SEARCH_RESULTS"
/>
<message>
<![CDATA[COM_SEARCH_SEARCH_VIEW_DEFAULT_DESC]]>
</message>
</layout>
<!-- Add fields to the request variables for the layout. -->
<fields name="request">
<fieldset name="request"
label="COM_SEARCH_FIELDSET_OPTIONAL_LABEL">
<field
name="searchword"
type="text"
label="COM_SEARCH_FIELD_LABEL"
description="COM_SEARCH_FIELD_DESC"
/>
</fieldset>
</fields>
<!-- Add fields to the parameters object for the layout. -->
<fields name="params">
<!-- Basic options. -->
<fieldset name="basic"
label="COM_MENUS_BASIC_FIELDSET_LABEL">
<field
name="search_phrases"
type="list"
label="COM_SEARCH_FIELD_SEARCH_PHRASES_LABEL"
description="COM_SEARCH_FIELD_SEARCH_PHRASES_DESC"
useglobal="true"
class="chzn-color"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="search_areas"
type="list"
label="COM_SEARCH_FIELD_SEARCH_AREAS_LABEL"
description="COM_SEARCH_FIELD_SEARCH_AREAS_DESC"
useglobal="true"
class="chzn-color"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="show_date"
type="list"
label="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_LABEL"
description="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_DESC"
useglobal="true"
class="chzn-color"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="spacer1"
type="spacer"
label="COM_SEARCH_SAVED_SEARCH_OPTIONS"
class="text"
/>
<!-- Add fields to define saved search. -->
<field
name="searchphrase"
type="list"
label="COM_SEARCH_FOR_LABEL"
description="COM_SEARCH_FOR_DESC"
default="0"
>
<option value="0">COM_SEARCH_ALL_WORDS</option>
<option value="1">COM_SEARCH_ANY_WORDS</option>
<option
value="2">COM_SEARCH_EXACT_PHRASE</option>
</field>
<field
name="ordering"
type="list"
label="COM_SEARCH_ORDERING_LABEL"
description="COM_SEARCH_ORDERING_DESC"
default="newest"
>
<option
value="newest">COM_SEARCH_NEWEST_FIRST</option>
<option
value="oldest">COM_SEARCH_OLDEST_FIRST</option>
<option
value="popular">COM_SEARCH_MOST_POPULAR</option>
<option
value="alpha">COM_SEARCH_ALPHABETICAL</option>
<option value="category">JCATEGORY</option>
</field>
</fieldset>
</fields>
</metadata>
views/search/tmpl/default_error.php000064400000000606151165445320013500
0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<?php if ($this->error) : ?>
<div class="error">
<?php echo $this->escape($this->error); ?>
</div>
<?php endif; ?>
views/search/tmpl/default_form.php000064400000006075151165445320013320
0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JHtml::_('bootstrap.tooltip');
$lang = JFactory::getLanguage();
$upper_limit = $lang->getUpperLimitSearchWord();
?>
<form id="searchForm" action="<?php echo
JRoute::_('index.php?option=com_search'); ?>"
method="post">
<div class="btn-toolbar">
<div class="btn-group pull-left">
<label for="search-searchword"
class="element-invisible">
<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>
</label>
<input type="text" name="searchword"
title="<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD');
?>" placeholder="<?php echo
JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>"
id="search-searchword" size="30"
maxlength="<?php echo $upper_limit; ?>"
value="<?php echo $this->escape($this->origkeyword);
?>" class="inputbox" />
</div>
<div class="btn-group pull-left">
<button name="Search"
onclick="this.form.submit()" class="btn hasTooltip"
title="<?php echo JHtml::_('tooltipText',
'COM_SEARCH_SEARCH');?>">
<span class="icon-search"></span>
<?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?>
</button>
</div>
<input type="hidden" name="task"
value="search" />
<div class="clearfix"></div>
</div>
<div class="searchintro<?php echo
$this->params->get('pageclass_sfx'); ?>">
<?php if (!empty($this->searchword)) : ?>
<p>
<?php echo
JText::plural('COM_SEARCH_SEARCH_KEYWORD_N_RESULTS',
'<span class="badge badge-info">' .
$this->total . '</span>'); ?>
</p>
<?php endif; ?>
</div>
<?php if ($this->params->get('search_phrases', 1)) :
?>
<fieldset class="phrases">
<legend>
<?php echo JText::_('COM_SEARCH_FOR'); ?>
</legend>
<div class="phrases-box">
<?php echo $this->lists['searchphrase']; ?>
</div>
<div class="ordering-box">
<label for="ordering" class="ordering">
<?php echo JText::_('COM_SEARCH_ORDERING'); ?>
</label>
<?php echo $this->lists['ordering']; ?>
</div>
</fieldset>
<?php endif; ?>
<?php if ($this->params->get('search_areas', 1)) :
?>
<fieldset class="only">
<legend>
<?php echo JText::_('COM_SEARCH_SEARCH_ONLY'); ?>
</legend>
<?php foreach ($this->searchareas['search'] as $val
=> $txt) : ?>
<?php $checked = is_array($this->searchareas['active'])
&& in_array($val, $this->searchareas['active']) ?
'checked="checked"' : ''; ?>
<label for="area-<?php echo $val; ?>"
class="checkbox">
<input type="checkbox" name="areas[]"
value="<?php echo $val; ?>" id="area-<?php echo
$val; ?>" <?php echo $checked; ?> />
<?php echo JText::_($txt); ?>
</label>
<?php endforeach; ?>
</fieldset>
<?php endif; ?>
<?php if ($this->total > 0) : ?>
<div class="form-limit">
<label for="limit">
<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
</label>
<?php echo $this->pagination->getLimitBox(); ?>
</div>
<p class="counter">
<?php echo $this->pagination->getPagesCounter(); ?>
</p>
<?php endif; ?>
</form>
views/search/tmpl/default_results.php000064400000003107151165445320014047
0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<dl class="search-results<?php echo $this->pageclass_sfx;
?>">
<?php foreach ($this->results as $result) : ?>
<dt class="result-title">
<?php echo $this->pagination->limitstart + $result->count .
'. '; ?>
<?php if ($result->href) : ?>
<a href="<?php echo JRoute::_($result->href);
?>"<?php if ($result->browsernav == 1) : ?>
target="_blank"<?php endif; ?>>
<?php // $result->title should not be escaped in this case, as it
may ?>
<?php // contain span HTML tags wrapping the searched terms, if
present ?>
<?php // in the title. ?>
<?php echo $result->title; ?>
</a>
<?php else : ?>
<?php // see above comment: do not escape $result->title ?>
<?php echo $result->title; ?>
<?php endif; ?>
</dt>
<?php if ($result->section) : ?>
<dd class="result-category">
<span class="small<?php echo $this->pageclass_sfx;
?>">
(<?php echo $this->escape($result->section); ?>)
</span>
</dd>
<?php endif; ?>
<dd class="result-text">
<?php echo $result->text; ?>
</dd>
<?php if ($this->params->get('show_date')) : ?>
<dd class="result-created<?php echo $this->pageclass_sfx;
?>">
<?php echo JText::sprintf('JGLOBAL_CREATED_DATE_ON',
$result->created); ?>
</dd>
<?php endif; ?>
<?php endforeach; ?>
</dl>
<div class="pagination">
<?php echo $this->pagination->getPagesLinks(); ?>
</div>
views/search/view.html.php000064400000022675151165445320011616
0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\String\StringHelper;
/**
* HTML View class for the search component
*
* @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 an Error object.
*
* @since 1.0
*/
public function display($tpl = null)
{
JLoader::register('SearchHelper', JPATH_COMPONENT_ADMINISTRATOR
. '/helpers/search.php');
$app = JFactory::getApplication();
$uri = JUri::getInstance();
$error = 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();
if (!$app->getMenu()->getActive())
{
$params->set('page_title',
JText::_('COM_SEARCH_SEARCH'));
}
$title = $params->get('page_title');
if ($app->get('sitename_pagetitles', 0) == 1)
{
$title = JText::sprintf('JPAGETITLE',
$app->get('sitename'), $title);
}
elseif ($app->get('sitename_pagetitles', 0) == 2)
{
$title = JText::sprintf('JPAGETITLE', $title,
$app->get('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
\Joomla\CMS\Helper\SearchHelper::logSearch($searchWord,
'com_search');
// Limit search-word
$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 search-word
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');
// Flag indicates to not add limitstart=0 to URL
$pagination->hideEmptyLimitstart = true;
if ($state->get('match') === 'exact')
{
$searchWords = array($searchWord);
$needle = $searchWord;
}
else
{
$searchWordA = preg_replace('#\xE3\x80\x80#', ' ',
$searchWord);
$searchWords = preg_split("/\s+/u", $searchWordA);
$needle = $searchWords[0];
}
JLoader::register('ContentHelperRoute', JPATH_SITE .
'/components/com_content/helpers/route.php');
// Make sure there are no slashes in the needle
$needle = str_replace('/', '\/', $needle);
for ($i = 0, $count = count($results); $i < $count; ++$i)
{
$rowTitle = &$results[$i]->title;
$rowTitleHighLighted = $this->highLight($rowTitle, $needle,
$searchWords);
$rowText = &$results[$i]->text;
$rowTextHighLighted = $this->highLight($rowText, $needle,
$searchWords);
$result = &$results[$i];
$created = '';
if ($result->created)
{
$created = JHtml::_('date', $result->created,
JText::_('DATE_FORMAT_LC3'));
}
$result->title = $rowTitleHighLighted;
$result->text = JHtml::_('content.prepare',
$rowTextHighLighted, '', '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);
}
/**
* Method to control the highlighting of keywords
*
* @param string $string text to be searched
* @param string $needle text to search for
* @param string $searchWords words to be searched
*
* @return mixed A string.
*
* @since 3.8.4
*/
public function highLight($string, $needle, $searchWords)
{
$hl1 = '<span class="highlight">';
$hl2 = '</span>';
$mbString = extension_loaded('mbstring');
$highlighterLen = strlen($hl1 . $hl2);
// Doing HTML entity decoding here, just in case we get any HTML entities
here.
$quoteStyle = version_compare(PHP_VERSION, '5.4',
'>=') ? ENT_NOQUOTES | ENT_HTML401 : ENT_NOQUOTES;
$row = html_entity_decode($string, $quoteStyle,
'UTF-8');
$row = SearchHelper::prepareSearchContent($row, $needle);
$searchWords = array_values(array_unique($searchWords));
$lowerCaseRow = $mbString ? mb_strtolower($row) :
StringHelper::strtolower($row);
$transliteratedLowerCaseRow =
SearchHelper::remove_accents($lowerCaseRow);
$posCollector = array();
foreach ($searchWords as $highlightWord)
{
$found = false;
if ($mbString)
{
$lowerCaseHighlightWord = mb_strtolower($highlightWord);
if (($pos = mb_strpos($lowerCaseRow, $lowerCaseHighlightWord)) !==
false)
{
$found = true;
}
elseif (($pos = mb_strpos($transliteratedLowerCaseRow,
$lowerCaseHighlightWord)) !== false)
{
$found = true;
}
}
else
{
$lowerCaseHighlightWord = StringHelper::strtolower($highlightWord);
if (($pos = StringHelper::strpos($lowerCaseRow,
$lowerCaseHighlightWord)) !== false)
{
$found = true;
}
elseif (($pos = StringHelper::strpos($transliteratedLowerCaseRow,
$lowerCaseHighlightWord)) !== false)
{
$found = true;
}
}
if ($found === true)
{
// 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;
// Collect pos and search-word
$posCollector[$pos] = $highlightWord;
}
}
if (count($posCollector))
{
// Sort by pos. Easier to handle overlapping highlighter-spans
ksort($posCollector);
$cnt = 0;
$lastHighlighterEnd = -1;
foreach ($posCollector as $pos => $highlightWord)
{
$pos += $cnt * $highlighterLen;
/*
* Avoid overlapping/corrupted highlighter-spans
* TODO $chkOverlap could be used to highlight remaining part
* of search-word outside last highlighter-span.
* At the moment no additional highlighter is set.
*/
$chkOverlap = $pos - $lastHighlighterEnd;
if ($chkOverlap >= 0)
{
// Set highlighter around search-word
if ($mbString)
{
$highlightWordLen = mb_strlen($highlightWord);
$row = mb_substr($row, 0, $pos) . $hl1 . mb_substr($row,
$pos, $highlightWordLen)
. $hl2 . mb_substr($row, $pos + $highlightWordLen);
}
else
{
$highlightWordLen = StringHelper::strlen($highlightWord);
$row = StringHelper::substr($row, 0, $pos)
. $hl1 . StringHelper::substr($row, $pos,
StringHelper::strlen($highlightWord))
. $hl2 . StringHelper::substr($row, $pos +
StringHelper::strlen($highlightWord));
}
$cnt++;
$lastHighlighterEnd = $pos + $highlightWordLen + $highlighterLen;
}
}
}
return $row;
}
}
views/search/view.opensearch.php000064400000002566151165445320012776
0ustar00<?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* OpenSearch View class for the Search component
*
* @since 1.7
*/
class SearchViewSearch extends JViewLegacy
{
/**
* Execute and display a template script.
*
* @param string $tpl name of the template
*
* @throws Exception
* @return mixed A string if successful, otherwise an Error object.
*/
public function display($tpl = null)
{
$doc = JFactory::getDocument();
$app = JFactory::getApplication();
$params = JComponentHelper::getParams('com_search');
$doc->setShortName($params->get('opensearch_name',
$app->get('sitename')));
$doc->setDescription($params->get('opensearch_description',
$app->get('MetaDesc')));
// Add the URL for the search
$searchUri = JUri::base() .
'index.php?option=com_search&searchword={searchTerms}';
// Find the menu item for the search
$menu = $app->getMenu();
$items = $menu->getItems('link',
'index.php?option=com_search&view=search');
if (isset($items[0]))
{
$searchUri .= '&Itemid=' . $items[0]->id;
}
$htmlSearch = new JOpenSearchUrl;
$htmlSearch->template = JRoute::_($searchUri);
$doc->addUrl($htmlSearch);
}
}