|
- <?php
-
- /**
- * XML feed export
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @global array $conf
- * @global Input $INPUT
- */
-
- use dokuwiki\Feed\FeedCreator;
- use dokuwiki\Feed\FeedCreatorOptions;
- use dokuwiki\Cache\Cache;
- use dokuwiki\ChangeLog\MediaChangeLog;
- use dokuwiki\ChangeLog\PageChangeLog;
- use dokuwiki\Extension\AuthPlugin;
- use dokuwiki\Extension\Event;
-
- if (!defined('DOKU_INC')) define('DOKU_INC', __DIR__ . '/');
- require_once(DOKU_INC . 'inc/init.php');
-
- //close session
- session_write_close();
-
- //feed disabled?
- if (!actionOK('rss')) {
- http_status(404);
- echo '<error>RSS feed is disabled.</error>';
- exit;
- }
-
- $options = new FeedCreatorOptions();
-
- // the feed is dynamic - we need a cache for each combo
- // (but most people just use the default feed so it's still effective)
- $key = implode('$', [
- $options->getCacheKey(),
- $INPUT->server->str('REMOTE_USER'),
- $INPUT->server->str('HTTP_HOST'),
- $INPUT->server->str('SERVER_PORT')
- ]);
- $cache = new Cache($key, '.feed');
-
- // prepare cache depends
- $depends['files'] = getConfigFiles('main');
- $depends['age'] = $conf['rss_update'];
- $depends['purge'] = $INPUT->bool('purge');
-
- // check cacheage and deliver if nothing has changed since last
- // time or the update interval has not passed, also handles conditional requests
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
- header('Pragma: public');
- header('Content-Type: ' . $options->getMimeType());
- header('X-Robots-Tag: noindex');
- if ($cache->useCache($depends)) {
- http_conditionalRequest($cache->getTime());
- if ($conf['allowdebug']) header("X-CacheUsed: $cache->cache");
- echo $cache->retrieveCache();
- exit;
- } else {
- http_conditionalRequest(time());
- }
-
- // create new feed
- try {
- $feed = (new FeedCreator($options))->build();
- $cache->storeCache($feed);
- echo $feed;
- } catch (Exception $e) {
- http_status(500);
- echo '<error>' . hsc($e->getMessage()) . '</error>';
- exit;
- }
|