108500ab3SSatoshi Sahara<?php 208500ab3SSatoshi Sahara 308500ab3SSatoshi Saharanamespace dokuwiki\Ui; 408500ab3SSatoshi Sahara 508500ab3SSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog; 6bf3fa5e9SSatoshi Saharause dokuwiki\ChangeLog\RevisionInfo; 708500ab3SSatoshi Saharause dokuwiki\Form\Form; 879a2d784SGerrit Uitslaguse InvalidArgumentException; 908500ab3SSatoshi Sahara 1008500ab3SSatoshi Sahara/** 1108500ab3SSatoshi Sahara * DokuWiki MediaRevisions Interface 1208500ab3SSatoshi Sahara * 1308500ab3SSatoshi Sahara * @package dokuwiki\Ui 1408500ab3SSatoshi Sahara */ 15ae5d2354SSatoshi Saharaclass MediaRevisions extends Revisions 1608500ab3SSatoshi Sahara{ 17d9c75b22SSatoshi Sahara /* @var MediaChangeLog */ 18d9c75b22SSatoshi Sahara protected $changelog; 19d9c75b22SSatoshi Sahara 2008500ab3SSatoshi Sahara /** 2108500ab3SSatoshi Sahara * MediaRevisions Ui constructor 2208500ab3SSatoshi Sahara * 2308500ab3SSatoshi Sahara * @param string $id id of media 2408500ab3SSatoshi Sahara */ 2508500ab3SSatoshi Sahara public function __construct($id) 2608500ab3SSatoshi Sahara { 27cf3c75d6SSatoshi Sahara if (!$id) { 2879a2d784SGerrit Uitslag throw new InvalidArgumentException('media id should not be empty!'); 2930a159abSSatoshi Sahara } 30ae5d2354SSatoshi Sahara parent::__construct($id); 3108500ab3SSatoshi Sahara } 3208500ab3SSatoshi Sahara 33e71e09a6SSatoshi Sahara /** @inheritdoc */ 34e71e09a6SSatoshi Sahara protected function setChangeLog() 35e71e09a6SSatoshi Sahara { 36e71e09a6SSatoshi Sahara $this->changelog = new MediaChangeLog($this->id); 37e71e09a6SSatoshi Sahara } 38e71e09a6SSatoshi Sahara 3908500ab3SSatoshi Sahara /** 4008500ab3SSatoshi Sahara * Display a list of Media Revisions in the MediaManager 4108500ab3SSatoshi Sahara * 42e2d055f5SAndreas Gohr * @param int $first skip the first n changelog lines 43e2d055f5SAndreas Gohr * @return void 4408500ab3SSatoshi Sahara * @author Kate Arzamastseva <pshns@ukr.net> 4508500ab3SSatoshi Sahara * @author Satoshi Sahara <sahara.satoshi@gmail.com> 4608500ab3SSatoshi Sahara * 47e2d055f5SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 48e2d055f5SAndreas Gohr * @author Ben Coburn <btcoburn@silicodon.net> 4908500ab3SSatoshi Sahara */ 50a46cc3dcSAndreas Gohr public function show($first = -1) 5108500ab3SSatoshi Sahara { 5208500ab3SSatoshi Sahara global $lang; 53ad088cbcSSatoshi Sahara $changelog =& $this->changelog; 5408500ab3SSatoshi Sahara 55eeda7adaSGerrit Uitslag // get revisions, and set correct pagination parameters (first, hasNext) 56a46cc3dcSAndreas Gohr if ($first === null) $first = -1; 5708500ab3SSatoshi Sahara $hasNext = false; 5808500ab3SSatoshi Sahara $revisions = $this->getRevisions($first, $hasNext); 5908500ab3SSatoshi Sahara 6008500ab3SSatoshi Sahara // create the form 6108500ab3SSatoshi Sahara $form = new Form([ 6208500ab3SSatoshi Sahara 'id' => 'page__revisions', // must not be "media__revisions" 6308500ab3SSatoshi Sahara 'action' => media_managerURL(['image' => $this->id], '&'), 6408500ab3SSatoshi Sahara 'class' => 'changes', 6508500ab3SSatoshi Sahara ]); 6608500ab3SSatoshi Sahara $form->setHiddenField('mediado', 'diff'); // required for media revisions 6708500ab3SSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 6808500ab3SSatoshi Sahara 6908500ab3SSatoshi Sahara // start listing 7008500ab3SSatoshi Sahara $form->addTagOpen('ul'); 7108500ab3SSatoshi Sahara foreach ($revisions as $info) { 7208500ab3SSatoshi Sahara $rev = $info['date']; 73b428a50aSSatoshi Sahara $RevInfo = new RevisionInfo($info); 74b428a50aSSatoshi Sahara $RevInfo->isCurrent($changelog->isCurrentRevision($rev)); 755ec96136SSatoshi Sahara 76b428a50aSSatoshi Sahara $class = ($RevInfo->val('type') === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : ''; 7708500ab3SSatoshi Sahara $form->addTagOpen('li')->addClass($class); 7808500ab3SSatoshi Sahara $form->addTagOpen('div')->addClass('li'); 7908500ab3SSatoshi Sahara 80b428a50aSSatoshi Sahara if ($RevInfo->isCurrent()) { 81d1575179SSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 8208500ab3SSatoshi Sahara } elseif (file_exists(mediaFN($this->id, $rev))) { 8308500ab3SSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 8408500ab3SSatoshi Sahara } else { 8508500ab3SSatoshi Sahara $form->addCheckbox('')->val($rev)->attr('disabled', 'disabled'); 8608500ab3SSatoshi Sahara } 8708500ab3SSatoshi Sahara $form->addHTML(' '); 8808500ab3SSatoshi Sahara 8908500ab3SSatoshi Sahara $html = implode(' ', [ 90b428a50aSSatoshi Sahara $RevInfo->showEditDate(), // edit date and time 91b428a50aSSatoshi Sahara $RevInfo->showIconCompareWithCurrent(), // link to diff view icon 92b428a50aSSatoshi Sahara $RevInfo->showFileName(), // name of page or media 9308500ab3SSatoshi Sahara '<div>', 94b428a50aSSatoshi Sahara $RevInfo->showEditSummary(), // edit summary 95b428a50aSSatoshi Sahara $RevInfo->showEditor(), // editor info 96b428a50aSSatoshi Sahara $RevInfo->showSizechange(), // size change indicator 97b428a50aSSatoshi Sahara $RevInfo->showCurrentIndicator(), // current indicator (only when k=1) 9808500ab3SSatoshi Sahara '</div>', 9908500ab3SSatoshi Sahara ]); 10008500ab3SSatoshi Sahara $form->addHTML($html); 10108500ab3SSatoshi Sahara 10208500ab3SSatoshi Sahara $form->addTagClose('div'); 10308500ab3SSatoshi Sahara $form->addTagClose('li'); 10408500ab3SSatoshi Sahara } 10508500ab3SSatoshi Sahara $form->addTagClose('ul'); // end of revision list 10608500ab3SSatoshi Sahara 10708500ab3SSatoshi Sahara // show button for diff view 10808500ab3SSatoshi Sahara $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit'); 10908500ab3SSatoshi Sahara 11008500ab3SSatoshi Sahara $form->addTagClose('div'); // close div class=no 11108500ab3SSatoshi Sahara 112*26dfc232SAndreas Gohr echo $form->toHTML('Revisions'); 11308500ab3SSatoshi Sahara 114eeda7adaSGerrit Uitslag // provide navigation for paginated revision list (of pages and/or media files) 115*26dfc232SAndreas Gohr echo $this->navigation( 116e2d055f5SAndreas Gohr $first, 117e2d055f5SAndreas Gohr $hasNext, 118e2d055f5SAndreas Gohr static fn($n) => media_managerURL(['first' => $n], '&', false, true) 119e2d055f5SAndreas Gohr ); 12008500ab3SSatoshi Sahara } 12108500ab3SSatoshi Sahara} 122