PageRenderTime 47ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/libraries/joomla/document/feed/renderer/atom.php

https://github.com/joebushi/joomla
PHP | 109 lines | 67 code | 10 blank | 32 comment | 9 complexity | b337866500b9f5a728ff43dab1804f12 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. <?php
  2. /**
  3. * @version $Id$
  4. * @package Joomla.Framework
  5. * @subpackage Document
  6. * @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.
  7. * @license GNU General Public License version 2 or later; see LICENSE.txt
  8. */
  9. // No direct access
  10. defined('JPATH_BASE') or die;
  11. /**
  12. * JDocumentRenderer_Atom is a feed that implements the atom specification
  13. *
  14. * Please note that just by using this class you won't automatically
  15. * produce valid atom files. For example, you have to specify either an editor
  16. * for the feed or an author for every single feed item.
  17. *
  18. * @package Joomla.Framework
  19. * @subpackage Document
  20. * @see http://www.atomenabled.org/developers/syndication/atom-format-spec.php
  21. * @since 1.5
  22. */
  23. class JDocumentRendererAtom extends JDocumentRenderer
  24. {
  25. /**
  26. * Document mime type
  27. *
  28. * @var string
  29. * @access private
  30. */
  31. var $_mime = "application/atom+xml";
  32. /**
  33. * Render the feed
  34. *
  35. * @access public
  36. * @return string
  37. */
  38. function render()
  39. {
  40. $now = &JFactory::getDate();
  41. $data = &$this->_doc;
  42. $uri = &JFactory::getURI();
  43. $url = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));
  44. $syndicationURL = &JRoute::_('&format=feed&type=atom');
  45. $feed = "<feed xmlns=\"http://www.w3.org/2005/Atom\" ";
  46. if ($data->language!="") {
  47. $feed.= " xml:lang=\"".$data->language."\"";
  48. }
  49. $feed.= ">\n";
  50. $feed.= " <title type=\"text\">".htmlspecialchars($data->title, ENT_COMPAT, 'UTF-8')."</title>\n";
  51. $feed.= " <subtitle type=\"text\">".htmlspecialchars($data->description, ENT_COMPAT, 'UTF-8')."</subtitle>\n";
  52. $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".$url."\"/>\n";
  53. $feed.= " <id>".str_replace(' ','%20',$data->getBase())."</id>\n";
  54. $feed.= " <updated>".htmlspecialchars($now->toISO8601(), ENT_COMPAT, 'UTF-8')."</updated>\n";
  55. if ($data->editor!="") {
  56. $feed.= " <author>\n";
  57. $feed.= " <name>".$data->editor."</name>\n";
  58. if ($data->editorEmail!="") {
  59. $feed.= " <email>".htmlspecialchars($data->editorEmail, ENT_COMPAT, 'UTF-8')."</email>\n";
  60. }
  61. $feed.= " </author>\n";
  62. }
  63. $feed.= " <generator uri=\"http://joomla.org\" version=\"1.5\">".$data->getGenerator()."</generator>\n";
  64. $feed.= '<link rel="self" type="application/atom+xml" href="'.str_replace(' ','%20',$url.$syndicationURL). "\" />\n";
  65. for ($i=0;$i<count($data->items);$i++)
  66. {
  67. $feed.= " <entry>\n";
  68. $feed.= " <title>".htmlspecialchars(strip_tags($data->items[$i]->title), ENT_COMPAT, 'UTF-8')."</title>\n";
  69. $feed.= ' <link rel="alternate" type="text/html" href="'.$url.$data->items[$i]->link."\"/>\n";
  70. if ($data->items[$i]->date=="") {
  71. $data->items[$i]->date = $now->toUnix();
  72. }
  73. $itemDate = &JFactory::getDate($data->items[$i]->date);
  74. $feed.= " <published>".htmlspecialchars($itemDate->toISO8601(), ENT_COMPAT, 'UTF-8')."</published>\n";
  75. $feed.= " <updated>".htmlspecialchars($itemDate->toISO8601(),ENT_COMPAT, 'UTF-8')."</updated>\n";
  76. $feed.= " <id>".str_replace(' ', '%20', $url.$data->items[$i]->link)."</id>\n";
  77. if ($data->items[$i]->author!="")
  78. {
  79. $feed.= " <author>\n";
  80. $feed.= " <name>".htmlspecialchars($data->items[$i]->author, ENT_COMPAT, 'UTF-8')."</name>\n";
  81. if ($data->items[$i]->authorEmail!="") {
  82. $feed.= " <email>".htmlspecialchars($data->items[$i]->authorEmail, ENT_COMPAT, 'UTF-8')."</email>\n";
  83. }
  84. $feed.= " </author>\n";
  85. }
  86. if ($data->items[$i]->description!="") {
  87. $feed.= " <summary type=\"html\">".htmlspecialchars($data->items[$i]->description, ENT_COMPAT, 'UTF-8')."</summary>\n";
  88. $feed.= " <content type=\"html\">".htmlspecialchars($data->items[$i]->description, ENT_COMPAT, 'UTF-8')."</content>\n";
  89. }
  90. if ($data->items[$i]->enclosure != NULL) {
  91. $feed.=" <link rel=\"enclosure\" href=\"". $data->items[$i]->enclosure->url ."\" type=\"". $data->items[$i]->enclosure->type."\" length=\"". $data->items[$i]->enclosure->length . "\" />\n";
  92. }
  93. $feed.= " </entry>\n";
  94. }
  95. $feed.= "</feed>\n";
  96. return $feed;
  97. }
  98. }