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