[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Remote/Response/ -> Page.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Remote\Response;
   4  
   5  use dokuwiki\ChangeLog\PageChangeLog;
   6  
   7  /**
   8   * Represents a single page revision in the wiki.
   9   */
  10  class Page extends ApiResponse
  11  {
  12      /** @var string The page ID */
  13      public $id;
  14      /** @var int The page revision aka last modified timestamp */
  15      public $revision;
  16      /** @var int The page size in bytes */
  17      public $size;
  18      /** @var string The page title */
  19      public $title;
  20      /** @var int The current user's permissions for this page */
  21      public $permission;
  22      /** @var string MD5 sum over the page's content (if available and requested) */
  23      public $hash;
  24      /** @var string The author of this page revision (if available and requested) */
  25      public $author;
  26  
  27      /** @var string The file path to this page revision */
  28      protected $file;
  29  
  30      /**
  31       * Page constructor.
  32       *
  33       * @param string $id The page ID
  34       * @param int $revision The page revision 0 for current
  35       * @param int $mtime Last modified timestamp
  36       * @param string $title The page title
  37       * @param int|null $size The page size in bytes
  38       * @param int|null $perms The current user's permissions for this page
  39       * @param string $hash MD5 sum over the page's content
  40       * @param string $author The author of this page revision
  41       */
  42      public function __construct(
  43          $id,
  44          $revision = 0,
  45          $mtime = 0,
  46          $title = '',
  47          $size = null,
  48          $perms = null,
  49          $hash = '',
  50          $author = ''
  51      ) {
  52          $this->id = $id;
  53          $this->file = wikiFN($this->id, $revision);
  54          $this->revision = $revision ?: $mtime ?: @filemtime($this->file);
  55          $this->size = $size ?? @filesize($this->file);
  56          $this->permission = $perms ?? auth_quickaclcheck($this->id);
  57          $this->hash = $hash;
  58          $this->author = $author;
  59          $this->title = $title ?: $this->retrieveTitle();
  60      }
  61  
  62      /**
  63       * Get the title for the page
  64       *
  65       * Honors $conf['useheading']
  66       *
  67       * @return string
  68       */
  69      protected function retrieveTitle()
  70      {
  71          global $conf;
  72  
  73          if ($conf['useheading']) {
  74              $title = p_get_first_heading($this->id);
  75              if ($title) {
  76                  return $title;
  77              }
  78          }
  79          return $this->id;
  80      }
  81  
  82      /**
  83       * Calculate the hash for this page
  84       *
  85       * This is a heavy operation and should only be called when needed.
  86       */
  87      public function calculateHash()
  88      {
  89          $this->hash = md5(io_readFile($this->file));
  90      }
  91  
  92      /**
  93       * Retrieve the author of this page
  94       */
  95      public function retrieveAuthor()
  96      {
  97          $pagelog = new PageChangeLog($this->id, 1024);
  98          $info = $pagelog->getRevisionInfo($this->revision);
  99          $this->author = is_array($info) ? ($info['user'] ?: $info['ip']) : '';
 100      }
 101  
 102      /** @inheritdoc */
 103      public function __toString()
 104      {
 105          return $this->id . '@' . $this->revision;
 106      }
 107  }