1bf3fa5e9SSatoshi Sahara<?php 2bf3fa5e9SSatoshi Sahara 3bf3fa5e9SSatoshi Saharanamespace dokuwiki\ChangeLog; 4bf3fa5e9SSatoshi Sahara 5bf3fa5e9SSatoshi Sahara/** 6bf3fa5e9SSatoshi Sahara * Class RevisionInfo 7bf3fa5e9SSatoshi Sahara * 8eeda7adaSGerrit Uitslag * Provides methods to show Revision Information in DokuWiki Ui components: 9bf3fa5e9SSatoshi Sahara * - Ui\Recent 10bf3fa5e9SSatoshi Sahara * - Ui\PageRevisions 11bf3fa5e9SSatoshi Sahara * - Ui\MediaRevisions 12bf3fa5e9SSatoshi Sahara */ 13bf3fa5e9SSatoshi Saharaclass RevisionInfo 14bf3fa5e9SSatoshi Sahara{ 15b428a50aSSatoshi Sahara /* @var array */ 16bf3fa5e9SSatoshi Sahara protected $info; 17bf3fa5e9SSatoshi Sahara 18bf3fa5e9SSatoshi Sahara /** 19bf3fa5e9SSatoshi Sahara * Constructor 20bf3fa5e9SSatoshi Sahara * 21eeda7adaSGerrit Uitslag * @param array $info Revision Information structure with entries: 22bf3fa5e9SSatoshi Sahara * - date: unix timestamp 23bf3fa5e9SSatoshi Sahara * - ip: IPv4 or IPv6 address 24bf3fa5e9SSatoshi Sahara * - type: change type (log line type) 25bf3fa5e9SSatoshi Sahara * - id: page id 26bf3fa5e9SSatoshi Sahara * - user: user name 27bf3fa5e9SSatoshi Sahara * - sum: edit summary (or action reason) 28bf3fa5e9SSatoshi Sahara * - extra: extra data (varies by line type) 29bf3fa5e9SSatoshi Sahara * - sizechange: change of filesize 30bf3fa5e9SSatoshi Sahara * additionally, 313d727ea4SGerrit Uitslag * - current: (optional) whether current revision or not 32bf3fa5e9SSatoshi Sahara * - timestamp: (optional) set only when external edits occurred 33b428a50aSSatoshi Sahara * - mode: (internal use) ether "media" or "page" 34bf3fa5e9SSatoshi Sahara */ 35b428a50aSSatoshi Sahara public function __construct($info = null) 36bf3fa5e9SSatoshi Sahara { 37b428a50aSSatoshi Sahara if (is_array($info) && isset($info['id'])) { 38b428a50aSSatoshi Sahara // define strategy context 3929baf676STherealperO $info['mode'] = $info['media'] ? 'media' : 'page'; 40b428a50aSSatoshi Sahara } else { 41b428a50aSSatoshi Sahara $info = [ 42b428a50aSSatoshi Sahara 'mode' => 'page', 43b428a50aSSatoshi Sahara 'date' => false, 44b428a50aSSatoshi Sahara ]; 45b428a50aSSatoshi Sahara } 46bf3fa5e9SSatoshi Sahara $this->info = $info; 47bf3fa5e9SSatoshi Sahara } 48bf3fa5e9SSatoshi Sahara 49bf3fa5e9SSatoshi Sahara /** 50eeda7adaSGerrit Uitslag * Set or return whether this revision is current page or media file 51b428a50aSSatoshi Sahara * 52b428a50aSSatoshi Sahara * This method does not check exactly whether the revision is current or not. Instead, 53b428a50aSSatoshi Sahara * set value of associated "current" key for internal use. Some UI element like diff 54b428a50aSSatoshi Sahara * link button depend on relation to current page or media file. A changelog line does 55eeda7adaSGerrit Uitslag * not indicate whether it corresponds to current page or media file. 56b428a50aSSatoshi Sahara * 57b428a50aSSatoshi Sahara * @param bool $value true if the revision is current, otherwise false 58b428a50aSSatoshi Sahara * @return bool 59b428a50aSSatoshi Sahara */ 60b428a50aSSatoshi Sahara public function isCurrent($value = null) 61b428a50aSSatoshi Sahara { 62eeda7adaSGerrit Uitslag return (bool) $this->val('current', $value); 63b428a50aSSatoshi Sahara } 64b428a50aSSatoshi Sahara 65b428a50aSSatoshi Sahara /** 66eeda7adaSGerrit Uitslag * Return or set a value of associated key of revision information 67b428a50aSSatoshi Sahara * but does not allow to change values of existing keys 68b428a50aSSatoshi Sahara * 69b428a50aSSatoshi Sahara * @param string $key 70b428a50aSSatoshi Sahara * @param mixed $value 71b428a50aSSatoshi Sahara * @return string|null 72b428a50aSSatoshi Sahara */ 73b428a50aSSatoshi Sahara public function val($key, $value = null) 74b428a50aSSatoshi Sahara { 75b428a50aSSatoshi Sahara if (isset($value) && !array_key_exists($key, $this->info)) { 76b428a50aSSatoshi Sahara // setter, only for new keys 77b428a50aSSatoshi Sahara $this->info[$key] = $value; 78b428a50aSSatoshi Sahara } 79b428a50aSSatoshi Sahara if (array_key_exists($key, $this->info)) { 80b428a50aSSatoshi Sahara // getter 81b428a50aSSatoshi Sahara return $this->info[$key]; 82b428a50aSSatoshi Sahara } 83b428a50aSSatoshi Sahara return null; 84b428a50aSSatoshi Sahara } 85b428a50aSSatoshi Sahara 86b428a50aSSatoshi Sahara /** 87b428a50aSSatoshi Sahara * Set extra key-value to the revision information 88b428a50aSSatoshi Sahara * but does not allow to change values of existing keys 89b428a50aSSatoshi Sahara * @param array $info 90b428a50aSSatoshi Sahara * @return void 91b428a50aSSatoshi Sahara */ 92b428a50aSSatoshi Sahara public function append(array $info) 93b428a50aSSatoshi Sahara { 94b428a50aSSatoshi Sahara foreach ($info as $key => $value) { 95b428a50aSSatoshi Sahara $this->val($key, $value); 96b428a50aSSatoshi Sahara } 97b428a50aSSatoshi Sahara } 98b428a50aSSatoshi Sahara 99b428a50aSSatoshi Sahara 100b428a50aSSatoshi Sahara /** 101bf3fa5e9SSatoshi Sahara * file icon of the page or media file 102bf3fa5e9SSatoshi Sahara * used in [Ui\recent] 103bf3fa5e9SSatoshi Sahara * 104bf3fa5e9SSatoshi Sahara * @return string 105bf3fa5e9SSatoshi Sahara */ 106b428a50aSSatoshi Sahara public function showFileIcon() 107bf3fa5e9SSatoshi Sahara { 108b428a50aSSatoshi Sahara $id = $this->val('id'); 109*0603e565SAndreas Gohr if ($this->val('mode') == 'media') { 110*0603e565SAndreas Gohr // media file revision 111b428a50aSSatoshi Sahara return media_printicon($id); 112*0603e565SAndreas Gohr } elseif ($this->val('mode') == 'page') { 113*0603e565SAndreas Gohr // page revision 114b428a50aSSatoshi Sahara return '<img class="icon" src="'.DOKU_BASE.'lib/images/fileicons/file.png" alt="'.$id.'" />'; 115bf3fa5e9SSatoshi Sahara } 116bf3fa5e9SSatoshi Sahara } 117bf3fa5e9SSatoshi Sahara 118bf3fa5e9SSatoshi Sahara /** 119bf3fa5e9SSatoshi Sahara * edit date and time of the page or media file 120bf3fa5e9SSatoshi Sahara * used in [Ui\recent, Ui\Revisions] 121bf3fa5e9SSatoshi Sahara * 122bf3fa5e9SSatoshi Sahara * @param bool $checkTimestamp enable timestamp check, alter formatted string when timestamp is false 123bf3fa5e9SSatoshi Sahara * @return string 124bf3fa5e9SSatoshi Sahara */ 125b428a50aSSatoshi Sahara public function showEditDate($checkTimestamp = false) 126bf3fa5e9SSatoshi Sahara { 127b428a50aSSatoshi Sahara $formatted = dformat($this->val('date')); 128b428a50aSSatoshi Sahara if ($checkTimestamp && $this->val('timestamp') === false) { 129b428a50aSSatoshi Sahara // exact date is unknown for externally deleted file 130bf3fa5e9SSatoshi Sahara // when unknown, alter formatted string "YYYY-mm-DD HH:MM" to "____-__-__ __:__" 131bf3fa5e9SSatoshi Sahara $formatted = preg_replace('/[0-9a-zA-Z]/','_', $formatted); 132bf3fa5e9SSatoshi Sahara } 133bf3fa5e9SSatoshi Sahara return '<span class="date">'. $formatted .'</span>'; 134bf3fa5e9SSatoshi Sahara } 135bf3fa5e9SSatoshi Sahara 136bf3fa5e9SSatoshi Sahara /** 137bf3fa5e9SSatoshi Sahara * edit summary 138bf3fa5e9SSatoshi Sahara * used in [Ui\recent, Ui\Revisions] 139bf3fa5e9SSatoshi Sahara * 140bf3fa5e9SSatoshi Sahara * @return string 141bf3fa5e9SSatoshi Sahara */ 142b428a50aSSatoshi Sahara public function showEditSummary() 143bf3fa5e9SSatoshi Sahara { 144b428a50aSSatoshi Sahara return '<span class="sum">'.' – '. hsc($this->val('sum')).'</span>'; 145bf3fa5e9SSatoshi Sahara } 146bf3fa5e9SSatoshi Sahara 147bf3fa5e9SSatoshi Sahara /** 148bf3fa5e9SSatoshi Sahara * editor of the page or media file 149bf3fa5e9SSatoshi Sahara * used in [Ui\recent, Ui\Revisions] 150bf3fa5e9SSatoshi Sahara * 151bf3fa5e9SSatoshi Sahara * @return string 152bf3fa5e9SSatoshi Sahara */ 153b428a50aSSatoshi Sahara public function showEditor() 154bf3fa5e9SSatoshi Sahara { 155b428a50aSSatoshi Sahara if ($this->val('user')) { 156b428a50aSSatoshi Sahara $html = '<bdi>'. editorinfo($this->val('user')) .'</bdi>'; 157b428a50aSSatoshi Sahara if (auth_ismanager()) $html .= ' <bdo dir="ltr">('. $this->val('ip') .')</bdo>'; 158bf3fa5e9SSatoshi Sahara } else { 159b428a50aSSatoshi Sahara $html = '<bdo dir="ltr">'. $this->val('ip') .'</bdo>'; 160bf3fa5e9SSatoshi Sahara } 161b428a50aSSatoshi Sahara return '<span class="user">'. $html. '</span>'; 162bf3fa5e9SSatoshi Sahara } 163bf3fa5e9SSatoshi Sahara 164bf3fa5e9SSatoshi Sahara /** 165bf3fa5e9SSatoshi Sahara * name of the page or media file 166bf3fa5e9SSatoshi Sahara * used in [Ui\recent, Ui\Revisions] 167bf3fa5e9SSatoshi Sahara * 168bf3fa5e9SSatoshi Sahara * @return string 169bf3fa5e9SSatoshi Sahara */ 170b428a50aSSatoshi Sahara public function showFileName() 171bf3fa5e9SSatoshi Sahara { 172b428a50aSSatoshi Sahara $id = $this->val('id'); 173b428a50aSSatoshi Sahara $rev = $this->isCurrent() ? '' : $this->val('date'); 174bf3fa5e9SSatoshi Sahara 175*0603e565SAndreas Gohr if ($this->val('mode') == 'media') { 176*0603e565SAndreas Gohr // media file revision 177bf3fa5e9SSatoshi Sahara $params = ['tab_details'=> 'view', 'ns'=> getNS($id), 'image'=> $id]; 178bf3fa5e9SSatoshi Sahara if ($rev) $params += ['rev'=> $rev]; 179bf3fa5e9SSatoshi Sahara $href = media_managerURL($params, '&'); 180b428a50aSSatoshi Sahara $display_name = $id; 1812aa019d6SGerrit Uitslag $exists = file_exists(mediaFN($id, $rev)); 182*0603e565SAndreas Gohr } elseif ($this->val('mode') == 'page') { 183*0603e565SAndreas Gohr // page revision 184de8ed963SGerrit Uitslag $params = $rev ? ['rev'=> $rev] : []; 185bf3fa5e9SSatoshi Sahara $href = wl($id, $params, false, '&'); 186bf3fa5e9SSatoshi Sahara $display_name = useHeading('navigation') ? hsc(p_get_first_heading($id)) : $id; 187bf3fa5e9SSatoshi Sahara if (!$display_name) $display_name = $id; 1882aa019d6SGerrit Uitslag $exists = page_exists($id, $rev); 1892aa019d6SGerrit Uitslag } 1902aa019d6SGerrit Uitslag 1912aa019d6SGerrit Uitslag if ($exists) { 1922aa019d6SGerrit Uitslag $class = 'wikilink1'; 193*0603e565SAndreas Gohr } elseif ($this->isCurrent()) { 1942aa019d6SGerrit Uitslag //show only not-existing link for current page, which allows for directly create a new page/upload 1952aa019d6SGerrit Uitslag $class = 'wikilink2'; 1962aa019d6SGerrit Uitslag } else { 1972aa019d6SGerrit Uitslag //revision is not in attic 1982aa019d6SGerrit Uitslag return $display_name; 1992aa019d6SGerrit Uitslag } 200b428a50aSSatoshi Sahara if ($this->val('type') == DOKU_CHANGE_TYPE_DELETE) { 201b428a50aSSatoshi Sahara $class = 'wikilink2'; 202bf3fa5e9SSatoshi Sahara } 203bf3fa5e9SSatoshi Sahara return '<a href="'.$href.'" class="'.$class.'">'.$display_name.'</a>'; 204bf3fa5e9SSatoshi Sahara } 20575d9280cSGerrit Uitslag 206bf3fa5e9SSatoshi Sahara /** 207b428a50aSSatoshi Sahara * Revision Title for PageDiff table headline 208bf3fa5e9SSatoshi Sahara * 209bf3fa5e9SSatoshi Sahara * @return string 210bf3fa5e9SSatoshi Sahara */ 211b428a50aSSatoshi Sahara public function showRevisionTitle() 212bf3fa5e9SSatoshi Sahara { 213bf3fa5e9SSatoshi Sahara global $lang; 214b428a50aSSatoshi Sahara 215b428a50aSSatoshi Sahara if (!$this->val('date')) return '—'; 216b428a50aSSatoshi Sahara 217b428a50aSSatoshi Sahara $id = $this->val('id'); 218b428a50aSSatoshi Sahara $rev = $this->isCurrent() ? '' : $this->val('date'); 219b428a50aSSatoshi Sahara $params = ($rev) ? ['rev'=> $rev] : []; 220b428a50aSSatoshi Sahara 221b428a50aSSatoshi Sahara // revision info may have timestamp key when external edits occurred 222b428a50aSSatoshi Sahara $date = ($this->val('timestamp') === false) 223b428a50aSSatoshi Sahara ? $lang['unknowndate'] 224b428a50aSSatoshi Sahara : dformat($this->val('date')); 225b428a50aSSatoshi Sahara 2262aa019d6SGerrit Uitslag 227*0603e565SAndreas Gohr if ($this->val('mode') == 'media') { 228*0603e565SAndreas Gohr // media file revision 2292aa019d6SGerrit Uitslag $href = ml($id, $params, false, '&'); 2302aa019d6SGerrit Uitslag $exists = file_exists(mediaFN($id, $rev)); 231*0603e565SAndreas Gohr } elseif ($this->val('mode') == 'page') { 232*0603e565SAndreas Gohr // page revision 2332aa019d6SGerrit Uitslag $href = wl($id, $params, false, '&'); 2342aa019d6SGerrit Uitslag $exists = page_exists($id, $rev); 2352aa019d6SGerrit Uitslag } 2362aa019d6SGerrit Uitslag if ($exists) { 2372aa019d6SGerrit Uitslag $class = 'wikilink1'; 238*0603e565SAndreas Gohr } elseif ($this->isCurrent()) { 2392aa019d6SGerrit Uitslag //show only not-existing link for current page, which allows for directly create a new page/upload 2402aa019d6SGerrit Uitslag $class = 'wikilink2'; 2412aa019d6SGerrit Uitslag } else { 2422aa019d6SGerrit Uitslag //revision is not in attic 2432aa019d6SGerrit Uitslag return $id.' ['.$date.']'; 2442aa019d6SGerrit Uitslag } 2452aa019d6SGerrit Uitslag if ($this->val('type') == DOKU_CHANGE_TYPE_DELETE) { 2462aa019d6SGerrit Uitslag $class = 'wikilink2'; 2472aa019d6SGerrit Uitslag } 248b428a50aSSatoshi Sahara return '<bdi><a class="'.$class.'" href="'.$href.'">'.$id.' ['.$date.']'.'</a></bdi>'; 249b428a50aSSatoshi Sahara } 250b428a50aSSatoshi Sahara 251b428a50aSSatoshi Sahara /** 252eeda7adaSGerrit Uitslag * diff link icon in recent changes list, to compare (this) current revision with previous one 253b428a50aSSatoshi Sahara * all items in "recent changes" are current revision of the page or media 254b428a50aSSatoshi Sahara * 255b428a50aSSatoshi Sahara * @return string 256b428a50aSSatoshi Sahara */ 257b428a50aSSatoshi Sahara public function showIconCompareWithPrevious() 258b428a50aSSatoshi Sahara { 259b428a50aSSatoshi Sahara global $lang; 260b428a50aSSatoshi Sahara $id = $this->val('id'); 261bf3fa5e9SSatoshi Sahara 262bf3fa5e9SSatoshi Sahara $href = ''; 263*0603e565SAndreas Gohr if ($this->val('mode') == 'media') { 264*0603e565SAndreas Gohr // media file revision 265eeda7adaSGerrit Uitslag // unlike page, media file does not copied to media_attic when uploaded. 266b428a50aSSatoshi Sahara // diff icon will not be shown when external edit occurred 267b428a50aSSatoshi Sahara // because no attic file to be compared with current. 268bf3fa5e9SSatoshi Sahara $revs = (new MediaChangeLog($id))->getRevisions(0, 1); 269b428a50aSSatoshi Sahara $showLink = (count($revs) && file_exists(mediaFN($id,$revs[0])) && file_exists(mediaFN($id))); 270bf3fa5e9SSatoshi Sahara if ($showLink) { 271b428a50aSSatoshi Sahara $param = ['tab_details'=>'history', 'mediado'=>'diff', 'ns'=> getNS($id), 'image'=> $id]; 272b428a50aSSatoshi Sahara $href = media_managerURL($param, '&'); 273bf3fa5e9SSatoshi Sahara } 274*0603e565SAndreas Gohr } elseif ($this->val('mode') == 'page') { 275*0603e565SAndreas Gohr // page revision 276b428a50aSSatoshi Sahara // when a page just created anyway, it is natural to expect no older revisions 277b428a50aSSatoshi Sahara // even if it had once existed but deleted before. Simply ignore to check changelog. 278b428a50aSSatoshi Sahara if ($this->val('type') !== DOKU_CHANGE_TYPE_CREATE) { 279b428a50aSSatoshi Sahara $href = wl($id, ['do'=>'diff'], false, '&'); 280bf3fa5e9SSatoshi Sahara } 281bf3fa5e9SSatoshi Sahara } 282bf3fa5e9SSatoshi Sahara 283bf3fa5e9SSatoshi Sahara if ($href) { 284b428a50aSSatoshi Sahara return '<a href="'.$href.'" class="diff_link">' 285bf3fa5e9SSatoshi Sahara .'<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"' 286bf3fa5e9SSatoshi Sahara .' title="'. $lang['diff'] .'" alt="'.$lang['diff'] .'" />' 287bf3fa5e9SSatoshi Sahara .'</a>'; 288bf3fa5e9SSatoshi Sahara } else { 289b428a50aSSatoshi Sahara return '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />'; 290bf3fa5e9SSatoshi Sahara } 291bf3fa5e9SSatoshi Sahara } 292bf3fa5e9SSatoshi Sahara 293bf3fa5e9SSatoshi Sahara /** 294eeda7adaSGerrit Uitslag * diff link icon in revisions list, compare this revision with current one 295bf3fa5e9SSatoshi Sahara * the icon does not displayed for the current revision 296bf3fa5e9SSatoshi Sahara * 297bf3fa5e9SSatoshi Sahara * @return string 298bf3fa5e9SSatoshi Sahara */ 299b428a50aSSatoshi Sahara public function showIconCompareWithCurrent() 300bf3fa5e9SSatoshi Sahara { 301bf3fa5e9SSatoshi Sahara global $lang; 302b428a50aSSatoshi Sahara $id = $this->val('id'); 303b428a50aSSatoshi Sahara $rev = $this->isCurrent() ? '' : $this->val('date'); 304bf3fa5e9SSatoshi Sahara 305b428a50aSSatoshi Sahara $href = ''; 306*0603e565SAndreas Gohr if ($this->val('mode') == 'media') { 307*0603e565SAndreas Gohr // media file revision 308b428a50aSSatoshi Sahara if (!$this->isCurrent() && file_exists(mediaFN($id, $rev))) { 309b428a50aSSatoshi Sahara $param = ['mediado'=>'diff', 'image'=> $id, 'rev'=> $rev]; 310b428a50aSSatoshi Sahara $href = media_managerURL($param, '&'); 311bf3fa5e9SSatoshi Sahara } 312*0603e565SAndreas Gohr } elseif ($this->val('mode') == 'page') { 313*0603e565SAndreas Gohr // page revision 314b428a50aSSatoshi Sahara if (!$this->isCurrent()) { 315b428a50aSSatoshi Sahara $href = wl($id, ['rev'=> $rev, 'do'=>'diff'], false, '&'); 316b428a50aSSatoshi Sahara } 317b428a50aSSatoshi Sahara } 318b428a50aSSatoshi Sahara 319b428a50aSSatoshi Sahara if ($href) { 320b428a50aSSatoshi Sahara return '<a href="'.$href.'" class="diff_link">' 321bf3fa5e9SSatoshi Sahara .'<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"' 322bf3fa5e9SSatoshi Sahara .' title="'. $lang['diff'] .'" alt="'.$lang['diff'] .'" />' 323bf3fa5e9SSatoshi Sahara .'</a>'; 324b428a50aSSatoshi Sahara } else { 325b428a50aSSatoshi Sahara return '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />'; 326bf3fa5e9SSatoshi Sahara } 327bf3fa5e9SSatoshi Sahara } 328bf3fa5e9SSatoshi Sahara 329bf3fa5e9SSatoshi Sahara /** 330b428a50aSSatoshi Sahara * icon for revision action 331bf3fa5e9SSatoshi Sahara * used in [Ui\recent] 332bf3fa5e9SSatoshi Sahara * 333bf3fa5e9SSatoshi Sahara * @return string 334bf3fa5e9SSatoshi Sahara */ 335b428a50aSSatoshi Sahara public function showIconRevisions() 336bf3fa5e9SSatoshi Sahara { 33775d9280cSGerrit Uitslag global $lang; 338bf3fa5e9SSatoshi Sahara 339bf3fa5e9SSatoshi Sahara if (!actionOK('revisions')) { 340b428a50aSSatoshi Sahara return ''; 341bf3fa5e9SSatoshi Sahara } 342bf3fa5e9SSatoshi Sahara 343b428a50aSSatoshi Sahara $id = $this->val('id'); 344*0603e565SAndreas Gohr if ($this->val('mode') == 'media') { 345*0603e565SAndreas Gohr // media file revision 346b428a50aSSatoshi Sahara $param = ['tab_details'=>'history', 'ns'=> getNS($id), 'image'=> $id]; 347b428a50aSSatoshi Sahara $href = media_managerURL($param, '&'); 348*0603e565SAndreas Gohr } elseif ($this->val('mode') == 'page') { 349*0603e565SAndreas Gohr // page revision 350b428a50aSSatoshi Sahara $href = wl($id, ['do'=>'revisions'], false, '&'); 351bf3fa5e9SSatoshi Sahara } 352bf3fa5e9SSatoshi Sahara return '<a href="'.$href.'" class="revisions_link">' 353bf3fa5e9SSatoshi Sahara . '<img src="'.DOKU_BASE.'lib/images/history.png" width="12" height="14"' 354bf3fa5e9SSatoshi Sahara . ' title="'.$lang['btn_revs'].'" alt="'.$lang['btn_revs'].'" />' 355bf3fa5e9SSatoshi Sahara . '</a>'; 356bf3fa5e9SSatoshi Sahara } 357bf3fa5e9SSatoshi Sahara 358bf3fa5e9SSatoshi Sahara /** 359bf3fa5e9SSatoshi Sahara * size change 360bf3fa5e9SSatoshi Sahara * used in [Ui\recent, Ui\Revisions] 361bf3fa5e9SSatoshi Sahara * 362bf3fa5e9SSatoshi Sahara * @return string 363bf3fa5e9SSatoshi Sahara */ 364b428a50aSSatoshi Sahara public function showSizeChange() 365bf3fa5e9SSatoshi Sahara { 366bf3fa5e9SSatoshi Sahara $class = 'sizechange'; 367b428a50aSSatoshi Sahara $value = filesize_h(abs($this->val('sizechange'))); 368b428a50aSSatoshi Sahara if ($this->val('sizechange') > 0) { 369bf3fa5e9SSatoshi Sahara $class .= ' positive'; 370bf3fa5e9SSatoshi Sahara $value = '+' . $value; 371b428a50aSSatoshi Sahara } elseif ($this->val('sizechange') < 0) { 372bf3fa5e9SSatoshi Sahara $class .= ' negative'; 373bf3fa5e9SSatoshi Sahara $value = '-' . $value; 374bf3fa5e9SSatoshi Sahara } else { 375bf3fa5e9SSatoshi Sahara $value = '±' . $value; 376bf3fa5e9SSatoshi Sahara } 377bf3fa5e9SSatoshi Sahara return '<span class="'.$class.'">'.$value.'</span>'; 378bf3fa5e9SSatoshi Sahara } 379bf3fa5e9SSatoshi Sahara 380bf3fa5e9SSatoshi Sahara /** 381eeda7adaSGerrit Uitslag * current indicator, used in revision list 382eeda7adaSGerrit Uitslag * not used in Ui\Recent because recent files are always current one 383bf3fa5e9SSatoshi Sahara * 384bf3fa5e9SSatoshi Sahara * @return string 385bf3fa5e9SSatoshi Sahara */ 386b428a50aSSatoshi Sahara public function showCurrentIndicator() 387bf3fa5e9SSatoshi Sahara { 388bf3fa5e9SSatoshi Sahara global $lang; 389b428a50aSSatoshi Sahara return $this->isCurrent() ? '('.$lang['current'].')' : ''; 390bf3fa5e9SSatoshi Sahara } 391bf3fa5e9SSatoshi Sahara 392bf3fa5e9SSatoshi Sahara 393bf3fa5e9SSatoshi Sahara} 394