You've already forked joomla_test
							
							
		
			
	
	
		
			304 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			304 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Document | ||
|  |  * | ||
|  |  * @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('JPATH_PLATFORM') or die; | ||
|  | 
 | ||
|  | /** | ||
|  |  * OpenSearch class, provides an easy interface to display an OpenSearch document | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Document | ||
|  |  * @see         http://www.opensearch.org/ | ||
|  |  * @since       11.1 | ||
|  |  */ | ||
|  | class JDocumentOpensearch extends JDocument | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * ShortName element | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	private $_shortName = ""; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Images collection | ||
|  | 	 * | ||
|  | 	 * optional | ||
|  | 	 * | ||
|  | 	 * @var    object | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	private $_images = array(); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * The url collection | ||
|  | 	 * | ||
|  | 	 * @var    array | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	private $_urls = array(); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Class constructor | ||
|  | 	 * | ||
|  | 	 * @param   array  $options  Associative array of options | ||
|  | 	 * | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public function __construct($options = array()) | ||
|  | 	{ | ||
|  | 		parent::__construct($options); | ||
|  | 
 | ||
|  | 		// Set document type
 | ||
|  | 		$this->_type = 'opensearch'; | ||
|  | 
 | ||
|  | 		// Set mime type
 | ||
|  | 		$this->_mime = 'application/opensearchdescription+xml'; | ||
|  | 
 | ||
|  | 		// Add the URL for self updating
 | ||
|  | 		$update = new JOpenSearchUrl; | ||
|  | 		$update->type = 'application/opensearchdescription+xml'; | ||
|  | 		$update->rel = 'self'; | ||
|  | 		$update->template = JRoute::_(JUri::getInstance()); | ||
|  | 		$this->addUrl($update); | ||
|  | 
 | ||
|  | 		// Add the favicon as the default image
 | ||
|  | 		// Try to find a favicon by checking the template and root folder
 | ||
|  | 		$app = JFactory::getApplication(); | ||
|  | 		$dirs = array(JPATH_THEMES . '/' . $app->getTemplate(), JPATH_BASE); | ||
|  | 
 | ||
|  | 		foreach ($dirs as $dir) | ||
|  | 		{ | ||
|  | 			if (file_exists($dir . '/favicon.ico')) | ||
|  | 			{ | ||
|  | 
 | ||
|  | 				$path = str_replace(JPATH_BASE . '/', '', $dir); | ||
|  | 				$path = str_replace('\\', '/', $path); | ||
|  | 
 | ||
|  | 				$favicon = new JOpenSearchImage; | ||
|  | 				$favicon->data = JUri::base() . $path . '/favicon.ico'; | ||
|  | 				$favicon->height = '16'; | ||
|  | 				$favicon->width = '16'; | ||
|  | 				$favicon->type = 'image/vnd.microsoft.icon'; | ||
|  | 
 | ||
|  | 				$this->addImage($favicon); | ||
|  | 
 | ||
|  | 				break; | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Render the document | ||
|  | 	 * | ||
|  | 	 * @param   boolean  $cache   If true, cache the output | ||
|  | 	 * @param   array    $params  Associative array of attributes | ||
|  | 	 * | ||
|  | 	 * @return  The rendered data | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function render($cache = false, $params = array()) | ||
|  | 	{ | ||
|  | 		$xml = new DOMDocument('1.0', 'utf-8'); | ||
|  | 		if (defined('JDEBUG') && JDEBUG) | ||
|  | 		{ | ||
|  | 			$xml->formatOutput = true; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// The OpenSearch Namespace
 | ||
|  | 		$osns = 'http://a9.com/-/spec/opensearch/1.1/'; | ||
|  | 
 | ||
|  | 		// Create the root element
 | ||
|  | 		$elOs = $xml->createElementNS($osns, 'OpenSearchDescription'); | ||
|  | 
 | ||
|  | 		$elShortName = $xml->createElementNS($osns, 'ShortName'); | ||
|  | 		$elShortName->appendChild($xml->createTextNode(htmlspecialchars($this->_shortName))); | ||
|  | 		$elOs->appendChild($elShortName); | ||
|  | 
 | ||
|  | 		$elDescription = $xml->createElementNS($osns, 'Description'); | ||
|  | 		$elDescription->appendChild($xml->createTextNode(htmlspecialchars($this->description))); | ||
|  | 		$elOs->appendChild($elDescription); | ||
|  | 
 | ||
|  | 		// Always set the accepted input encoding to UTF-8
 | ||
|  | 		$elInputEncoding = $xml->createElementNS($osns, 'InputEncoding'); | ||
|  | 		$elInputEncoding->appendChild($xml->createTextNode('UTF-8')); | ||
|  | 		$elOs->appendChild($elInputEncoding); | ||
|  | 
 | ||
|  | 		foreach ($this->_images as $image) | ||
|  | 		{ | ||
|  | 			$elImage = $xml->createElementNS($osns, 'Image'); | ||
|  | 			$elImage->setAttribute('type', $image->type); | ||
|  | 			$elImage->setAttribute('width', $image->width); | ||
|  | 			$elImage->setAttribute('height', $image->height); | ||
|  | 			$elImage->appendChild($xml->createTextNode(htmlspecialchars($image->data))); | ||
|  | 			$elOs->appendChild($elImage); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		foreach ($this->_urls as $url) | ||
|  | 		{ | ||
|  | 			$elUrl = $xml->createElementNS($osns, 'Url'); | ||
|  | 			$elUrl->setAttribute('type', $url->type); | ||
|  | 
 | ||
|  | 			// Results is the default value so we don't need to add it
 | ||
|  | 			if ($url->rel != 'results') | ||
|  | 			{ | ||
|  | 				$elUrl->setAttribute('rel', $url->rel); | ||
|  | 			} | ||
|  | 			$elUrl->setAttribute('template', $url->template); | ||
|  | 			$elOs->appendChild($elUrl); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$xml->appendChild($elOs); | ||
|  | 		parent::render(); | ||
|  | 		return $xml->saveXML(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Sets the short name | ||
|  | 	 * | ||
|  | 	 * @param   string  $name  The name. | ||
|  | 	 * | ||
|  | 	 * @return  JDocumentOpensearch instance of $this to allow chaining | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function setShortName($name) | ||
|  | 	{ | ||
|  | 		$this->_shortName = $name; | ||
|  | 
 | ||
|  | 		return $this; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Adds an URL to the OpenSearch description. | ||
|  | 	 * | ||
|  | 	 * @param   JOpenSearchUrl  $url  The url to add to the description. | ||
|  | 	 * | ||
|  | 	 * @return  JDocumentOpensearch instance of $this to allow chaining | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function addUrl(JOpenSearchUrl $url) | ||
|  | 	{ | ||
|  | 		$this->_urls[] = $url; | ||
|  | 
 | ||
|  | 		return $this; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Adds an image to the OpenSearch description. | ||
|  | 	 * | ||
|  | 	 * @param   JOpenSearchImage  $image  The image to add to the description. | ||
|  | 	 * | ||
|  | 	 * @return  JDocumentOpensearch instance of $this to allow chaining | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function addImage(JOpenSearchImage $image) | ||
|  | 	{ | ||
|  | 		$this->_images[] = $image; | ||
|  | 
 | ||
|  | 		return $this; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * JOpenSearchUrl is an internal class that stores the search URLs for the OpenSearch description | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Document | ||
|  |  * @since       11.1 | ||
|  |  */ | ||
|  | class JOpenSearchUrl | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * Type item element | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $type = 'text/html'; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Rel item element | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $rel = 'results'; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Template item element. Has to contain the {searchTerms} parameter to work. | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $template; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * JOpenSearchImage is an internal class that stores Images for the OpenSearch Description | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Document | ||
|  |  * @since       11.1 | ||
|  |  */ | ||
|  | class JOpenSearchImage | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * The images MIME type | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $type = ""; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * URL of the image or the image as base64 encoded value | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $data = ""; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * The image's width | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $width; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * The image's height | ||
|  | 	 * | ||
|  | 	 * required | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $height; | ||
|  | } |