[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/vendor/openpsa/universalfeedcreator/lib/Creator/ -> RSSCreator091.php (source)

   1  <?php
   2  
   3  /**
   4   * RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.
   5   *
   6   * @see     http://my.netscape.com/publish/formats/rss-spec-0.91.html
   7   * @since   1.3
   8   * @author  Kai Blankenhorn <kaib@bitfolge.de>
   9   */
  10  class RSSCreator091 extends FeedCreator
  11  {
  12  
  13      /** @var string Stores this RSS feed's version number. */
  14      protected $RSSVersion;
  15  
  16      /**
  17       * RSSCreator091 constructor.
  18       */
  19      function __construct()
  20      {
  21          $this->_setRSSVersion("0.91");
  22          $this->contentType = "application/rss+xml";
  23      }
  24  
  25      /**
  26       * Sets this RSS feed's version number.
  27       *
  28       * @param string $version
  29       */
  30      protected function _setRSSVersion($version)
  31      {
  32          $this->RSSVersion = $version;
  33      }
  34  
  35      /** @inheritdoc */
  36      public function createFeed()
  37      {
  38          $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
  39          $feed .= $this->_createGeneratorComment();
  40          $feed .= $this->_createStylesheetReferences();
  41          $feed .= "<rss version=\"".$this->RSSVersion."\"";
  42  
  43          if (count($this->items) > 0
  44              && !empty($this->items[0]->lat)
  45          ) {
  46              $feed .= "    xmlns:georss=\"http://www.georss.org/georss/\"\n";
  47          }
  48          if (count($this->items) > 0
  49              && isset($this->items[0]->additionalElements['xcal:dtstart'])
  50          ) {
  51              $feed .= "    xmlns:xcal=\"urn:ietf:params:xml:ns:xcal\"\n";
  52          }
  53          $feed .= ">\n";
  54          if ($this->format == 'BASE') {
  55              $feed .= "    <channel xmlns:g=\"http://base.google.com/ns/1.0\">\n";
  56          } else {
  57              $feed .= "    <channel>\n";
  58          }
  59          $feed .= "        <title>".FeedCreator::iTrunc(htmlspecialchars((string) $this->title), 100)."</title>\n";
  60          $this->descriptionTruncSize = 500;
  61          $feed .= "        <description>".$this->getDescription()."</description>\n";
  62          $feed .= "        <link>".$this->link."</link>\n";
  63          $now = new FeedDate();
  64          $feed .= "        <lastBuildDate>".htmlspecialchars(
  65                  $this->lastBuildDate ?: $now->rfc822()
  66              )."</lastBuildDate>\n";
  67          $feed .= "        <generator>".FEEDCREATOR_VERSION."</generator>\n";
  68  
  69          if ($this->image != null) {
  70              $feed .= "        <image>\n";
  71              $feed .= "            <url>".$this->image->url."</url>\n";
  72              $feed .= "            <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title), 100)."</title>\n";
  73              $feed .= "            <link>".$this->image->link."</link>\n";
  74              if ($this->image->width != "") {
  75                  $feed .= "            <width>".$this->image->width."</width>\n";
  76              }
  77              if ($this->image->height != "") {
  78                  $feed .= "            <height>".$this->image->height."</height>\n";
  79              }
  80              if ($this->image->description != "") {
  81                  $feed .= "            <description>".htmlspecialchars($this->image->description)."</description>\n";
  82              }
  83              $feed .= "        </image>\n";
  84          }
  85          if ($this->language != "") {
  86              $feed .= "        <language>".$this->language."</language>\n";
  87          }
  88          if ($this->copyright != "") {
  89              $feed .= "        <copyright>".FeedCreator::iTrunc(
  90                      htmlspecialchars($this->copyright),
  91                      100
  92                  )."</copyright>\n";
  93          }
  94          if ($this->editor != "") {
  95              $feed .= "        <managingEditor>".FeedCreator::iTrunc(
  96                      htmlspecialchars($this->editor),
  97                      100
  98                  )."</managingEditor>\n";
  99          }
 100          if ($this->webmaster != "") {
 101              $feed .= "        <webMaster>".FeedCreator::iTrunc(
 102                      htmlspecialchars($this->webmaster),
 103                      100
 104                  )."</webMaster>\n";
 105          }
 106          if ($this->pubDate != "") {
 107              $pubDate = new FeedDate($this->pubDate);
 108              $feed .= "        <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n";
 109          }
 110          if ($this->category != "") {
 111              $feed .= "        <category>".htmlspecialchars($this->category)."</category>\n";
 112          }
 113          if ($this->docs != "") {
 114              $feed .= "        <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs), 500)."</docs>\n";
 115          }
 116          if ($this->ttl != "") {
 117              $feed .= "        <ttl>".htmlspecialchars($this->ttl)."</ttl>\n";
 118          }
 119          if ($this->rating != "") {
 120              $feed .= "        <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating), 500)."</rating>\n";
 121          }
 122          if ($this->skipHours != "") {
 123              $feed .= "        <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n";
 124          }
 125          if ($this->skipDays != "") {
 126              $feed .= "        <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n";
 127          }
 128          $feed .= $this->_createAdditionalElements($this->additionalElements, "    ");
 129  
 130          for ($i = 0; $i < count($this->items); $i++) {
 131              $feed .= "        <item>\n";
 132              $feed .= "            <title>".FeedCreator::iTrunc(
 133                      htmlspecialchars(strip_tags((string) $this->items[$i]->title)),
 134                      100
 135                  )."</title>\n";
 136              $feed .= "            <link>".htmlspecialchars((string) $this->items[$i]->link)."</link>\n";
 137              $feed .= "            <description>".$this->items[$i]->getDescription()."</description>\n";
 138  
 139              $creator = $this->getAuthor($this->items[$i]->author, $this->items[$i]->authorEmail);
 140              if ($creator) {
 141                  $feed .= "            <author>".htmlspecialchars($creator)."</author>\n";
 142              }
 143  
 144              /*
 145               // on hold
 146              if ($this->items[$i]->source!="") {
 147              $feed.= "            <source>".htmlspecialchars($this->items[$i]->source)."</source>\n";
 148              }
 149              */
 150              if ($this->items[$i]->lat != "") {
 151                  $feed .= "            <georss:point>".$this->items[$i]->lat." ".$this->items[$i]->long."</georss:point>\n";
 152              }
 153              if (is_array($this->items[$i]->category)) {
 154                  foreach ($this->items[$i]->category as $cat) {
 155                      $feed .= "        <category>".htmlspecialchars($cat)."</category>\n";
 156                  }
 157              } else {
 158                  if ($this->items[$i]->category != "") {
 159                      $feed .= "        <category>".htmlspecialchars($this->items[$i]->category)."</category>\n";
 160                  }
 161              }
 162              if ($this->items[$i]->comments != "") {
 163                  $feed .= "            <comments>".htmlspecialchars($this->items[$i]->comments)."</comments>\n";
 164              }
 165              if ($this->items[$i]->date != "") {
 166                  $itemDate = new FeedDate($this->items[$i]->date);
 167                  $feed .= "            <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n";
 168              }
 169              if ($this->items[$i]->guid != "") {
 170                  $feed .= "            <guid>".htmlspecialchars($this->items[$i]->guid)."</guid>\n";
 171              }
 172              if ($this->items[$i]->thumb != "") {
 173                  $feed .= "            <g:image_link>".htmlspecialchars($this->items[$i]->thumb)."</g:image_link>\n";
 174              }
 175              $feed .= $this->_createAdditionalElements($this->items[$i]->additionalElements, "            ");
 176              $feed .= "        </item>\n";
 177          }
 178          $feed .= "    </channel>\n";
 179          $feed .= "</rss>\n";
 180  
 181          return $feed;
 182      }
 183  
 184      /**
 185       * Compose the RSS-0.91 and RSS-2.0 author field.
 186       *
 187       * @author Joe Lapp <joe.lapp@pobox.com>
 188       */
 189      function getAuthor($author, $email)
 190      {
 191          if ($author && $email) {
 192              return $email.' ('.$author.')';
 193          }
 194  
 195          return $email;
 196      }
 197  }