[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Ui/ -> MediaRevisions.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Ui;
   4  
   5  use dokuwiki\ChangeLog\MediaChangeLog;
   6  use dokuwiki\ChangeLog\RevisionInfo;
   7  use dokuwiki\Form\Form;
   8  use InvalidArgumentException;
   9  
  10  /**
  11   * DokuWiki MediaRevisions Interface
  12   *
  13   * @package dokuwiki\Ui
  14   */
  15  class MediaRevisions extends Revisions
  16  {
  17      /* @var MediaChangeLog */
  18      protected $changelog;
  19  
  20      /**
  21       * MediaRevisions Ui constructor
  22       *
  23       * @param string $id id of media
  24       */
  25      public function __construct($id)
  26      {
  27          if (!$id) {
  28              throw new InvalidArgumentException('media id should not be empty!');
  29          }
  30          parent::__construct($id);
  31      }
  32  
  33      /** @inheritdoc */
  34      protected function setChangeLog()
  35      {
  36          $this->changelog = new MediaChangeLog($this->id);
  37      }
  38  
  39      /**
  40       * Display a list of Media Revisions in the MediaManager
  41       *
  42       * @param int $first skip the first n changelog lines
  43       * @return void
  44       * @author Kate Arzamastseva <pshns@ukr.net>
  45       * @author Satoshi Sahara <sahara.satoshi@gmail.com>
  46       *
  47       * @author Andreas Gohr <andi@splitbrain.org>
  48       * @author Ben Coburn <btcoburn@silicodon.net>
  49       */
  50      public function show($first = -1)
  51      {
  52          global $lang;
  53          $changelog =& $this->changelog;
  54  
  55          // get revisions, and set correct pagination parameters (first, hasNext)
  56          if ($first === null) $first = -1;
  57          $hasNext = false;
  58          $revisions = $this->getRevisions($first, $hasNext);
  59  
  60          // create the form
  61          $form = new Form([
  62              'id' => 'page__revisions', // must not be "media__revisions"
  63              'action' => media_managerURL(['image' => $this->id], '&'),
  64              'class' => 'changes',
  65          ]);
  66          $form->setHiddenField('mediado', 'diff'); // required for media revisions
  67          $form->addTagOpen('div')->addClass('no');
  68  
  69          // start listing
  70          $form->addTagOpen('ul');
  71          foreach ($revisions as $info) {
  72              $rev = $info['date'];
  73              $RevInfo = new RevisionInfo($info);
  74              $RevInfo->isCurrent($changelog->isCurrentRevision($rev));
  75  
  76              $class = ($RevInfo->val('type') === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : '';
  77              $form->addTagOpen('li')->addClass($class);
  78              $form->addTagOpen('div')->addClass('li');
  79  
  80              if ($RevInfo->isCurrent()) {
  81                  $form->addCheckbox('rev2[]')->val($rev);
  82              } elseif (file_exists(mediaFN($this->id, $rev))) {
  83                  $form->addCheckbox('rev2[]')->val($rev);
  84              } else {
  85                  $form->addCheckbox('')->val($rev)->attr('disabled', 'disabled');
  86              }
  87              $form->addHTML(' ');
  88  
  89              $html = implode(' ', [
  90                  $RevInfo->showEditDate(),          // edit date and time
  91                  $RevInfo->showIconCompareWithCurrent(),  // link to diff view icon
  92                  $RevInfo->showFileName(),          // name of page or media
  93                  '<div>',
  94                  $RevInfo->showEditSummary(),       // edit summary
  95                  $RevInfo->showEditor(),            // editor info
  96                  $RevInfo->showSizechange(),        // size change indicator
  97                  $RevInfo->showCurrentIndicator(),  // current indicator (only when k=1)
  98                  '</div>',
  99              ]);
 100              $form->addHTML($html);
 101  
 102              $form->addTagClose('div');
 103              $form->addTagClose('li');
 104          }
 105          $form->addTagClose('ul');  // end of revision list
 106  
 107          // show button for diff view
 108          $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit');
 109  
 110          $form->addTagClose('div'); // close div class=no
 111  
 112          echo $form->toHTML('Revisions');
 113  
 114          // provide navigation for paginated revision list (of pages and/or media files)
 115          echo $this->navigation(
 116              $first,
 117              $hasNext,
 118              static fn($n) => media_managerURL(['first' => $n], '&', false, true)
 119          );
 120      }
 121  }