xref: /dokuwiki/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator10.php (revision 64d8abdb11b92482cec4f0ec0320b91fea20322f)
1572dd708SAndreas Gohr<?php
2572dd708SAndreas Gohr
3572dd708SAndreas Gohr/**
4572dd708SAndreas Gohr * RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.
5572dd708SAndreas Gohr *
6572dd708SAndreas Gohr * @see     http://www.purl.org/rss/1.0/
7572dd708SAndreas Gohr * @since   1.3
8572dd708SAndreas Gohr * @author  Kai Blankenhorn <kaib@bitfolge.de>
9572dd708SAndreas Gohr */
10572dd708SAndreas Gohrclass RSSCreator10 extends FeedCreator
11572dd708SAndreas Gohr{
12572dd708SAndreas Gohr
13572dd708SAndreas Gohr    /** @inheritdoc */
14572dd708SAndreas Gohr    public function createFeed()
15572dd708SAndreas Gohr    {
16572dd708SAndreas Gohr        $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
17572dd708SAndreas Gohr        $feed .= $this->_createGeneratorComment();
18572dd708SAndreas Gohr        if (empty($this->cssStyleSheet)) {
19572dd708SAndreas Gohr            $this->cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css";
20572dd708SAndreas Gohr        }
21572dd708SAndreas Gohr        $feed .= $this->_createStylesheetReferences();
22572dd708SAndreas Gohr        $feed .= "<rdf:RDF\n";
23572dd708SAndreas Gohr        $feed .= "    xmlns=\"http://purl.org/rss/1.0/\"\n";
24572dd708SAndreas Gohr        $feed .= "    xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
25572dd708SAndreas Gohr        $feed .= "    xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"\n";
26572dd708SAndreas Gohr        if (!empty($this->items[0]->thumb)) {
27572dd708SAndreas Gohr            $feed .= "    xmlns:photo=\"http://www.pheed.com/pheed/\"\n";
28572dd708SAndreas Gohr        }
29572dd708SAndreas Gohr        if (!empty($this->items[0]->lat)) {
30572dd708SAndreas Gohr            $feed .= "    xmlns:georss=\"http://www.georss.org/georss\"\n";
31572dd708SAndreas Gohr        }
32572dd708SAndreas Gohr        $feed .= "    xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
33572dd708SAndreas Gohr        $feed .= "    <channel rdf:about=\"".$this->syndicationURL."\">\n";
34*64d8abdbSAndreas Gohr        $feed .= "        <title>".htmlspecialchars((string) $this->title)."</title>\n";
35*64d8abdbSAndreas Gohr        $feed .= "        <description>".htmlspecialchars((string) $this->description)."</description>\n";
36572dd708SAndreas Gohr        $feed .= "        <link>".$this->link."</link>\n";
37572dd708SAndreas Gohr        if ($this->image != null) {
38572dd708SAndreas Gohr            $feed .= "        <image rdf:resource=\"".$this->image->url."\" />\n";
39572dd708SAndreas Gohr        }
40572dd708SAndreas Gohr        $now = new FeedDate();
41572dd708SAndreas Gohr        $feed .= "       <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n";
42572dd708SAndreas Gohr        $feed .= "        <items>\n";
43572dd708SAndreas Gohr        $feed .= "            <rdf:Seq>\n";
44572dd708SAndreas Gohr        for ($i = 0; $i < count($this->items); $i++) {
45*64d8abdbSAndreas Gohr            $feed .= "                <rdf:li rdf:resource=\"".htmlspecialchars((string) $this->items[$i]->link)."\"/>\n";
46572dd708SAndreas Gohr        }
47572dd708SAndreas Gohr        $feed .= "            </rdf:Seq>\n";
48572dd708SAndreas Gohr        $feed .= "        </items>\n";
49572dd708SAndreas Gohr        $feed .= "    </channel>\n";
50572dd708SAndreas Gohr        if ($this->image != null) {
51572dd708SAndreas Gohr            $feed .= "    <image rdf:about=\"".$this->image->url."\">\n";
52572dd708SAndreas Gohr            $feed .= "        <title>".$this->image->title."</title>\n";
53572dd708SAndreas Gohr            $feed .= "        <link>".$this->image->link."</link>\n";
54572dd708SAndreas Gohr            $feed .= "        <url>".$this->image->url."</url>\n";
55572dd708SAndreas Gohr            $feed .= "    </image>\n";
56572dd708SAndreas Gohr        }
57572dd708SAndreas Gohr        $feed .= $this->_createAdditionalElements($this->additionalElements, "    ");
58572dd708SAndreas Gohr
59572dd708SAndreas Gohr        for ($i = 0; $i < count($this->items); $i++) {
60*64d8abdbSAndreas Gohr            $feed .= "    <item rdf:about=\"".htmlspecialchars((string) $this->items[$i]->link)."\">\n";
61572dd708SAndreas Gohr            $feed .= "        <dc:format>text/html</dc:format>\n";
62572dd708SAndreas Gohr            if ($this->items[$i]->date != null) {
63572dd708SAndreas Gohr                $itemDate = new FeedDate($this->items[$i]->date);
64572dd708SAndreas Gohr                $feed .= "        <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n";
65572dd708SAndreas Gohr            }
66572dd708SAndreas Gohr            if ($this->items[$i]->source != "") {
67572dd708SAndreas Gohr                $feed .= "        <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n";
68572dd708SAndreas Gohr            }
69572dd708SAndreas Gohr            $creator = $this->getAuthor($this->items[$i]->author, $this->items[$i]->authorEmail);
70572dd708SAndreas Gohr            if ($creator) {
71572dd708SAndreas Gohr                $feed .= "        <dc:creator>".htmlspecialchars($creator)."</dc:creator>\n";
72572dd708SAndreas Gohr            }
73572dd708SAndreas Gohr            if ($this->items[$i]->lat != "") {
74572dd708SAndreas Gohr                $feed .= "        <georss:point>".$this->items[$i]->lat." ".$this->items[$i]->long."</georss:point>\n";
75572dd708SAndreas Gohr            }
76572dd708SAndreas Gohr            if ($this->items[$i]->thumb != "") {
77572dd708SAndreas Gohr                $feed .= "        <photo:thumbnail>".htmlspecialchars($this->items[$i]->thumb)."</photo:thumbnail>\n";
78572dd708SAndreas Gohr            }
79572dd708SAndreas Gohr            $feed .= "        <title>".htmlspecialchars(
80*64d8abdbSAndreas Gohr                    strip_tags(strtr((string) $this->items[$i]->title, "\n\r", "  "))
81572dd708SAndreas Gohr                )."</title>\n";
82*64d8abdbSAndreas Gohr            $feed .= "        <link>".htmlspecialchars((string) $this->items[$i]->link)."</link>\n";
83*64d8abdbSAndreas Gohr            $feed .= "        <description>".htmlspecialchars((string) $this->items[$i]->description)."</description>\n";
84572dd708SAndreas Gohr            $feed .= $this->_createAdditionalElements($this->items[$i]->additionalElements, "        ");
85572dd708SAndreas Gohr            $feed .= "    </item>\n";
86572dd708SAndreas Gohr        }
87572dd708SAndreas Gohr        $feed .= "</rdf:RDF>\n";
88572dd708SAndreas Gohr
89572dd708SAndreas Gohr        return $feed;
90572dd708SAndreas Gohr    }
91572dd708SAndreas Gohr
92572dd708SAndreas Gohr    /**
93572dd708SAndreas Gohr     * Compose the RSS-1.0 author field.
94572dd708SAndreas Gohr     *
95572dd708SAndreas Gohr     * @author Joe Lapp <joe.lapp@pobox.com>
96572dd708SAndreas Gohr     * @param string $author
97572dd708SAndreas Gohr     * @param string $email
98572dd708SAndreas Gohr     * @return string
99572dd708SAndreas Gohr     */
100572dd708SAndreas Gohr    protected function getAuthor($author, $email)
101572dd708SAndreas Gohr    {
102572dd708SAndreas Gohr        if ($author) {
103572dd708SAndreas Gohr            if ($email) {
104572dd708SAndreas Gohr                return $author.' ('.$email.')';
105572dd708SAndreas Gohr            }
106572dd708SAndreas Gohr
107572dd708SAndreas Gohr            return $author;
108572dd708SAndreas Gohr        }
109572dd708SAndreas Gohr
110572dd708SAndreas Gohr        return $email;
111572dd708SAndreas Gohr    }
112572dd708SAndreas Gohr}
113