[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Action/ -> Sitemap.php (source)

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