mirror of
https://github.com/joomla/joomla-cms.git
synced 2024-05-28 16:01:28 +00:00
032ea5d32d
-----BEGIN PGP SIGNATURE----- iQHIBAABCgAyFiEEc8tLlhrb4aveTfJiRzuTXEnqGwgFAl34mZsUHGxlaXRobmVy QGl0cm9uaWMuYXQACgkQRzuTXEnqGwhOYAv+PgzapMJWw6Hic32RIfVrgQtbl4ac gybmYhBLFeSd4qrc1Ya8+Fsx79U1RR1elkrZGB1Rm5/vGvHqgFI9JzmpbK8wGTWF yU46g9rDM++2M08qQQxg8a2vx9VoN5yvccPi7oKEpU4gzRcEsPr9ih406dtPlSBZ w38jmD8J/DF0TcOuWS0dZjEF8NtbxGFGS6x9Wc4ZyYoPvfsqpjYXKnc70ExifSgc 373B+vCkyhvHaW+aA4nZ50WuZHd3Rasf4VNB8JVz8hXMnnJf2zwthWaJtWiwjLeS u6x59xbsibQqZImlqdooSbIKROY3ZjVgNPCrYk4Iolm6MD8khIm4rvOmGP1Nrrr8 fZrBuN42ynv5tLutuSwSJSPXvX+RGjgPSeLSGM8FXujtCoxNJrbP3qo7EdkIofAD BPwwRDUiorRFwT4JfMqyBHSrM4BUqOlFN+9wi7oVM/405LfmTx3K0zfh2YCPvRXt IybdpfYAld7RQb6KWONf42Q/+mEVE5/wJhRe =KyXf -----END PGP SIGNATURE----- Merge tag '3.9.14' into 4.0-dev Joomla! 3.9.14
251 lines
4.3 KiB
PHP
251 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* Joomla! Content Management System
|
|
*
|
|
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
|
|
namespace Joomla\CMS\Document;
|
|
|
|
\defined('JPATH_PLATFORM') or die;
|
|
|
|
use Joomla\CMS\Document\Feed\FeedImage;
|
|
use Joomla\CMS\Document\Feed\FeedItem;
|
|
use Joomla\CMS\Factory as CmsFactory;
|
|
use Joomla\CMS\Language\Text;
|
|
|
|
/**
|
|
* FeedDocument class, provides an easy interface to parse and display any feed document
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
class FeedDocument extends Document
|
|
{
|
|
/**
|
|
* Syndication URL feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $syndicationURL = '';
|
|
|
|
/**
|
|
* Image feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var FeedImage
|
|
* @since 1.7.0
|
|
*/
|
|
public $image = null;
|
|
|
|
/**
|
|
* Copyright feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $copyright = '';
|
|
|
|
/**
|
|
* Published date feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $pubDate = '';
|
|
|
|
/**
|
|
* Lastbuild date feed element
|
|
*
|
|
* @var \Joomla\CMS\Date\Date
|
|
* @since 1.7.0
|
|
*/
|
|
public $lastBuildDate;
|
|
|
|
/**
|
|
* Editor feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $editor = '';
|
|
|
|
/**
|
|
* Docs feed element
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $docs = '';
|
|
|
|
/**
|
|
* Editor email feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $editorEmail = '';
|
|
|
|
/**
|
|
* Webmaster email feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $webmaster = '';
|
|
|
|
/**
|
|
* Category feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $category = '';
|
|
|
|
/**
|
|
* TTL feed attribute
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $ttl = '';
|
|
|
|
/**
|
|
* Rating feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $rating = '';
|
|
|
|
/**
|
|
* Skiphours feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $skipHours = '';
|
|
|
|
/**
|
|
* Skipdays feed element
|
|
*
|
|
* optional
|
|
*
|
|
* @var string
|
|
* @since 1.7.0
|
|
*/
|
|
public $skipDays = '';
|
|
|
|
/**
|
|
* The feed items collection
|
|
*
|
|
* @var FeedItem[]
|
|
* @since 1.7.0
|
|
*/
|
|
public $items = array();
|
|
|
|
/**
|
|
* Class constructor
|
|
*
|
|
* @param array $options Associative array of options
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
public function __construct($options = array())
|
|
{
|
|
parent::__construct($options);
|
|
|
|
// Set document type
|
|
$this->_type = 'feed';
|
|
|
|
// Gets and sets timezone offset from site configuration
|
|
$this->lastBuildDate = CmsFactory::getDate();
|
|
$this->lastBuildDate->setTimeZone(new \DateTimeZone(CmsFactory::getApplication()->get('offset', 'UTC')));
|
|
}
|
|
|
|
/**
|
|
* Render the document
|
|
*
|
|
* @param boolean $cache If true, cache the output
|
|
* @param array $params Associative array of attributes
|
|
*
|
|
* @return string The rendered data
|
|
*
|
|
* @since 1.7.0
|
|
* @throws \Exception
|
|
* @todo Make this cacheable
|
|
*/
|
|
public function render($cache = false, $params = array())
|
|
{
|
|
// Get the feed type
|
|
$type = CmsFactory::getApplication()->input->get('type', 'rss');
|
|
|
|
// Instantiate feed renderer and set the mime encoding
|
|
$renderer = $this->loadRenderer(($type) ? $type : 'rss');
|
|
|
|
if (!($renderer instanceof DocumentRenderer))
|
|
{
|
|
throw new \Exception(Text::_('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['type'] . "\"?>\n";
|
|
}
|
|
|
|
// Render the feed
|
|
$data .= $renderer->render();
|
|
|
|
parent::render($cache, $params);
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Adds a FeedItem to the feed.
|
|
*
|
|
* @param FeedItem $item The feeditem to add to the feed.
|
|
*
|
|
* @return FeedDocument instance of $this to allow chaining
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
public function addItem(FeedItem $item)
|
|
{
|
|
$item->source = $this->link;
|
|
$this->items[] = $item;
|
|
|
|
return $this;
|
|
}
|
|
}
|