xref: /dokuwiki/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator091.php (revision 64d8abdb11b92482cec4f0ec0320b91fea20322f)
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