You've already forked joomla_test
first commit
This commit is contained in:
963
libraries/joomla/document/document.php
Normal file
963
libraries/joomla/document/document.php
Normal file
@ -0,0 +1,963 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
jimport('joomla.environment.response');
|
||||
|
||||
/**
|
||||
* Document class, provides an easy interface to parse and display a document
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocument
|
||||
{
|
||||
/**
|
||||
* Document title
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $title = '';
|
||||
|
||||
/**
|
||||
* Document description
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $description = '';
|
||||
|
||||
/**
|
||||
* Document full URL
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $link = '';
|
||||
|
||||
/**
|
||||
* Document base URL
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $base = '';
|
||||
|
||||
/**
|
||||
* Contains the document language setting
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $language = 'en-gb';
|
||||
|
||||
/**
|
||||
* Contains the document direction setting
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $direction = 'ltr';
|
||||
|
||||
/**
|
||||
* Document generator
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $_generator = 'Joomla! - Open Source Content Management';
|
||||
|
||||
/**
|
||||
* Document modified date
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_mdate = '';
|
||||
|
||||
/**
|
||||
* Tab string
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_tab = "\11";
|
||||
|
||||
/**
|
||||
* Contains the line end string
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_lineEnd = "\12";
|
||||
|
||||
/**
|
||||
* Contains the character encoding string
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_charset = 'utf-8';
|
||||
|
||||
/**
|
||||
* Document mime type
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_mime = '';
|
||||
|
||||
/**
|
||||
* Document namespace
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_namespace = '';
|
||||
|
||||
/**
|
||||
* Document profile
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_profile = '';
|
||||
|
||||
/**
|
||||
* Array of linked scripts
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_scripts = array();
|
||||
|
||||
/**
|
||||
* Array of scripts placed in the header
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_script = array();
|
||||
|
||||
/**
|
||||
* Array of linked style sheets
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_styleSheets = array();
|
||||
|
||||
/**
|
||||
* Array of included style declarations
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_style = array();
|
||||
|
||||
/**
|
||||
* Array of meta tags
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_metaTags = array();
|
||||
|
||||
/**
|
||||
* The rendering engine
|
||||
*
|
||||
* @var object
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_engine = null;
|
||||
|
||||
/**
|
||||
* The document type
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_type = null;
|
||||
|
||||
/**
|
||||
* Array of buffered output
|
||||
*
|
||||
* @var mixed (depends on the renderer)
|
||||
* @since 11.1
|
||||
*/
|
||||
public static $_buffer = null;
|
||||
|
||||
/**
|
||||
* @var array JDocument instances container.
|
||||
* @since 11.3
|
||||
*/
|
||||
protected static $instances = array();
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*
|
||||
* @param array $options Associative array of options
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
if (array_key_exists('lineend', $options))
|
||||
{
|
||||
$this->setLineEnd($options['lineend']);
|
||||
}
|
||||
|
||||
if (array_key_exists('charset', $options))
|
||||
{
|
||||
$this->setCharset($options['charset']);
|
||||
}
|
||||
|
||||
if (array_key_exists('language', $options))
|
||||
{
|
||||
$this->setLanguage($options['language']);
|
||||
}
|
||||
|
||||
if (array_key_exists('direction', $options))
|
||||
{
|
||||
$this->setDirection($options['direction']);
|
||||
}
|
||||
|
||||
if (array_key_exists('tab', $options))
|
||||
{
|
||||
$this->setTab($options['tab']);
|
||||
}
|
||||
|
||||
if (array_key_exists('link', $options))
|
||||
{
|
||||
$this->setLink($options['link']);
|
||||
}
|
||||
|
||||
if (array_key_exists('base', $options))
|
||||
{
|
||||
$this->setBase($options['base']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the global JDocument object, only creating it
|
||||
* if it doesn't already exist.
|
||||
*
|
||||
* @param string $type The document type to instantiate
|
||||
* @param array $attributes Array of attributes
|
||||
*
|
||||
* @return object The document object.
|
||||
*
|
||||
* @since 11.1
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public static function getInstance($type = 'html', $attributes = array())
|
||||
{
|
||||
$signature = serialize(array($type, $attributes));
|
||||
|
||||
if (empty(self::$instances[$signature]))
|
||||
{
|
||||
$type = preg_replace('/[^A-Z0-9_\.-]/i', '', $type);
|
||||
$path = __DIR__ . '/' . $type . '/' . $type . '.php';
|
||||
$ntype = null;
|
||||
|
||||
// Check if the document type exists
|
||||
if (!file_exists($path))
|
||||
{
|
||||
// Default to the raw format
|
||||
$ntype = $type;
|
||||
$type = 'raw';
|
||||
}
|
||||
|
||||
// Determine the path and class
|
||||
$class = 'JDocument' . $type;
|
||||
if (!class_exists($class))
|
||||
{
|
||||
$path = __DIR__ . '/' . $type . '/' . $type . '.php';
|
||||
if (file_exists($path))
|
||||
{
|
||||
require_once $path;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RuntimeException('Invalid JDocument Class', 500);
|
||||
}
|
||||
}
|
||||
|
||||
$instance = new $class($attributes);
|
||||
self::$instances[$signature] = $instance;
|
||||
|
||||
if (!is_null($ntype))
|
||||
{
|
||||
// Set the type to the Document type originally requested
|
||||
$instance->setType($ntype);
|
||||
}
|
||||
}
|
||||
|
||||
return self::$instances[$signature];
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the document type
|
||||
*
|
||||
* @param string $type Type document is to set to
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setType($type)
|
||||
{
|
||||
$this->_type = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document type
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
return $this->_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the contents of the document buffer
|
||||
*
|
||||
* @return The contents of the document buffer
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getBuffer()
|
||||
{
|
||||
return self::$_buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the contents of the document buffer
|
||||
*
|
||||
* @param string $content The content to be set in the buffer.
|
||||
* @param array $options Array of optional elements.
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setBuffer($content, $options = array())
|
||||
{
|
||||
self::$_buffer = $content;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a meta tag.
|
||||
*
|
||||
* @param string $name Value of name or http-equiv tag
|
||||
* @param boolean $httpEquiv META type "http-equiv" defaults to null
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getMetaData($name, $httpEquiv = false)
|
||||
{
|
||||
$name = strtolower($name);
|
||||
if ($name == 'generator')
|
||||
{
|
||||
$result = $this->getGenerator();
|
||||
}
|
||||
elseif ($name == 'description')
|
||||
{
|
||||
$result = $this->getDescription();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($httpEquiv == true)
|
||||
{
|
||||
$result = @$this->_metaTags['http-equiv'][$name];
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = @$this->_metaTags['standard'][$name];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets or alters a meta tag.
|
||||
*
|
||||
* @param string $name Value of name or http-equiv tag
|
||||
* @param string $content Value of the content tag
|
||||
* @param boolean $http_equiv META type "http-equiv" defaults to null
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setMetaData($name, $content, $http_equiv = false)
|
||||
{
|
||||
$name = strtolower($name);
|
||||
|
||||
if ($name == 'generator')
|
||||
{
|
||||
$this->setGenerator($content);
|
||||
}
|
||||
elseif ($name == 'description')
|
||||
{
|
||||
$this->setDescription($content);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($http_equiv == true)
|
||||
{
|
||||
$this->_metaTags['http-equiv'][$name] = $content;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_metaTags['standard'][$name] = $content;
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a linked script to the page
|
||||
*
|
||||
* @param string $url URL to the linked script
|
||||
* @param string $type Type of script. Defaults to 'text/javascript'
|
||||
* @param boolean $defer Adds the defer attribute.
|
||||
* @param boolean $async Adds the async attribute.
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addScript($url, $type = "text/javascript", $defer = false, $async = false)
|
||||
{
|
||||
$this->_scripts[$url]['mime'] = $type;
|
||||
$this->_scripts[$url]['defer'] = $defer;
|
||||
$this->_scripts[$url]['async'] = $async;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a script to the page
|
||||
*
|
||||
* @param string $content Script
|
||||
* @param string $type Scripting mime (defaults to 'text/javascript')
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addScriptDeclaration($content, $type = 'text/javascript')
|
||||
{
|
||||
if (!isset($this->_script[strtolower($type)]))
|
||||
{
|
||||
$this->_script[strtolower($type)] = $content;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_script[strtolower($type)] .= chr(13) . $content;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a linked stylesheet to the page
|
||||
*
|
||||
* @param string $url URL to the linked style sheet
|
||||
* @param string $type Mime encoding type
|
||||
* @param string $media Media type that this stylesheet applies to
|
||||
* @param array $attribs Array of attributes
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addStyleSheet($url, $type = 'text/css', $media = null, $attribs = array())
|
||||
{
|
||||
$this->_styleSheets[$url]['mime'] = $type;
|
||||
$this->_styleSheets[$url]['media'] = $media;
|
||||
$this->_styleSheets[$url]['attribs'] = $attribs;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a stylesheet declaration to the page
|
||||
*
|
||||
* @param string $content Style declarations
|
||||
* @param string $type Type of stylesheet (defaults to 'text/css')
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addStyleDeclaration($content, $type = 'text/css')
|
||||
{
|
||||
if (!isset($this->_style[strtolower($type)]))
|
||||
{
|
||||
$this->_style[strtolower($type)] = $content;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_style[strtolower($type)] .= chr(13) . $content;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document charset
|
||||
*
|
||||
* @param string $type Charset encoding string
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setCharset($type = 'utf-8')
|
||||
{
|
||||
$this->_charset = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document charset encoding.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getCharset()
|
||||
{
|
||||
return $this->_charset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the global document language declaration. Default is English (en-gb).
|
||||
*
|
||||
* @param string $lang The language to be set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setLanguage($lang = "en-gb")
|
||||
{
|
||||
$this->language = strtolower($lang);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document language.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getLanguage()
|
||||
{
|
||||
return $this->language;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the global document direction declaration. Default is left-to-right (ltr).
|
||||
*
|
||||
* @param string $dir The language direction to be set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setDirection($dir = "ltr")
|
||||
{
|
||||
$this->direction = strtolower($dir);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document direction declaration.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getDirection()
|
||||
{
|
||||
return $this->direction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the title of the document
|
||||
*
|
||||
* @param string $title The title to be set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
$this->title = $title;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the title of the document.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the base URI of the document
|
||||
*
|
||||
* @param string $base The base URI to be set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setBase($base)
|
||||
{
|
||||
$this->base = $base;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the base URI of the document.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getBase()
|
||||
{
|
||||
return $this->base;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the description of the document
|
||||
*
|
||||
* @param string $description The description to set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setDescription($description)
|
||||
{
|
||||
$this->description = $description;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the title of the page.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document link
|
||||
*
|
||||
* @param string $url A url
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setLink($url)
|
||||
{
|
||||
$this->link = $url;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document base url
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getLink()
|
||||
{
|
||||
return $this->link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document generator
|
||||
*
|
||||
* @param string $generator The generator to be set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setGenerator($generator)
|
||||
{
|
||||
$this->_generator = $generator;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document generator
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getGenerator()
|
||||
{
|
||||
return $this->_generator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document modified date
|
||||
*
|
||||
* @param string $date The date to be set
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setModifiedDate($date)
|
||||
{
|
||||
$this->_mdate = $date;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document modified date
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getModifiedDate()
|
||||
{
|
||||
return $this->_mdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document MIME encoding that is sent to the browser.
|
||||
*
|
||||
* This usually will be text/html because most browsers cannot yet
|
||||
* accept the proper mime settings for XHTML: application/xhtml+xml
|
||||
* and to a lesser extent application/xml and text/xml. See the W3C note
|
||||
* ({@link http://www.w3.org/TR/xhtml-media-types/
|
||||
* http://www.w3.org/TR/xhtml-media-types/}) for more details.
|
||||
*
|
||||
* @param string $type The document type to be sent
|
||||
* @param boolean $sync Should the type be synced with HTML?
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*
|
||||
* @link http://www.w3.org/TR/xhtml-media-types
|
||||
*/
|
||||
public function setMimeEncoding($type = 'text/html', $sync = true)
|
||||
{
|
||||
$this->_mime = strtolower($type);
|
||||
|
||||
// Syncing with meta-data
|
||||
if ($sync)
|
||||
{
|
||||
$this->setMetaData('content-type', $type . '; charset=' . $this->_charset, true);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the document MIME encoding that is sent to the browser.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getMimeEncoding()
|
||||
{
|
||||
return $this->_mime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the line end style to Windows, Mac, Unix or a custom string.
|
||||
*
|
||||
* @param string $style "win", "mac", "unix" or custom string.
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setLineEnd($style)
|
||||
{
|
||||
switch ($style)
|
||||
{
|
||||
case 'win':
|
||||
$this->_lineEnd = "\15\12";
|
||||
break;
|
||||
case 'unix':
|
||||
$this->_lineEnd = "\12";
|
||||
break;
|
||||
case 'mac':
|
||||
$this->_lineEnd = "\15";
|
||||
break;
|
||||
default:
|
||||
$this->_lineEnd = $style;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the lineEnd
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function _getLineEnd()
|
||||
{
|
||||
return $this->_lineEnd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the string used to indent HTML
|
||||
*
|
||||
* @param string $string String used to indent ("\11", "\t", ' ', etc.).
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setTab($string)
|
||||
{
|
||||
$this->_tab = $string;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string containing the unit for indenting HTML
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function _getTab()
|
||||
{
|
||||
return $this->_tab;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a renderer
|
||||
*
|
||||
* @param string $type The renderer type
|
||||
*
|
||||
* @return JDocumentRenderer Object or null if class does not exist
|
||||
*
|
||||
* @since 11.1
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function loadRenderer($type)
|
||||
{
|
||||
$class = 'JDocumentRenderer' . $type;
|
||||
|
||||
if (!class_exists($class))
|
||||
{
|
||||
$path = __DIR__ . '/' . $this->_type . '/renderer/' . $type . '.php';
|
||||
|
||||
if (file_exists($path))
|
||||
{
|
||||
require_once $path;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RuntimeException('Unable to load renderer class', 500);
|
||||
}
|
||||
}
|
||||
|
||||
if (!class_exists($class))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$instance = new $class($this);
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the document and prepares the buffers
|
||||
*
|
||||
* @param array $params The array of parameters
|
||||
*
|
||||
* @return JDocument instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function parse($params = array())
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs 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())
|
||||
{
|
||||
if ($mdate = $this->getModifiedDate())
|
||||
{
|
||||
JResponse::setHeader('Last-Modified', $mdate /* gmdate('D, d M Y H:i:s', time() + 900) . ' GMT' */);
|
||||
}
|
||||
|
||||
JResponse::setHeader('Content-Type', $this->_mime . ($this->_charset ? '; charset=' . $this->_charset : ''));
|
||||
}
|
||||
}
|
196
libraries/joomla/document/error/error.php
Normal file
196
libraries/joomla/document/error/error.php
Normal file
@ -0,0 +1,196 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* DocumentError class, provides an easy interface to parse and display an error page
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentError extends JDocument
|
||||
{
|
||||
/**
|
||||
* Error Object
|
||||
*
|
||||
* @var object
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_error;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Associative array of attributes
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
parent::__construct($options);
|
||||
|
||||
// Set mime type
|
||||
$this->_mime = 'text/html';
|
||||
|
||||
// Set document type
|
||||
$this->_type = 'error';
|
||||
}
|
||||
|
||||
/**
|
||||
* Set error object
|
||||
*
|
||||
* @param object $error Error object to set
|
||||
*
|
||||
* @return boolean True on success
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setError($error)
|
||||
{
|
||||
if ($error instanceof Exception)
|
||||
{
|
||||
$this->_error = & $error;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the document
|
||||
*
|
||||
* @param boolean $cache If true, cache the output
|
||||
* @param array $params Associative array of attributes
|
||||
*
|
||||
* @return string The rendered data
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($cache = false, $params = array())
|
||||
{
|
||||
// If no error object is set return null
|
||||
if (!isset($this->_error))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the status header
|
||||
JResponse::setHeader('status', $this->_error->getCode() . ' ' . str_replace("\n", ' ', $this->_error->getMessage()));
|
||||
$file = 'error.php';
|
||||
|
||||
// Check template
|
||||
$directory = isset($params['directory']) ? $params['directory'] : 'templates';
|
||||
$template = isset($params['template']) ? JFilterInput::getInstance()->clean($params['template'], 'cmd') : 'system';
|
||||
|
||||
if (!file_exists($directory . '/' . $template . '/' . $file))
|
||||
{
|
||||
$template = 'system';
|
||||
}
|
||||
|
||||
// Set variables
|
||||
$this->baseurl = JUri::base(true);
|
||||
$this->template = $template;
|
||||
$this->debug = isset($params['debug']) ? $params['debug'] : false;
|
||||
$this->error = $this->_error;
|
||||
|
||||
// Load
|
||||
$data = $this->_loadTemplate($directory . '/' . $template, $file);
|
||||
|
||||
parent::render();
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a template file
|
||||
*
|
||||
* @param string $directory The name of the template
|
||||
* @param string $filename The actual filename
|
||||
*
|
||||
* @return string The contents of the template
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function _loadTemplate($directory, $filename)
|
||||
{
|
||||
$contents = '';
|
||||
|
||||
// Check to see if we have a valid template file
|
||||
if (file_exists($directory . '/' . $filename))
|
||||
{
|
||||
// Store the file path
|
||||
$this->_file = $directory . '/' . $filename;
|
||||
|
||||
// Get the file content
|
||||
ob_start();
|
||||
require_once $directory . '/' . $filename;
|
||||
$contents = ob_get_contents();
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
return $contents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the backtrace
|
||||
*
|
||||
* @return string The contents of the backtrace
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function renderBacktrace()
|
||||
{
|
||||
$contents = null;
|
||||
$backtrace = $this->_error->getTrace();
|
||||
if (is_array($backtrace))
|
||||
{
|
||||
ob_start();
|
||||
$j = 1;
|
||||
echo '<table cellpadding="0" cellspacing="0" class="Table">';
|
||||
echo ' <tr>';
|
||||
echo ' <td colspan="3" class="TD"><strong>Call stack</strong></td>';
|
||||
echo ' </tr>';
|
||||
echo ' <tr>';
|
||||
echo ' <td class="TD"><strong>#</strong></td>';
|
||||
echo ' <td class="TD"><strong>Function</strong></td>';
|
||||
echo ' <td class="TD"><strong>Location</strong></td>';
|
||||
echo ' </tr>';
|
||||
for ($i = count($backtrace) - 1; $i >= 0; $i--)
|
||||
{
|
||||
echo ' <tr>';
|
||||
echo ' <td class="TD">' . $j . '</td>';
|
||||
if (isset($backtrace[$i]['class']))
|
||||
{
|
||||
echo ' <td class="TD">' . $backtrace[$i]['class'] . $backtrace[$i]['type'] . $backtrace[$i]['function'] . '()</td>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo ' <td class="TD">' . $backtrace[$i]['function'] . '()</td>';
|
||||
}
|
||||
if (isset($backtrace[$i]['file']))
|
||||
{
|
||||
echo ' <td class="TD">' . $backtrace[$i]['file'] . ':' . $backtrace[$i]['line'] . '</td>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo ' <td class="TD"> </td>';
|
||||
}
|
||||
echo ' </tr>';
|
||||
$j++;
|
||||
}
|
||||
echo '</table>';
|
||||
$contents = ob_get_contents();
|
||||
ob_end_clean();
|
||||
}
|
||||
return $contents;
|
||||
}
|
||||
}
|
1
libraries/joomla/document/error/index.html
Normal file
1
libraries/joomla/document/error/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
497
libraries/joomla/document/feed/feed.php
Normal file
497
libraries/joomla/document/feed/feed.php
Normal file
@ -0,0 +1,497 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* DocumentFeed class, provides an easy interface to parse and display any feed document
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentFeed extends JDocument
|
||||
{
|
||||
/**
|
||||
* Syndication URL feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $syndicationURL = "";
|
||||
|
||||
/**
|
||||
* Image feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var object
|
||||
* @since 11.1
|
||||
*/
|
||||
public $image = null;
|
||||
|
||||
/**
|
||||
* Copyright feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $copyright = "";
|
||||
|
||||
/**
|
||||
* Published date feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $pubDate = "";
|
||||
|
||||
/**
|
||||
* Lastbuild date feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $lastBuildDate = "";
|
||||
|
||||
/**
|
||||
* Editor feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $editor = "";
|
||||
|
||||
/**
|
||||
* Docs feed element
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $docs = "";
|
||||
|
||||
/**
|
||||
* Editor email feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $editorEmail = "";
|
||||
|
||||
/**
|
||||
* Webmaster email feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $webmaster = "";
|
||||
|
||||
/**
|
||||
* Category feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $category = "";
|
||||
|
||||
/**
|
||||
* TTL feed attribute
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $ttl = "";
|
||||
|
||||
/**
|
||||
* Rating feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $rating = "";
|
||||
|
||||
/**
|
||||
* Skiphours feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $skipHours = "";
|
||||
|
||||
/**
|
||||
* Skipdays feed element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $skipDays = "";
|
||||
|
||||
/**
|
||||
* The feed items collection
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $items = 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 = 'feed';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @throws Exception
|
||||
* @todo Make this cacheable
|
||||
*/
|
||||
public function render($cache = false, $params = array())
|
||||
{
|
||||
// Get the feed type
|
||||
$type = JFactory::getApplication()->input->get('type', 'rss');
|
||||
|
||||
// Instantiate feed renderer and set the mime encoding
|
||||
$renderer = $this->loadRenderer(($type) ? $type : 'rss');
|
||||
if (!is_a($renderer, 'JDocumentRenderer'))
|
||||
{
|
||||
throw new Exception(JText::_('JGLOBAL_RESOURCE_NOT_FOUND'), 404);
|
||||
}
|
||||
$this->setMimeEncoding($renderer->getContentType());
|
||||
|
||||
// Output
|
||||
// Generate prolog
|
||||
$data = "<?xml version=\"1.0\" encoding=\"" . $this->_charset . "\"?>\n";
|
||||
$data .= "<!-- generator=\"" . $this->getGenerator() . "\" -->\n";
|
||||
|
||||
// Generate stylesheet links
|
||||
foreach ($this->_styleSheets as $src => $attr)
|
||||
{
|
||||
$data .= "<?xml-stylesheet href=\"$src\" type=\"" . $attr['mime'] . "\"?>\n";
|
||||
}
|
||||
|
||||
// Render the feed
|
||||
$data .= $renderer->render();
|
||||
|
||||
parent::render();
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an JFeedItem to the feed.
|
||||
*
|
||||
* @param JFeedItem $item The feeditem to add to the feed.
|
||||
*
|
||||
* @return JDocumentFeed instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addItem(JFeedItem $item)
|
||||
{
|
||||
$item->source = $this->link;
|
||||
$this->items[] = $item;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* JFeedItem is an internal class that stores feed item information
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JFeedItem
|
||||
{
|
||||
/**
|
||||
* Title item element
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $title;
|
||||
|
||||
/**
|
||||
* Link item element
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $link;
|
||||
|
||||
/**
|
||||
* Description item element
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $description;
|
||||
|
||||
/**
|
||||
* Author item element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $author;
|
||||
|
||||
/**
|
||||
* Author email element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $authorEmail;
|
||||
|
||||
/**
|
||||
* Category element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var array or string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $category;
|
||||
|
||||
/**
|
||||
* Comments element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $comments;
|
||||
|
||||
/**
|
||||
* Enclosure element
|
||||
*
|
||||
* @var object
|
||||
* @since 11.1
|
||||
*/
|
||||
public $enclosure = null;
|
||||
|
||||
/**
|
||||
* Guid element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $guid;
|
||||
|
||||
/**
|
||||
* Published date
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* May be in one of the following formats:
|
||||
*
|
||||
* RFC 822:
|
||||
* "Mon, 20 Jan 03 18:05:41 +0400"
|
||||
* "20 Jan 03 18:05:41 +0000"
|
||||
*
|
||||
* ISO 8601:
|
||||
* "2003-01-20T18:05:41+04:00"
|
||||
*
|
||||
* Unix:
|
||||
* 1043082341
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $date;
|
||||
|
||||
/**
|
||||
* Source element
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $source;
|
||||
|
||||
/**
|
||||
* Set the JFeedEnclosure for this item
|
||||
*
|
||||
* @param JFeedEnclosure $enclosure The JFeedEnclosure to add to the feed.
|
||||
*
|
||||
* @return JFeedItem instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setEnclosure(JFeedEnclosure $enclosure)
|
||||
{
|
||||
$this->enclosure = $enclosure;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* JFeedEnclosure is an internal class that stores feed enclosure information
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JFeedEnclosure
|
||||
{
|
||||
/**
|
||||
* URL enclosure element
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $url = "";
|
||||
|
||||
/**
|
||||
* Length enclosure element
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $length = "";
|
||||
|
||||
/**
|
||||
* Type enclosure element
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $type = "";
|
||||
}
|
||||
|
||||
/**
|
||||
* JFeedImage is an internal class that stores feed image information
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JFeedImage
|
||||
{
|
||||
/**
|
||||
* Title image attribute
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $title = "";
|
||||
|
||||
/**
|
||||
* URL image attribute
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $url = "";
|
||||
|
||||
/**
|
||||
* Link image attribute
|
||||
*
|
||||
* required
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $link = "";
|
||||
|
||||
/**
|
||||
* Width image attribute
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $width;
|
||||
|
||||
/**
|
||||
* Title feed attribute
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $height;
|
||||
|
||||
/**
|
||||
* Title feed attribute
|
||||
*
|
||||
* optional
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $description;
|
||||
}
|
1
libraries/joomla/document/feed/index.html
Normal file
1
libraries/joomla/document/feed/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
176
libraries/joomla/document/feed/renderer/atom.php
Normal file
176
libraries/joomla/document/feed/renderer/atom.php
Normal file
@ -0,0 +1,176 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocumentRenderer_Atom is a feed that implements the atom specification
|
||||
*
|
||||
* Please note that just by using this class you won't automatically
|
||||
* produce valid atom files. For example, you have to specify either an editor
|
||||
* for the feed or an author for every single feed item.
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @see http://www.atomenabled.org/developers/syndication/atom-format-spec.php
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererAtom extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Document mime type
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_mime = "application/atom+xml";
|
||||
|
||||
/**
|
||||
* Render the feed.
|
||||
*
|
||||
* @param string $name The name of the element to render
|
||||
* @param array $params Array of values
|
||||
* @param string $content Override the output of the renderer
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @see JDocumentRenderer::render()
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($name = '', $params = null, $content = null)
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
|
||||
// Gets and sets timezone offset from site configuration
|
||||
$tz = new DateTimeZone($app->getCfg('offset'));
|
||||
$now = JFactory::getDate();
|
||||
$now->setTimeZone($tz);
|
||||
|
||||
$data = $this->_doc;
|
||||
|
||||
$uri = JUri::getInstance();
|
||||
$url = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));
|
||||
$syndicationURL = JRoute::_('&format=feed&type=atom');
|
||||
|
||||
if ($app->getCfg('sitename_pagetitles', 0) == 1)
|
||||
{
|
||||
$title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $data->title);
|
||||
}
|
||||
elseif ($app->getCfg('sitename_pagetitles', 0) == 2)
|
||||
{
|
||||
$title = JText::sprintf('JPAGETITLE', $data->title, $app->getCfg('sitename'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$title = $data->title;
|
||||
}
|
||||
|
||||
$feed_title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8');
|
||||
|
||||
$feed = "<feed xmlns=\"http://www.w3.org/2005/Atom\" ";
|
||||
if ($data->language != "")
|
||||
{
|
||||
$feed .= " xml:lang=\"" . $data->language . "\"";
|
||||
}
|
||||
$feed .= ">\n";
|
||||
$feed .= " <title type=\"text\">" . $feed_title . "</title>\n";
|
||||
$feed .= " <subtitle type=\"text\">" . htmlspecialchars($data->description, ENT_COMPAT, 'UTF-8') . "</subtitle>\n";
|
||||
if (empty($data->category) === false)
|
||||
{
|
||||
if (is_array($data->category))
|
||||
{
|
||||
foreach ($data->category as $cat)
|
||||
{
|
||||
$feed .= " <category term=\"" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "\" />\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$feed .= " <category term=\"" . htmlspecialchars($data->category, ENT_COMPAT, 'UTF-8') . "\" />\n";
|
||||
}
|
||||
}
|
||||
$feed .= " <link rel=\"alternate\" type=\"text/html\" href=\"" . $url . "\"/>\n";
|
||||
$feed .= " <id>" . str_replace(' ', '%20', $data->getBase()) . "</id>\n";
|
||||
$feed .= " <updated>" . htmlspecialchars($now->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</updated>\n";
|
||||
if ($data->editor != "")
|
||||
{
|
||||
$feed .= " <author>\n";
|
||||
$feed .= " <name>" . $data->editor . "</name>\n";
|
||||
if ($data->editorEmail != "")
|
||||
{
|
||||
$feed .= " <email>" . htmlspecialchars($data->editorEmail, ENT_COMPAT, 'UTF-8') . "</email>\n";
|
||||
}
|
||||
$feed .= " </author>\n";
|
||||
}
|
||||
$feed .= " <generator uri=\"http://joomla.org\" version=\"1.6\">" . $data->getGenerator() . "</generator>\n";
|
||||
$feed .= ' <link rel="self" type="application/atom+xml" href="' . str_replace(' ', '%20', $url . $syndicationURL) . "\"/>\n";
|
||||
|
||||
for ($i = 0, $count = count($data->items); $i < $count; $i++)
|
||||
{
|
||||
$feed .= " <entry>\n";
|
||||
$feed .= " <title>" . htmlspecialchars(strip_tags($data->items[$i]->title), ENT_COMPAT, 'UTF-8') . "</title>\n";
|
||||
$feed .= ' <link rel="alternate" type="text/html" href="' . $url . $data->items[$i]->link . "\"/>\n";
|
||||
|
||||
if ($data->items[$i]->date == "")
|
||||
{
|
||||
$data->items[$i]->date = $now->toUnix();
|
||||
}
|
||||
$itemDate = JFactory::getDate($data->items[$i]->date);
|
||||
$itemDate->setTimeZone($tz);
|
||||
$feed .= " <published>" . htmlspecialchars($itemDate->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</published>\n";
|
||||
$feed .= " <updated>" . htmlspecialchars($itemDate->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</updated>\n";
|
||||
if (empty($data->items[$i]->guid) === true)
|
||||
{
|
||||
$feed .= " <id>" . str_replace(' ', '%20', $url . $data->items[$i]->link) . "</id>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$feed .= " <id>" . htmlspecialchars($data->items[$i]->guid, ENT_COMPAT, 'UTF-8') . "</id>\n";
|
||||
}
|
||||
|
||||
if ($data->items[$i]->author != "")
|
||||
{
|
||||
$feed .= " <author>\n";
|
||||
$feed .= " <name>" . htmlspecialchars($data->items[$i]->author, ENT_COMPAT, 'UTF-8') . "</name>\n";
|
||||
if ($data->items[$i]->authorEmail != "")
|
||||
{
|
||||
$feed .= " <email>" . htmlspecialchars($data->items[$i]->authorEmail, ENT_COMPAT, 'UTF-8') . "</email>\n";
|
||||
}
|
||||
$feed .= " </author>\n";
|
||||
}
|
||||
if ($data->items[$i]->description != "")
|
||||
{
|
||||
$feed .= " <summary type=\"html\">" . htmlspecialchars($data->items[$i]->description, ENT_COMPAT, 'UTF-8') . "</summary>\n";
|
||||
$feed .= " <content type=\"html\">" . htmlspecialchars($data->items[$i]->description, ENT_COMPAT, 'UTF-8') . "</content>\n";
|
||||
}
|
||||
if (empty($data->items[$i]->category) === false)
|
||||
{
|
||||
if (is_array($data->items[$i]->category))
|
||||
{
|
||||
foreach ($data->items[$i]->category as $cat)
|
||||
{
|
||||
$feed .= " <category term=\"" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "\" />\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$feed .= " <category term=\"" . htmlspecialchars($data->items[$i]->category, ENT_COMPAT, 'UTF-8') . "\" />\n";
|
||||
}
|
||||
}
|
||||
if ($data->items[$i]->enclosure != null)
|
||||
{
|
||||
$feed .= " <link rel=\"enclosure\" href=\"" . $data->items[$i]->enclosure->url . "\" type=\""
|
||||
. $data->items[$i]->enclosure->type . "\" length=\"" . $data->items[$i]->enclosure->length . "\" />\n";
|
||||
}
|
||||
$feed .= " </entry>\n";
|
||||
}
|
||||
$feed .= "</feed>\n";
|
||||
return $feed;
|
||||
}
|
||||
}
|
1
libraries/joomla/document/feed/renderer/index.html
Normal file
1
libraries/joomla/document/feed/renderer/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
251
libraries/joomla/document/feed/renderer/rss.php
Normal file
251
libraries/joomla/document/feed/renderer/rss.php
Normal file
@ -0,0 +1,251 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocumentRenderer_RSS is a feed that implements RSS 2.0 Specification
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @see http://www.rssboard.org/rss-specification
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererRSS extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Renderer mime type
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_mime = "application/rss+xml";
|
||||
|
||||
/**
|
||||
* Render the feed.
|
||||
*
|
||||
* @param string $name The name of the element to render
|
||||
* @param array $params Array of values
|
||||
* @param string $content Override the output of the renderer
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @see JDocumentRenderer::render()
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($name = '', $params = null, $content = null)
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
|
||||
// Gets and sets timezone offset from site configuration
|
||||
$tz = new DateTimeZone($app->getCfg('offset'));
|
||||
$now = JFactory::getDate();
|
||||
$now->setTimeZone($tz);
|
||||
|
||||
$data = $this->_doc;
|
||||
|
||||
$uri = JUri::getInstance();
|
||||
$url = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));
|
||||
$syndicationURL = JRoute::_('&format=feed&type=rss');
|
||||
|
||||
if ($app->getCfg('sitename_pagetitles', 0) == 1)
|
||||
{
|
||||
$title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $data->title);
|
||||
}
|
||||
elseif ($app->getCfg('sitename_pagetitles', 0) == 2)
|
||||
{
|
||||
$title = JText::sprintf('JPAGETITLE', $data->title, $app->getCfg('sitename'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$title = $data->title;
|
||||
}
|
||||
|
||||
$feed_title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8');
|
||||
|
||||
$feed = "<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n";
|
||||
$feed .= " <channel>\n";
|
||||
$feed .= " <title>" . $feed_title . "</title>\n";
|
||||
$feed .= " <description><![CDATA[" . $data->description . "]]></description>\n";
|
||||
$feed .= " <link>" . str_replace(' ', '%20', $url . $data->link) . "</link>\n";
|
||||
$feed .= " <lastBuildDate>" . htmlspecialchars($now->toRFC822(true), ENT_COMPAT, 'UTF-8') . "</lastBuildDate>\n";
|
||||
$feed .= " <generator>" . $data->getGenerator() . "</generator>\n";
|
||||
$feed .= ' <atom:link rel="self" type="application/rss+xml" href="' . str_replace(' ', '%20', $url . $syndicationURL) . "\"/>\n";
|
||||
|
||||
if ($data->image != null)
|
||||
{
|
||||
$feed .= " <image>\n";
|
||||
$feed .= " <url>" . $data->image->url . "</url>\n";
|
||||
$feed .= " <title>" . htmlspecialchars($data->image->title, ENT_COMPAT, 'UTF-8') . "</title>\n";
|
||||
$feed .= " <link>" . str_replace(' ', '%20', $data->image->link) . "</link>\n";
|
||||
if ($data->image->width != "")
|
||||
{
|
||||
$feed .= " <width>" . $data->image->width . "</width>\n";
|
||||
}
|
||||
if ($data->image->height != "")
|
||||
{
|
||||
$feed .= " <height>" . $data->image->height . "</height>\n";
|
||||
}
|
||||
if ($data->image->description != "")
|
||||
{
|
||||
$feed .= " <description><![CDATA[" . $data->image->description . "]]></description>\n";
|
||||
}
|
||||
$feed .= " </image>\n";
|
||||
}
|
||||
if ($data->language != "")
|
||||
{
|
||||
$feed .= " <language>" . $data->language . "</language>\n";
|
||||
}
|
||||
if ($data->copyright != "")
|
||||
{
|
||||
$feed .= " <copyright>" . htmlspecialchars($data->copyright, ENT_COMPAT, 'UTF-8') . "</copyright>\n";
|
||||
}
|
||||
if ($data->editorEmail != "")
|
||||
{
|
||||
$feed .= " <managingEditor>" . htmlspecialchars($data->editorEmail, ENT_COMPAT, 'UTF-8') . ' ('
|
||||
. htmlspecialchars($data->editor, ENT_COMPAT, 'UTF-8') . ")</managingEditor>\n";
|
||||
}
|
||||
if ($data->webmaster != "")
|
||||
{
|
||||
$feed .= " <webMaster>" . htmlspecialchars($data->webmaster, ENT_COMPAT, 'UTF-8') . "</webMaster>\n";
|
||||
}
|
||||
if ($data->pubDate != "")
|
||||
{
|
||||
$pubDate = JFactory::getDate($data->pubDate);
|
||||
$pubDate->setTimeZone($tz);
|
||||
$feed .= " <pubDate>" . htmlspecialchars($pubDate->toRFC822(true), ENT_COMPAT, 'UTF-8') . "</pubDate>\n";
|
||||
}
|
||||
if (empty($data->category) === false)
|
||||
{
|
||||
if (is_array($data->category))
|
||||
{
|
||||
foreach ($data->category as $cat)
|
||||
{
|
||||
$feed .= " <category>" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "</category>\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$feed .= " <category>" . htmlspecialchars($data->category, ENT_COMPAT, 'UTF-8') . "</category>\n";
|
||||
}
|
||||
}
|
||||
if ($data->docs != "")
|
||||
{
|
||||
$feed .= " <docs>" . htmlspecialchars($data->docs, ENT_COMPAT, 'UTF-8') . "</docs>\n";
|
||||
}
|
||||
if ($data->ttl != "")
|
||||
{
|
||||
$feed .= " <ttl>" . htmlspecialchars($data->ttl, ENT_COMPAT, 'UTF-8') . "</ttl>\n";
|
||||
}
|
||||
if ($data->rating != "")
|
||||
{
|
||||
$feed .= " <rating>" . htmlspecialchars($data->rating, ENT_COMPAT, 'UTF-8') . "</rating>\n";
|
||||
}
|
||||
if ($data->skipHours != "")
|
||||
{
|
||||
$feed .= " <skipHours>" . htmlspecialchars($data->skipHours, ENT_COMPAT, 'UTF-8') . "</skipHours>\n";
|
||||
}
|
||||
if ($data->skipDays != "")
|
||||
{
|
||||
$feed .= " <skipDays>" . htmlspecialchars($data->skipDays, ENT_COMPAT, 'UTF-8') . "</skipDays>\n";
|
||||
}
|
||||
|
||||
for ($i = 0, $count = count($data->items); $i < $count; $i++)
|
||||
{
|
||||
if ((strpos($data->items[$i]->link, 'http://') === false) && (strpos($data->items[$i]->link, 'https://') === false))
|
||||
{
|
||||
$data->items[$i]->link = str_replace(' ', '%20', $url . $data->items[$i]->link);
|
||||
}
|
||||
$feed .= " <item>\n";
|
||||
$feed .= " <title>" . htmlspecialchars(strip_tags($data->items[$i]->title), ENT_COMPAT, 'UTF-8') . "</title>\n";
|
||||
$feed .= " <link>" . str_replace(' ', '%20', $data->items[$i]->link) . "</link>\n";
|
||||
|
||||
if (empty($data->items[$i]->guid) === true)
|
||||
{
|
||||
$feed .= " <guid isPermaLink=\"true\">" . str_replace(' ', '%20', $data->items[$i]->link) . "</guid>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$feed .= " <guid isPermaLink=\"false\">" . htmlspecialchars($data->items[$i]->guid, ENT_COMPAT, 'UTF-8') . "</guid>\n";
|
||||
}
|
||||
|
||||
$feed .= " <description><![CDATA[" . $this->_relToAbs($data->items[$i]->description) . "]]></description>\n";
|
||||
|
||||
if ($data->items[$i]->authorEmail != "")
|
||||
{
|
||||
$feed .= " <author>"
|
||||
. htmlspecialchars($data->items[$i]->authorEmail . ' (' . $data->items[$i]->author . ')', ENT_COMPAT, 'UTF-8') . "</author>\n";
|
||||
}
|
||||
|
||||
/*
|
||||
* @todo: On hold
|
||||
* if ($data->items[$i]->source!="") {
|
||||
* $data.= " <source>".htmlspecialchars($data->items[$i]->source, ENT_COMPAT, 'UTF-8')."</source>\n";
|
||||
* }
|
||||
*/
|
||||
|
||||
if (empty($data->items[$i]->category) === false)
|
||||
{
|
||||
if (is_array($data->items[$i]->category))
|
||||
{
|
||||
foreach ($data->items[$i]->category as $cat)
|
||||
{
|
||||
$feed .= " <category>" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "</category>\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$feed .= " <category>" . htmlspecialchars($data->items[$i]->category, ENT_COMPAT, 'UTF-8') . "</category>\n";
|
||||
}
|
||||
}
|
||||
if ($data->items[$i]->comments != "")
|
||||
{
|
||||
$feed .= " <comments>" . htmlspecialchars($data->items[$i]->comments, ENT_COMPAT, 'UTF-8') . "</comments>\n";
|
||||
}
|
||||
if ($data->items[$i]->date != "")
|
||||
{
|
||||
$itemDate = JFactory::getDate($data->items[$i]->date);
|
||||
$itemDate->setTimeZone($tz);
|
||||
$feed .= " <pubDate>" . htmlspecialchars($itemDate->toRFC822(true), ENT_COMPAT, 'UTF-8') . "</pubDate>\n";
|
||||
}
|
||||
if ($data->items[$i]->enclosure != null)
|
||||
{
|
||||
$feed .= " <enclosure url=\"";
|
||||
$feed .= $data->items[$i]->enclosure->url;
|
||||
$feed .= "\" length=\"";
|
||||
$feed .= $data->items[$i]->enclosure->length;
|
||||
$feed .= "\" type=\"";
|
||||
$feed .= $data->items[$i]->enclosure->type;
|
||||
$feed .= "\"/>\n";
|
||||
}
|
||||
|
||||
$feed .= " </item>\n";
|
||||
}
|
||||
$feed .= " </channel>\n";
|
||||
$feed .= "</rss>\n";
|
||||
return $feed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert links in a text from relative to absolute
|
||||
*
|
||||
* @param string $text The text processed
|
||||
*
|
||||
* @return string Text with converted links
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function _relToAbs($text)
|
||||
{
|
||||
$base = JUri::base();
|
||||
$text = preg_replace("/(href|src)=\"(?!http|ftp|https|mailto|data)([^\"]*)\"/", "$1=\"$base\$2\"", $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
}
|
697
libraries/joomla/document/html/html.php
Normal file
697
libraries/joomla/document/html/html.php
Normal file
@ -0,0 +1,697 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
jimport('joomla.utilities.utility');
|
||||
|
||||
/**
|
||||
* DocumentHTML class, provides an easy interface to parse and display a HTML document
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentHTML extends JDocument
|
||||
{
|
||||
/**
|
||||
* Array of Header <link> tags
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_links = array();
|
||||
|
||||
/**
|
||||
* Array of custom tags
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_custom = array();
|
||||
|
||||
/**
|
||||
* Name of the template
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $template = null;
|
||||
|
||||
/**
|
||||
* Base url
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
public $baseurl = null;
|
||||
|
||||
/**
|
||||
* Array of template parameters
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $params = null;
|
||||
|
||||
/**
|
||||
* File name
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
public $_file = null;
|
||||
|
||||
/**
|
||||
* String holding parsed template
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_template = '';
|
||||
|
||||
/**
|
||||
* Array of parsed template JDoc tags
|
||||
*
|
||||
* @var array
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_template_tags = array();
|
||||
|
||||
/**
|
||||
* Integer with caching setting
|
||||
*
|
||||
* @var integer
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_caching = null;
|
||||
|
||||
/**
|
||||
* Set to true when the document should be output as HTML%
|
||||
*
|
||||
* @var boolean
|
||||
* @since 12.1
|
||||
*/
|
||||
private $_html5 = null;
|
||||
|
||||
/**
|
||||
* 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 = 'html';
|
||||
|
||||
// Set default mime type and document metadata (meta data syncs with mime type by default)
|
||||
$this->setMimeEncoding('text/html');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML document head data
|
||||
*
|
||||
* @return array The document head data in array form
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getHeadData()
|
||||
{
|
||||
$data = array();
|
||||
$data['title'] = $this->title;
|
||||
$data['description'] = $this->description;
|
||||
$data['link'] = $this->link;
|
||||
$data['metaTags'] = $this->_metaTags;
|
||||
$data['links'] = $this->_links;
|
||||
$data['styleSheets'] = $this->_styleSheets;
|
||||
$data['style'] = $this->_style;
|
||||
$data['scripts'] = $this->_scripts;
|
||||
$data['script'] = $this->_script;
|
||||
$data['custom'] = $this->_custom;
|
||||
$data['scriptText'] = JText::script();
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the HTML document head data
|
||||
*
|
||||
* @param array $data The document head data in array form
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setHeadData($data)
|
||||
{
|
||||
if (empty($data) || !is_array($data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$this->title = (isset($data['title']) && !empty($data['title'])) ? $data['title'] : $this->title;
|
||||
$this->description = (isset($data['description']) && !empty($data['description'])) ? $data['description'] : $this->description;
|
||||
$this->link = (isset($data['link']) && !empty($data['link'])) ? $data['link'] : $this->link;
|
||||
$this->_metaTags = (isset($data['metaTags']) && !empty($data['metaTags'])) ? $data['metaTags'] : $this->_metaTags;
|
||||
$this->_links = (isset($data['links']) && !empty($data['links'])) ? $data['links'] : $this->_links;
|
||||
$this->_styleSheets = (isset($data['styleSheets']) && !empty($data['styleSheets'])) ? $data['styleSheets'] : $this->_styleSheets;
|
||||
$this->_style = (isset($data['style']) && !empty($data['style'])) ? $data['style'] : $this->_style;
|
||||
$this->_scripts = (isset($data['scripts']) && !empty($data['scripts'])) ? $data['scripts'] : $this->_scripts;
|
||||
$this->_script = (isset($data['script']) && !empty($data['script'])) ? $data['script'] : $this->_script;
|
||||
$this->_custom = (isset($data['custom']) && !empty($data['custom'])) ? $data['custom'] : $this->_custom;
|
||||
|
||||
if (isset($data['scriptText']) && !empty($data['scriptText']))
|
||||
{
|
||||
foreach ($data['scriptText'] as $key => $string)
|
||||
{
|
||||
JText::script($key, $string);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge the HTML document head data
|
||||
*
|
||||
* @param array $data The document head data in array form
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function mergeHeadData($data)
|
||||
{
|
||||
|
||||
if (empty($data) || !is_array($data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$this->title = (isset($data['title']) && !empty($data['title']) && !stristr($this->title, $data['title']))
|
||||
? $this->title . $data['title']
|
||||
: $this->title;
|
||||
$this->description = (isset($data['description']) && !empty($data['description']) && !stristr($this->description, $data['description']))
|
||||
? $this->description . $data['description']
|
||||
: $this->description;
|
||||
$this->link = (isset($data['link'])) ? $data['link'] : $this->link;
|
||||
|
||||
if (isset($data['metaTags']))
|
||||
{
|
||||
foreach ($data['metaTags'] as $type1 => $data1)
|
||||
{
|
||||
$booldog = $type1 == 'http-equiv' ? true : false;
|
||||
foreach ($data1 as $name2 => $data2)
|
||||
{
|
||||
$this->setMetaData($name2, $data2, $booldog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_links = (isset($data['links']) && !empty($data['links']) && is_array($data['links']))
|
||||
? array_unique(array_merge($this->_links, $data['links']))
|
||||
: $this->_links;
|
||||
$this->_styleSheets = (isset($data['styleSheets']) && !empty($data['styleSheets']) && is_array($data['styleSheets']))
|
||||
? array_merge($this->_styleSheets, $data['styleSheets'])
|
||||
: $this->_styleSheets;
|
||||
|
||||
if (isset($data['style']))
|
||||
{
|
||||
foreach ($data['style'] as $type => $stdata)
|
||||
{
|
||||
if (!isset($this->_style[strtolower($type)]) || !stristr($this->_style[strtolower($type)], $stdata))
|
||||
{
|
||||
$this->addStyleDeclaration($stdata, $type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_scripts = (isset($data['scripts']) && !empty($data['scripts']) && is_array($data['scripts']))
|
||||
? array_merge($this->_scripts, $data['scripts'])
|
||||
: $this->_scripts;
|
||||
|
||||
if (isset($data['script']))
|
||||
{
|
||||
foreach ($data['script'] as $type => $sdata)
|
||||
{
|
||||
if (!isset($this->_script[strtolower($type)]) || !stristr($this->_script[strtolower($type)], $sdata))
|
||||
{
|
||||
$this->addScriptDeclaration($sdata, $type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_custom = (isset($data['custom']) && !empty($data['custom']) && is_array($data['custom']))
|
||||
? array_unique(array_merge($this->_custom, $data['custom']))
|
||||
: $this->_custom;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds <link> tags to the head of the document
|
||||
*
|
||||
* $relType defaults to 'rel' as it is the most common relation type used.
|
||||
* ('rev' refers to reverse relation, 'rel' indicates normal, forward relation.)
|
||||
* Typical tag: <link href="index.php" rel="Start">
|
||||
*
|
||||
* @param string $href The link that is being related.
|
||||
* @param string $relation Relation of link.
|
||||
* @param string $relType Relation type attribute. Either rel or rev (default: 'rel').
|
||||
* @param array $attribs Associative array of remaining attributes.
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addHeadLink($href, $relation, $relType = 'rel', $attribs = array())
|
||||
{
|
||||
$this->_links[$href]['relation'] = $relation;
|
||||
$this->_links[$href]['relType'] = $relType;
|
||||
$this->_links[$href]['attribs'] = $attribs;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a shortcut icon (favicon)
|
||||
*
|
||||
* This adds a link to the icon shown in the favorites list or on
|
||||
* the left of the url in the address bar. Some browsers display
|
||||
* it on the tab, as well.
|
||||
*
|
||||
* @param string $href The link that is being related.
|
||||
* @param string $type File type
|
||||
* @param string $relation Relation of link
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addFavicon($href, $type = 'image/vnd.microsoft.icon', $relation = 'shortcut icon')
|
||||
{
|
||||
$href = str_replace('\\', '/', $href);
|
||||
$this->addHeadLink($href, $relation, 'rel', array('type' => $type));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom HTML string to the head block
|
||||
*
|
||||
* @param string $html The HTML to add to the head
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function addCustomTag($html)
|
||||
{
|
||||
$this->_custom[] = trim($html);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the document is set up to be output as HTML5
|
||||
*
|
||||
* @return Boolean true when HTML5 is used
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function isHtml5()
|
||||
{
|
||||
return $this->_html5;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the document should be output as HTML5
|
||||
*
|
||||
* @param bool $state True when HTML5 should be output
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function setHtml5($state)
|
||||
{
|
||||
if (is_bool($state))
|
||||
{
|
||||
$this->_html5 = $state;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the contents of a document include
|
||||
*
|
||||
* @param string $type The type of renderer
|
||||
* @param string $name The name of the element to render
|
||||
* @param array $attribs Associative array of remaining attributes.
|
||||
*
|
||||
* @return The output of the renderer
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getBuffer($type = null, $name = null, $attribs = array())
|
||||
{
|
||||
// If no type is specified, return the whole buffer
|
||||
if ($type === null)
|
||||
{
|
||||
return parent::$_buffer;
|
||||
}
|
||||
|
||||
$title = (isset($attribs['title'])) ? $attribs['title'] : null;
|
||||
if (isset(parent::$_buffer[$type][$name][$title]))
|
||||
{
|
||||
return parent::$_buffer[$type][$name][$title];
|
||||
}
|
||||
|
||||
$renderer = $this->loadRenderer($type);
|
||||
if ($this->_caching == true && $type == 'modules')
|
||||
{
|
||||
$cache = JFactory::getCache('com_modules', '');
|
||||
$hash = md5(serialize(array($name, $attribs, null, $renderer)));
|
||||
$cbuffer = $cache->get('cbuffer_' . $type);
|
||||
|
||||
if (isset($cbuffer[$hash]))
|
||||
{
|
||||
return JCache::getWorkarounds($cbuffer[$hash], array('mergehead' => 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
$options = array();
|
||||
$options['nopathway'] = 1;
|
||||
$options['nomodules'] = 1;
|
||||
$options['modulemode'] = 1;
|
||||
|
||||
$this->setBuffer($renderer->render($name, $attribs, null), $type, $name);
|
||||
$data = parent::$_buffer[$type][$name][$title];
|
||||
|
||||
$tmpdata = JCache::setWorkarounds($data, $options);
|
||||
|
||||
$cbuffer[$hash] = $tmpdata;
|
||||
|
||||
$cache->store($cbuffer, 'cbuffer_' . $type);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->setBuffer($renderer->render($name, $attribs, null), $type, $name, $title);
|
||||
}
|
||||
|
||||
return parent::$_buffer[$type][$name][$title];
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the contents a document includes
|
||||
*
|
||||
* @param string $content The content to be set in the buffer.
|
||||
* @param array $options Array of optional elements.
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setBuffer($content, $options = array())
|
||||
{
|
||||
// The following code is just for backward compatibility.
|
||||
if (func_num_args() > 1 && !is_array($options))
|
||||
{
|
||||
$args = func_get_args();
|
||||
$options = array();
|
||||
$options['type'] = $args[1];
|
||||
$options['name'] = (isset($args[2])) ? $args[2] : null;
|
||||
$options['title'] = (isset($args[3])) ? $args[3] : null;
|
||||
}
|
||||
|
||||
parent::$_buffer[$options['type']][$options['name']][$options['title']] = $content;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the template and populates the buffer
|
||||
*
|
||||
* @param array $params Parameters for fetching the template
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function parse($params = array())
|
||||
{
|
||||
return $this->_fetchTemplate($params)->_parseTemplate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the template to the browser.
|
||||
*
|
||||
* @param boolean $caching If true, cache the output
|
||||
* @param array $params Associative array of attributes
|
||||
*
|
||||
* @return The rendered data
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($caching = false, $params = array())
|
||||
{
|
||||
$this->_caching = $caching;
|
||||
|
||||
if (!empty($this->_template))
|
||||
{
|
||||
$data = $this->_renderTemplate();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->parse($params);
|
||||
$data = $this->_renderTemplate();
|
||||
}
|
||||
|
||||
parent::render();
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count the modules based on the given condition
|
||||
*
|
||||
* @param string $condition The condition to use
|
||||
*
|
||||
* @return integer Number of modules found
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function countModules($condition)
|
||||
{
|
||||
$operators = '(\+|\-|\*|\/|==|\!=|\<\>|\<|\>|\<=|\>=|and|or|xor)';
|
||||
$words = preg_split('# ' . $operators . ' #', $condition, null, PREG_SPLIT_DELIM_CAPTURE);
|
||||
for ($i = 0, $n = count($words); $i < $n; $i += 2)
|
||||
{
|
||||
// Odd parts (modules)
|
||||
$name = strtolower($words[$i]);
|
||||
$words[$i] = ((isset(parent::$_buffer['modules'][$name])) && (parent::$_buffer['modules'][$name] === false))
|
||||
? 0
|
||||
: count(JModuleHelper::getModules($name));
|
||||
}
|
||||
|
||||
$str = 'return ' . implode(' ', $words) . ';';
|
||||
|
||||
return eval($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Count the number of child menu items
|
||||
*
|
||||
* @return integer Number of child menu items
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function countMenuChildren()
|
||||
{
|
||||
static $children;
|
||||
|
||||
if (!isset($children))
|
||||
{
|
||||
$db = JFactory::getDbo();
|
||||
$app = JFactory::getApplication();
|
||||
$menu = $app->getMenu();
|
||||
$active = $menu->getActive();
|
||||
if ($active)
|
||||
{
|
||||
$query = $db->getQuery(true)
|
||||
->select('COUNT(*)')
|
||||
->from('#__menu')
|
||||
->where('parent_id = ' . $active->id)
|
||||
->where('published = 1');
|
||||
$db->setQuery($query);
|
||||
$children = $db->loadResult();
|
||||
}
|
||||
else
|
||||
{
|
||||
$children = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return $children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a template file
|
||||
*
|
||||
* @param string $directory The name of the template
|
||||
* @param string $filename The actual filename
|
||||
*
|
||||
* @return string The contents of the template
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
protected function _loadTemplate($directory, $filename)
|
||||
{
|
||||
// @todo remove code: $component = JApplicationHelper::getComponentName();
|
||||
|
||||
$contents = '';
|
||||
|
||||
// Check to see if we have a valid template file
|
||||
if (file_exists($directory . '/' . $filename))
|
||||
{
|
||||
// Store the file path
|
||||
$this->_file = $directory . '/' . $filename;
|
||||
|
||||
// Get the file content
|
||||
ob_start();
|
||||
require $directory . '/' . $filename;
|
||||
$contents = ob_get_contents();
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
// Try to find a favicon by checking the template and root folder
|
||||
$path = $directory . '/';
|
||||
$dirs = array($path, JPATH_BASE . '/');
|
||||
foreach ($dirs as $dir)
|
||||
{
|
||||
$icon = $dir . 'favicon.ico';
|
||||
if (file_exists($icon))
|
||||
{
|
||||
$path = str_replace(JPATH_BASE . '/', '', $dir);
|
||||
$path = str_replace('\\', '/', $path);
|
||||
$this->addFavicon(JUri::base(true) . '/' . $path . 'favicon.ico');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $contents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the template, and initialise the params
|
||||
*
|
||||
* @param array $params Parameters to determine the template
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
protected function _fetchTemplate($params = array())
|
||||
{
|
||||
// Check
|
||||
$directory = isset($params['directory']) ? $params['directory'] : 'templates';
|
||||
$filter = JFilterInput::getInstance();
|
||||
$template = $filter->clean($params['template'], 'cmd');
|
||||
$file = $filter->clean($params['file'], 'cmd');
|
||||
|
||||
if (!file_exists($directory . '/' . $template . '/' . $file))
|
||||
{
|
||||
$template = 'system';
|
||||
}
|
||||
|
||||
// Load the language file for the template
|
||||
$lang = JFactory::getLanguage();
|
||||
|
||||
// 1.5 or core then 1.6
|
||||
$lang->load('tpl_' . $template, JPATH_BASE, null, false, false)
|
||||
|| $lang->load('tpl_' . $template, $directory . '/' . $template, null, false, false)
|
||||
|| $lang->load('tpl_' . $template, JPATH_BASE, $lang->getDefault(), false, false)
|
||||
|| $lang->load('tpl_' . $template, $directory . '/' . $template, $lang->getDefault(), false, false);
|
||||
|
||||
// Assign the variables
|
||||
$this->template = $template;
|
||||
$this->baseurl = JUri::base(true);
|
||||
$this->params = isset($params['params']) ? $params['params'] : new JRegistry;
|
||||
|
||||
// Load
|
||||
$this->_template = $this->_loadTemplate($directory . '/' . $template, $file);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a document template
|
||||
*
|
||||
* @return JDocumentHTML instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
protected function _parseTemplate()
|
||||
{
|
||||
$matches = array();
|
||||
|
||||
if (preg_match_all('#<jdoc:include\ type="([^"]+)" (.*)\/>#iU', $this->_template, $matches))
|
||||
{
|
||||
$template_tags_first = array();
|
||||
$template_tags_last = array();
|
||||
|
||||
// Step through the jdocs in reverse order.
|
||||
for ($i = count($matches[0]) - 1; $i >= 0; $i--)
|
||||
{
|
||||
$type = $matches[1][$i];
|
||||
$attribs = empty($matches[2][$i]) ? array() : JUtility::parseAttributes($matches[2][$i]);
|
||||
$name = isset($attribs['name']) ? $attribs['name'] : null;
|
||||
|
||||
// Separate buffers to be executed first and last
|
||||
if ($type == 'module' || $type == 'modules')
|
||||
{
|
||||
$template_tags_first[$matches[0][$i]] = array('type' => $type, 'name' => $name, 'attribs' => $attribs);
|
||||
}
|
||||
else
|
||||
{
|
||||
$template_tags_last[$matches[0][$i]] = array('type' => $type, 'name' => $name, 'attribs' => $attribs);
|
||||
}
|
||||
}
|
||||
// Reverse the last array so the jdocs are in forward order.
|
||||
$template_tags_last = array_reverse($template_tags_last);
|
||||
|
||||
$this->_template_tags = $template_tags_first + $template_tags_last;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render pre-parsed template
|
||||
*
|
||||
* @return string rendered template
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
protected function _renderTemplate()
|
||||
{
|
||||
$replace = array();
|
||||
$with = array();
|
||||
|
||||
foreach ($this->_template_tags as $jdoc => $args)
|
||||
{
|
||||
$replace[] = $jdoc;
|
||||
$with[] = $this->getBuffer($args['type'], $args['name'], $args['attribs']);
|
||||
}
|
||||
|
||||
return str_replace($replace, $with, $this->_template);
|
||||
}
|
||||
}
|
1
libraries/joomla/document/html/index.html
Normal file
1
libraries/joomla/document/html/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
36
libraries/joomla/document/html/renderer/component.php
Normal file
36
libraries/joomla/document/html/renderer/component.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* Component renderer
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererComponent extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Renders a component script and returns the results as a string
|
||||
*
|
||||
* @param string $component The name of the component to render
|
||||
* @param array $params Associative array of values
|
||||
* @param string $content Content script
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($component = null, $params = array(), $content = null)
|
||||
{
|
||||
return $content;
|
||||
}
|
||||
}
|
228
libraries/joomla/document/html/renderer/head.php
Normal file
228
libraries/joomla/document/html/renderer/head.php
Normal file
@ -0,0 +1,228 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocument head renderer
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererHead extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Renders the document head and returns the results as a string
|
||||
*
|
||||
* @param string $head (unused)
|
||||
* @param array $params Associative array of values
|
||||
* @param string $content The script
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @since 11.1
|
||||
*
|
||||
* @note Unused arguments are retained to preserve backward compatibility.
|
||||
*/
|
||||
public function render($head, $params = array(), $content = null)
|
||||
{
|
||||
ob_start();
|
||||
echo $this->fetchHead($this->_doc);
|
||||
$buffer = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the head HTML and return the results as a string
|
||||
*
|
||||
* @param JDocument $document The document for which the head will be created
|
||||
*
|
||||
* @return string The head hTML
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function fetchHead($document)
|
||||
{
|
||||
// Convert the tagids to titles
|
||||
if (isset($document->_metaTags['standard']['tags']))
|
||||
{
|
||||
$tagsHelper = new JHelperTags;
|
||||
$document->_metaTags['standard']['tags'] = implode(', ', $tagsHelper->getTagNames($document->_metaTags['standard']['tags']));
|
||||
}
|
||||
|
||||
// Trigger the onBeforeCompileHead event
|
||||
$app = JFactory::getApplication();
|
||||
$app->triggerEvent('onBeforeCompileHead');
|
||||
|
||||
// Get line endings
|
||||
$lnEnd = $document->_getLineEnd();
|
||||
$tab = $document->_getTab();
|
||||
$tagEnd = ' />';
|
||||
$buffer = '';
|
||||
|
||||
// Generate charset when using HTML5 (should happen first)
|
||||
if ($document->isHtml5())
|
||||
{
|
||||
$buffer .= $tab . '<meta charset="' . $document->getCharset() . '" />' . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate base tag (need to happen early)
|
||||
$base = $document->getBase();
|
||||
if (!empty($base))
|
||||
{
|
||||
$buffer .= $tab . '<base href="' . $document->getBase() . '" />' . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate META tags (needs to happen as early as possible in the head)
|
||||
foreach ($document->_metaTags as $type => $tag)
|
||||
{
|
||||
foreach ($tag as $name => $content)
|
||||
{
|
||||
if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type'))
|
||||
{
|
||||
$buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
|
||||
}
|
||||
elseif ($type == 'standard' && !empty($content))
|
||||
{
|
||||
$buffer .= $tab . '<meta name="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Don't add empty descriptions
|
||||
$documentDescription = $document->getDescription();
|
||||
if ($documentDescription)
|
||||
{
|
||||
$buffer .= $tab . '<meta name="description" content="' . htmlspecialchars($documentDescription) . '" />' . $lnEnd;
|
||||
}
|
||||
|
||||
// Don't add empty generators
|
||||
$generator = $document->getGenerator();
|
||||
if ($generator)
|
||||
{
|
||||
$buffer .= $tab . '<meta name="generator" content="' . htmlspecialchars($generator) . '" />' . $lnEnd;
|
||||
}
|
||||
|
||||
$buffer .= $tab . '<title>' . htmlspecialchars($document->getTitle(), ENT_COMPAT, 'UTF-8') . '</title>' . $lnEnd;
|
||||
|
||||
// Generate link declarations
|
||||
foreach ($document->_links as $link => $linkAtrr)
|
||||
{
|
||||
$buffer .= $tab . '<link href="' . $link . '" ' . $linkAtrr['relType'] . '="' . $linkAtrr['relation'] . '"';
|
||||
if ($temp = JArrayHelper::toString($linkAtrr['attribs']))
|
||||
{
|
||||
$buffer .= ' ' . $temp;
|
||||
}
|
||||
$buffer .= ' />' . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate stylesheet links
|
||||
foreach ($document->_styleSheets as $strSrc => $strAttr)
|
||||
{
|
||||
$buffer .= $tab . '<link rel="stylesheet" href="' . $strSrc . '" type="' . $strAttr['mime'] . '"';
|
||||
if (!is_null($strAttr['media']))
|
||||
{
|
||||
$buffer .= ' media="' . $strAttr['media'] . '" ';
|
||||
}
|
||||
if ($temp = JArrayHelper::toString($strAttr['attribs']))
|
||||
{
|
||||
$buffer .= ' ' . $temp;
|
||||
}
|
||||
$buffer .= $tagEnd . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate stylesheet declarations
|
||||
foreach ($document->_style as $type => $content)
|
||||
{
|
||||
$buffer .= $tab . '<style type="' . $type . '">' . $lnEnd;
|
||||
|
||||
// This is for full XHTML support.
|
||||
if ($document->_mime != 'text/html')
|
||||
{
|
||||
$buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
|
||||
}
|
||||
|
||||
$buffer .= $content . $lnEnd;
|
||||
|
||||
// See above note
|
||||
if ($document->_mime != 'text/html')
|
||||
{
|
||||
$buffer .= $tab . $tab . ']]>' . $lnEnd;
|
||||
}
|
||||
$buffer .= $tab . '</style>' . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate script file links
|
||||
foreach ($document->_scripts as $strSrc => $strAttr)
|
||||
{
|
||||
$buffer .= $tab . '<script src="' . $strSrc . '"';
|
||||
if (!is_null($strAttr['mime']))
|
||||
{
|
||||
$buffer .= ' type="' . $strAttr['mime'] . '"';
|
||||
}
|
||||
if ($strAttr['defer'])
|
||||
{
|
||||
$buffer .= ' defer="defer"';
|
||||
}
|
||||
if ($strAttr['async'])
|
||||
{
|
||||
$buffer .= ' async="async"';
|
||||
}
|
||||
$buffer .= '></script>' . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate script declarations
|
||||
foreach ($document->_script as $type => $content)
|
||||
{
|
||||
$buffer .= $tab . '<script type="' . $type . '">' . $lnEnd;
|
||||
|
||||
// This is for full XHTML support.
|
||||
if ($document->_mime != 'text/html')
|
||||
{
|
||||
$buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
|
||||
}
|
||||
|
||||
$buffer .= $content . $lnEnd;
|
||||
|
||||
// See above note
|
||||
if ($document->_mime != 'text/html')
|
||||
{
|
||||
$buffer .= $tab . $tab . ']]>' . $lnEnd;
|
||||
}
|
||||
$buffer .= $tab . '</script>' . $lnEnd;
|
||||
}
|
||||
|
||||
// Generate script language declarations.
|
||||
if (count(JText::script()))
|
||||
{
|
||||
$buffer .= $tab . '<script type="text/javascript">' . $lnEnd;
|
||||
$buffer .= $tab . $tab . '(function() {' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . 'var strings = ' . json_encode(JText::script()) . ';' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . 'if (typeof Joomla == \'undefined\') {' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . $tab . 'Joomla = {};' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . $tab . 'Joomla.JText = strings;' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . '}' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . 'else {' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . $tab . 'Joomla.JText.load(strings);' . $lnEnd;
|
||||
$buffer .= $tab . $tab . $tab . '}' . $lnEnd;
|
||||
$buffer .= $tab . $tab . '})();' . $lnEnd;
|
||||
$buffer .= $tab . '</script>' . $lnEnd;
|
||||
}
|
||||
|
||||
foreach ($document->_custom as $custom)
|
||||
{
|
||||
$buffer .= $tab . $custom . $lnEnd;
|
||||
}
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
}
|
1
libraries/joomla/document/html/renderer/index.html
Normal file
1
libraries/joomla/document/html/renderer/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
129
libraries/joomla/document/html/renderer/message.php
Normal file
129
libraries/joomla/document/html/renderer/message.php
Normal file
@ -0,0 +1,129 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocument system message renderer
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererMessage extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Renders the error stack and returns the results as a string
|
||||
*
|
||||
* @param string $name Not used.
|
||||
* @param array $params Associative array of values
|
||||
* @param string $content Not used.
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($name, $params = array (), $content = null)
|
||||
{
|
||||
$msgList = $this->getData();
|
||||
$buffer = null;
|
||||
$app = JFactory::getApplication();
|
||||
$chromePath = JPATH_THEMES . '/' . $app->getTemplate() . '/html/message.php';
|
||||
$itemOverride = false;
|
||||
|
||||
if (file_exists($chromePath))
|
||||
{
|
||||
include_once $chromePath;
|
||||
if (function_exists('renderMessage'))
|
||||
{
|
||||
$itemOverride = true;
|
||||
}
|
||||
}
|
||||
|
||||
$buffer = ($itemOverride) ? renderMessage($msgList) : $this->renderDefaultMessage($msgList);
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get and prepare system message data for output
|
||||
*
|
||||
* @return array An array contains system message
|
||||
*
|
||||
* @since 12.2
|
||||
*/
|
||||
private function getData()
|
||||
{
|
||||
// Initialise variables.
|
||||
$lists = array();
|
||||
|
||||
// Get the message queue
|
||||
$messages = JFactory::getApplication()->getMessageQueue();
|
||||
|
||||
// Build the sorted message list
|
||||
if (is_array($messages) && !empty($messages))
|
||||
{
|
||||
foreach ($messages as $msg)
|
||||
{
|
||||
if (isset($msg['type']) && isset($msg['message']))
|
||||
{
|
||||
$lists[$msg['type']][] = $msg['message'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $lists;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the system message if no message template file found
|
||||
*
|
||||
* @param array $msgList An array contains system message
|
||||
*
|
||||
* @return string System message markup
|
||||
*
|
||||
* @since 12.2
|
||||
*/
|
||||
private function renderDefaultMessage($msgList)
|
||||
{
|
||||
// Build the return string
|
||||
$buffer = '';
|
||||
$buffer .= "\n<div id=\"system-message-container\">";
|
||||
|
||||
// If messages exist render them
|
||||
if (is_array($msgList))
|
||||
{
|
||||
$buffer .= "\n<div id=\"system-message\">";
|
||||
foreach ($msgList as $type => $msgs)
|
||||
{
|
||||
$buffer .= "\n<div class=\"alert alert-" . $type . "\">";
|
||||
|
||||
// This requires JS so we should add it trough JS. Progressive enhancement and stuff.
|
||||
$buffer .= "<a class=\"close\" data-dismiss=\"alert\">×</a>";
|
||||
|
||||
if (count($msgs))
|
||||
{
|
||||
$buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type) . "</h4>";
|
||||
$buffer .= "\n<div>";
|
||||
foreach ($msgs as $msg)
|
||||
{
|
||||
$buffer .= "\n\t\t<p>" . $msg . "</p>";
|
||||
}
|
||||
$buffer .= "\n</div>";
|
||||
}
|
||||
$buffer .= "\n</div>";
|
||||
}
|
||||
$buffer .= "\n</div>";
|
||||
}
|
||||
|
||||
$buffer .= "\n</div>";
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
}
|
110
libraries/joomla/document/html/renderer/module.php
Normal file
110
libraries/joomla/document/html/renderer/module.php
Normal file
@ -0,0 +1,110 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocument Module renderer
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererModule extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Renders a module script and returns the results as a string
|
||||
*
|
||||
* @param string $module The name of the module to render
|
||||
* @param array $attribs Associative array of values
|
||||
* @param string $content If present, module information from the buffer will be used
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($module, $attribs = array(), $content = null)
|
||||
{
|
||||
if (!is_object($module))
|
||||
{
|
||||
$title = isset($attribs['title']) ? $attribs['title'] : null;
|
||||
|
||||
$module = JModuleHelper::getModule($module, $title);
|
||||
|
||||
if (!is_object($module))
|
||||
{
|
||||
if (is_null($content))
|
||||
{
|
||||
return '';
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* If module isn't found in the database but data has been pushed in the buffer
|
||||
* we want to render it
|
||||
*/
|
||||
$tmp = $module;
|
||||
$module = new stdClass;
|
||||
$module->params = null;
|
||||
$module->module = $tmp;
|
||||
$module->id = 0;
|
||||
$module->user = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the user and configuration object
|
||||
// $user = JFactory::getUser();
|
||||
$conf = JFactory::getConfig();
|
||||
|
||||
// Set the module content
|
||||
if (!is_null($content))
|
||||
{
|
||||
$module->content = $content;
|
||||
}
|
||||
|
||||
// Get module parameters
|
||||
$params = new JRegistry;
|
||||
$params->loadString($module->params);
|
||||
|
||||
// Use parameters from template
|
||||
if (isset($attribs['params']))
|
||||
{
|
||||
$template_params = new JRegistry;
|
||||
$template_params->loadString(html_entity_decode($attribs['params'], ENT_COMPAT, 'UTF-8'));
|
||||
$params->merge($template_params);
|
||||
$module = clone $module;
|
||||
$module->params = (string) $params;
|
||||
}
|
||||
|
||||
// Default for compatibility purposes. Set cachemode parameter or use JModuleHelper::moduleCache from within the
|
||||
// module instead
|
||||
$cachemode = $params->get('cachemode', 'oldstatic');
|
||||
|
||||
if ($params->get('cache', 0) == 1 && $conf->get('caching') >= 1 && $cachemode != 'id' && $cachemode != 'safeuri')
|
||||
{
|
||||
|
||||
// Default to itemid creating method and workarounds on
|
||||
$cacheparams = new stdClass;
|
||||
$cacheparams->cachemode = $cachemode;
|
||||
$cacheparams->class = 'JModuleHelper';
|
||||
$cacheparams->method = 'renderModule';
|
||||
$cacheparams->methodparams = array($module, $attribs);
|
||||
|
||||
$contents = JModuleHelper::ModuleCache($module, $params, $cacheparams);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$contents = JModuleHelper::renderModule($module, $attribs);
|
||||
}
|
||||
|
||||
return $contents;
|
||||
}
|
||||
}
|
43
libraries/joomla/document/html/renderer/modules.php
Normal file
43
libraries/joomla/document/html/renderer/modules.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocument Modules renderer
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRendererModules extends JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Renders multiple modules script and returns the results as a string
|
||||
*
|
||||
* @param string $position The position of the modules to render
|
||||
* @param array $params Associative array of values
|
||||
* @param string $content Module content
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($position, $params = array(), $content = null)
|
||||
{
|
||||
$renderer = $this->_doc->loadRenderer('module');
|
||||
$buffer = '';
|
||||
|
||||
foreach (JModuleHelper::getModules($position) as $mod)
|
||||
{
|
||||
$buffer .= $renderer->render($mod, $params, $content);
|
||||
}
|
||||
return $buffer;
|
||||
}
|
||||
}
|
74
libraries/joomla/document/image/image.php
Normal file
74
libraries/joomla/document/image/image.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* DocumentImage class, provides an easy interface to output image data
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 12.1
|
||||
*/
|
||||
class JDocumentImage extends JDocument
|
||||
{
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Associative array of options
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
parent::__construct($options);
|
||||
|
||||
// Set mime type
|
||||
$this->_mime = 'image/png';
|
||||
|
||||
// Set document type
|
||||
$this->_type = 'image';
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the document.
|
||||
*
|
||||
* @param boolean $cache If true, cache the output
|
||||
* @param array $params Associative array of attributes
|
||||
*
|
||||
* @return The rendered data
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function render($cache = false, $params = array())
|
||||
{
|
||||
// Get the image type
|
||||
$type = JFactory::getApplication()->input->get('type', 'png');
|
||||
|
||||
switch ($type)
|
||||
{
|
||||
case 'jpg':
|
||||
case 'jpeg':
|
||||
$this->_mime = 'image/jpeg';
|
||||
break;
|
||||
case 'gif':
|
||||
$this->_mime = 'image/gif';
|
||||
break;
|
||||
case 'png':
|
||||
default:
|
||||
$this->_mime = 'image/png';
|
||||
break;
|
||||
}
|
||||
|
||||
$this->_charset = null;
|
||||
|
||||
parent::render();
|
||||
return $this->getBuffer();
|
||||
}
|
||||
}
|
1
libraries/joomla/document/image/index.html
Normal file
1
libraries/joomla/document/image/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
1
libraries/joomla/document/index.html
Normal file
1
libraries/joomla/document/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
1
libraries/joomla/document/json/index.html
Normal file
1
libraries/joomla/document/json/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
95
libraries/joomla/document/json/json.php
Normal file
95
libraries/joomla/document/json/json.php
Normal file
@ -0,0 +1,95 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* JDocumentJSON class, provides an easy interface to parse and display JSON output
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @see http://www.json.org/
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentJSON extends JDocument
|
||||
{
|
||||
/**
|
||||
* Document name
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_name = 'joomla';
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Associative array of options
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
parent::__construct($options);
|
||||
|
||||
// Set mime type
|
||||
$this->_mime = 'application/json';
|
||||
|
||||
// Set document type
|
||||
$this->_type = 'json';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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())
|
||||
{
|
||||
JResponse::allowCache(false);
|
||||
JResponse::setHeader('Content-disposition', 'attachment; filename="' . $this->getName() . '.json"', true);
|
||||
|
||||
parent::render();
|
||||
|
||||
return $this->getBuffer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document name
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document name
|
||||
*
|
||||
* @param string $name Document name
|
||||
*
|
||||
* @return JDocumentJSON instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setName($name = 'joomla')
|
||||
{
|
||||
$this->_name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
1
libraries/joomla/document/opensearch/index.html
Normal file
1
libraries/joomla/document/opensearch/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
303
libraries/joomla/document/opensearch/opensearch.php
Normal file
303
libraries/joomla/document/opensearch/opensearch.php
Normal file
@ -0,0 +1,303 @@
|
||||
<?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;
|
||||
}
|
1
libraries/joomla/document/raw/index.html
Normal file
1
libraries/joomla/document/raw/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
54
libraries/joomla/document/raw/raw.php
Normal file
54
libraries/joomla/document/raw/raw.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* DocumentRAW class, provides an easy interface to parse and display raw output
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRaw extends JDocument
|
||||
{
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Associative array of options
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
parent::__construct($options);
|
||||
|
||||
// Set mime type
|
||||
$this->_mime = 'text/html';
|
||||
|
||||
// Set document type
|
||||
$this->_type = 'raw';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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())
|
||||
{
|
||||
parent::render();
|
||||
return $this->getBuffer();
|
||||
}
|
||||
}
|
75
libraries/joomla/document/renderer.php
Normal file
75
libraries/joomla/document/renderer.php
Normal file
@ -0,0 +1,75 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* Abstract class for a renderer
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentRenderer
|
||||
{
|
||||
/**
|
||||
* Reference to the JDocument object that instantiated the renderer
|
||||
*
|
||||
* @var JDocument
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_doc = null;
|
||||
|
||||
/**
|
||||
* Renderer mime type
|
||||
*
|
||||
* @var string
|
||||
* @since 11.1
|
||||
*/
|
||||
protected $_mime = "text/html";
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param JDocument $doc A reference to the JDocument object that instantiated the renderer
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct(JDocument $doc)
|
||||
{
|
||||
$this->_doc = $doc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a script and returns the results as a string
|
||||
*
|
||||
* @param string $name The name of the element to render
|
||||
* @param array $params Array of values
|
||||
* @param string $content Override the output of the renderer
|
||||
*
|
||||
* @return string The output of the script
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function render($name, $params = null, $content = null)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the content type of the renderer
|
||||
*
|
||||
* @return string The contentType
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getContentType()
|
||||
{
|
||||
return $this->_mime;
|
||||
}
|
||||
}
|
1
libraries/joomla/document/xml/index.html
Normal file
1
libraries/joomla/document/xml/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
92
libraries/joomla/document/xml/xml.php
Normal file
92
libraries/joomla/document/xml/xml.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* DocumentXML class, provides an easy interface to parse and display XML output
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Document
|
||||
* @since 11.1
|
||||
*/
|
||||
class JDocumentXml extends JDocument
|
||||
{
|
||||
/**
|
||||
* Document name
|
||||
*
|
||||
* @var string
|
||||
* @since 12.1
|
||||
*/
|
||||
protected $name = 'joomla';
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Associative array of options
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
parent::__construct($options);
|
||||
|
||||
// Set mime type
|
||||
$this->_mime = 'application/xml';
|
||||
|
||||
// Set document type
|
||||
$this->_type = 'xml';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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())
|
||||
{
|
||||
parent::render();
|
||||
JResponse::setHeader('Content-disposition', 'inline; filename="' . $this->getName() . '.xml"', true);
|
||||
|
||||
return $this->getBuffer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document name
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the document name
|
||||
*
|
||||
* @param string $name Document name
|
||||
*
|
||||
* @return JDocumentXml instance of $this to allow chaining
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function setName($name = 'joomla')
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user