* * @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 'RSS feed is disabled.'; 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 '' . hsc($e->getMessage()) . ''; exit; }