498 lines
7.1 KiB
PHP
498 lines
7.1 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @package Joomla.Platform
|
||
|
* @subpackage Document
|
||
|
*
|
||
|
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||
|
* @license GNU General Public License version 2 or later; see LICENSE
|
||
|
*/
|
||
|
|
||
|
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;
|
||
|
}
|