[ 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  
   7  /**
   8   * Class Sitemap
   9   *
  10   * Generate an XML sitemap for search engines. Do not confuse with Index
  11   *
  12   * @package dokuwiki\Action
  13   */
  14  class 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('Sitemap generation is disabled', 404);
  33          }
  34  
  35          $sitemap = Sitemap::getFilePath();
  36          if(Sitemap::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              Sitemap::generate();
  45          }
  46  
  47          if(is_readable($sitemap)) {
  48              // Send headers
  49              header('Content-Type: ' . $mime);
  50              header('Content-Disposition: attachment; filename=' . \dokuwiki\Utf8\PhpString::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('Could not read the sitemap file - bad permissions?');
  63      }
  64  
  65  }