[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * Joomla! Content Management System 5 * 6 * @copyright (C) 2015 Open Source Matters, Inc. <https://www.joomla.org> 7 * @license GNU General Public License version 2 or later; see LICENSE.txt 8 */ 9 10 namespace Joomla\CMS\Document\Renderer\Feed; 11 12 use Joomla\CMS\Document\DocumentRenderer; 13 use Joomla\CMS\Factory; 14 use Joomla\CMS\Language\Text; 15 use Joomla\CMS\Router\Route; 16 use Joomla\CMS\Uri\Uri; 17 use Joomla\CMS\Version; 18 19 // phpcs:disable PSR1.Files.SideEffects 20 \defined('JPATH_PLATFORM') or die; 21 // phpcs:enable PSR1.Files.SideEffects 22 23 /** 24 * AtomRenderer is a feed that implements the atom specification 25 * 26 * Please note that just by using this class you won't automatically 27 * produce valid atom files. For example, you have to specify either an editor 28 * for the feed or an author for every single feed item. 29 * 30 * @link http://www.atomenabled.org/developers/syndication/atom-format-spec.php 31 * @since 3.5 32 * 33 * @property-read \Joomla\CMS\Document\FeedDocument $_doc Reference to the Document object that instantiated the renderer 34 */ 35 class AtomRenderer extends DocumentRenderer 36 { 37 /** 38 * Document mime type 39 * 40 * @var string 41 * @since 3.5 42 */ 43 protected $_mime = 'application/atom+xml'; 44 45 /** 46 * Render the feed. 47 * 48 * @param string $name The name of the element to render 49 * @param array $params Array of values 50 * @param string $content Override the output of the renderer 51 * 52 * @return string The output of the script 53 * 54 * @see DocumentRenderer::render() 55 * @since 3.5 56 */ 57 public function render($name = '', $params = null, $content = null) 58 { 59 $app = Factory::getApplication(); 60 61 // Gets and sets timezone offset from site configuration 62 $tz = new \DateTimeZone($app->get('offset')); 63 $now = Factory::getDate(); 64 $now->setTimezone($tz); 65 66 $data = $this->_doc; 67 68 $url = Uri::getInstance()->toString(array('scheme', 'user', 'pass', 'host', 'port')); 69 $syndicationURL = Route::_('&format=feed&type=atom'); 70 71 $title = $data->getTitle(); 72 73 if ($app->get('sitename_pagetitles', 0) == 1) { 74 $title = Text::sprintf('JPAGETITLE', $app->get('sitename'), $data->getTitle()); 75 } elseif ($app->get('sitename_pagetitles', 0) == 2) { 76 $title = Text::sprintf('JPAGETITLE', $data->getTitle(), $app->get('sitename')); 77 } 78 79 $feed_title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8'); 80 81 $feed = "<feed xmlns=\"http://www.w3.org/2005/Atom\""; 82 83 if ($data->getLanguage() != '') { 84 $feed .= " xml:lang=\"" . $data->getLanguage() . "\""; 85 } 86 87 $feed .= ">\n"; 88 $feed .= " <title type=\"text\">" . $feed_title . "</title>\n"; 89 $feed .= " <subtitle type=\"text\">" . htmlspecialchars($data->getDescription(), ENT_COMPAT, 'UTF-8') . "</subtitle>\n"; 90 91 if (!empty($data->category)) { 92 if (\is_array($data->category)) { 93 foreach ($data->category as $cat) { 94 $feed .= " <category term=\"" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "\" />\n"; 95 } 96 } else { 97 $feed .= " <category term=\"" . htmlspecialchars($data->category, ENT_COMPAT, 'UTF-8') . "\" />\n"; 98 } 99 } 100 101 $feed .= " <link rel=\"alternate\" type=\"text/html\" href=\"" . $url . "\"/>\n"; 102 $feed .= " <id>" . str_replace(' ', '%20', $data->getBase()) . "</id>\n"; 103 $feed .= " <updated>" . htmlspecialchars($now->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</updated>\n"; 104 105 if ($data->editor != '') { 106 $feed .= " <author>\n"; 107 $feed .= " <name>" . $data->editor . "</name>\n"; 108 109 if ($data->editorEmail != '') { 110 $feed .= " <email>" . htmlspecialchars($data->editorEmail, ENT_COMPAT, 'UTF-8') . "</email>\n"; 111 } 112 113 $feed .= " </author>\n"; 114 } 115 116 $versionHtmlEscaped = ''; 117 118 if ($app->get('MetaVersion', 0)) { 119 $minorVersion = Version::MAJOR_VERSION . '.' . Version::MINOR_VERSION; 120 $versionHtmlEscaped = ' version="' . htmlspecialchars($minorVersion, ENT_COMPAT, 'UTF-8') . '"'; 121 } 122 123 $feed .= " <generator uri=\"https://www.joomla.org\"" . $versionHtmlEscaped . ">" . $data->getGenerator() . "</generator>\n"; 124 $feed .= " <link rel=\"self\" type=\"application/atom+xml\" href=\"" . str_replace(' ', '%20', $url . $syndicationURL) . "\"/>\n"; 125 126 for ($i = 0, $count = \count($data->items); $i < $count; $i++) { 127 $itemlink = $data->items[$i]->link; 128 129 if (preg_match('/[\x80-\xFF]/', $itemlink)) { 130 $itemlink = implode('/', array_map('rawurlencode', explode('/', $itemlink))); 131 } 132 133 $feed .= " <entry>\n"; 134 $feed .= " <title>" . htmlspecialchars(strip_tags($data->items[$i]->title), ENT_COMPAT, 'UTF-8') . "</title>\n"; 135 $feed .= " <link rel=\"alternate\" type=\"text/html\" href=\"" . $url . $itemlink . "\"/>\n"; 136 137 if ($data->items[$i]->date == '') { 138 $data->items[$i]->date = $now->toUnix(); 139 } 140 141 $itemDate = Factory::getDate($data->items[$i]->date); 142 $itemDate->setTimezone($tz); 143 $feed .= " <published>" . htmlspecialchars($itemDate->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</published>\n"; 144 $feed .= " <updated>" . htmlspecialchars($itemDate->toISO8601(true), ENT_COMPAT, 'UTF-8') . "</updated>\n"; 145 146 if (empty($data->items[$i]->guid)) { 147 $itemGuid = str_replace(' ', '%20', $url . $itemlink); 148 } else { 149 $itemGuid = htmlspecialchars($data->items[$i]->guid, ENT_COMPAT, 'UTF-8'); 150 } 151 152 $feed .= " <id>" . $itemGuid . "</id>\n"; 153 154 if ($data->items[$i]->author != '') { 155 $feed .= " <author>\n"; 156 $feed .= " <name>" . htmlspecialchars($data->items[$i]->author, ENT_COMPAT, 'UTF-8') . "</name>\n"; 157 158 if (!empty($data->items[$i]->authorEmail)) { 159 $feed .= " <email>" . htmlspecialchars($data->items[$i]->authorEmail, ENT_COMPAT, 'UTF-8') . "</email>\n"; 160 } 161 162 $feed .= " </author>\n"; 163 } 164 165 if (!empty($data->items[$i]->description)) { 166 $feed .= " <summary type=\"html\">" . htmlspecialchars($this->_relToAbs($data->items[$i]->description), ENT_COMPAT, 'UTF-8') . "</summary>\n"; 167 $feed .= " <content type=\"html\">" . htmlspecialchars($this->_relToAbs($data->items[$i]->description), ENT_COMPAT, 'UTF-8') . "</content>\n"; 168 } 169 170 if (!empty($data->items[$i]->category)) { 171 if (\is_array($data->items[$i]->category)) { 172 foreach ($data->items[$i]->category as $cat) { 173 $feed .= " <category term=\"" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "\" />\n"; 174 } 175 } else { 176 $feed .= " <category term=\"" . htmlspecialchars($data->items[$i]->category, ENT_COMPAT, 'UTF-8') . "\" />\n"; 177 } 178 } 179 180 if ($data->items[$i]->enclosure != null) { 181 $feed .= " <link rel=\"enclosure\" href=\"" . $data->items[$i]->enclosure->url . "\" type=\"" 182 . $data->items[$i]->enclosure->type . "\" length=\"" . $data->items[$i]->enclosure->length . "\"/>\n"; 183 } 184 185 $feed .= " </entry>\n"; 186 } 187 188 $feed .= "</feed>\n"; 189 190 return $feed; 191 } 192 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |