xref: /dokuwiki/inc/Ui/MediaRevisions.php (revision cf3c75d69f60ac546e745559f7767c5f84b1a18c)
108500ab3SSatoshi Sahara<?php
208500ab3SSatoshi Sahara
308500ab3SSatoshi Saharanamespace dokuwiki\Ui;
408500ab3SSatoshi Sahara
508500ab3SSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog;
608500ab3SSatoshi Saharause dokuwiki\Form\Form;
708500ab3SSatoshi Sahara
808500ab3SSatoshi Sahara/**
908500ab3SSatoshi Sahara * DokuWiki MediaRevisions Interface
1008500ab3SSatoshi Sahara *
1108500ab3SSatoshi Sahara * @package dokuwiki\Ui
1208500ab3SSatoshi Sahara */
13ae5d2354SSatoshi Saharaclass MediaRevisions extends Revisions
1408500ab3SSatoshi Sahara{
15d9c75b22SSatoshi Sahara    /* @var MediaChangeLog */
16d9c75b22SSatoshi Sahara    protected $changelog;
17d9c75b22SSatoshi Sahara
1808500ab3SSatoshi Sahara    /**
1908500ab3SSatoshi Sahara     * MediaRevisions Ui constructor
2008500ab3SSatoshi Sahara     *
2108500ab3SSatoshi Sahara     * @param string $id  id of media
2208500ab3SSatoshi Sahara     */
2308500ab3SSatoshi Sahara    public function __construct($id)
2408500ab3SSatoshi Sahara    {
25*cf3c75d6SSatoshi Sahara        if (!$id) {
2630a159abSSatoshi Sahara            throw new \InvalidArgumentException('media id should not be empty!');
2730a159abSSatoshi Sahara        }
28e71e09a6SSatoshi Sahara        $this->item = 'media';
29ae5d2354SSatoshi Sahara        parent::__construct($id);
3008500ab3SSatoshi Sahara    }
3108500ab3SSatoshi Sahara
32e71e09a6SSatoshi Sahara    /** @inheritdoc */
33e71e09a6SSatoshi Sahara    protected function setChangeLog()
34e71e09a6SSatoshi Sahara    {
35e71e09a6SSatoshi Sahara        $this->changelog = new MediaChangeLog($this->id);
36e71e09a6SSatoshi Sahara    }
37e71e09a6SSatoshi Sahara
38d9c75b22SSatoshi Sahara    /** @inheritdoc */
39d9c75b22SSatoshi Sahara    protected function itemFN($id, $rev = '')
40d9c75b22SSatoshi Sahara    {
41d9c75b22SSatoshi Sahara        return mediaFN($id, $rev);
42d9c75b22SSatoshi Sahara    }
43d9c75b22SSatoshi Sahara
4408500ab3SSatoshi Sahara    /**
4508500ab3SSatoshi Sahara     * Display a list of Media Revisions in the MediaManager
4608500ab3SSatoshi Sahara     *
4708500ab3SSatoshi Sahara     * @author Andreas Gohr <andi@splitbrain.org>
4808500ab3SSatoshi Sahara     * @author Ben Coburn <btcoburn@silicodon.net>
4908500ab3SSatoshi Sahara     * @author Kate Arzamastseva <pshns@ukr.net>
5008500ab3SSatoshi Sahara     * @author Satoshi Sahara <sahara.satoshi@gmail.com>
5108500ab3SSatoshi Sahara     *
5208500ab3SSatoshi Sahara     * @param int $first  skip the first n changelog lines
5308500ab3SSatoshi Sahara     * @return void
5408500ab3SSatoshi Sahara     */
5508500ab3SSatoshi Sahara    public function show($first = 0)
5608500ab3SSatoshi Sahara    {
5708500ab3SSatoshi Sahara        global $lang;
5808500ab3SSatoshi Sahara
5908500ab3SSatoshi Sahara        // get revisions, and set correct pagenation parameters (first, hasNext)
6008500ab3SSatoshi Sahara        if ($first === null) $first = 0;
6108500ab3SSatoshi Sahara        $hasNext = false;
6208500ab3SSatoshi Sahara        $revisions = $this->getRevisions($first, $hasNext);
6308500ab3SSatoshi Sahara
6408500ab3SSatoshi Sahara        // create the form
6508500ab3SSatoshi Sahara        $form = new Form([
6608500ab3SSatoshi Sahara                'id' => 'page__revisions', // must not be "media__revisions"
6708500ab3SSatoshi Sahara                'action' => media_managerURL(['image' => $this->id], '&'),
6808500ab3SSatoshi Sahara                'class'  => 'changes',
6908500ab3SSatoshi Sahara        ]);
7008500ab3SSatoshi Sahara        $form->setHiddenField('mediado', 'diff'); // required for media revisions
7108500ab3SSatoshi Sahara        $form->addTagOpen('div')->addClass('no');
7208500ab3SSatoshi Sahara
7308500ab3SSatoshi Sahara        // start listing
7408500ab3SSatoshi Sahara        $form->addTagOpen('ul');
7508500ab3SSatoshi Sahara        foreach ($revisions as $info) {
7608500ab3SSatoshi Sahara            $rev = $info['date'];
7708500ab3SSatoshi Sahara            $class = ($info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : '';
7808500ab3SSatoshi Sahara            $form->addTagOpen('li')->addClass($class);
7908500ab3SSatoshi Sahara            $form->addTagOpen('div')->addClass('li');
8008500ab3SSatoshi Sahara
8108500ab3SSatoshi Sahara            if (isset($info['current'])) {
8208500ab3SSatoshi Sahara               $form->addCheckbox('rev2[]')->val('current');
8308500ab3SSatoshi Sahara            } elseif (file_exists(mediaFN($this->id, $rev))) {
8408500ab3SSatoshi Sahara                $form->addCheckbox('rev2[]')->val($rev);
8508500ab3SSatoshi Sahara            } else {
8608500ab3SSatoshi Sahara                $form->addCheckbox('')->val($rev)->attr('disabled','disabled');
8708500ab3SSatoshi Sahara            }
8808500ab3SSatoshi Sahara            $form->addHTML(' ');
8908500ab3SSatoshi Sahara
9008500ab3SSatoshi Sahara            $objRevInfo = $this->getObjRevInfo($info);
9108500ab3SSatoshi Sahara            $html = implode(' ', [
9208500ab3SSatoshi Sahara                $objRevInfo->editDate(),          // edit date and time
9308500ab3SSatoshi Sahara                $objRevInfo->difflink(),          // link to diffview icon
9408500ab3SSatoshi Sahara                $objRevInfo->itemName(),          // name of page or media
9508500ab3SSatoshi Sahara                '<div>',
9608500ab3SSatoshi Sahara                $objRevInfo->editSummary(),       // edit summary
9708500ab3SSatoshi Sahara                $objRevInfo->editor(),            // editor info
98ae5d2354SSatoshi Sahara                $objRevInfo->sizechange(),        // size change indicator
9908500ab3SSatoshi Sahara                $objRevInfo->currentIndicator(),  // current indicator (only when k=1)
10008500ab3SSatoshi Sahara                '</div>',
10108500ab3SSatoshi Sahara            ]);
10208500ab3SSatoshi Sahara            $form->addHTML($html);
10308500ab3SSatoshi Sahara
10408500ab3SSatoshi Sahara            $form->addTagClose('div');
10508500ab3SSatoshi Sahara            $form->addTagClose('li');
10608500ab3SSatoshi Sahara        }
10708500ab3SSatoshi Sahara        $form->addTagClose('ul');  // end of revision list
10808500ab3SSatoshi Sahara
10908500ab3SSatoshi Sahara        // show button for diff view
11008500ab3SSatoshi Sahara        $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit');
11108500ab3SSatoshi Sahara
11208500ab3SSatoshi Sahara        $form->addTagClose('div'); // close div class=no
11308500ab3SSatoshi Sahara
11408500ab3SSatoshi Sahara        print $form->toHTML('Revisions');
11508500ab3SSatoshi Sahara
11608500ab3SSatoshi Sahara        // provide navigation for pagenated revision list (of pages and/or media files)
117ae5d2354SSatoshi Sahara        print $this->navigation($first, $hasNext, function ($n) {
118ae5d2354SSatoshi Sahara            return media_managerURL(['first' => $n], '&', false, true);
119ae5d2354SSatoshi Sahara        });
12008500ab3SSatoshi Sahara    }
12108500ab3SSatoshi Sahara
12208500ab3SSatoshi Sahara}
123