12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- <?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?');
- }
- }
|