|
- <?php
-
- namespace dokuwiki\Action;
-
- use dokuwiki\Action\Exception\FatalException;
- use dokuwiki\Sitemap\Mapper;
- use dokuwiki\Utf8\PhpString;
-
- /**
- * 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=' . 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?');
- }
- }
|