1<?php 2 3namespace dokuwiki\Action; 4 5use dokuwiki\Action\Exception\FatalException; 6 7/** 8 * Class Sitemap 9 * 10 * Generate an XML sitemap for search engines. Do not confuse with Index 11 * 12 * @package dokuwiki\Action 13 */ 14class Sitemap extends AbstractAction { 15 16 /** @inheritdoc */ 17 public function minimumPermission() { 18 return AUTH_NONE; 19 } 20 21 /** 22 * Handle sitemap delivery 23 * 24 * @author Michael Hamann <michael@content-space.de> 25 * @throws FatalException 26 * @inheritdoc 27 */ 28 public function preProcess() { 29 global $conf; 30 31 if($conf['sitemap'] < 1 || !is_numeric($conf['sitemap'])) { 32 throw new FatalException(404, 'Sitemap generation is disabled'); 33 } 34 35 $sitemap = \Sitemapper::getFilePath(); 36 if(\Sitemapper::sitemapIsCompressed()) { 37 $mime = 'application/x-gzip'; 38 } else { 39 $mime = 'application/xml; charset=utf-8'; 40 } 41 42 // Check if sitemap file exists, otherwise create it 43 if(!is_readable($sitemap)) { 44 \Sitemapper::generate(); 45 } 46 47 if(is_readable($sitemap)) { 48 // Send headers 49 header('Content-Type: ' . $mime); 50 header('Content-Disposition: attachment; filename=' . utf8_basename($sitemap)); 51 52 http_conditionalRequest(filemtime($sitemap)); 53 54 // Send file 55 //use x-sendfile header to pass the delivery to compatible webservers 56 http_sendfile($sitemap); 57 58 readfile($sitemap); 59 exit; 60 } 61 62 throw new FatalException(500, 'Could not read the sitemap file - bad permissions?'); 63 } 64 65} 66