161 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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);
 | 
						|
    }
 | 
						|
}
 |