|
- <?php
-
- namespace dokuwiki\Ui;
-
- use dokuwiki\ChangeLog\MediaChangeLog;
- use dokuwiki\ChangeLog\RevisionInfo;
- use dokuwiki\Form\Form;
- use InvalidArgumentException;
-
- /**
- * DokuWiki MediaRevisions Interface
- *
- * @package dokuwiki\Ui
- */
- class MediaRevisions extends Revisions
- {
- /* @var MediaChangeLog */
- protected $changelog;
-
- /**
- * MediaRevisions Ui constructor
- *
- * @param string $id id of media
- */
- public function __construct($id)
- {
- if (!$id) {
- throw new InvalidArgumentException('media id should not be empty!');
- }
- parent::__construct($id);
- }
-
- /** @inheritdoc */
- protected function setChangeLog()
- {
- $this->changelog = new MediaChangeLog($this->id);
- }
-
- /**
- * Display a list of Media Revisions in the MediaManager
- *
- * @param int $first skip the first n changelog lines
- * @return void
- * @author Kate Arzamastseva <pshns@ukr.net>
- * @author Satoshi Sahara <sahara.satoshi@gmail.com>
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Ben Coburn <btcoburn@silicodon.net>
- */
- public function show($first = -1)
- {
- global $lang;
- $changelog =& $this->changelog;
-
- // get revisions, and set correct pagination parameters (first, hasNext)
- if ($first === null) $first = -1;
- $hasNext = false;
- $revisions = $this->getRevisions($first, $hasNext);
-
- // create the form
- $form = new Form([
- 'id' => 'page__revisions', // must not be "media__revisions"
- 'action' => media_managerURL(['image' => $this->id], '&'),
- 'class' => 'changes',
- ]);
- $form->setHiddenField('mediado', 'diff'); // required for media revisions
- $form->addTagOpen('div')->addClass('no');
-
- // start listing
- $form->addTagOpen('ul');
- foreach ($revisions as $info) {
- $rev = $info['date'];
- $RevInfo = new RevisionInfo($info);
- $RevInfo->isCurrent($changelog->isCurrentRevision($rev));
-
- $class = ($RevInfo->val('type') === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : '';
- $form->addTagOpen('li')->addClass($class);
- $form->addTagOpen('div')->addClass('li');
-
- if ($RevInfo->isCurrent()) {
- $form->addCheckbox('rev2[]')->val($rev);
- } elseif (file_exists(mediaFN($this->id, $rev))) {
- $form->addCheckbox('rev2[]')->val($rev);
- } else {
- $form->addCheckbox('')->val($rev)->attr('disabled', 'disabled');
- }
- $form->addHTML(' ');
-
- $html = implode(' ', [
- $RevInfo->showEditDate(), // edit date and time
- $RevInfo->showIconCompareWithCurrent(), // link to diff view icon
- $RevInfo->showFileName(), // name of page or media
- '<div>',
- $RevInfo->showEditSummary(), // edit summary
- $RevInfo->showEditor(), // editor info
- $RevInfo->showSizechange(), // size change indicator
- $RevInfo->showCurrentIndicator(), // current indicator (only when k=1)
- '</div>',
- ]);
- $form->addHTML($html);
-
- $form->addTagClose('div');
- $form->addTagClose('li');
- }
- $form->addTagClose('ul'); // end of revision list
-
- // show button for diff view
- $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit');
-
- $form->addTagClose('div'); // close div class=no
-
- echo $form->toHTML('Revisions');
-
- // provide navigation for paginated revision list (of pages and/or media files)
- echo $this->navigation(
- $first,
- $hasNext,
- static fn($n) => media_managerURL(['first' => $n], '&', false, true)
- );
- }
- }
|