summaryrefslogtreecommitdiff
path: root/platform/www/vendor/openpsa/universalfeedcreator/lib/UniversalFeedCreator.php
blob: 4b7afe6f28d5b1137d37950e78094ab7759e345e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
/**
 * UniversalFeedCreator lets you choose during runtime which
 * format to build.
 * For general usage of a feed class, see the FeedCreator class
 * below or the example above.
 *
 * @since   1.3
 * @author  Kai Blankenhorn <kaib@bitfolge.de>
 */
class UniversalFeedCreator extends FeedCreator
{
    /** @var FeedCreator */
    protected $_feed;

    /**
     * @param string $format
     */
    protected function _setFormat($format)
    {
        switch (strtoupper($format)) {

            case "BASE":
                $this->format = $format;
            case "2.0":
                // fall through
            case "RSS2.0":
                $this->_feed = new RSSCreator20();
                break;

            case "GEOPHOTORSS":
            case "PHOTORSS":
            case "GEORSS":
                $this->format = $format;
            case "1.0":
                // fall through
            case "RSS1.0":
                $this->_feed = new RSSCreator10();
                break;

            case "0.91":
                // fall through
            case "RSS0.91":
                $this->_feed = new RSSCreator091();
                break;

            case "PIE0.1":
                $this->_feed = new PIECreator01();
                break;

            case "MBOX":
                $this->_feed = new MBOXCreator();
                break;

            case "OPML":
                $this->_feed = new OPMLCreator();
                break;

            case "TOOLBAR":
                $this->format = $format;

            case "ATOM":
                // fall through: always the latest ATOM version
            case "ATOM1.0":
                $this->_feed = new AtomCreator10();
                break;

            case "ATOM0.3":
                $this->_feed = new AtomCreator03();
                break;

            case "HTML":
                $this->_feed = new HTMLCreator();
                break;

            case "PHP":
                $this->_feed = new PHPCreator();
                break;
            case "GPX":
                $this->_feed = new GPXCreator();
                break;
            case "KML":
                $this->_feed = new KMLCreator();
                break;
            case "JS":
                // fall through
            case "JAVASCRIPT":
                $this->_feed = new JSCreator();
                break;

            default:
                $this->_feed = new RSSCreator091();
                break;
        }

        $vars = get_object_vars($this);
        foreach ($vars as $key => $value) {
            // prevent overwriting of properties "contentType", "encoding"; do not copy "_feed" itself
            if (!in_array($key, array("_feed", "contentType", "encoding"))) {
                $this->_feed->{$key} = $this->{$key};
            }
        }
    }

    /**
     * Creates a syndication feed based on the items previously added.
     *
     * @see FeedCreator::addItem()
     * @param string $format format the feed should comply to. Valid values are:
     *                       "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"
     * @return string the contents of the feed.
     */
    public function createFeed($format = "RSS0.91")
    {
        $this->_setFormat($format);

        return $this->_feed->createFeed();
    }

    /**
     * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect
     * header may be sent to redirect the use to the newly created file.
     *
     * @since 1.4
     * @param string $format           format the feed should comply to. Valid values are:
     *                                 "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM",
     *                                 "ATOM0.3", "HTML", "JS"
     * @param string $filename         optional    the filename where a recent version of the feed is saved. If not
     *                                 specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to
     *                                 .xml (see _generateFilename()).
     * @param boolean $displayContents optional    send the content of the file or not. If true, the file will be sent
     *                                 in the body of the response.
     */
    public function saveFeed($format = "RSS0.91", $filename = "", $displayContents = true)
    {
        $this->_setFormat($format);
        $this->_feed->saveFeed($filename, $displayContents);
    }

    /**
     * Turns on caching and checks if there is a recent version of this feed in the cache.
     * If there is, an HTTP redirect header is sent.
     * To effectively use caching, you should create the FeedCreator object and call this method
     * before anything else, especially before you do the time consuming task to build the feed
     * (web fetching, for example).
     *
     * @param string $format   format the feed should comply to. Valid values are:
     *                         "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
     * @param string $filename optional the filename where a recent version of the feed is saved. If not specified, the
     *                         filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see
     *                         _generateFilename()).
     * @param int $timeout     optional the timeout in seconds before a cached version is refreshed (defaults to 3600 =
     *                         1 hour)
     */
    public function useCached($format = "RSS0.91", $filename = "", $timeout = 3600)
    {
        $this->_setFormat($format);
        $this->_feed->useCached($filename, $timeout);
    }
}