xref: /dokuwiki/inc/Ui/Recent.php (revision 8a2bf2dd4e32f7f902395b2e292b280ca6dd5410)
13d7df1dcSSatoshi Sahara<?php
23d7df1dcSSatoshi Sahara
33d7df1dcSSatoshi Saharanamespace dokuwiki\Ui;
43d7df1dcSSatoshi Sahara
50c92baf0SSatoshi Saharause dokuwiki\ChangeLog\PageChangeLog;
63d7df1dcSSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog;
73d7df1dcSSatoshi Saharause dokuwiki\Form\Form;
83d7df1dcSSatoshi Sahara
93d7df1dcSSatoshi Sahara/**
109e316641SSatoshi Sahara * DokuWiki Recent Interface
113d7df1dcSSatoshi Sahara *
123d7df1dcSSatoshi Sahara * @package dokuwiki\Ui
133d7df1dcSSatoshi Sahara */
143d7df1dcSSatoshi Saharaclass Recent extends Ui
153d7df1dcSSatoshi Sahara{
169e316641SSatoshi Sahara    protected $first;
179e316641SSatoshi Sahara    protected $show_changes;
189e316641SSatoshi Sahara
199e316641SSatoshi Sahara    /**
209e316641SSatoshi Sahara     * Recent Ui constructor
219e316641SSatoshi Sahara     *
229e316641SSatoshi Sahara     * @param int $first  skip the first n changelog lines
239e316641SSatoshi Sahara     * @param string $show_changes  type of changes to show; pages, mediafiles, or both
249e316641SSatoshi Sahara     */
259e316641SSatoshi Sahara    public function __construct($first = 0, $show_changes = 'both')
269e316641SSatoshi Sahara    {
279e316641SSatoshi Sahara        $this->first        = $first;
289e316641SSatoshi Sahara        $this->show_changes = $show_changes;
299e316641SSatoshi Sahara    }
309e316641SSatoshi Sahara
313d7df1dcSSatoshi Sahara    /**
323d7df1dcSSatoshi Sahara     * Display recent changes
333d7df1dcSSatoshi Sahara     *
343d7df1dcSSatoshi Sahara     * @author Andreas Gohr <andi@splitbrain.org>
353d7df1dcSSatoshi Sahara     * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
363d7df1dcSSatoshi Sahara     * @author Ben Coburn <btcoburn@silicodon.net>
373d7df1dcSSatoshi Sahara     * @author Kate Arzamastseva <pshns@ukr.net>
3821b96b63SSatoshi Sahara     * @author Satoshi Sahara <sahara.satoshi@gmail.com>
393d7df1dcSSatoshi Sahara     *
403d7df1dcSSatoshi Sahara     * @return void
413d7df1dcSSatoshi Sahara     */
429e316641SSatoshi Sahara    public function show()
433d7df1dcSSatoshi Sahara    {
44bde2a644SSatoshi Sahara        global $conf, $lang;
453d7df1dcSSatoshi Sahara        global $ID;
463d7df1dcSSatoshi Sahara
4721b96b63SSatoshi Sahara        // get recent items, and set correct pagenation parameters (first, hasNext)
489e316641SSatoshi Sahara        $first = $this->first;
49e6adf5b7SSatoshi Sahara        $hasNext = false;
5021b96b63SSatoshi Sahara        $recents = $this->getRecents($first, $hasNext);
513d7df1dcSSatoshi Sahara
523d7df1dcSSatoshi Sahara        // print intro
533d7df1dcSSatoshi Sahara        print p_locale_xhtml('recent');
543d7df1dcSSatoshi Sahara
553d7df1dcSSatoshi Sahara        if (getNS($ID) != '') {
563d7df1dcSSatoshi Sahara            print '<div class="level1"><p>'
573d7df1dcSSatoshi Sahara                . sprintf($lang['recent_global'], getNS($ID), wl('', 'do=recent'))
583d7df1dcSSatoshi Sahara                .'</p></div>';
593d7df1dcSSatoshi Sahara        }
603d7df1dcSSatoshi Sahara
613d7df1dcSSatoshi Sahara        // create the form
6221b96b63SSatoshi Sahara        $form = new Form(['id'=>'dw__recent', 'method'=>'GET', 'action'=> wl($ID), 'class'=>'changes']);
633d7df1dcSSatoshi Sahara        $form->addTagOpen('div')->addClass('no');
643d7df1dcSSatoshi Sahara        $form->setHiddenField('sectok', null);
653d7df1dcSSatoshi Sahara        $form->setHiddenField('do', 'recent');
663d7df1dcSSatoshi Sahara        $form->setHiddenField('id', $ID);
673d7df1dcSSatoshi Sahara
683d7df1dcSSatoshi Sahara        // show dropdown selector, whether include not only recent pages but also recent media files?
693d7df1dcSSatoshi Sahara        if ($conf['mediarevisions']) {
7021b96b63SSatoshi Sahara            $this->addRecentItemSelector($form);
7121b96b63SSatoshi Sahara        }
7221b96b63SSatoshi Sahara
7321b96b63SSatoshi Sahara        // start listing of recent items
7421b96b63SSatoshi Sahara        $form->addTagOpen('ul');
7521b96b63SSatoshi Sahara        foreach ($recents as $recent) {
760c92baf0SSatoshi Sahara            // check possible external edition for current page or media
770c92baf0SSatoshi Sahara            $this->checkCurrentRevision($recent);
78*8a2bf2ddSSatoshi Sahara            $recent['current'] = true;
790c92baf0SSatoshi Sahara
8021b96b63SSatoshi Sahara            $objRevInfo = $this->getObjRevInfo($recent);
8121b96b63SSatoshi Sahara            $class = ($recent['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor': '';
8221b96b63SSatoshi Sahara            $form->addTagOpen('li')->addClass($class);
8321b96b63SSatoshi Sahara            $form->addTagOpen('div')->addClass('li');
8421b96b63SSatoshi Sahara            $html = implode(' ', [
8521b96b63SSatoshi Sahara                $objRevInfo->itemIcon(),          // filetype icon
8621b96b63SSatoshi Sahara                $objRevInfo->editDate(),          // edit date and time
8721b96b63SSatoshi Sahara                $objRevInfo->difflink(),          // link to diffview icon
8821b96b63SSatoshi Sahara                $objRevInfo->revisionlink(),      // linkto revisions icon
8921b96b63SSatoshi Sahara                $objRevInfo->itemName(),          // name of page or media
9021b96b63SSatoshi Sahara                $objRevInfo->editSummary(),       // edit summary
9121b96b63SSatoshi Sahara                $objRevInfo->editor(),            // editor info
92bde2a644SSatoshi Sahara                $objRevInfo->sizechange(),        // size change indicator
9321b96b63SSatoshi Sahara            ]);
9421b96b63SSatoshi Sahara            $form->addHTML($html);
9521b96b63SSatoshi Sahara            $form->addTagClose('div');
9621b96b63SSatoshi Sahara            $form->addTagClose('li');
9721b96b63SSatoshi Sahara        }
9821b96b63SSatoshi Sahara        $form->addTagClose('ul');
9921b96b63SSatoshi Sahara
10021b96b63SSatoshi Sahara        $form->addTagClose('div'); // close div class=no
10121b96b63SSatoshi Sahara
10221b96b63SSatoshi Sahara        // provide navigation for pagenated recent list (of pages and/or media files)
10321b96b63SSatoshi Sahara        $form->addHTML($this->htmlNavigation($first, $hasNext));
10421b96b63SSatoshi Sahara
105c6977b3aSSatoshi Sahara        print $form->toHTML('Recent');
10621b96b63SSatoshi Sahara    }
10721b96b63SSatoshi Sahara
10821b96b63SSatoshi Sahara    /**
10921b96b63SSatoshi Sahara     * Get recent items, and set correct pagenation parameters (first, hasNext)
11021b96b63SSatoshi Sahara     *
11121b96b63SSatoshi Sahara     * @param int  $first
11221b96b63SSatoshi Sahara     * @param bool $hasNext
11321b96b63SSatoshi Sahara     * @return array  recent items to be shown in a pagenated list
11421b96b63SSatoshi Sahara     *
11521b96b63SSatoshi Sahara     * @see also dokuwiki\Changelog::getRevisionInfo()
11621b96b63SSatoshi Sahara     */
11721b96b63SSatoshi Sahara    protected function getRecents(&$first, &$hasNext)
11821b96b63SSatoshi Sahara    {
11921b96b63SSatoshi Sahara        global $ID, $conf;
12021b96b63SSatoshi Sahara
12121b96b63SSatoshi Sahara        $flags = 0;
12221b96b63SSatoshi Sahara        if ($this->show_changes == 'mediafiles' && $conf['mediarevisions']) {
12321b96b63SSatoshi Sahara            $flags = RECENTS_MEDIA_CHANGES;
12421b96b63SSatoshi Sahara        } elseif ($this->show_changes == 'pages') {
12521b96b63SSatoshi Sahara            $flags = 0;
12621b96b63SSatoshi Sahara        } elseif ($conf['mediarevisions']) {
12721b96b63SSatoshi Sahara            $flags = RECENTS_MEDIA_PAGES_MIXED;
12821b96b63SSatoshi Sahara        }
12921b96b63SSatoshi Sahara
13021b96b63SSatoshi Sahara        /* we need to get one additionally log entry to be able to
13121b96b63SSatoshi Sahara         * decide if this is the last page or is there another one.
13221b96b63SSatoshi Sahara         * This is the cheapest solution to get this information.
13321b96b63SSatoshi Sahara         */
13421b96b63SSatoshi Sahara        $recents = getRecents($first, $conf['recent'] + 1, getNS($ID), $flags);
13521b96b63SSatoshi Sahara        if (count($recents) == 0 && $first != 0) {
13621b96b63SSatoshi Sahara            $first = 0;
13721b96b63SSatoshi Sahara            $recents = getRecents($first, $conf['recent'] + 1, getNS($ID), $flags);
13821b96b63SSatoshi Sahara        }
13921b96b63SSatoshi Sahara
14021b96b63SSatoshi Sahara        $hasNext = false;
14121b96b63SSatoshi Sahara        if (count($recents) > $conf['recent']) {
14221b96b63SSatoshi Sahara            $hasNext = true;
14321b96b63SSatoshi Sahara            array_pop($recents); // remove extra log entry
14421b96b63SSatoshi Sahara        }
14521b96b63SSatoshi Sahara        return $recents;
14621b96b63SSatoshi Sahara    }
14721b96b63SSatoshi Sahara
14821b96b63SSatoshi Sahara    /**
1490c92baf0SSatoshi Sahara     * Check possible external deletion for current page or media
1500c92baf0SSatoshi Sahara     *
1510c92baf0SSatoshi Sahara     * To keep sort order in the recent list, we ignore externally modification.
1520c92baf0SSatoshi Sahara     * It is not possible to know when external deletion had happened,
1530c92baf0SSatoshi Sahara     * $info['date'] is to be incremented 1 second when such deletion detected.
1540c92baf0SSatoshi Sahara     */
1550c92baf0SSatoshi Sahara    protected function checkCurrentRevision(array &$info)
1560c92baf0SSatoshi Sahara    {
1570c92baf0SSatoshi Sahara        $itemType = strrpos($info['id'], '.') ? 'media' : 'page';
1580c92baf0SSatoshi Sahara        if ($itemType == 'page') {
1590c92baf0SSatoshi Sahara            $changelog = new PageChangelog($info['id']);
1600c92baf0SSatoshi Sahara        } else {
1610c92baf0SSatoshi Sahara            $changelog = new MediaChangelog($info['id']);
1620c92baf0SSatoshi Sahara        }
163df7627d6SSatoshi Sahara        if (!$changelog->isCurrentRevision($info['date'])) {
1640c92baf0SSatoshi Sahara            $currentRevInfo = $changelog->getCurrentRevisionInfo();
1650c92baf0SSatoshi Sahara            if ($currentRevInfo['type'] == DOKU_CHANGE_TYPE_DELETE) {
166df7627d6SSatoshi Sahara                // the page or media file was externally deleted
1670c92baf0SSatoshi Sahara                $info = array_merge($info, $currentRevInfo);
1680c92baf0SSatoshi Sahara            }
1690c92baf0SSatoshi Sahara        }
1700c92baf0SSatoshi Sahara        unset($changelog);
1710c92baf0SSatoshi Sahara    }
1720c92baf0SSatoshi Sahara
1730c92baf0SSatoshi Sahara    /**
17421b96b63SSatoshi Sahara     * Navigation buttons for Pagenation (prev/next)
17521b96b63SSatoshi Sahara     *
17621b96b63SSatoshi Sahara     * @param int  $first
17721b96b63SSatoshi Sahara     * @param bool $hasNext
17821b96b63SSatoshi Sahara     * @return array  html
17921b96b63SSatoshi Sahara     */
18021b96b63SSatoshi Sahara    protected function htmlNavigation($first, $hasNext)
18121b96b63SSatoshi Sahara    {
18221b96b63SSatoshi Sahara        global $conf, $lang;
18321b96b63SSatoshi Sahara
18421b96b63SSatoshi Sahara        $last = $first + $conf['recent'];
18521b96b63SSatoshi Sahara        $html = '<div class="pagenav">';
18621b96b63SSatoshi Sahara        if ($first > 0) {
18721b96b63SSatoshi Sahara            $first = max($first - $conf['recent'], 0);
18821b96b63SSatoshi Sahara            $html.= '<div class="pagenav-prev">';
18921b96b63SSatoshi Sahara            $html.= '<button type="submit" name="first['.$first.']" accesskey="n"'
19021b96b63SSatoshi Sahara                  . ' title="'.$lang['btn_newer'].' [N]" class="button show">'
19121b96b63SSatoshi Sahara                  . $lang['btn_newer']
19221b96b63SSatoshi Sahara                  . '</button>';
19321b96b63SSatoshi Sahara            $html.= '</div>';
19421b96b63SSatoshi Sahara        }
19521b96b63SSatoshi Sahara        if ($hasNext) {
19621b96b63SSatoshi Sahara            $html.= '<div class="pagenav-next">';
19721b96b63SSatoshi Sahara            $html.= '<button type="submit" name="first['.$last.']" accesskey="p"'
19821b96b63SSatoshi Sahara                  . ' title="'.$lang['btn_older'].' [P]" class="button show">'
19921b96b63SSatoshi Sahara                  . $lang['btn_older']
20021b96b63SSatoshi Sahara                  . '</button>';
20121b96b63SSatoshi Sahara            $html.= '</div>';
20221b96b63SSatoshi Sahara        }
20321b96b63SSatoshi Sahara        $html.= '</div>';
20421b96b63SSatoshi Sahara        return $html;
20521b96b63SSatoshi Sahara    }
20621b96b63SSatoshi Sahara
20721b96b63SSatoshi Sahara    /**
20821b96b63SSatoshi Sahara     * Add dropdown selector of item types to the form instance
20921b96b63SSatoshi Sahara     *
21021b96b63SSatoshi Sahara     * @param Form $form
21121b96b63SSatoshi Sahara     * @return void
21221b96b63SSatoshi Sahara     */
21321b96b63SSatoshi Sahara    protected function addRecentItemSelector(Form $form)
21421b96b63SSatoshi Sahara    {
21521b96b63SSatoshi Sahara        global $lang;
21621b96b63SSatoshi Sahara
2173d7df1dcSSatoshi Sahara        $form->addTagOpen('div')->addClass('changeType');
2183d7df1dcSSatoshi Sahara        $options = array(
2193d7df1dcSSatoshi Sahara                    'pages'      => $lang['pages_changes'],
2203d7df1dcSSatoshi Sahara                    'mediafiles' => $lang['media_changes'],
2213d7df1dcSSatoshi Sahara                    'both'       => $lang['both_changes'],
2223d7df1dcSSatoshi Sahara        );
2233d7df1dcSSatoshi Sahara        $form->addDropdown('show_changes', $options, $lang['changes_type'])
22421b96b63SSatoshi Sahara                ->val($this->show_changes)->addClass('quickselect');
2253d7df1dcSSatoshi Sahara        $form->addButton('do[recent]', $lang['btn_apply'])->attr('type','submit');
2263d7df1dcSSatoshi Sahara        $form->addTagClose('div');
2273d7df1dcSSatoshi Sahara    }
2283d7df1dcSSatoshi Sahara
22921b96b63SSatoshi Sahara    /**
23021b96b63SSatoshi Sahara     * Returns instance of objRevInfo
23121b96b63SSatoshi Sahara     * @param array $info  Revision info structure of page or media
232628d5475SSatoshi Sahara     * @return objRevInfo object (anonymous class)
23321b96b63SSatoshi Sahara     */
23421b96b63SSatoshi Sahara    protected function getObjRevInfo(array $info)
23521b96b63SSatoshi Sahara    {
236628d5475SSatoshi Sahara        return new class ($info) // anonymous class (objRevInfo)
23721b96b63SSatoshi Sahara        {
23821b96b63SSatoshi Sahara            protected $info;
2393d7df1dcSSatoshi Sahara
24021b96b63SSatoshi Sahara            public function __construct(array $info)
24121b96b63SSatoshi Sahara            {
242*8a2bf2ddSSatoshi Sahara                $info['item'] = strrpos($info['id'], '.') ? 'media' : 'page';
243*8a2bf2ddSSatoshi Sahara                $info['current'] = $info['current'] ?? false;
24421b96b63SSatoshi Sahara                $this->info = $info;
2453d7df1dcSSatoshi Sahara            }
2463d7df1dcSSatoshi Sahara
24721b96b63SSatoshi Sahara            // fileicon of the page or media file
24821b96b63SSatoshi Sahara            public function itemIcon()
24921b96b63SSatoshi Sahara            {
25021b96b63SSatoshi Sahara                $id = $this->info['id'];
251*8a2bf2ddSSatoshi Sahara                switch ($this->info['item']) {
252*8a2bf2ddSSatoshi Sahara                    case 'media': // media file revision
25321b96b63SSatoshi Sahara                        $html = media_printicon($id);
254*8a2bf2ddSSatoshi Sahara                        break;
255*8a2bf2ddSSatoshi Sahara                    case 'page': // page revision
25621b96b63SSatoshi Sahara                        $html = '<img class="icon" src="'.DOKU_BASE.'lib/images/fileicons/file.png" alt="'.$id.'" />';
25721b96b63SSatoshi Sahara                }
25821b96b63SSatoshi Sahara                return $html;
25921b96b63SSatoshi Sahara            }
2603d7df1dcSSatoshi Sahara
26121b96b63SSatoshi Sahara            // edit date and time of the page or media file
26221b96b63SSatoshi Sahara            public function editDate()
26321b96b63SSatoshi Sahara            {
264bde2a644SSatoshi Sahara                return '<span class="date">'. dformat($this->info['date']) .'</span>';
265bde2a644SSatoshi Sahara            }
266bde2a644SSatoshi Sahara
267bde2a644SSatoshi Sahara            // edit summary
268bde2a644SSatoshi Sahara            public function editSummary()
269bde2a644SSatoshi Sahara            {
270bde2a644SSatoshi Sahara                return '<span class="sum">'.' – '. hsc($this->info['sum']).'</span>';
271bde2a644SSatoshi Sahara            }
272bde2a644SSatoshi Sahara
273bde2a644SSatoshi Sahara            // editor of the page or media file
274bde2a644SSatoshi Sahara            public function editor()
275bde2a644SSatoshi Sahara            {
276bde2a644SSatoshi Sahara                $html = '<span class="user">';
277bde2a644SSatoshi Sahara                if ($this->info['user']) {
278bde2a644SSatoshi Sahara                    $html.= '<bdi>'. editorinfo($this->info['user']) .'</bdi>';
279bde2a644SSatoshi Sahara                    if (auth_ismanager()) $html.= ' <bdo dir="ltr">('. $this->info['ip'] .')</bdo>';
280bde2a644SSatoshi Sahara                } else {
281bde2a644SSatoshi Sahara                    $html.= '<bdo dir="ltr">'. $this->info['ip'] .'</bdo>';
282bde2a644SSatoshi Sahara                }
283bde2a644SSatoshi Sahara                $html.= '</span>';
284bde2a644SSatoshi Sahara                return $html;
285bde2a644SSatoshi Sahara            }
286bde2a644SSatoshi Sahara
287bde2a644SSatoshi Sahara            // name of the page or media file
288bde2a644SSatoshi Sahara            public function itemName()
289bde2a644SSatoshi Sahara            {
290bde2a644SSatoshi Sahara                $id = $this->info['id'];
291*8a2bf2ddSSatoshi Sahara                switch ($this->info['item']) {
292*8a2bf2ddSSatoshi Sahara                    case 'media': // media file revision
293bde2a644SSatoshi Sahara                        $href = media_managerURL(['tab_details'=>'view', 'image'=> $id, 'ns'=> getNS($id)], '&');
294bde2a644SSatoshi Sahara                        $class = file_exists(mediaFN($id)) ? 'wikilink1' : 'wikilink2';
295bde2a644SSatoshi Sahara                        $html = '<a href="'.$href.'" class="'.$class.'">'.$id.'</a>';
29621b96b63SSatoshi Sahara                        return $html;
297*8a2bf2ddSSatoshi Sahara                    case 'page': // page revision
298*8a2bf2ddSSatoshi Sahara                        $html = html_wikilink(':'.$id, (useHeading('navigation') ? null : $id));
299*8a2bf2ddSSatoshi Sahara                        return $html;
300*8a2bf2ddSSatoshi Sahara                }
301*8a2bf2ddSSatoshi Sahara                return '';
30221b96b63SSatoshi Sahara            }
30321b96b63SSatoshi Sahara
30421b96b63SSatoshi Sahara            // icon difflink
30521b96b63SSatoshi Sahara            public function difflink()
30621b96b63SSatoshi Sahara            {
30721b96b63SSatoshi Sahara                global $lang;
30821b96b63SSatoshi Sahara                $id = $this->info['id'];
3093d7df1dcSSatoshi Sahara
310*8a2bf2ddSSatoshi Sahara                switch ($this->info['item']) {
311*8a2bf2ddSSatoshi Sahara                    case 'media': // media file revision
31221b96b63SSatoshi Sahara                        $revs = (new MediaChangeLog($id))->getRevisions(0, 1);
31321b96b63SSatoshi Sahara                        $diff = (count($revs) && file_exists(mediaFN($id)));
3143d7df1dcSSatoshi Sahara                        if ($diff) {
3153d7df1dcSSatoshi Sahara                            $href = media_managerURL(
31621b96b63SSatoshi Sahara                                ['tab_details'=>'history', 'mediado'=>'diff', 'image'=> $id, 'ns'=> getNS($id)], '&'
3173d7df1dcSSatoshi Sahara                            );
318bde2a644SSatoshi Sahara                        } else {
319bde2a644SSatoshi Sahara                            $href = '';
3203d7df1dcSSatoshi Sahara                        }
321*8a2bf2ddSSatoshi Sahara                        break;
322*8a2bf2ddSSatoshi Sahara                    case 'page': // page revision
32321b96b63SSatoshi Sahara                        $href = wl($id, "do=diff", false, '&');
3243d7df1dcSSatoshi Sahara                }
3253d7df1dcSSatoshi Sahara
326bde2a644SSatoshi Sahara                if ($href) {
32721b96b63SSatoshi Sahara                    $html = '<a href="'.$href.'" class="diff_link">'
32821b96b63SSatoshi Sahara                          . '<img src="'.DOKU_BASE.'lib/images/diff.png" width="15" height="11"'
32921b96b63SSatoshi Sahara                          . ' title="'.$lang['diff'].'" alt="'.$lang['diff'].'" />'
33021b96b63SSatoshi Sahara                          . '</a>';
331bde2a644SSatoshi Sahara                } else {
332bde2a644SSatoshi Sahara                    $html = '<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />';
3333d7df1dcSSatoshi Sahara                }
33421b96b63SSatoshi Sahara                return $html;
33521b96b63SSatoshi Sahara            }
3363d7df1dcSSatoshi Sahara
33721b96b63SSatoshi Sahara            // icon revision link
33821b96b63SSatoshi Sahara            public function revisionlink()
33921b96b63SSatoshi Sahara            {
34021b96b63SSatoshi Sahara                global $lang;
34121b96b63SSatoshi Sahara                $id = $this->info['id'];
342*8a2bf2ddSSatoshi Sahara                switch ($this->info['item']) {
343*8a2bf2ddSSatoshi Sahara                    case 'media': // media file revision
34421b96b63SSatoshi Sahara                        $href = media_managerURL(['tab_details'=>'history', 'image'=> $id, 'ns'=> getNS($id)], '&');
345*8a2bf2ddSSatoshi Sahara                        break;
346*8a2bf2ddSSatoshi Sahara                    case 'page': // page revision
34721b96b63SSatoshi Sahara                        $href = wl($id, "do=revisions", false, '&');
3483d7df1dcSSatoshi Sahara                }
34921b96b63SSatoshi Sahara                $html = '<a href="'.$href.'" class="revisions_link">'
35021b96b63SSatoshi Sahara                      . '<img src="'.DOKU_BASE.'lib/images/history.png" width="12" height="14"'
35121b96b63SSatoshi Sahara                      . ' title="'.$lang['btn_revs'].'" alt="'.$lang['btn_revs'].'" />'
35221b96b63SSatoshi Sahara                      . '</a>';
35321b96b63SSatoshi Sahara                return $html;
35421b96b63SSatoshi Sahara            }
3553d7df1dcSSatoshi Sahara
356bde2a644SSatoshi Sahara            // size change
357bde2a644SSatoshi Sahara            public function sizeChange()
35821b96b63SSatoshi Sahara            {
359bde2a644SSatoshi Sahara                $class = 'sizechange';
360bde2a644SSatoshi Sahara                $value = filesize_h(abs($this->info['sizechange']));
361bde2a644SSatoshi Sahara                if ($this->info['sizechange'] > 0) {
362bde2a644SSatoshi Sahara                    $class .= ' positive';
363bde2a644SSatoshi Sahara                    $value = '+' . $value;
364bde2a644SSatoshi Sahara                } elseif ($this->info['sizechange'] < 0) {
365bde2a644SSatoshi Sahara                    $class .= ' negative';
366bde2a644SSatoshi Sahara                    $value = '-' . $value;
3673d7df1dcSSatoshi Sahara                } else {
368bde2a644SSatoshi Sahara                    $value = '±' . $value;
3693d7df1dcSSatoshi Sahara                }
370bde2a644SSatoshi Sahara                return '<span class="'.$class.'">'.$value.'</span>';
3713d7df1dcSSatoshi Sahara            }
37221b96b63SSatoshi Sahara        }; // end of anonymous class (objRevInfo)
3733d7df1dcSSatoshi Sahara    }
3743d7df1dcSSatoshi Sahara
3753d7df1dcSSatoshi Sahara}
376