xref: /dokuwiki/inc/ChangeLog/RevisionInfo.php (revision eeda7ada8c965be1a48afa72ccc473ba9e1db91b)
1bf3fa5e9SSatoshi Sahara<?php
2bf3fa5e9SSatoshi Sahara
3bf3fa5e9SSatoshi Saharanamespace dokuwiki\ChangeLog;
4bf3fa5e9SSatoshi Sahara
5bf3fa5e9SSatoshi Sahara/**
6bf3fa5e9SSatoshi Sahara * Class RevisionInfo
7bf3fa5e9SSatoshi Sahara *
8*eeda7adaSGerrit 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     *
21*eeda7adaSGerrit 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
39b428a50aSSatoshi Sahara            $info['mode'] = strrpos($info['id'], '.') ? '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    /**
50*eeda7adaSGerrit 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
55*eeda7adaSGerrit 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    {
62*eeda7adaSGerrit Uitslag        return (bool) $this->val('current', $value);
63b428a50aSSatoshi Sahara    }
64b428a50aSSatoshi Sahara
65b428a50aSSatoshi Sahara    /**
66*eeda7adaSGerrit 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');
109b428a50aSSatoshi Sahara        switch ($this->val('mode')) {
110bf3fa5e9SSatoshi Sahara            case 'media': // media file revision
111b428a50aSSatoshi Sahara                return media_printicon($id);
112bf3fa5e9SSatoshi Sahara            case 'page': // page revision
113b428a50aSSatoshi Sahara                return '<img class="icon" src="'.DOKU_BASE.'lib/images/fileicons/file.png" alt="'.$id.'" />';
114bf3fa5e9SSatoshi Sahara        }
115bf3fa5e9SSatoshi Sahara    }
116bf3fa5e9SSatoshi Sahara
117bf3fa5e9SSatoshi Sahara    /**
118bf3fa5e9SSatoshi Sahara     * edit date and time of the page or media file
119bf3fa5e9SSatoshi Sahara     * used in [Ui\recent, Ui\Revisions]
120bf3fa5e9SSatoshi Sahara     *
121bf3fa5e9SSatoshi Sahara     * @param bool $checkTimestamp  enable timestamp check, alter formatted string when timestamp is false
122bf3fa5e9SSatoshi Sahara     * @return string
123bf3fa5e9SSatoshi Sahara     */
124b428a50aSSatoshi Sahara    public function showEditDate($checkTimestamp = false)
125bf3fa5e9SSatoshi Sahara    {
126b428a50aSSatoshi Sahara        $formatted = dformat($this->val('date'));
127b428a50aSSatoshi Sahara        if ($checkTimestamp && $this->val('timestamp') === false) {
128b428a50aSSatoshi Sahara            // exact date is unknown for externally deleted file
129bf3fa5e9SSatoshi Sahara            // when unknown, alter formatted string "YYYY-mm-DD HH:MM" to "____-__-__ __:__"
130bf3fa5e9SSatoshi Sahara            $formatted = preg_replace('/[0-9a-zA-Z]/','_', $formatted);
131bf3fa5e9SSatoshi Sahara        }
132bf3fa5e9SSatoshi Sahara        return '<span class="date">'. $formatted .'</span>';
133bf3fa5e9SSatoshi Sahara    }
134bf3fa5e9SSatoshi Sahara
135bf3fa5e9SSatoshi Sahara    /**
136bf3fa5e9SSatoshi Sahara     * edit summary
137bf3fa5e9SSatoshi Sahara     * used in [Ui\recent, Ui\Revisions]
138bf3fa5e9SSatoshi Sahara     *
139bf3fa5e9SSatoshi Sahara     * @return string
140bf3fa5e9SSatoshi Sahara     */
141b428a50aSSatoshi Sahara    public function showEditSummary()
142bf3fa5e9SSatoshi Sahara    {
143b428a50aSSatoshi Sahara        return '<span class="sum">'.' – '. hsc($this->val('sum')).'</span>';
144bf3fa5e9SSatoshi Sahara    }
145bf3fa5e9SSatoshi Sahara
146bf3fa5e9SSatoshi Sahara    /**
147bf3fa5e9SSatoshi Sahara     * editor of the page or media file
148bf3fa5e9SSatoshi Sahara     * used in [Ui\recent, Ui\Revisions]
149bf3fa5e9SSatoshi Sahara     *
150bf3fa5e9SSatoshi Sahara     * @return string
151bf3fa5e9SSatoshi Sahara     */
152b428a50aSSatoshi Sahara    public function showEditor()
153bf3fa5e9SSatoshi Sahara    {
154b428a50aSSatoshi Sahara        if ($this->val('user')) {
155b428a50aSSatoshi Sahara            $html = '<bdi>'. editorinfo($this->val('user')) .'</bdi>';
156b428a50aSSatoshi Sahara            if (auth_ismanager()) $html .= ' <bdo dir="ltr">('. $this->val('ip') .')</bdo>';
157bf3fa5e9SSatoshi Sahara        } else {
158b428a50aSSatoshi Sahara            $html = '<bdo dir="ltr">'. $this->val('ip') .'</bdo>';
159bf3fa5e9SSatoshi Sahara        }
160b428a50aSSatoshi Sahara        return '<span class="user">'. $html. '</span>';
161bf3fa5e9SSatoshi Sahara    }
162bf3fa5e9SSatoshi Sahara
163bf3fa5e9SSatoshi Sahara    /**
164bf3fa5e9SSatoshi Sahara     * name of the page or media file
165bf3fa5e9SSatoshi Sahara     * used in [Ui\recent, Ui\Revisions]
166bf3fa5e9SSatoshi Sahara     *
167bf3fa5e9SSatoshi Sahara     * @return string
168bf3fa5e9SSatoshi Sahara     */
169b428a50aSSatoshi Sahara    public function showFileName()
170bf3fa5e9SSatoshi Sahara    {
171b428a50aSSatoshi Sahara        $id = $this->val('id');
172b428a50aSSatoshi Sahara        $rev = $this->isCurrent() ? '' : $this->val('date');
173bf3fa5e9SSatoshi Sahara
174b428a50aSSatoshi Sahara        switch ($this->val('mode')) {
175bf3fa5e9SSatoshi Sahara            case 'media': // media file revision
176bf3fa5e9SSatoshi Sahara                $params = ['tab_details'=> 'view', 'ns'=> getNS($id), 'image'=> $id];
177bf3fa5e9SSatoshi Sahara                if ($rev) $params += ['rev'=> $rev];
178bf3fa5e9SSatoshi Sahara                $href = media_managerURL($params, '&');
179b428a50aSSatoshi Sahara                $display_name = $id;
180b428a50aSSatoshi Sahara                $class = file_exists(mediaFN($id, $rev)) ? 'wikilink1' : 'wikilink2';
181b428a50aSSatoshi Sahara                break;
182bf3fa5e9SSatoshi Sahara            case 'page': // page revision
183de8ed963SGerrit Uitslag                $params = $rev ? ['rev'=> $rev] : [];
184bf3fa5e9SSatoshi Sahara                $href = wl($id, $params, false, '&');
185bf3fa5e9SSatoshi Sahara                $display_name = useHeading('navigation') ? hsc(p_get_first_heading($id)) : $id;
186bf3fa5e9SSatoshi Sahara                if (!$display_name) $display_name = $id;
187b428a50aSSatoshi Sahara                $class = page_exists($id, $rev) ? 'wikilink1' : 'wikilink2';
1883d727ea4SGerrit Uitslag        }
189b428a50aSSatoshi Sahara        if ($this->val('type') == DOKU_CHANGE_TYPE_DELETE) {
190b428a50aSSatoshi Sahara            $class = 'wikilink2';
191bf3fa5e9SSatoshi Sahara        }
192bf3fa5e9SSatoshi Sahara        return '<a href="'.$href.'" class="'.$class.'">'.$display_name.'</a>';
193bf3fa5e9SSatoshi Sahara    }
19475d9280cSGerrit Uitslag
195bf3fa5e9SSatoshi Sahara    /**
196b428a50aSSatoshi Sahara     * Revision Title for PageDiff table headline
197bf3fa5e9SSatoshi Sahara     *
198bf3fa5e9SSatoshi Sahara     * @return string
199bf3fa5e9SSatoshi Sahara     */
200b428a50aSSatoshi Sahara    public function showRevisionTitle()
201bf3fa5e9SSatoshi Sahara    {
202bf3fa5e9SSatoshi Sahara        global $lang;
203b428a50aSSatoshi Sahara
204b428a50aSSatoshi Sahara        if (!$this->val('date')) return '&mdash;';
205b428a50aSSatoshi Sahara
206b428a50aSSatoshi Sahara        $id = $this->val('id');
207b428a50aSSatoshi Sahara        $rev = $this->isCurrent() ? '' : $this->val('date');
208b428a50aSSatoshi Sahara        $params = ($rev) ? ['rev'=> $rev] : [];
209b428a50aSSatoshi Sahara
210b428a50aSSatoshi Sahara        switch ($this->val('mode')) {
211b428a50aSSatoshi Sahara            case 'media': // media file revision
212b428a50aSSatoshi Sahara                $href = ml($id, $params, false, '&');
213b428a50aSSatoshi Sahara                $class = file_exists(mediaFN($id, $rev)) ? 'wikilink1' : 'wikilink2';
214b428a50aSSatoshi Sahara                break;
215b428a50aSSatoshi Sahara            case 'page': // page revision
216b428a50aSSatoshi Sahara                $href = wl($id, $params, false, '&');
217b428a50aSSatoshi Sahara                $class = page_exists($id, $rev) ? 'wikilink1' : 'wikilink2';
218b428a50aSSatoshi Sahara        }
219b428a50aSSatoshi Sahara        if ($this->val('type') == DOKU_CHANGE_TYPE_DELETE) {
220b428a50aSSatoshi Sahara            $class = 'wikilink2';
221b428a50aSSatoshi Sahara        }
222b428a50aSSatoshi Sahara        // revision info may have timestamp key when external edits occurred
223b428a50aSSatoshi Sahara        $date = ($this->val('timestamp') === false)
224b428a50aSSatoshi Sahara            ? $lang['unknowndate']
225b428a50aSSatoshi Sahara            : dformat($this->val('date'));
226b428a50aSSatoshi Sahara
227b428a50aSSatoshi Sahara        return '<bdi><a class="'.$class.'" href="'.$href.'">'.$id.' ['.$date.']'.'</a></bdi>';
228b428a50aSSatoshi Sahara    }
229b428a50aSSatoshi Sahara
230b428a50aSSatoshi Sahara    /**
231*eeda7adaSGerrit Uitslag     * diff link icon in recent changes list, to compare (this) current revision with previous one
232b428a50aSSatoshi Sahara     * all items in "recent changes" are current revision of the page or media
233b428a50aSSatoshi Sahara     *
234b428a50aSSatoshi Sahara     * @return string
235b428a50aSSatoshi Sahara     */
236b428a50aSSatoshi Sahara    public function showIconCompareWithPrevious()
237b428a50aSSatoshi Sahara    {
238b428a50aSSatoshi Sahara        global $lang;
239b428a50aSSatoshi Sahara        $id = $this->val('id');
240bf3fa5e9SSatoshi Sahara
241bf3fa5e9SSatoshi Sahara        $href = '';
242b428a50aSSatoshi Sahara        switch ($this->val('mode')) {
243bf3fa5e9SSatoshi Sahara            case 'media': // media file revision
244*eeda7adaSGerrit Uitslag                // unlike page, media file does not copied to media_attic when uploaded.
245b428a50aSSatoshi Sahara                // diff icon will not be shown when external edit occurred
246b428a50aSSatoshi Sahara                // because no attic file to be compared with current.
247bf3fa5e9SSatoshi Sahara                $revs = (new MediaChangeLog($id))->getRevisions(0, 1);
248b428a50aSSatoshi Sahara                $showLink = (count($revs) && file_exists(mediaFN($id,$revs[0])) && file_exists(mediaFN($id)));
249bf3fa5e9SSatoshi Sahara                if ($showLink) {
250b428a50aSSatoshi Sahara                    $param = ['tab_details'=>'history', 'mediado'=>'diff', 'ns'=> getNS($id), 'image'=> $id];
251b428a50aSSatoshi Sahara                    $href = media_managerURL($param, '&');
252bf3fa5e9SSatoshi Sahara                }
253bf3fa5e9SSatoshi Sahara                break;
254bf3fa5e9SSatoshi Sahara            case 'page': // page revision
255b428a50aSSatoshi Sahara                // when a page just created anyway, it is natural to expect no older revisions
256b428a50aSSatoshi Sahara                // even if it had once existed but deleted before. Simply ignore to check changelog.
257b428a50aSSatoshi Sahara                if ($this->val('type') !== DOKU_CHANGE_TYPE_CREATE) {
258b428a50aSSatoshi Sahara                    $href = wl($id, ['do'=>'diff'], false, '&');
259bf3fa5e9SSatoshi Sahara                }
260bf3fa5e9SSatoshi Sahara        }
261bf3fa5e9SSatoshi Sahara
262bf3fa5e9SSatoshi Sahara        if ($href) {
263b428a50aSSatoshi Sahara            return '<a href="'.$href.'" class="diff_link">'
264bf3fa5e9SSatoshi Sahara                  .'<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"'
265bf3fa5e9SSatoshi Sahara                  .' title="'. $lang['diff'] .'" alt="'.$lang['diff'] .'" />'
266bf3fa5e9SSatoshi Sahara                  .'</a>';
267bf3fa5e9SSatoshi Sahara        } else {
268b428a50aSSatoshi Sahara            return '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />';
269bf3fa5e9SSatoshi Sahara        }
270bf3fa5e9SSatoshi Sahara    }
271bf3fa5e9SSatoshi Sahara
272bf3fa5e9SSatoshi Sahara    /**
273*eeda7adaSGerrit Uitslag     * diff link icon in revisions list, compare this revision with current one
274bf3fa5e9SSatoshi Sahara     * the icon does not displayed for the current revision
275bf3fa5e9SSatoshi Sahara     *
276bf3fa5e9SSatoshi Sahara     * @return string
277bf3fa5e9SSatoshi Sahara     */
278b428a50aSSatoshi Sahara    public function showIconCompareWithCurrent()
279bf3fa5e9SSatoshi Sahara    {
280bf3fa5e9SSatoshi Sahara        global $lang;
281b428a50aSSatoshi Sahara        $id = $this->val('id');
282b428a50aSSatoshi Sahara        $rev = $this->isCurrent() ? '' : $this->val('date');
283bf3fa5e9SSatoshi Sahara
284b428a50aSSatoshi Sahara        $href = '';
285b428a50aSSatoshi Sahara        switch ($this->val('mode')) {
286bf3fa5e9SSatoshi Sahara            case 'media': // media file revision
287b428a50aSSatoshi Sahara                if (!$this->isCurrent() && file_exists(mediaFN($id, $rev))) {
288b428a50aSSatoshi Sahara                    $param = ['mediado'=>'diff', 'image'=> $id, 'rev'=> $rev];
289b428a50aSSatoshi Sahara                    $href = media_managerURL($param, '&');
290bf3fa5e9SSatoshi Sahara                }
291b428a50aSSatoshi Sahara                break;
292bf3fa5e9SSatoshi Sahara            case 'page': // page revision
293b428a50aSSatoshi Sahara                if (!$this->isCurrent()) {
294b428a50aSSatoshi Sahara                    $href = wl($id, ['rev'=> $rev, 'do'=>'diff'], false, '&');
295b428a50aSSatoshi Sahara                }
296b428a50aSSatoshi Sahara        }
297b428a50aSSatoshi Sahara
298b428a50aSSatoshi Sahara        if ($href) {
299b428a50aSSatoshi Sahara            return '<a href="'.$href.'" class="diff_link">'
300bf3fa5e9SSatoshi Sahara                  .'<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"'
301bf3fa5e9SSatoshi Sahara                  .' title="'. $lang['diff'] .'" alt="'.$lang['diff'] .'" />'
302bf3fa5e9SSatoshi Sahara                  .'</a>';
303b428a50aSSatoshi Sahara        } else {
304b428a50aSSatoshi Sahara            return '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />';
305bf3fa5e9SSatoshi Sahara        }
306bf3fa5e9SSatoshi Sahara    }
307bf3fa5e9SSatoshi Sahara
308bf3fa5e9SSatoshi Sahara    /**
309b428a50aSSatoshi Sahara     * icon for revision action
310bf3fa5e9SSatoshi Sahara     * used in [Ui\recent]
311bf3fa5e9SSatoshi Sahara     *
312bf3fa5e9SSatoshi Sahara     * @return string
313bf3fa5e9SSatoshi Sahara     */
314b428a50aSSatoshi Sahara    public function showIconRevisions()
315bf3fa5e9SSatoshi Sahara    {
31675d9280cSGerrit Uitslag        global $lang;
317bf3fa5e9SSatoshi Sahara
318bf3fa5e9SSatoshi Sahara        if (!actionOK('revisions')) {
319b428a50aSSatoshi Sahara            return '';
320bf3fa5e9SSatoshi Sahara        }
321bf3fa5e9SSatoshi Sahara
322b428a50aSSatoshi Sahara        $id = $this->val('id');
323b428a50aSSatoshi Sahara        switch ($this->val('mode')) {
324bf3fa5e9SSatoshi Sahara            case 'media': // media file revision
325b428a50aSSatoshi Sahara                $param  = ['tab_details'=>'history', 'ns'=> getNS($id), 'image'=> $id];
326b428a50aSSatoshi Sahara                $href = media_managerURL($param, '&');
327bf3fa5e9SSatoshi Sahara                break;
328bf3fa5e9SSatoshi Sahara            case 'page': // page revision
329b428a50aSSatoshi Sahara                $href = wl($id, ['do'=>'revisions'], false, '&');
330bf3fa5e9SSatoshi Sahara        }
331bf3fa5e9SSatoshi Sahara        return '<a href="'.$href.'" class="revisions_link">'
332bf3fa5e9SSatoshi Sahara              . '<img src="'.DOKU_BASE.'lib/images/history.png" width="12" height="14"'
333bf3fa5e9SSatoshi Sahara              . ' title="'.$lang['btn_revs'].'" alt="'.$lang['btn_revs'].'" />'
334bf3fa5e9SSatoshi Sahara              . '</a>';
335bf3fa5e9SSatoshi Sahara    }
336bf3fa5e9SSatoshi Sahara
337bf3fa5e9SSatoshi Sahara    /**
338bf3fa5e9SSatoshi Sahara     * size change
339bf3fa5e9SSatoshi Sahara     * used in [Ui\recent, Ui\Revisions]
340bf3fa5e9SSatoshi Sahara     *
341bf3fa5e9SSatoshi Sahara     * @return string
342bf3fa5e9SSatoshi Sahara     */
343b428a50aSSatoshi Sahara    public function showSizeChange()
344bf3fa5e9SSatoshi Sahara    {
345bf3fa5e9SSatoshi Sahara        $class = 'sizechange';
346b428a50aSSatoshi Sahara        $value = filesize_h(abs($this->val('sizechange')));
347b428a50aSSatoshi Sahara        if ($this->val('sizechange') > 0) {
348bf3fa5e9SSatoshi Sahara            $class .= ' positive';
349bf3fa5e9SSatoshi Sahara            $value = '+' . $value;
350b428a50aSSatoshi Sahara        } elseif ($this->val('sizechange') < 0) {
351bf3fa5e9SSatoshi Sahara            $class .= ' negative';
352bf3fa5e9SSatoshi Sahara            $value = '-' . $value;
353bf3fa5e9SSatoshi Sahara        } else {
354bf3fa5e9SSatoshi Sahara            $value = '±' . $value;
355bf3fa5e9SSatoshi Sahara        }
356bf3fa5e9SSatoshi Sahara        return '<span class="'.$class.'">'.$value.'</span>';
357bf3fa5e9SSatoshi Sahara    }
358bf3fa5e9SSatoshi Sahara
359bf3fa5e9SSatoshi Sahara    /**
360*eeda7adaSGerrit Uitslag     * current indicator, used in revision list
361*eeda7adaSGerrit Uitslag     * not used in Ui\Recent because recent files are always current one
362bf3fa5e9SSatoshi Sahara     *
363bf3fa5e9SSatoshi Sahara     * @return string
364bf3fa5e9SSatoshi Sahara     */
365b428a50aSSatoshi Sahara    public function showCurrentIndicator()
366bf3fa5e9SSatoshi Sahara    {
367bf3fa5e9SSatoshi Sahara        global $lang;
368b428a50aSSatoshi Sahara        return $this->isCurrent() ? '('.$lang['current'].')' : '';
369bf3fa5e9SSatoshi Sahara    }
370bf3fa5e9SSatoshi Sahara
371bf3fa5e9SSatoshi Sahara
372bf3fa5e9SSatoshi Sahara}
373