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