joomla_test/libraries/joomla/document/feed/feed.php

498 lines
7.1 KiB
PHP
Raw Normal View History

2020-01-02 22:20:31 +07:00
<?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;
}