67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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?');
 | |
|     }
 | |
| 
 | |
| }
 |