You've already forked joomla_test
							
							first commit
This commit is contained in:
		
							
								
								
									
										281
									
								
								plugins/search/content/content.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										281
									
								
								plugins/search/content/content.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,281 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * @package     Joomla.Plugin
 | 
			
		||||
 * @subpackage  Search.content
 | 
			
		||||
 *
 | 
			
		||||
 * @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;
 | 
			
		||||
 | 
			
		||||
require_once JPATH_SITE . '/components/com_content/router.php';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Content Search plugin
 | 
			
		||||
 *
 | 
			
		||||
 * @package     Joomla.Plugin
 | 
			
		||||
 * @subpackage  Search.content
 | 
			
		||||
 * @since       1.6
 | 
			
		||||
 */
 | 
			
		||||
class PlgSearchContent extends JPlugin
 | 
			
		||||
{
 | 
			
		||||
	/**
 | 
			
		||||
	 * @return array An array of search areas
 | 
			
		||||
	 */
 | 
			
		||||
	public function onContentSearchAreas()
 | 
			
		||||
	{
 | 
			
		||||
		static $areas = array(
 | 
			
		||||
			'content' => 'JGLOBAL_ARTICLES'
 | 
			
		||||
		);
 | 
			
		||||
		return $areas;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Content Search method
 | 
			
		||||
	 * The sql must return the following fields that are used in a common display
 | 
			
		||||
	 * routine: href, title, section, created, text, browsernav
 | 
			
		||||
	 * @param string Target search string
 | 
			
		||||
	 * @param string mathcing option, exact|any|all
 | 
			
		||||
	 * @param string ordering option, newest|oldest|popular|alpha|category
 | 
			
		||||
	 * @param mixed  An array if the search it to be restricted to areas, null if search all
 | 
			
		||||
	 */
 | 
			
		||||
	public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
 | 
			
		||||
	{
 | 
			
		||||
		$db = JFactory::getDbo();
 | 
			
		||||
		$app = JFactory::getApplication();
 | 
			
		||||
		$user = JFactory::getUser();
 | 
			
		||||
		$groups = implode(',', $user->getAuthorisedViewLevels());
 | 
			
		||||
		$tag = JFactory::getLanguage()->getTag();
 | 
			
		||||
 | 
			
		||||
		require_once JPATH_SITE . '/components/com_content/helpers/route.php';
 | 
			
		||||
		require_once JPATH_ADMINISTRATOR . '/components/com_search/helpers/search.php';
 | 
			
		||||
 | 
			
		||||
		$searchText = $text;
 | 
			
		||||
		if (is_array($areas))
 | 
			
		||||
		{
 | 
			
		||||
			if (!array_intersect($areas, array_keys($this->onContentSearchAreas())))
 | 
			
		||||
			{
 | 
			
		||||
				return array();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$sContent = $this->params->get('search_content', 1);
 | 
			
		||||
		$sArchived = $this->params->get('search_archived', 1);
 | 
			
		||||
		$limit = $this->params->def('search_limit', 50);
 | 
			
		||||
 | 
			
		||||
		$nullDate = $db->getNullDate();
 | 
			
		||||
		$date = JFactory::getDate();
 | 
			
		||||
		$now = $date->toSql();
 | 
			
		||||
 | 
			
		||||
		$text = trim($text);
 | 
			
		||||
		if ($text == '')
 | 
			
		||||
		{
 | 
			
		||||
			return array();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		switch ($phrase)
 | 
			
		||||
		{
 | 
			
		||||
			case 'exact':
 | 
			
		||||
				$text = $db->quote('%' . $db->escape($text, true) . '%', false);
 | 
			
		||||
				$wheres2 = array();
 | 
			
		||||
				$wheres2[] = 'a.title LIKE ' . $text;
 | 
			
		||||
				$wheres2[] = 'a.introtext LIKE ' . $text;
 | 
			
		||||
				$wheres2[] = 'a.fulltext LIKE ' . $text;
 | 
			
		||||
				$wheres2[] = 'a.metakey LIKE ' . $text;
 | 
			
		||||
				$wheres2[] = 'a.metadesc LIKE ' . $text;
 | 
			
		||||
				$where = '(' . implode(') OR (', $wheres2) . ')';
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'all':
 | 
			
		||||
			case 'any':
 | 
			
		||||
			default:
 | 
			
		||||
				$words = explode(' ', $text);
 | 
			
		||||
				$wheres = array();
 | 
			
		||||
				foreach ($words as $word)
 | 
			
		||||
				{
 | 
			
		||||
					$word = $db->quote('%' . $db->escape($word, true) . '%', false);
 | 
			
		||||
					$wheres2 = array();
 | 
			
		||||
					$wheres2[] = 'a.title LIKE ' . $word;
 | 
			
		||||
					$wheres2[] = 'a.introtext LIKE ' . $word;
 | 
			
		||||
					$wheres2[] = 'a.fulltext LIKE ' . $word;
 | 
			
		||||
					$wheres2[] = 'a.metakey LIKE ' . $word;
 | 
			
		||||
					$wheres2[] = 'a.metadesc LIKE ' . $word;
 | 
			
		||||
					$wheres[] = implode(' OR ', $wheres2);
 | 
			
		||||
				}
 | 
			
		||||
				$where = '(' . implode(($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')';
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		switch ($ordering)
 | 
			
		||||
		{
 | 
			
		||||
			case 'oldest':
 | 
			
		||||
				$order = 'a.created ASC';
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'popular':
 | 
			
		||||
				$order = 'a.hits DESC';
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'alpha':
 | 
			
		||||
				$order = 'a.title ASC';
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'category':
 | 
			
		||||
				$order = 'c.title ASC, a.title ASC';
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'newest':
 | 
			
		||||
			default:
 | 
			
		||||
				$order = 'a.created DESC';
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$rows = array();
 | 
			
		||||
		$query = $db->getQuery(true);
 | 
			
		||||
 | 
			
		||||
		// search articles
 | 
			
		||||
		if ($sContent && $limit > 0)
 | 
			
		||||
		{
 | 
			
		||||
			$query->clear();
 | 
			
		||||
			//sqlsrv changes
 | 
			
		||||
			$case_when = ' CASE WHEN ';
 | 
			
		||||
			$case_when .= $query->charLength('a.alias', '!=', '0');
 | 
			
		||||
			$case_when .= ' THEN ';
 | 
			
		||||
			$a_id = $query->castAsChar('a.id');
 | 
			
		||||
			$case_when .= $query->concatenate(array($a_id, 'a.alias'), ':');
 | 
			
		||||
			$case_when .= ' ELSE ';
 | 
			
		||||
			$case_when .= $a_id . ' END as slug';
 | 
			
		||||
 | 
			
		||||
			$case_when1 = ' CASE WHEN ';
 | 
			
		||||
			$case_when1 .= $query->charLength('c.alias', '!=', '0');
 | 
			
		||||
			$case_when1 .= ' THEN ';
 | 
			
		||||
			$c_id = $query->castAsChar('c.id');
 | 
			
		||||
			$case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':');
 | 
			
		||||
			$case_when1 .= ' ELSE ';
 | 
			
		||||
			$case_when1 .= $c_id . ' END as catslug';
 | 
			
		||||
 | 
			
		||||
			$query->select('a.title AS title, a.metadesc, a.metakey, a.created AS created')
 | 
			
		||||
				->select($query->concatenate(array('a.introtext', 'a.fulltext')) . ' AS text')
 | 
			
		||||
				->select('c.title AS section, ' . $case_when . ',' . $case_when1 . ', ' . '\'2\' AS browsernav')
 | 
			
		||||
 | 
			
		||||
				->from('#__content AS a')
 | 
			
		||||
				->join('INNER', '#__categories AS c ON c.id=a.catid')
 | 
			
		||||
				->where(
 | 
			
		||||
					'(' . $where . ') AND a.state=1 AND c.published = 1 AND a.access IN (' . $groups . ') '
 | 
			
		||||
						. 'AND c.access IN (' . $groups . ') '
 | 
			
		||||
						. 'AND (a.publish_up = ' . $db->quote($nullDate) . ' OR a.publish_up <= ' . $db->quote($now) . ') '
 | 
			
		||||
						. 'AND (a.publish_down = ' . $db->quote($nullDate) . ' OR a.publish_down >= ' . $db->quote($now) . ')'
 | 
			
		||||
				)
 | 
			
		||||
				->group('a.id, a.title, a.metadesc, a.metakey, a.created, a.introtext, a.fulltext, c.title, a.alias, c.alias, c.id')
 | 
			
		||||
				->order($order);
 | 
			
		||||
 | 
			
		||||
			// Filter by language
 | 
			
		||||
			if ($app->isSite() && JLanguageMultilang::isEnabled())
 | 
			
		||||
			{
 | 
			
		||||
				$query->where('a.language in (' . $db->quote($tag) . ',' . $db->quote('*') . ')')
 | 
			
		||||
					->where('c.language in (' . $db->quote($tag) . ',' . $db->quote('*') . ')');
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$db->setQuery($query, 0, $limit);
 | 
			
		||||
			$list = $db->loadObjectList();
 | 
			
		||||
			$limit -= count($list);
 | 
			
		||||
 | 
			
		||||
			if (isset($list))
 | 
			
		||||
			{
 | 
			
		||||
				foreach ($list as $key => $item)
 | 
			
		||||
				{
 | 
			
		||||
					$list[$key]->href = ContentHelperRoute::getArticleRoute($item->slug, $item->catslug);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			$rows[] = $list;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// search archived content
 | 
			
		||||
		if ($sArchived && $limit > 0)
 | 
			
		||||
		{
 | 
			
		||||
			$query->clear();
 | 
			
		||||
			//sqlsrv changes
 | 
			
		||||
			$case_when = ' CASE WHEN ';
 | 
			
		||||
			$case_when .= $query->charLength('a.alias', '!=', '0');
 | 
			
		||||
			$case_when .= ' THEN ';
 | 
			
		||||
			$a_id = $query->castAsChar('a.id');
 | 
			
		||||
			$case_when .= $query->concatenate(array($a_id, 'a.alias'), ':');
 | 
			
		||||
			$case_when .= ' ELSE ';
 | 
			
		||||
			$case_when .= $a_id . ' END as slug';
 | 
			
		||||
 | 
			
		||||
			$case_when1 = ' CASE WHEN ';
 | 
			
		||||
			$case_when1 .= $query->charLength('c.alias', '!=', '0');
 | 
			
		||||
			$case_when1 .= ' THEN ';
 | 
			
		||||
			$c_id = $query->castAsChar('c.id');
 | 
			
		||||
			$case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':');
 | 
			
		||||
			$case_when1 .= ' ELSE ';
 | 
			
		||||
			$case_when1 .= $c_id . ' END as catslug';
 | 
			
		||||
 | 
			
		||||
			$query->select(
 | 
			
		||||
				'a.title AS title, a.metadesc, a.metakey, a.created AS created, '
 | 
			
		||||
					. $query->concatenate(array("a.introtext", "a.fulltext")) . ' AS text,'
 | 
			
		||||
					. $case_when . ',' . $case_when1 . ', '
 | 
			
		||||
					. 'c.title AS section, \'2\' AS browsernav'
 | 
			
		||||
			);
 | 
			
		||||
			//.'CONCAT_WS("/", c.title) AS section, \'2\' AS browsernav' );
 | 
			
		||||
			$query->from('#__content AS a')
 | 
			
		||||
				->join('INNER', '#__categories AS c ON c.id=a.catid AND c.access IN (' . $groups . ')')
 | 
			
		||||
				->where(
 | 
			
		||||
					'(' . $where . ') AND a.state = 2 AND c.published = 1 AND a.access IN (' . $groups
 | 
			
		||||
						. ') AND c.access IN (' . $groups . ') '
 | 
			
		||||
						. 'AND (a.publish_up = ' . $db->quote($nullDate) . ' OR a.publish_up <= ' . $db->quote($now) . ') '
 | 
			
		||||
						. 'AND (a.publish_down = ' . $db->quote($nullDate) . ' OR a.publish_down >= ' . $db->quote($now) . ')'
 | 
			
		||||
				)
 | 
			
		||||
				->order($order);
 | 
			
		||||
 | 
			
		||||
			// Filter by language
 | 
			
		||||
			if ($app->isSite() && JLanguageMultilang::isEnabled())
 | 
			
		||||
			{
 | 
			
		||||
				$query->where('a.language in (' . $db->quote($tag) . ',' . $db->quote('*') . ')')
 | 
			
		||||
					->where('c.language in (' . $db->quote($tag) . ',' . $db->quote('*') . ')');
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$db->setQuery($query, 0, $limit);
 | 
			
		||||
			$list3 = $db->loadObjectList();
 | 
			
		||||
 | 
			
		||||
			// find an itemid for archived to use if there isn't another one
 | 
			
		||||
			$item = $app->getMenu()->getItems('link', 'index.php?option=com_content&view=archive', true);
 | 
			
		||||
			$itemid = isset($item->id) ? '&Itemid=' . $item->id : '';
 | 
			
		||||
 | 
			
		||||
			if (isset($list3))
 | 
			
		||||
			{
 | 
			
		||||
				foreach ($list3 as $key => $item)
 | 
			
		||||
				{
 | 
			
		||||
					$date = JFactory::getDate($item->created);
 | 
			
		||||
 | 
			
		||||
					$created_month = $date->format("n");
 | 
			
		||||
					$created_year = $date->format("Y");
 | 
			
		||||
 | 
			
		||||
					$list3[$key]->href = JRoute::_('index.php?option=com_content&view=archive&year=' . $created_year . '&month=' . $created_month . $itemid);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$rows[] = $list3;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$results = array();
 | 
			
		||||
		if (count($rows))
 | 
			
		||||
		{
 | 
			
		||||
			foreach ($rows as $row)
 | 
			
		||||
			{
 | 
			
		||||
				$new_row = array();
 | 
			
		||||
				foreach ($row as $article)
 | 
			
		||||
				{
 | 
			
		||||
					if (SearchHelper::checkNoHTML($article, $searchText, array('text', 'title', 'metadesc', 'metakey')))
 | 
			
		||||
					{
 | 
			
		||||
						$new_row[] = $article;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				$results = array_merge($results, (array) $new_row);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $results;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										54
									
								
								plugins/search/content/content.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								plugins/search/content/content.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<extension version="3.1" type="plugin" group="search">
 | 
			
		||||
	<name>plg_search_content</name>
 | 
			
		||||
	<author>Joomla! Project</author>
 | 
			
		||||
	<creationDate>November 2005</creationDate>
 | 
			
		||||
	<copyright>Copyright (C) 2005 - 2013 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>PLG_SEARCH_CONTENT_XML_DESCRIPTION</description>
 | 
			
		||||
	<files>
 | 
			
		||||
		<filename plugin="content">content.php</filename>
 | 
			
		||||
		<filename>index.html</filename>
 | 
			
		||||
	</files>
 | 
			
		||||
	<languages>
 | 
			
		||||
		<language tag="en-GB">en-GB.plg_search_content.ini</language>
 | 
			
		||||
		<language tag="en-GB">en-GB.plg_search_content.sys.ini</language>
 | 
			
		||||
	</languages>
 | 
			
		||||
	<config>
 | 
			
		||||
		<fields name="params">
 | 
			
		||||
 | 
			
		||||
			<fieldset name="basic">
 | 
			
		||||
				<field name="search_limit" type="text"
 | 
			
		||||
					default="50"
 | 
			
		||||
					description="PLG_SEARCH_CONTENT_FIELD_SEARCHLIMIT_DESC"
 | 
			
		||||
					label="PLG_SEARCH_CONTENT_FIELD_SEARCHLIMIT_LABEL"
 | 
			
		||||
					size="5"
 | 
			
		||||
				/>
 | 
			
		||||
 | 
			
		||||
				<field name="search_content" type="radio"
 | 
			
		||||
					class="btn-group"
 | 
			
		||||
					default="0"
 | 
			
		||||
					description="PLG_SEARCH_CONTENT_FIELD_CONTENT_DESC"
 | 
			
		||||
					label="PLG_SEARCH_CONTENT_FIELD_CONTENT_LABEL"
 | 
			
		||||
				>
 | 
			
		||||
					<option value="0">JOFF</option>
 | 
			
		||||
					<option value="1">JON</option>
 | 
			
		||||
				</field>
 | 
			
		||||
 | 
			
		||||
				<field name="search_archived" type="radio"
 | 
			
		||||
					class="btn-group"
 | 
			
		||||
					default="0"
 | 
			
		||||
					description="PLG_SEARCH_CONTENT_FIELD_ARCHIVED_DESC"
 | 
			
		||||
					label="PLG_SEARCH_CONTENT_FIELD_ARCHIVED_LABEL"
 | 
			
		||||
				>
 | 
			
		||||
					<option value="0">JOFF</option>
 | 
			
		||||
					<option value="1">JON</option>
 | 
			
		||||
				</field>
 | 
			
		||||
			</fieldset>
 | 
			
		||||
 | 
			
		||||
		</fields>
 | 
			
		||||
	</config>
 | 
			
		||||
</extension>
 | 
			
		||||
							
								
								
									
										1
									
								
								plugins/search/content/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								plugins/search/content/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
<!DOCTYPE html><title></title>
 | 
			
		||||
		Reference in New Issue
	
	Block a user