Source for file atom.php

Documentation is available at atom.php

  1. <?php
  2. /**
  3.  * @package     Joomla.Platform
  4.  * @subpackage  Document
  5.  *
  6.  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
  7.  * @license     GNU General Public License version 2 or later; see LICENSE
  8.  */
  9.  
  10. defined('JPATH_PLATFORM') or die;
  11.  
  12. /**
  13.  * JDocumentRenderer_Atom is a feed that implements the atom specification
  14.  *
  15.  * Please note that just by using this class you won't automatically
  16.  * produce valid atom files. For example, you have to specify either an editor
  17.  * for the feed or an author for every single feed item.
  18.  *
  19.  * @package     Joomla.Platform
  20.  * @subpackage  Document
  21.  * @see         http://www.atomenabled.org/developers/syndication/atom-format-spec.php
  22.  * @since       11.1
  23.  */
  24. {
  25.     /**
  26.      * Document mime type
  27.      *
  28.      * @var    string 
  29.      * @since  11.1
  30.      */
  31.     protected $_mime = "application/atom+xml";
  32.  
  33.     /**
  34.      * Render the feed.
  35.      *
  36.      * @param   string  $name     The name of the element to render
  37.      * @param   array   $params   Array of values
  38.      * @param   string  $content  Override the output of the renderer
  39.      *
  40.      * @return  string  The output of the script
  41.      *
  42.      * @see JDocumentRenderer::render()
  43.      * @since   11.1
  44.      */
  45.     public function render($name = '', $params = null, $content = null)
  46.     {
  47.         $app = JFactory::getApplication();
  48.  
  49.         // Gets and sets timezone offset from site configuration
  50.         $tz = new DateTimeZone($app->getCfg('offset'));
  51.         $now = JFactory::getDate();
  52.         $now->setTimeZone($tz);
  53.  
  54.         $data = $this->_doc;
  55.  
  56.         $uri = JUri::getInstance();
  57.         $url = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));
  58.         $syndicationURL = JRoute::_('&format=feed&type=atom');
  59.  
  60.         if ($app->getCfg('sitename_pagetitles', 0) == 1)
  61.         {
  62.             $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $data->title);
  63.         }
  64.         elseif ($app->getCfg('sitename_pagetitles', 0) == 2)
  65.         {
  66.             $title = JText::sprintf('JPAGETITLE', $data->title, $app->getCfg('sitename'));
  67.         }
  68.         else
  69.         {
  70.             $title = $data->title;
  71.         }
  72.  
  73.         $feed_title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8');
  74.  
  75.         $feed = "<feed xmlns=\"http://www.w3.org/2005/Atom\" ";
  76.         if ($data->language != "")
  77.         {
  78.             $feed .= " xml:lang=\"" . $data->language . "\"";
  79.         }
  80.         $feed .= ">\n";
  81.         $feed .= "    <title type=\"text\">" . $feed_title . "</title>\n";
  82.         $feed .= "    <subtitle type=\"text\">" . htmlspecialchars($data->description, ENT_COMPAT, 'UTF-8') . "</subtitle>\n";
  83.         if (empty($data->category) === false)
  84.         {
  85.             if (is_array($data->category))
  86.             {
  87.                 foreach ($data->category as $cat)
  88.                 {
  89.                     $feed .= "    <category term=\"" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "\" />\n";
  90.                 }
  91.             }
  92.             else
  93.             {
  94.                 $feed .= "    <category term=\"" . htmlspecialchars($data->category, ENT_COMPAT, 'UTF-8') . "\" />\n";
  95.             }
  96.         }
  97.         $feed .= "    <link rel=\"alternate\" type=\"text/html\" href=\"" . $url . "\"/>\n";
  98.         $feed .= "    <id>" . str_replace(' ', '%20', $data->getBase()) . "</id>\n";
  99.         $feed .= "    <updated>" . htmlspecialchars($now->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</updated>\n";
  100.         if ($data->editor != "")
  101.         {
  102.             $feed .= "    <author>\n";
  103.             $feed .= "        <name>" . $data->editor . "</name>\n";
  104.             if ($data->editorEmail != "")
  105.             {
  106.                 $feed .= "        <email>" . htmlspecialchars($data->editorEmail, ENT_COMPAT, 'UTF-8') . "</email>\n";
  107.             }
  108.             $feed .= "    </author>\n";
  109.         }
  110.         $feed .= "    <generator uri=\"http://joomla.org\" version=\"1.6\">" . $data->getGenerator() . "</generator>\n";
  111.         $feed .= '    <link rel="self" type="application/atom+xml" href="' . str_replace(' ', '%20', $url . $syndicationURL) . "\"/>\n";
  112.  
  113.         for ($i = 0, $count = count($data->items); $i < $count; $i++)
  114.         {
  115.             $feed .= "    <entry>\n";
  116.             $feed .= "        <title>" . htmlspecialchars(strip_tags($data->items[$i]->title), ENT_COMPAT, 'UTF-8') . "</title>\n";
  117.             $feed .= '        <link rel="alternate" type="text/html" href="' . $url . $data->items[$i]->link . "\"/>\n";
  118.  
  119.             if ($data->items[$i]->date == "")
  120.             {
  121.                 $data->items[$i]->date = $now->toUnix();
  122.             }
  123.             $itemDate = JFactory::getDate($data->items[$i]->date);
  124.             $itemDate->setTimeZone($tz);
  125.             $feed .= "        <published>" . htmlspecialchars($itemDate->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</published>\n";
  126.             $feed .= "        <updated>" . htmlspecialchars($itemDate->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</updated>\n";
  127.             if (empty($data->items[$i]->guid) === true)
  128.             {
  129.                 $feed .= "        <id>" . str_replace(' ', '%20', $url . $data->items[$i]->link) . "</id>\n";
  130.             }
  131.             else
  132.             {
  133.                 $feed .= "        <id>" . htmlspecialchars($data->items[$i]->guid, ENT_COMPAT, 'UTF-8') . "</id>\n";
  134.             }
  135.  
  136.             if ($data->items[$i]->author != "")
  137.             {
  138.                 $feed .= "        <author>\n";
  139.                 $feed .= "            <name>" . htmlspecialchars($data->items[$i]->author, ENT_COMPAT, 'UTF-8') . "</name>\n";
  140.                 if ($data->items[$i]->authorEmail != "")
  141.                 {
  142.                     $feed .= "            <email>" . htmlspecialchars($data->items[$i]->authorEmail, ENT_COMPAT, 'UTF-8') . "</email>\n";
  143.                 }
  144.                 $feed .= "        </author>\n";
  145.             }
  146.             if ($data->items[$i]->description != "")
  147.             {
  148.                 $feed .= "        <summary type=\"html\">" . htmlspecialchars($data->items[$i]->description, ENT_COMPAT, 'UTF-8') . "</summary>\n";
  149.                 $feed .= "        <content type=\"html\">" . htmlspecialchars($data->items[$i]->description, ENT_COMPAT, 'UTF-8') . "</content>\n";
  150.             }
  151.             if (empty($data->items[$i]->category) === false)
  152.             {
  153.                 if (is_array($data->items[$i]->category))
  154.                 {
  155.                     foreach ($data->items[$i]->category as $cat)
  156.                     {
  157.                         $feed .= "        <category term=\"" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "\" />\n";
  158.                     }
  159.                 }
  160.                 else
  161.                 {
  162.                     $feed .= "        <category term=\"" . htmlspecialchars($data->items[$i]->category, ENT_COMPAT, 'UTF-8') . "\" />\n";
  163.                 }
  164.             }
  165.             if ($data->items[$i]->enclosure != null)
  166.             {
  167.                 $feed .= "        <link rel=\"enclosure\" href=\"" . $data->items[$i]->enclosure->url . "\" type=\""
  168.                     . $data->items[$i]->enclosure->type . "\"  length=\"" . $data->items[$i]->enclosure->length . "\" />\n";
  169.             }
  170.             $feed .= "    </entry>\n";
  171.         }
  172.         $feed .= "</feed>\n";
  173.         return $feed;
  174.     }
  175. }

Documentation generated on Tue, 19 Nov 2013 14:54:09 +0100 by phpDocumentor 1.4.3