108500ab3SSatoshi Sahara<?php 208500ab3SSatoshi Sahara 308500ab3SSatoshi Saharanamespace dokuwiki\Ui; 408500ab3SSatoshi Sahara 508500ab3SSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog; 608500ab3SSatoshi Saharause dokuwiki\Form\Form; 708500ab3SSatoshi Sahara 808500ab3SSatoshi Sahara/** 908500ab3SSatoshi Sahara * DokuWiki MediaRevisions Interface 1008500ab3SSatoshi Sahara * 1108500ab3SSatoshi Sahara * @package dokuwiki\Ui 1208500ab3SSatoshi Sahara */ 13ae5d2354SSatoshi Saharaclass MediaRevisions extends Revisions 1408500ab3SSatoshi Sahara{ 15*d9c75b22SSatoshi Sahara /* @var MediaChangeLog */ 16*d9c75b22SSatoshi Sahara protected $changelog; 17*d9c75b22SSatoshi Sahara 1808500ab3SSatoshi Sahara /** 1908500ab3SSatoshi Sahara * MediaRevisions Ui constructor 2008500ab3SSatoshi Sahara * 2108500ab3SSatoshi Sahara * @param string $id id of media 2208500ab3SSatoshi Sahara */ 2308500ab3SSatoshi Sahara public function __construct($id) 2408500ab3SSatoshi Sahara { 2530a159abSSatoshi Sahara if ($id) { 2630a159abSSatoshi Sahara throw new \InvalidArgumentException('media id should not be empty!'); 2730a159abSSatoshi Sahara } 28e71e09a6SSatoshi Sahara $this->item = 'media'; 29ae5d2354SSatoshi Sahara parent::__construct($id); 3008500ab3SSatoshi Sahara } 3108500ab3SSatoshi Sahara 32e71e09a6SSatoshi Sahara /** @inheritdoc */ 33e71e09a6SSatoshi Sahara protected function setChangeLog() 34e71e09a6SSatoshi Sahara { 35e71e09a6SSatoshi Sahara $this->changelog = new MediaChangeLog($this->id); 36e71e09a6SSatoshi Sahara } 37e71e09a6SSatoshi Sahara 38*d9c75b22SSatoshi Sahara /** @inheritdoc */ 39*d9c75b22SSatoshi Sahara protected function itemFN($id, $rev = '') 40*d9c75b22SSatoshi Sahara { 41*d9c75b22SSatoshi Sahara return mediaFN($id, $rev); 42*d9c75b22SSatoshi Sahara } 43*d9c75b22SSatoshi Sahara 4408500ab3SSatoshi Sahara /** 4508500ab3SSatoshi Sahara * Display a list of Media Revisions in the MediaManager 4608500ab3SSatoshi Sahara * 4708500ab3SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 4808500ab3SSatoshi Sahara * @author Ben Coburn <btcoburn@silicodon.net> 4908500ab3SSatoshi Sahara * @author Kate Arzamastseva <pshns@ukr.net> 5008500ab3SSatoshi Sahara * @author Satoshi Sahara <sahara.satoshi@gmail.com> 5108500ab3SSatoshi Sahara * 5208500ab3SSatoshi Sahara * @param int $first skip the first n changelog lines 5308500ab3SSatoshi Sahara * @return void 5408500ab3SSatoshi Sahara */ 5508500ab3SSatoshi Sahara public function show($first = 0) 5608500ab3SSatoshi Sahara { 5708500ab3SSatoshi Sahara global $lang; 5808500ab3SSatoshi Sahara 5908500ab3SSatoshi Sahara // get revisions, and set correct pagenation parameters (first, hasNext) 6008500ab3SSatoshi Sahara if ($first === null) $first = 0; 6108500ab3SSatoshi Sahara $hasNext = false; 6208500ab3SSatoshi Sahara $revisions = $this->getRevisions($first, $hasNext); 6308500ab3SSatoshi Sahara 6408500ab3SSatoshi Sahara // create the form 6508500ab3SSatoshi Sahara $form = new Form([ 6608500ab3SSatoshi Sahara 'id' => 'page__revisions', // must not be "media__revisions" 6708500ab3SSatoshi Sahara 'action' => media_managerURL(['image' => $this->id], '&'), 6808500ab3SSatoshi Sahara 'class' => 'changes', 6908500ab3SSatoshi Sahara ]); 7008500ab3SSatoshi Sahara $form->setHiddenField('mediado', 'diff'); // required for media revisions 7108500ab3SSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 7208500ab3SSatoshi Sahara 7308500ab3SSatoshi Sahara // start listing 7408500ab3SSatoshi Sahara $form->addTagOpen('ul'); 7508500ab3SSatoshi Sahara foreach ($revisions as $info) { 7608500ab3SSatoshi Sahara $rev = $info['date']; 7708500ab3SSatoshi Sahara $class = ($info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : ''; 7808500ab3SSatoshi Sahara $form->addTagOpen('li')->addClass($class); 7908500ab3SSatoshi Sahara $form->addTagOpen('div')->addClass('li'); 8008500ab3SSatoshi Sahara 8108500ab3SSatoshi Sahara if (isset($info['current'])) { 8208500ab3SSatoshi Sahara $form->addCheckbox('rev2[]')->val('current'); 8308500ab3SSatoshi Sahara } elseif (file_exists(mediaFN($this->id, $rev))) { 8408500ab3SSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 8508500ab3SSatoshi Sahara } else { 8608500ab3SSatoshi Sahara $form->addCheckbox('')->val($rev)->attr('disabled','disabled'); 8708500ab3SSatoshi Sahara } 8808500ab3SSatoshi Sahara $form->addHTML(' '); 8908500ab3SSatoshi Sahara 9008500ab3SSatoshi Sahara $objRevInfo = $this->getObjRevInfo($info); 9108500ab3SSatoshi Sahara $html = implode(' ', [ 9208500ab3SSatoshi Sahara $objRevInfo->editDate(), // edit date and time 9308500ab3SSatoshi Sahara $objRevInfo->difflink(), // link to diffview icon 9408500ab3SSatoshi Sahara $objRevInfo->itemName(), // name of page or media 9508500ab3SSatoshi Sahara '<div>', 9608500ab3SSatoshi Sahara $objRevInfo->editSummary(), // edit summary 9708500ab3SSatoshi Sahara $objRevInfo->editor(), // editor info 98ae5d2354SSatoshi Sahara $objRevInfo->sizechange(), // size change indicator 9908500ab3SSatoshi Sahara $objRevInfo->currentIndicator(), // current indicator (only when k=1) 10008500ab3SSatoshi Sahara '</div>', 10108500ab3SSatoshi Sahara ]); 10208500ab3SSatoshi Sahara $form->addHTML($html); 10308500ab3SSatoshi Sahara 10408500ab3SSatoshi Sahara $form->addTagClose('div'); 10508500ab3SSatoshi Sahara $form->addTagClose('li'); 10608500ab3SSatoshi Sahara } 10708500ab3SSatoshi Sahara $form->addTagClose('ul'); // end of revision list 10808500ab3SSatoshi Sahara 10908500ab3SSatoshi Sahara // show button for diff view 11008500ab3SSatoshi Sahara $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit'); 11108500ab3SSatoshi Sahara 11208500ab3SSatoshi Sahara $form->addTagClose('div'); // close div class=no 11308500ab3SSatoshi Sahara 11408500ab3SSatoshi Sahara print $form->toHTML('Revisions'); 11508500ab3SSatoshi Sahara 11608500ab3SSatoshi Sahara // provide navigation for pagenated revision list (of pages and/or media files) 117ae5d2354SSatoshi Sahara print $this->navigation($first, $hasNext, function ($n) { 118ae5d2354SSatoshi Sahara return media_managerURL(['first' => $n], '&', false, true); 119ae5d2354SSatoshi Sahara }); 12008500ab3SSatoshi Sahara } 12108500ab3SSatoshi Sahara 12208500ab3SSatoshi Sahara} 123