1b370ebcdSSatoshi Sahara<?php 2b370ebcdSSatoshi Sahara 3b370ebcdSSatoshi Saharanamespace dokuwiki\Ui; 4b370ebcdSSatoshi Sahara 5b370ebcdSSatoshi Saharause dokuwiki\ChangeLog\PageChangeLog; 6bf3fa5e9SSatoshi Saharause dokuwiki\ChangeLog\RevisionInfo; 7b370ebcdSSatoshi Saharause dokuwiki\Form\Form; 8b370ebcdSSatoshi Sahara 9b370ebcdSSatoshi Sahara/** 10b370ebcdSSatoshi Sahara * DokuWiki PageRevisions Interface 11b370ebcdSSatoshi Sahara * 12b370ebcdSSatoshi Sahara * @package dokuwiki\Ui 13b370ebcdSSatoshi Sahara */ 14ae5d2354SSatoshi Saharaclass PageRevisions extends Revisions 15b370ebcdSSatoshi Sahara{ 16d9c75b22SSatoshi Sahara /* @var PageChangeLog */ 17d9c75b22SSatoshi Sahara protected $changelog; 18d9c75b22SSatoshi Sahara 19b370ebcdSSatoshi Sahara /** 20b370ebcdSSatoshi Sahara * PageRevisions Ui constructor 21b370ebcdSSatoshi Sahara * 22b370ebcdSSatoshi Sahara * @param string $id id of page 23b370ebcdSSatoshi Sahara */ 2492440599SSatoshi Sahara public function __construct($id = null) 25b370ebcdSSatoshi Sahara { 263244a325SSatoshi Sahara global $INFO; 2787922387SSatoshi Sahara if (!isset($id)) $id = $INFO['id']; 28ae5d2354SSatoshi Sahara parent::__construct($id); 29b370ebcdSSatoshi Sahara } 30b370ebcdSSatoshi Sahara 31e71e09a6SSatoshi Sahara /** @inheritdoc */ 32e71e09a6SSatoshi Sahara protected function setChangeLog() 33e71e09a6SSatoshi Sahara { 34e71e09a6SSatoshi Sahara $this->changelog = new PageChangeLog($this->id); 35e71e09a6SSatoshi Sahara } 36e71e09a6SSatoshi Sahara 37b370ebcdSSatoshi Sahara /** 38b370ebcdSSatoshi Sahara * Display list of old revisions of the page 39b370ebcdSSatoshi Sahara * 40e2d055f5SAndreas Gohr * @param int $first skip the first n changelog lines 41e2d055f5SAndreas Gohr * @return void 42b370ebcdSSatoshi Sahara * @author Kate Arzamastseva <pshns@ukr.net> 43b370ebcdSSatoshi Sahara * @author Satoshi Sahara <sahara.satoshi@gmail.com> 44b370ebcdSSatoshi Sahara * 45e2d055f5SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 46e2d055f5SAndreas Gohr * @author Ben Coburn <btcoburn@silicodon.net> 47b370ebcdSSatoshi Sahara */ 48a46cc3dcSAndreas Gohr public function show($first = -1) 49b370ebcdSSatoshi Sahara { 503c18288cSSatoshi Sahara global $lang, $REV; 51ad088cbcSSatoshi Sahara $changelog =& $this->changelog; 52b370ebcdSSatoshi Sahara 53eeda7adaSGerrit Uitslag // get revisions, and set correct pagination parameters (first, hasNext) 54a46cc3dcSAndreas Gohr if ($first === null) $first = -1; 55b370ebcdSSatoshi Sahara $hasNext = false; 56b370ebcdSSatoshi Sahara $revisions = $this->getRevisions($first, $hasNext); 57b370ebcdSSatoshi Sahara 58b370ebcdSSatoshi Sahara // print intro 59*26dfc232SAndreas Gohr echo p_locale_xhtml('revisions'); 60b370ebcdSSatoshi Sahara 61b370ebcdSSatoshi Sahara // create the form 62b370ebcdSSatoshi Sahara $form = new Form([ 63b370ebcdSSatoshi Sahara 'id' => 'page__revisions', 64b370ebcdSSatoshi Sahara 'class' => 'changes', 65b370ebcdSSatoshi Sahara ]); 66b370ebcdSSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 67b370ebcdSSatoshi Sahara 68b370ebcdSSatoshi Sahara // start listing 69b370ebcdSSatoshi Sahara $form->addTagOpen('ul'); 70b370ebcdSSatoshi Sahara foreach ($revisions as $info) { 71b370ebcdSSatoshi Sahara $rev = $info['date']; 724d8dc0ceSTherealperO $info['media'] = false; 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' : ''; 77b370ebcdSSatoshi Sahara $form->addTagOpen('li')->addClass($class); 78b370ebcdSSatoshi Sahara $form->addTagOpen('div')->addClass('li'); 79b370ebcdSSatoshi Sahara 80b428a50aSSatoshi Sahara if ($RevInfo->isCurrent()) { 81d1575179SSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 823c18288cSSatoshi Sahara } elseif ($rev == $REV) { 833c18288cSSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev)->attr('checked', 'checked'); 843c18288cSSatoshi Sahara } elseif (page_exists($this->id, $rev)) { 85b370ebcdSSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 86b370ebcdSSatoshi Sahara } else { 87b370ebcdSSatoshi Sahara $form->addCheckbox('')->val($rev)->attr('disabled', 'disabled'); 88b370ebcdSSatoshi Sahara } 89b370ebcdSSatoshi Sahara $form->addHTML(' '); 90b370ebcdSSatoshi Sahara 91b370ebcdSSatoshi Sahara $html = implode(' ', [ 92b428a50aSSatoshi Sahara $RevInfo->showEditDate(true), // edit date and time 93b428a50aSSatoshi Sahara $RevInfo->showIconCompareWithCurrent(), // link to diff view icon 94b428a50aSSatoshi Sahara $RevInfo->showFileName(), // name of page or media 95b428a50aSSatoshi Sahara $RevInfo->showEditSummary(), // edit summary 96b428a50aSSatoshi Sahara $RevInfo->showEditor(), // editor info 97b428a50aSSatoshi Sahara $RevInfo->showSizechange(), // size change indicator 98b428a50aSSatoshi Sahara $RevInfo->showCurrentIndicator(), // current indicator (only when k=1) 99b370ebcdSSatoshi Sahara ]); 100b370ebcdSSatoshi Sahara $form->addHTML($html); 101b370ebcdSSatoshi Sahara $form->addTagClose('div'); 102b370ebcdSSatoshi Sahara $form->addTagClose('li'); 103b370ebcdSSatoshi Sahara } 104b370ebcdSSatoshi Sahara $form->addTagClose('ul'); // end of revision list 105b370ebcdSSatoshi Sahara 106b370ebcdSSatoshi Sahara // show button for diff view 107b370ebcdSSatoshi Sahara $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit'); 108b370ebcdSSatoshi Sahara 109b370ebcdSSatoshi Sahara $form->addTagClose('div'); // close div class=no 110b370ebcdSSatoshi Sahara 111*26dfc232SAndreas Gohr echo $form->toHTML('Revisions'); 112b370ebcdSSatoshi Sahara 113ad088cbcSSatoshi Sahara // provide navigation for paginated revision list (of pages and/or media files) 114*26dfc232SAndreas Gohr echo $this->navigation($first, $hasNext, static fn($n) => ['do' => 'revisions', 'first' => $n]); 115b370ebcdSSatoshi Sahara } 116b370ebcdSSatoshi Sahara} 117