1572dd708SAndreas Gohr<?php 2572dd708SAndreas Gohr 3572dd708SAndreas Gohr/** 4572dd708SAndreas Gohr * RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3. 5572dd708SAndreas Gohr * 6572dd708SAndreas Gohr * @see http://my.netscape.com/publish/formats/rss-spec-0.91.html 7572dd708SAndreas Gohr * @since 1.3 8572dd708SAndreas Gohr * @author Kai Blankenhorn <kaib@bitfolge.de> 9572dd708SAndreas Gohr */ 10572dd708SAndreas Gohrclass RSSCreator091 extends FeedCreator 11572dd708SAndreas Gohr{ 12572dd708SAndreas Gohr 13572dd708SAndreas Gohr /** @var string Stores this RSS feed's version number. */ 14572dd708SAndreas Gohr protected $RSSVersion; 15572dd708SAndreas Gohr 16572dd708SAndreas Gohr /** 17572dd708SAndreas Gohr * RSSCreator091 constructor. 18572dd708SAndreas Gohr */ 19572dd708SAndreas Gohr function __construct() 20572dd708SAndreas Gohr { 21572dd708SAndreas Gohr $this->_setRSSVersion("0.91"); 22572dd708SAndreas Gohr $this->contentType = "application/rss+xml"; 23572dd708SAndreas Gohr } 24572dd708SAndreas Gohr 25572dd708SAndreas Gohr /** 26572dd708SAndreas Gohr * Sets this RSS feed's version number. 27572dd708SAndreas Gohr * 28572dd708SAndreas Gohr * @param string $version 29572dd708SAndreas Gohr */ 30572dd708SAndreas Gohr protected function _setRSSVersion($version) 31572dd708SAndreas Gohr { 32572dd708SAndreas Gohr $this->RSSVersion = $version; 33572dd708SAndreas Gohr } 34572dd708SAndreas Gohr 35572dd708SAndreas Gohr /** @inheritdoc */ 36572dd708SAndreas Gohr public function createFeed() 37572dd708SAndreas Gohr { 38572dd708SAndreas Gohr $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n"; 39572dd708SAndreas Gohr $feed .= $this->_createGeneratorComment(); 40572dd708SAndreas Gohr $feed .= $this->_createStylesheetReferences(); 41572dd708SAndreas Gohr $feed .= "<rss version=\"".$this->RSSVersion."\""; 42572dd708SAndreas Gohr 43572dd708SAndreas Gohr if (count($this->items) > 0 44572dd708SAndreas Gohr && !empty($this->items[0]->lat) 45572dd708SAndreas Gohr ) { 46572dd708SAndreas Gohr $feed .= " xmlns:georss=\"http://www.georss.org/georss/\"\n"; 47572dd708SAndreas Gohr } 48572dd708SAndreas Gohr if (count($this->items) > 0 49572dd708SAndreas Gohr && isset($this->items[0]->additionalElements['xcal:dtstart']) 50572dd708SAndreas Gohr ) { 51572dd708SAndreas Gohr $feed .= " xmlns:xcal=\"urn:ietf:params:xml:ns:xcal\"\n"; 52572dd708SAndreas Gohr } 53572dd708SAndreas Gohr $feed .= ">\n"; 54572dd708SAndreas Gohr if ($this->format == 'BASE') { 55572dd708SAndreas Gohr $feed .= " <channel xmlns:g=\"http://base.google.com/ns/1.0\">\n"; 56572dd708SAndreas Gohr } else { 57572dd708SAndreas Gohr $feed .= " <channel>\n"; 58572dd708SAndreas Gohr } 59*64d8abdbSAndreas Gohr $feed .= " <title>".FeedCreator::iTrunc(htmlspecialchars((string) $this->title), 100)."</title>\n"; 60572dd708SAndreas Gohr $this->descriptionTruncSize = 500; 61572dd708SAndreas Gohr $feed .= " <description>".$this->getDescription()."</description>\n"; 62572dd708SAndreas Gohr $feed .= " <link>".$this->link."</link>\n"; 63572dd708SAndreas Gohr $now = new FeedDate(); 64572dd708SAndreas Gohr $feed .= " <lastBuildDate>".htmlspecialchars( 65572dd708SAndreas Gohr $this->lastBuildDate ?: $now->rfc822() 66572dd708SAndreas Gohr )."</lastBuildDate>\n"; 67572dd708SAndreas Gohr $feed .= " <generator>".FEEDCREATOR_VERSION."</generator>\n"; 68572dd708SAndreas Gohr 69572dd708SAndreas Gohr if ($this->image != null) { 70572dd708SAndreas Gohr $feed .= " <image>\n"; 71572dd708SAndreas Gohr $feed .= " <url>".$this->image->url."</url>\n"; 72572dd708SAndreas Gohr $feed .= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title), 100)."</title>\n"; 73572dd708SAndreas Gohr $feed .= " <link>".$this->image->link."</link>\n"; 74572dd708SAndreas Gohr if ($this->image->width != "") { 75572dd708SAndreas Gohr $feed .= " <width>".$this->image->width."</width>\n"; 76572dd708SAndreas Gohr } 77572dd708SAndreas Gohr if ($this->image->height != "") { 78572dd708SAndreas Gohr $feed .= " <height>".$this->image->height."</height>\n"; 79572dd708SAndreas Gohr } 80572dd708SAndreas Gohr if ($this->image->description != "") { 81572dd708SAndreas Gohr $feed .= " <description>".htmlspecialchars($this->image->description)."</description>\n"; 82572dd708SAndreas Gohr } 83572dd708SAndreas Gohr $feed .= " </image>\n"; 84572dd708SAndreas Gohr } 85572dd708SAndreas Gohr if ($this->language != "") { 86572dd708SAndreas Gohr $feed .= " <language>".$this->language."</language>\n"; 87572dd708SAndreas Gohr } 88572dd708SAndreas Gohr if ($this->copyright != "") { 89572dd708SAndreas Gohr $feed .= " <copyright>".FeedCreator::iTrunc( 90572dd708SAndreas Gohr htmlspecialchars($this->copyright), 91572dd708SAndreas Gohr 100 92572dd708SAndreas Gohr )."</copyright>\n"; 93572dd708SAndreas Gohr } 94572dd708SAndreas Gohr if ($this->editor != "") { 95572dd708SAndreas Gohr $feed .= " <managingEditor>".FeedCreator::iTrunc( 96572dd708SAndreas Gohr htmlspecialchars($this->editor), 97572dd708SAndreas Gohr 100 98572dd708SAndreas Gohr )."</managingEditor>\n"; 99572dd708SAndreas Gohr } 100572dd708SAndreas Gohr if ($this->webmaster != "") { 101572dd708SAndreas Gohr $feed .= " <webMaster>".FeedCreator::iTrunc( 102572dd708SAndreas Gohr htmlspecialchars($this->webmaster), 103572dd708SAndreas Gohr 100 104572dd708SAndreas Gohr )."</webMaster>\n"; 105572dd708SAndreas Gohr } 106572dd708SAndreas Gohr if ($this->pubDate != "") { 107572dd708SAndreas Gohr $pubDate = new FeedDate($this->pubDate); 108572dd708SAndreas Gohr $feed .= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n"; 109572dd708SAndreas Gohr } 110572dd708SAndreas Gohr if ($this->category != "") { 111572dd708SAndreas Gohr $feed .= " <category>".htmlspecialchars($this->category)."</category>\n"; 112572dd708SAndreas Gohr } 113572dd708SAndreas Gohr if ($this->docs != "") { 114572dd708SAndreas Gohr $feed .= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs), 500)."</docs>\n"; 115572dd708SAndreas Gohr } 116572dd708SAndreas Gohr if ($this->ttl != "") { 117572dd708SAndreas Gohr $feed .= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n"; 118572dd708SAndreas Gohr } 119572dd708SAndreas Gohr if ($this->rating != "") { 120572dd708SAndreas Gohr $feed .= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating), 500)."</rating>\n"; 121572dd708SAndreas Gohr } 122572dd708SAndreas Gohr if ($this->skipHours != "") { 123572dd708SAndreas Gohr $feed .= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n"; 124572dd708SAndreas Gohr } 125572dd708SAndreas Gohr if ($this->skipDays != "") { 126572dd708SAndreas Gohr $feed .= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n"; 127572dd708SAndreas Gohr } 128572dd708SAndreas Gohr $feed .= $this->_createAdditionalElements($this->additionalElements, " "); 129572dd708SAndreas Gohr 130572dd708SAndreas Gohr for ($i = 0; $i < count($this->items); $i++) { 131572dd708SAndreas Gohr $feed .= " <item>\n"; 132572dd708SAndreas Gohr $feed .= " <title>".FeedCreator::iTrunc( 133*64d8abdbSAndreas Gohr htmlspecialchars(strip_tags((string) $this->items[$i]->title)), 134572dd708SAndreas Gohr 100 135572dd708SAndreas Gohr )."</title>\n"; 136*64d8abdbSAndreas Gohr $feed .= " <link>".htmlspecialchars((string) $this->items[$i]->link)."</link>\n"; 137572dd708SAndreas Gohr $feed .= " <description>".$this->items[$i]->getDescription()."</description>\n"; 138572dd708SAndreas Gohr 139572dd708SAndreas Gohr $creator = $this->getAuthor($this->items[$i]->author, $this->items[$i]->authorEmail); 140572dd708SAndreas Gohr if ($creator) { 141572dd708SAndreas Gohr $feed .= " <author>".htmlspecialchars($creator)."</author>\n"; 142572dd708SAndreas Gohr } 143572dd708SAndreas Gohr 144572dd708SAndreas Gohr /* 145572dd708SAndreas Gohr // on hold 146572dd708SAndreas Gohr if ($this->items[$i]->source!="") { 147572dd708SAndreas Gohr $feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n"; 148572dd708SAndreas Gohr } 149572dd708SAndreas Gohr */ 150572dd708SAndreas Gohr if ($this->items[$i]->lat != "") { 151572dd708SAndreas Gohr $feed .= " <georss:point>".$this->items[$i]->lat." ".$this->items[$i]->long."</georss:point>\n"; 152572dd708SAndreas Gohr } 153572dd708SAndreas Gohr if (is_array($this->items[$i]->category)) { 154572dd708SAndreas Gohr foreach ($this->items[$i]->category as $cat) { 155572dd708SAndreas Gohr $feed .= " <category>".htmlspecialchars($cat)."</category>\n"; 156572dd708SAndreas Gohr } 157572dd708SAndreas Gohr } else { 158572dd708SAndreas Gohr if ($this->items[$i]->category != "") { 159572dd708SAndreas Gohr $feed .= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n"; 160572dd708SAndreas Gohr } 161572dd708SAndreas Gohr } 162572dd708SAndreas Gohr if ($this->items[$i]->comments != "") { 163572dd708SAndreas Gohr $feed .= " <comments>".htmlspecialchars($this->items[$i]->comments)."</comments>\n"; 164572dd708SAndreas Gohr } 165572dd708SAndreas Gohr if ($this->items[$i]->date != "") { 166572dd708SAndreas Gohr $itemDate = new FeedDate($this->items[$i]->date); 167572dd708SAndreas Gohr $feed .= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n"; 168572dd708SAndreas Gohr } 169572dd708SAndreas Gohr if ($this->items[$i]->guid != "") { 170572dd708SAndreas Gohr $feed .= " <guid>".htmlspecialchars($this->items[$i]->guid)."</guid>\n"; 171572dd708SAndreas Gohr } 172572dd708SAndreas Gohr if ($this->items[$i]->thumb != "") { 173572dd708SAndreas Gohr $feed .= " <g:image_link>".htmlspecialchars($this->items[$i]->thumb)."</g:image_link>\n"; 174572dd708SAndreas Gohr } 175572dd708SAndreas Gohr $feed .= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); 176572dd708SAndreas Gohr $feed .= " </item>\n"; 177572dd708SAndreas Gohr } 178572dd708SAndreas Gohr $feed .= " </channel>\n"; 179572dd708SAndreas Gohr $feed .= "</rss>\n"; 180572dd708SAndreas Gohr 181572dd708SAndreas Gohr return $feed; 182572dd708SAndreas Gohr } 183572dd708SAndreas Gohr 184572dd708SAndreas Gohr /** 185572dd708SAndreas Gohr * Compose the RSS-0.91 and RSS-2.0 author field. 186572dd708SAndreas Gohr * 187572dd708SAndreas Gohr * @author Joe Lapp <joe.lapp@pobox.com> 188572dd708SAndreas Gohr */ 189572dd708SAndreas Gohr function getAuthor($author, $email) 190572dd708SAndreas Gohr { 191572dd708SAndreas Gohr if ($author && $email) { 192572dd708SAndreas Gohr return $email.' ('.$author.')'; 193572dd708SAndreas Gohr } 194572dd708SAndreas Gohr 195572dd708SAndreas Gohr return $email; 196572dd708SAndreas Gohr } 197572dd708SAndreas Gohr} 198