xref: /dokuwiki/inc/Ui/Revisions.php (revision 67ef3e885af3e80db036d3f3e271cbe3d529dcaa)
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