* * @package Joomla.Framework * @subpackage Document * @see http://www.rssboard.org/rss-specification * @since 1.5 */ class JDocumentRendererRSS extends JDocumentRenderer { /** * Renderer mime type * * @var string * @access private */ var $_mime = "application/rss+xml"; /** * Render the feed * * @access public * @return string */ function render() { $now =& JFactory::getDate(); $data =& $this->_doc; $uri =& JFactory::getURI(); $url = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $syndicationURL =& JRoute::_('&format=feed&type=atom'); $feed = "\n"; $feed.= " \n"; $feed.= " ".$data->title."\n"; $feed.= " ".$data->description."\n"; $feed.= " ".str_replace(' ','%20',$url.$data->link)."\n"; $feed.= " ".htmlspecialchars($now->toRFC822(), ENT_COMPAT, 'UTF-8')."\n"; $feed.= " ".$data->getGenerator()."\n"; $feed.= ' '; if ($data->image!=null) { $feed.= " \n"; $feed.= " ".$data->image->url."\n"; $feed.= " ".htmlspecialchars($data->image->title, ENT_COMPAT, 'UTF-8')."\n"; $feed.= " ".str_replace(' ','%20',$data->image->link)."\n"; if ($data->image->width != "") { $feed.= " ".$data->image->width."\n"; } if ($data->image->height!="") { $feed.= " ".$data->image->height."\n"; } if ($data->image->description!="") { $feed.= " image->description."]]>\n"; } $feed.= " \n"; } if ($data->language!="") { $feed.= " ".$data->language."\n"; } if ($data->copyright!="") { $feed.= " ".htmlspecialchars($data->copyright,ENT_COMPAT, 'UTF-8')."\n"; } if ($data->editor!="") { $feed.= " ".htmlspecialchars($data->editor, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->webmaster!="") { $feed.= " ".htmlspecialchars($data->webmaster, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->pubDate!="") { $pubDate =& JFactory::getDate($data->pubDate); $feed.= " ".htmlspecialchars($pubDate->toRFC822(),ENT_COMPAT, 'UTF-8')."\n"; } if ($data->category!="") { $feed.= " ".htmlspecialchars($data->category, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->docs!="") { $feed.= " ".htmlspecialchars($data->docs, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->ttl!="") { $feed.= " ".htmlspecialchars($data->ttl, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->rating!="") { $feed.= " ".htmlspecialchars($data->rating, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->skipHours!="") { $feed.= " ".htmlspecialchars($data->skipHours, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->skipDays!="") { $feed.= " ".htmlspecialchars($data->skipDays, ENT_COMPAT, 'UTF-8')."\n"; } for ($i=0; $iitems); $i++) { if ((strpos($data->items[$i]->link, 'http://') === false) and (strpos($data->items[$i]->link, 'https://') === false)) { $data->items[$i]->link = str_replace(' ','%20',$url.$data->items[$i]->link); } $feed.= " \n"; $feed.= " ".htmlspecialchars(strip_tags($data->items[$i]->title), ENT_COMPAT, 'UTF-8')."\n"; $feed.= " ".str_replace(' ','%20',$data->items[$i]->link)."\n"; $feed.= " _relToAbs($data->items[$i]->description)."]]>\n"; if ($data->items[$i]->authorEmail!="") { $feed.= " ".htmlspecialchars($data->items[$i]->authorEmail . ' (' . $data->items[$i]->author . ')', ENT_COMPAT, 'UTF-8')."\n"; } /* // on hold if ($data->items[$i]->source!="") { $data.= " ".htmlspecialchars($data->items[$i]->source, ENT_COMPAT, 'UTF-8')."\n"; } */ if ($data->items[$i]->category!="") { $feed.= " ".htmlspecialchars($data->items[$i]->category, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->items[$i]->comments!="") { $feed.= " ".htmlspecialchars($data->items[$i]->comments, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->items[$i]->date!="") { $itemDate =& JFactory::getDate($data->items[$i]->date); $feed.= " ".htmlspecialchars($itemDate->toRFC822(), ENT_COMPAT, 'UTF-8')."\n"; } if ($data->items[$i]->guid!="") { $feed.= " ".htmlspecialchars($data->items[$i]->guid, ENT_COMPAT, 'UTF-8')."\n"; } if ($data->items[$i]->enclosure != NULL) { $feed.= " items[$i]->enclosure->url; $feed.= "\" length=\""; $feed.= $data->items[$i]->enclosure->length; $feed.= "\" type=\""; $feed.= $data->items[$i]->enclosure->type; $feed.= "\"/>\n"; } $feed.= " \n"; } $feed.= " \n"; $feed.= "\n"; return $feed; } /** * Convert links in a text from relative to absolute * * @access public * @return string */ function _relToAbs($text) { $base = JURI::base(); $text = preg_replace("/(href|src)=\"(?!http|ftp|https)([^\"]*)\"/", "$1=\"$base\$2\"", $text); return $text; } }