diff options
author | Yaco <franco@reevo.org> | 2022-03-08 13:08:34 +0000 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2022-03-08 13:08:34 +0000 |
commit | c985c40d3f3fc6a2be3be3186df3bf2f32189475 (patch) | |
tree | cee11f5e5a7e351ee0fec36d58d72cbee4f7e49b /platform/www/inc/Action/Sitemap.php |
first commit after acervus codebase
Diffstat (limited to 'platform/www/inc/Action/Sitemap.php')
-rw-r--r-- | platform/www/inc/Action/Sitemap.php | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/platform/www/inc/Action/Sitemap.php b/platform/www/inc/Action/Sitemap.php new file mode 100644 index 0000000..370bcf0 --- /dev/null +++ b/platform/www/inc/Action/Sitemap.php @@ -0,0 +1,66 @@ +<?php + +namespace dokuwiki\Action; + +use dokuwiki\Action\Exception\FatalException; +use dokuwiki\Sitemap\Mapper; + +/** + * Class Sitemap + * + * Generate an XML sitemap for search engines. Do not confuse with Index + * + * @package dokuwiki\Action + */ +class Sitemap extends AbstractAction { + + /** @inheritdoc */ + public function minimumPermission() { + return AUTH_NONE; + } + + /** + * Handle sitemap delivery + * + * @author Michael Hamann <michael@content-space.de> + * @throws FatalException + * @inheritdoc + */ + public function preProcess() { + global $conf; + + if($conf['sitemap'] < 1 || !is_numeric($conf['sitemap'])) { + throw new FatalException('Sitemap generation is disabled', 404); + } + + $sitemap = Mapper::getFilePath(); + if(Mapper::sitemapIsCompressed()) { + $mime = 'application/x-gzip'; + } else { + $mime = 'application/xml; charset=utf-8'; + } + + // Check if sitemap file exists, otherwise create it + if(!is_readable($sitemap)) { + Mapper::generate(); + } + + if(is_readable($sitemap)) { + // Send headers + header('Content-Type: ' . $mime); + header('Content-Disposition: attachment; filename=' . \dokuwiki\Utf8\PhpString::basename($sitemap)); + + http_conditionalRequest(filemtime($sitemap)); + + // Send file + //use x-sendfile header to pass the delivery to compatible webservers + http_sendfile($sitemap); + + readfile($sitemap); + exit; + } + + throw new FatalException('Could not read the sitemap file - bad permissions?'); + } + +} |