16c9fde82SSatoshi Sahara<?php 26c9fde82SSatoshi Sahara 36c9fde82SSatoshi Saharanamespace dokuwiki\Ui; 46c9fde82SSatoshi Sahara 56c9fde82SSatoshi Saharause dokuwiki\ChangeLog\PageChangeLog; 66c9fde82SSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog; 76c9fde82SSatoshi Saharause dokuwiki\Extension\Event; 86c9fde82SSatoshi Saharause dokuwiki\Form\Form; 96c9fde82SSatoshi Sahara 106c9fde82SSatoshi Sahara/** 119e316641SSatoshi Sahara * DokuWiki Revisions Interface 126c9fde82SSatoshi Sahara * 136c9fde82SSatoshi Sahara * @package dokuwiki\Ui 146c9fde82SSatoshi Sahara */ 156c9fde82SSatoshi Saharaclass Revisions extends Ui 166c9fde82SSatoshi Sahara{ 179e316641SSatoshi Sahara protected $first; 189e316641SSatoshi Sahara protected $media_id; 199e316641SSatoshi Sahara 209e316641SSatoshi Sahara /** 219e316641SSatoshi Sahara * Revisions Ui constructor 229e316641SSatoshi Sahara * 239e316641SSatoshi Sahara * @param int $first skip the first n changelog lines 249e316641SSatoshi Sahara * @param bool|string $media_id id of media, or false for current page 259e316641SSatoshi Sahara */ 269e316641SSatoshi Sahara public function __construct($first = 0, $media_id = false) 279e316641SSatoshi Sahara { 289e316641SSatoshi Sahara $this->first = $first; 299e316641SSatoshi Sahara $this->media_id = $media_id; 309e316641SSatoshi Sahara } 319e316641SSatoshi Sahara 326c9fde82SSatoshi Sahara /** 336c9fde82SSatoshi Sahara * Display list of old revisions 346c9fde82SSatoshi Sahara * 356c9fde82SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 366c9fde82SSatoshi Sahara * @author Ben Coburn <btcoburn@silicodon.net> 376c9fde82SSatoshi Sahara * @author Kate Arzamastseva <pshns@ukr.net> 386c9fde82SSatoshi Sahara * 396c9fde82SSatoshi Sahara * @triggers HTML_REVISIONSFORM_OUTPUT 406c9fde82SSatoshi Sahara * @return void 416c9fde82SSatoshi Sahara */ 429e316641SSatoshi Sahara public function show() 436c9fde82SSatoshi Sahara { 446c9fde82SSatoshi Sahara global $ID; 45*67ef3e88SSatoshi Sahara 46*67ef3e88SSatoshi Sahara if ($this->media_id) { 47*67ef3e88SSatoshi Sahara return $this->showMediaRevisions($this->media_id); 48*67ef3e88SSatoshi Sahara } else { 49*67ef3e88SSatoshi Sahara return $this->showPageRevisions($ID); 50*67ef3e88SSatoshi Sahara } 51*67ef3e88SSatoshi Sahara } 52*67ef3e88SSatoshi Sahara 53*67ef3e88SSatoshi Sahara /** 54*67ef3e88SSatoshi Sahara * Display a list of Media Revisions in the MediaManager 55*67ef3e88SSatoshi Sahara * 56*67ef3e88SSatoshi Sahara * @param string $id media id 57*67ef3e88SSatoshi Sahara * @return void 58*67ef3e88SSatoshi Sahara */ 59*67ef3e88SSatoshi Sahara protected function showMediaRevisions($id) 60*67ef3e88SSatoshi Sahara { 616c9fde82SSatoshi Sahara global $lang; 629e316641SSatoshi Sahara 63*67ef3e88SSatoshi Sahara // get revisions, and set correct pagenation parameters (first, hasNext) 649e316641SSatoshi Sahara $first = $this->first; 656c9fde82SSatoshi Sahara $hasNext = false; 66*67ef3e88SSatoshi Sahara $revisions = $this->getRevisions($first, $hasNext); 676c9fde82SSatoshi Sahara 686c9fde82SSatoshi Sahara // create the form 69*67ef3e88SSatoshi Sahara $form = new Form([ 70*67ef3e88SSatoshi Sahara 'id' => 'page__revisions', // must not be "media__revisions" 71*67ef3e88SSatoshi Sahara 'action' => media_managerURL(['image' => $id], '&'), 72*67ef3e88SSatoshi Sahara 'class' => 'changes', 73*67ef3e88SSatoshi Sahara ]); 74*67ef3e88SSatoshi Sahara $form->setHiddenField('mediado', 'diff'); // required for media revisions 75c2bf454bSSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 766c9fde82SSatoshi Sahara 776c9fde82SSatoshi Sahara // start listing 786c9fde82SSatoshi Sahara $form->addTagOpen('ul'); 79*67ef3e88SSatoshi Sahara foreach ($revisions as $info) { 80*67ef3e88SSatoshi Sahara $rev = $info['date']; 81*67ef3e88SSatoshi Sahara $class = ($info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : ''; 826c9fde82SSatoshi Sahara $form->addTagOpen('li')->addClass($class); 836c9fde82SSatoshi Sahara $form->addTagOpen('div')->addClass('li'); 846c9fde82SSatoshi Sahara 85*67ef3e88SSatoshi Sahara if (isset($info['current'])) { 86*67ef3e88SSatoshi Sahara $form->addCheckbox('rev2[]')->val('current'); 87*67ef3e88SSatoshi Sahara } elseif (file_exists(mediaFN($id, $rev))) { 886c9fde82SSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 896c9fde82SSatoshi Sahara } else { 90*67ef3e88SSatoshi Sahara $form->addCheckbox('')->val($rev)->attr('disabled','disabled'); 91*67ef3e88SSatoshi Sahara } 92*67ef3e88SSatoshi Sahara $form->addHTML(' '); 93*67ef3e88SSatoshi Sahara 94*67ef3e88SSatoshi Sahara $objRevInfo = $this->getObjRevInfo($info); 95*67ef3e88SSatoshi Sahara $html = implode(' ', [ 96*67ef3e88SSatoshi Sahara $objRevInfo->editDate(), // edit date and time 97*67ef3e88SSatoshi Sahara $objRevInfo->difflink(), // link to diffview icon 98*67ef3e88SSatoshi Sahara $objRevInfo->itemName(), // name of page or media 99*67ef3e88SSatoshi Sahara '<div>', 100*67ef3e88SSatoshi Sahara $objRevInfo->editSummary(), // edit summary 101*67ef3e88SSatoshi Sahara $objRevInfo->editor(), // editor info 102*67ef3e88SSatoshi Sahara html_sizechange($info['sizechange']), // size change indicator 103*67ef3e88SSatoshi Sahara $objRevInfo->currentIndicator(), // current indicator (only when k=1) 104*67ef3e88SSatoshi Sahara '</div>', 1056c9fde82SSatoshi Sahara ]); 106*67ef3e88SSatoshi Sahara $form->addHTML($html); 1076c9fde82SSatoshi Sahara 1086c9fde82SSatoshi Sahara $form->addTagClose('div'); 1096c9fde82SSatoshi Sahara $form->addTagClose('li'); 1106c9fde82SSatoshi Sahara } 111*67ef3e88SSatoshi Sahara $form->addTagClose('ul'); // end of revision list 1126c9fde82SSatoshi Sahara 1136c9fde82SSatoshi Sahara // show button for diff view 1146c9fde82SSatoshi Sahara $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit'); 1156c9fde82SSatoshi Sahara 1166c9fde82SSatoshi Sahara $form->addTagClose('div'); // close div class=no 1176c9fde82SSatoshi Sahara 118c29600d0SSatoshi Sahara // emit HTML_REVISIONSFORM_OUTPUT event 119c29600d0SSatoshi Sahara Event::createAndTrigger('HTML_REVISIONSFORM_OUTPUT', $form, null, false); 120c29600d0SSatoshi Sahara print $form->toHTML(); 1216c9fde82SSatoshi Sahara 122*67ef3e88SSatoshi Sahara // provide navigation for pagenated revision list (of pages and/or media files) 123*67ef3e88SSatoshi Sahara print $this->htmlNavigation($id, $first, $hasNext); 124*67ef3e88SSatoshi Sahara } 125*67ef3e88SSatoshi Sahara 126*67ef3e88SSatoshi Sahara /** 127*67ef3e88SSatoshi Sahara * Display a list of Page Revisions 128*67ef3e88SSatoshi Sahara * 129*67ef3e88SSatoshi Sahara * @return void 130*67ef3e88SSatoshi Sahara */ 131*67ef3e88SSatoshi Sahara protected function showPageRevisions($id) 132*67ef3e88SSatoshi Sahara { 133*67ef3e88SSatoshi Sahara global $lang; 134*67ef3e88SSatoshi Sahara 135*67ef3e88SSatoshi Sahara // get revisions, and set correct pagenation parameters (first, hasNext) 136*67ef3e88SSatoshi Sahara $first = $this->first; 137*67ef3e88SSatoshi Sahara $hasNext = false; 138*67ef3e88SSatoshi Sahara $revisions = $this->getRevisions($first, $hasNext); 139*67ef3e88SSatoshi Sahara 140*67ef3e88SSatoshi Sahara // print intro 141*67ef3e88SSatoshi Sahara print p_locale_xhtml('revisions'); 142*67ef3e88SSatoshi Sahara 143*67ef3e88SSatoshi Sahara // create the form 144*67ef3e88SSatoshi Sahara $form = new Form([ 145*67ef3e88SSatoshi Sahara 'id' => 'page__revisions', 146*67ef3e88SSatoshi Sahara 'class' => 'changes', 147*67ef3e88SSatoshi Sahara ]); 148*67ef3e88SSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 149*67ef3e88SSatoshi Sahara 150*67ef3e88SSatoshi Sahara // start listing 151*67ef3e88SSatoshi Sahara $form->addTagOpen('ul'); 152*67ef3e88SSatoshi Sahara foreach ($revisions as $info) { 153*67ef3e88SSatoshi Sahara $rev = $info['date']; 154*67ef3e88SSatoshi Sahara $class = ($info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : ''; 155*67ef3e88SSatoshi Sahara $form->addTagOpen('li')->addClass($class); 156*67ef3e88SSatoshi Sahara $form->addTagOpen('div')->addClass('li'); 157*67ef3e88SSatoshi Sahara 158*67ef3e88SSatoshi Sahara if (page_exists($id, $rev)) { 159*67ef3e88SSatoshi Sahara $form->addCheckbox('rev2[]')->val($rev); 160*67ef3e88SSatoshi Sahara } else { 161*67ef3e88SSatoshi Sahara $form->addCheckbox('')->val($rev)->attr('disabled','disabled'); 162*67ef3e88SSatoshi Sahara } 163*67ef3e88SSatoshi Sahara $form->addHTML(' '); 164*67ef3e88SSatoshi Sahara 165*67ef3e88SSatoshi Sahara $objRevInfo = $this->getObjRevInfo($info); 166*67ef3e88SSatoshi Sahara $html = implode(' ', [ 167*67ef3e88SSatoshi Sahara $objRevInfo->editDate(), // edit date and time 168*67ef3e88SSatoshi Sahara $objRevInfo->difflink(), // link to diffview icon 169*67ef3e88SSatoshi Sahara $objRevInfo->itemName(), // name of page or media 170*67ef3e88SSatoshi Sahara $objRevInfo->editSummary(), // edit summary 171*67ef3e88SSatoshi Sahara $objRevInfo->editor(), // editor info 172*67ef3e88SSatoshi Sahara html_sizechange($info['sizechange']), // size change indicator 173*67ef3e88SSatoshi Sahara $objRevInfo->currentIndicator(), // current indicator (only when k=1) 174*67ef3e88SSatoshi Sahara ]); 175*67ef3e88SSatoshi Sahara $form->addHTML($html); 176*67ef3e88SSatoshi Sahara $form->addTagClose('div'); 177*67ef3e88SSatoshi Sahara $form->addTagClose('li'); 178*67ef3e88SSatoshi Sahara } 179*67ef3e88SSatoshi Sahara $form->addTagClose('ul'); // end of revision list 180*67ef3e88SSatoshi Sahara 181*67ef3e88SSatoshi Sahara // show button for diff view 182*67ef3e88SSatoshi Sahara $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit'); 183*67ef3e88SSatoshi Sahara 184*67ef3e88SSatoshi Sahara $form->addTagClose('div'); // close div class=no 185*67ef3e88SSatoshi Sahara 186*67ef3e88SSatoshi Sahara // emit HTML_REVISIONSFORM_OUTPUT event 187*67ef3e88SSatoshi Sahara Event::createAndTrigger('HTML_REVISIONSFORM_OUTPUT', $form, null, false); 188*67ef3e88SSatoshi Sahara print $form->toHTML(); 1896c9fde82SSatoshi Sahara 1906c9fde82SSatoshi Sahara // provide navigation for pagenated revision list (of pages and/or media files) 191*67ef3e88SSatoshi Sahara print $this->htmlNavigation($id, $first, $hasNext); 192*67ef3e88SSatoshi Sahara } 193*67ef3e88SSatoshi Sahara 194*67ef3e88SSatoshi Sahara 195*67ef3e88SSatoshi Sahara /** 196*67ef3e88SSatoshi Sahara * Get revisions, and set correct pagenation parameters (first, hasNext) 197*67ef3e88SSatoshi Sahara * 198*67ef3e88SSatoshi Sahara * @param int $first 199*67ef3e88SSatoshi Sahara * @param bool $hasNext 200*67ef3e88SSatoshi Sahara * @return array revisions to be shown in a pagenated list 201*67ef3e88SSatoshi Sahara */ 202*67ef3e88SSatoshi Sahara protected function getRevisions(&$first, &$hasNext) 203*67ef3e88SSatoshi Sahara { 204*67ef3e88SSatoshi Sahara global $INFO, $conf; 205*67ef3e88SSatoshi Sahara 206*67ef3e88SSatoshi Sahara if ($this->media_id) { 207*67ef3e88SSatoshi Sahara $changelog = new MediaChangeLog($this->media_id); 208*67ef3e88SSatoshi Sahara } else { 209*67ef3e88SSatoshi Sahara $changelog = new PageChangeLog($INFO['id']); 210*67ef3e88SSatoshi Sahara } 211*67ef3e88SSatoshi Sahara 212*67ef3e88SSatoshi Sahara $revisions = []; 213*67ef3e88SSatoshi Sahara 214*67ef3e88SSatoshi Sahara /* we need to get one additional log entry to be able to 215*67ef3e88SSatoshi Sahara * decide if this is the last page or is there another one. 216*67ef3e88SSatoshi Sahara * see also Ui\Recent::getRecents() 217*67ef3e88SSatoshi Sahara */ 218*67ef3e88SSatoshi Sahara $revlist = $changelog->getRevisions($first, $conf['recent'] +1); 219*67ef3e88SSatoshi Sahara if (count($revlist) == 0 && $first != 0) { 220*67ef3e88SSatoshi Sahara $first = 0; 221*67ef3e88SSatoshi Sahara $revlist = $changelog->getRevisions($first, $conf['recent'] +1); 222*67ef3e88SSatoshi Sahara } 223*67ef3e88SSatoshi Sahara $exists = ($this->media_id) ? file_exists(mediaFN($this->media_id)) : $INFO['exists']; 224*67ef3e88SSatoshi Sahara if ($first === 0 && $exists) { 225*67ef3e88SSatoshi Sahara // add current page or media as revision[0] 226*67ef3e88SSatoshi Sahara if ($this->media_id) { 227*67ef3e88SSatoshi Sahara $rev = filemtime(fullpath(mediaFN($this->media_id))); 228*67ef3e88SSatoshi Sahara $revisions[] = $changelog->getRevisionInfo($rev) + array( 229*67ef3e88SSatoshi Sahara 'media' => true, 230*67ef3e88SSatoshi Sahara 'current' => true, 231*67ef3e88SSatoshi Sahara ); 232*67ef3e88SSatoshi Sahara } else { 233*67ef3e88SSatoshi Sahara $revisions[] = array( 234*67ef3e88SSatoshi Sahara 'date' => $INFO['lastmod'], 235*67ef3e88SSatoshi Sahara 'ip' => null, 236*67ef3e88SSatoshi Sahara 'type' => $INFO['meta']['last_change']['type'], 237*67ef3e88SSatoshi Sahara 'id' => $INFO['id'], 238*67ef3e88SSatoshi Sahara 'user' => $INFO['editor'], 239*67ef3e88SSatoshi Sahara 'sum' => $INFO['sum'], 240*67ef3e88SSatoshi Sahara 'extra' => null, 241*67ef3e88SSatoshi Sahara 'sizechange' => $INFO['meta']['last_change']['sizechange'], 242*67ef3e88SSatoshi Sahara 'current' => true, 243*67ef3e88SSatoshi Sahara ); 244*67ef3e88SSatoshi Sahara } 245*67ef3e88SSatoshi Sahara } 246*67ef3e88SSatoshi Sahara 247*67ef3e88SSatoshi Sahara // decide if this is the last page or is there another one 248*67ef3e88SSatoshi Sahara $hasNext = false; 249*67ef3e88SSatoshi Sahara if (count($revlist) > $conf['recent']) { 250*67ef3e88SSatoshi Sahara $hasNext = true; 251*67ef3e88SSatoshi Sahara array_pop($revlist); // remove one additional log entry 252*67ef3e88SSatoshi Sahara } 253*67ef3e88SSatoshi Sahara 254*67ef3e88SSatoshi Sahara // append each revison info array to the revisions 255*67ef3e88SSatoshi Sahara foreach ($revlist as $rev) { 256*67ef3e88SSatoshi Sahara if ($this->media_id) { 257*67ef3e88SSatoshi Sahara $revisions[] = $changelog->getRevisionInfo($rev) + array('media' => true); 258*67ef3e88SSatoshi Sahara } else { 259*67ef3e88SSatoshi Sahara $revisions[] = $changelog->getRevisionInfo($rev); 260*67ef3e88SSatoshi Sahara } 261*67ef3e88SSatoshi Sahara } 262*67ef3e88SSatoshi Sahara return $revisions; 263*67ef3e88SSatoshi Sahara } 264*67ef3e88SSatoshi Sahara 265*67ef3e88SSatoshi Sahara /** 266*67ef3e88SSatoshi Sahara * Navigation buttons for Pagenation (prev/next) 267*67ef3e88SSatoshi Sahara * 268*67ef3e88SSatoshi Sahara * @param string $id page id or media id 269*67ef3e88SSatoshi Sahara * @param int $first 270*67ef3e88SSatoshi Sahara * @param bool $hasNext 271*67ef3e88SSatoshi Sahara * @return array html 272*67ef3e88SSatoshi Sahara */ 273*67ef3e88SSatoshi Sahara protected function htmlNavigation($id, $first, $hasNext) 274*67ef3e88SSatoshi Sahara { 275*67ef3e88SSatoshi Sahara global $conf; 276*67ef3e88SSatoshi Sahara 277*67ef3e88SSatoshi Sahara $html = '<div class="pagenav">'; 2786c9fde82SSatoshi Sahara $last = $first + $conf['recent']; 2796c9fde82SSatoshi Sahara if ($first > 0) { 280*67ef3e88SSatoshi Sahara $first = max($first - $conf['recent'], 0); 281*67ef3e88SSatoshi Sahara $html.= '<div class="pagenav-prev">'; 282*67ef3e88SSatoshi Sahara if ($this->media_id) { 283*67ef3e88SSatoshi Sahara $html.= html_btn('newer', $id, "p", media_managerURL(['first' => $first], '&', false, true)); 2846c9fde82SSatoshi Sahara } else { 285*67ef3e88SSatoshi Sahara $html.= html_btn('newer', $id, "p" ,['do' => 'revisions', 'first' => $first]); 2866c9fde82SSatoshi Sahara } 287*67ef3e88SSatoshi Sahara $html.= '</div>'; 2886c9fde82SSatoshi Sahara } 2896c9fde82SSatoshi Sahara if ($hasNext) { 290*67ef3e88SSatoshi Sahara $html.= '<div class="pagenav-next">'; 291*67ef3e88SSatoshi Sahara if ($this->media_id) { 292*67ef3e88SSatoshi Sahara $html.= html_btn('older', $id, "n", media_managerURL(['first' => $last], '&', false, true)); 2936c9fde82SSatoshi Sahara } else { 294*67ef3e88SSatoshi Sahara $html.= html_btn('older', $id, "n", ['do' => 'revisions', 'first' => $last]); 2956c9fde82SSatoshi Sahara } 296*67ef3e88SSatoshi Sahara $html.= '</div>'; 2976c9fde82SSatoshi Sahara } 298*67ef3e88SSatoshi Sahara $html.= '</div>'; 299*67ef3e88SSatoshi Sahara return $html; 300*67ef3e88SSatoshi Sahara } 3016c9fde82SSatoshi Sahara 302*67ef3e88SSatoshi Sahara/* ---------------------------------------------------------------------------------------- 303*67ef3e88SSatoshi Sahara $html = implode(' ', [ // Ui\Recent display // Ui\Revisions display 304*67ef3e88SSatoshi Sahara $objRevInfo->itemIcon(), // filetype icon 305*67ef3e88SSatoshi Sahara $objRevInfo->editDate(), // edit date and time // edit date and time 306*67ef3e88SSatoshi Sahara $objRevInfo->difflink(), // link to diffview icon // link to diffview icon 307*67ef3e88SSatoshi Sahara $objRevInfo->revisionlink(), // linkto revisions icon 308*67ef3e88SSatoshi Sahara $objRevInfo->itemName(), // name of page or media // name of page 309*67ef3e88SSatoshi Sahara $objRevInfo->editSummary(), // edit summary // edit summary 310*67ef3e88SSatoshi Sahara $objRevInfo->editor(), // editor info // editor info 311*67ef3e88SSatoshi Sahara html_sizechange // size change indicator // size change indicator 312*67ef3e88SSatoshi Sahara // current indicator (only when k=1) 313*67ef3e88SSatoshi Sahara ]); 314*67ef3e88SSatoshi Sahara * ---------------------------------------------------------------------------------------- */ 315*67ef3e88SSatoshi Sahara 316*67ef3e88SSatoshi Sahara /** 317*67ef3e88SSatoshi Sahara * Returns instance of objRevInfo 318*67ef3e88SSatoshi Sahara * 319*67ef3e88SSatoshi Sahara * @param array $info Revision info structure of a page or media file 320*67ef3e88SSatoshi Sahara * @return objRevInfo object (anonymous class) 321*67ef3e88SSatoshi Sahara */ 322*67ef3e88SSatoshi Sahara protected function getObjRevInfo(array $info) 323*67ef3e88SSatoshi Sahara { 324*67ef3e88SSatoshi Sahara return new class ($info) // anonymous class (objRevInfo) 325*67ef3e88SSatoshi Sahara { 326*67ef3e88SSatoshi Sahara protected $info; 327*67ef3e88SSatoshi Sahara 328*67ef3e88SSatoshi Sahara public function __construct(array $info) 329*67ef3e88SSatoshi Sahara { 330*67ef3e88SSatoshi Sahara $this->info = $info; 331*67ef3e88SSatoshi Sahara } 332*67ef3e88SSatoshi Sahara 333*67ef3e88SSatoshi Sahara // current indicator 334*67ef3e88SSatoshi Sahara public function currentIndicator() 335*67ef3e88SSatoshi Sahara { 336*67ef3e88SSatoshi Sahara global $lang; 337*67ef3e88SSatoshi Sahara return ($this->info['current']) ? '('.$lang['current'].')' : ''; 338*67ef3e88SSatoshi Sahara } 339*67ef3e88SSatoshi Sahara 340*67ef3e88SSatoshi Sahara // edit date and time of the page or media file 341*67ef3e88SSatoshi Sahara public function editDate() 342*67ef3e88SSatoshi Sahara { 343*67ef3e88SSatoshi Sahara return '<span class="date">'. dformat($this->info['date']) .'</span>'; 344*67ef3e88SSatoshi Sahara } 345*67ef3e88SSatoshi Sahara 346*67ef3e88SSatoshi Sahara // edit summary 347*67ef3e88SSatoshi Sahara public function editSummary() 348*67ef3e88SSatoshi Sahara { 349*67ef3e88SSatoshi Sahara return '<span class="sum">'.' – '. hsc($this->info['sum']).'</span>'; 350*67ef3e88SSatoshi Sahara } 351*67ef3e88SSatoshi Sahara 352*67ef3e88SSatoshi Sahara // editor of the page or media file 353*67ef3e88SSatoshi Sahara public function editor() 354*67ef3e88SSatoshi Sahara { 355*67ef3e88SSatoshi Sahara // slightly different with display of Ui\Recent, i.e. external edit 356*67ef3e88SSatoshi Sahara global $lang; 357*67ef3e88SSatoshi Sahara $html = '<span class="user">'; 358*67ef3e88SSatoshi Sahara if (!$this->info['user'] && !$this->info['ip']) { 359*67ef3e88SSatoshi Sahara $html.= '('.$lang['external_edit'].')'; 360*67ef3e88SSatoshi Sahara } elseif ($this->info['user']) { 361*67ef3e88SSatoshi Sahara $html.= '<bdi>'. editorinfo($this->info['user']) .'</bdi>'; 362*67ef3e88SSatoshi Sahara if (auth_ismanager()) $html.= ' <bdo dir="ltr">('. $this->info['ip'] .')</bdo>'; 363*67ef3e88SSatoshi Sahara } else { 364*67ef3e88SSatoshi Sahara $html.= '<bdo dir="ltr">'. $this->info['ip'] .'</bdo>'; 365*67ef3e88SSatoshi Sahara } 366*67ef3e88SSatoshi Sahara $html.= '</span>'; 367*67ef3e88SSatoshi Sahara return $html; 368*67ef3e88SSatoshi Sahara } 369*67ef3e88SSatoshi Sahara 370*67ef3e88SSatoshi Sahara // name of the page or media file 371*67ef3e88SSatoshi Sahara public function itemName() 372*67ef3e88SSatoshi Sahara { 373*67ef3e88SSatoshi Sahara // slightly different with display of Ui\Recent, i.e. revison may not exists 374*67ef3e88SSatoshi Sahara $id = $this->info['id']; 375*67ef3e88SSatoshi Sahara $rev = $this->info['date']; 376*67ef3e88SSatoshi Sahara 377*67ef3e88SSatoshi Sahara if (isset($this->info['media'])) { 378*67ef3e88SSatoshi Sahara // media file revision 379*67ef3e88SSatoshi Sahara if (isset($this->info['current'])) { 380*67ef3e88SSatoshi Sahara $href = media_managerURL(['image'=> $id, 'tab_details'=> 'view'], '&'); 381*67ef3e88SSatoshi Sahara $html = '<a href="'.$href.'" class="wikilink1">'.$id.'</a>'; 382*67ef3e88SSatoshi Sahara } elseif (file_exists(mediaFN($id, $rev))) { 383*67ef3e88SSatoshi Sahara $href = media_managerURL(['image'=> $id, 'tab_details'=> 'view', 'rev'=> $rev], '&'); 384*67ef3e88SSatoshi Sahara $html = '<a href="'.$href.'" class="wikilink1">'.$id.'</a>'; 385*67ef3e88SSatoshi Sahara } else { 386*67ef3e88SSatoshi Sahara $html = $id; 387*67ef3e88SSatoshi Sahara } 388*67ef3e88SSatoshi Sahara return $html; 389*67ef3e88SSatoshi Sahara } else { 390*67ef3e88SSatoshi Sahara // page revision 391*67ef3e88SSatoshi Sahara $display_name = useHeading('navigation') ? hsc(p_get_first_heading($id)) : $id; 392*67ef3e88SSatoshi Sahara if (!$display_name) $display_name = $id; 393*67ef3e88SSatoshi Sahara if ($this->info['current'] || page_exists($id, $rev)) { 394*67ef3e88SSatoshi Sahara $href = wl($id, "rev=$rev", false, '&'); 395*67ef3e88SSatoshi Sahara $html = '<a href="'.$href.'" class="wikilink1">'.$display_name.'</a>'; 396*67ef3e88SSatoshi Sahara } else { 397*67ef3e88SSatoshi Sahara $html = $display_name; 398*67ef3e88SSatoshi Sahara } 399*67ef3e88SSatoshi Sahara return $html; 400*67ef3e88SSatoshi Sahara } 401*67ef3e88SSatoshi Sahara } 402*67ef3e88SSatoshi Sahara 403*67ef3e88SSatoshi Sahara // icon difflink 404*67ef3e88SSatoshi Sahara public function difflink() 405*67ef3e88SSatoshi Sahara { 406*67ef3e88SSatoshi Sahara global $lang; 407*67ef3e88SSatoshi Sahara $id = $this->info['id']; 408*67ef3e88SSatoshi Sahara $rev = $this->info['date']; 409*67ef3e88SSatoshi Sahara 410*67ef3e88SSatoshi Sahara if (isset($this->info['media'])) { 411*67ef3e88SSatoshi Sahara // media file revision 412*67ef3e88SSatoshi Sahara if (isset($this->info['current']) || !file_exists(mediaFN($id, $rev))) { 413*67ef3e88SSatoshi Sahara $html = '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />'; 414*67ef3e88SSatoshi Sahara } else { 415*67ef3e88SSatoshi Sahara $href = media_managerURL(['image'=> $id, 'rev'=> $rev, 'mediado'=>'diff'], '&'); 416*67ef3e88SSatoshi Sahara $html = '<a href="'.$href.'" class="diff_link">' 417*67ef3e88SSatoshi Sahara . '<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"' 418*67ef3e88SSatoshi Sahara . ' title="'. $lang['diff'] .'" alt="'.$lang['diff'] .'" />' 419*67ef3e88SSatoshi Sahara . '</a> '; 420*67ef3e88SSatoshi Sahara } 421*67ef3e88SSatoshi Sahara return $html; 422*67ef3e88SSatoshi Sahara } else { 423*67ef3e88SSatoshi Sahara // page revision 424*67ef3e88SSatoshi Sahara if ($this->info['current'] || !page_exists($id, $rev)) { 425*67ef3e88SSatoshi Sahara $html = '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />'; 426*67ef3e88SSatoshi Sahara } else { 427*67ef3e88SSatoshi Sahara $href = wl($id, "rev=$rev,do=diff", false, '&'); 428*67ef3e88SSatoshi Sahara $html = '<a href="'.$href.'" class="diff_link">' 429*67ef3e88SSatoshi Sahara . '<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"' 430*67ef3e88SSatoshi Sahara . ' title="'.$lang['diff'].'" alt="'.$lang['diff'].'" />' 431*67ef3e88SSatoshi Sahara . '</a>'; 432*67ef3e88SSatoshi Sahara } 433*67ef3e88SSatoshi Sahara return $html; 434*67ef3e88SSatoshi Sahara } 435*67ef3e88SSatoshi Sahara } 436*67ef3e88SSatoshi Sahara 437*67ef3e88SSatoshi Sahara // size change 438*67ef3e88SSatoshi Sahara public function sizeChange() 439*67ef3e88SSatoshi Sahara { 440*67ef3e88SSatoshi Sahara $class = 'sizechange'; 441*67ef3e88SSatoshi Sahara $value = filesize_h(abs($this->info['sizechange'])); 442*67ef3e88SSatoshi Sahara if ($this->info['sizechange'] > 0) { 443*67ef3e88SSatoshi Sahara $class .= ' positive'; 444*67ef3e88SSatoshi Sahara $value = '+' . $value; 445*67ef3e88SSatoshi Sahara } elseif ($this->info['sizechange'] < 0) { 446*67ef3e88SSatoshi Sahara $class .= ' negative'; 447*67ef3e88SSatoshi Sahara $value = '-' . $value; 448*67ef3e88SSatoshi Sahara } else { 449*67ef3e88SSatoshi Sahara $value = '±' . $value; 450*67ef3e88SSatoshi Sahara } 451*67ef3e88SSatoshi Sahara return '<span class="'.$class.'">'.$value.'</span>'; 452*67ef3e88SSatoshi Sahara } 453*67ef3e88SSatoshi Sahara }; // end of anonymous class (objRevInfo) 4546c9fde82SSatoshi Sahara } 4556c9fde82SSatoshi Sahara 4566c9fde82SSatoshi Sahara} 457