summaryrefslogtreecommitdiff
path: root/platform/www/inc/Action/Sitemap.php
diff options
context:
space:
mode:
Diffstat (limited to 'platform/www/inc/Action/Sitemap.php')
-rw-r--r--platform/www/inc/Action/Sitemap.php66
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?');
+ }
+
+}