xref: /dokuwiki/inc/Ui/MediaRevisions.php (revision 26dfc2323f8f70cb69aac4c8c51bf7997809f2ca)
108500ab3SSatoshi Sahara<?php
208500ab3SSatoshi Sahara
308500ab3SSatoshi Saharanamespace dokuwiki\Ui;
408500ab3SSatoshi Sahara
508500ab3SSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog;
6bf3fa5e9SSatoshi Saharause dokuwiki\ChangeLog\RevisionInfo;
708500ab3SSatoshi Saharause dokuwiki\Form\Form;
879a2d784SGerrit Uitslaguse InvalidArgumentException;
908500ab3SSatoshi Sahara
1008500ab3SSatoshi Sahara/**
1108500ab3SSatoshi Sahara * DokuWiki MediaRevisions Interface
1208500ab3SSatoshi Sahara *
1308500ab3SSatoshi Sahara * @package dokuwiki\Ui
1408500ab3SSatoshi Sahara */
15ae5d2354SSatoshi Saharaclass MediaRevisions extends Revisions
1608500ab3SSatoshi Sahara{
17d9c75b22SSatoshi Sahara    /* @var MediaChangeLog */
18d9c75b22SSatoshi Sahara    protected $changelog;
19d9c75b22SSatoshi Sahara
2008500ab3SSatoshi Sahara    /**
2108500ab3SSatoshi Sahara     * MediaRevisions Ui constructor
2208500ab3SSatoshi Sahara     *
2308500ab3SSatoshi Sahara     * @param string $id id of media
2408500ab3SSatoshi Sahara     */
2508500ab3SSatoshi Sahara    public function __construct($id)
2608500ab3SSatoshi Sahara    {
27cf3c75d6SSatoshi Sahara        if (!$id) {
2879a2d784SGerrit Uitslag            throw new InvalidArgumentException('media id should not be empty!');
2930a159abSSatoshi Sahara        }
30ae5d2354SSatoshi Sahara        parent::__construct($id);
3108500ab3SSatoshi Sahara    }
3208500ab3SSatoshi Sahara
33e71e09a6SSatoshi Sahara    /** @inheritdoc */
34e71e09a6SSatoshi Sahara    protected function setChangeLog()
35e71e09a6SSatoshi Sahara    {
36e71e09a6SSatoshi Sahara        $this->changelog = new MediaChangeLog($this->id);
37e71e09a6SSatoshi Sahara    }
38e71e09a6SSatoshi Sahara
3908500ab3SSatoshi Sahara    /**
4008500ab3SSatoshi Sahara     * Display a list of Media Revisions in the MediaManager
4108500ab3SSatoshi Sahara     *
42e2d055f5SAndreas Gohr     * @param int $first skip the first n changelog lines
43e2d055f5SAndreas Gohr     * @return void
4408500ab3SSatoshi Sahara     * @author Kate Arzamastseva <pshns@ukr.net>
4508500ab3SSatoshi Sahara     * @author Satoshi Sahara <sahara.satoshi@gmail.com>
4608500ab3SSatoshi Sahara     *
47e2d055f5SAndreas Gohr     * @author Andreas Gohr <andi@splitbrain.org>
48e2d055f5SAndreas Gohr     * @author Ben Coburn <btcoburn@silicodon.net>
4908500ab3SSatoshi Sahara     */
50a46cc3dcSAndreas Gohr    public function show($first = -1)
5108500ab3SSatoshi Sahara    {
5208500ab3SSatoshi Sahara        global $lang;
53ad088cbcSSatoshi Sahara        $changelog =& $this->changelog;
5408500ab3SSatoshi Sahara
55eeda7adaSGerrit Uitslag        // get revisions, and set correct pagination parameters (first, hasNext)
56a46cc3dcSAndreas Gohr        if ($first === null) $first = -1;
5708500ab3SSatoshi Sahara        $hasNext = false;
5808500ab3SSatoshi Sahara        $revisions = $this->getRevisions($first, $hasNext);
5908500ab3SSatoshi Sahara
6008500ab3SSatoshi Sahara        // create the form
6108500ab3SSatoshi Sahara        $form = new Form([
6208500ab3SSatoshi Sahara            'id' => 'page__revisions', // must not be "media__revisions"
6308500ab3SSatoshi Sahara            'action' => media_managerURL(['image' => $this->id], '&'),
6408500ab3SSatoshi Sahara            'class' => 'changes',
6508500ab3SSatoshi Sahara        ]);
6608500ab3SSatoshi Sahara        $form->setHiddenField('mediado', 'diff'); // required for media revisions
6708500ab3SSatoshi Sahara        $form->addTagOpen('div')->addClass('no');
6808500ab3SSatoshi Sahara
6908500ab3SSatoshi Sahara        // start listing
7008500ab3SSatoshi Sahara        $form->addTagOpen('ul');
7108500ab3SSatoshi Sahara        foreach ($revisions as $info) {
7208500ab3SSatoshi Sahara            $rev = $info['date'];
737efac80bSTherealperO            $info['media'] = true;
74b428a50aSSatoshi Sahara            $RevInfo = new RevisionInfo($info);
75b428a50aSSatoshi Sahara            $RevInfo->isCurrent($changelog->isCurrentRevision($rev));
765ec96136SSatoshi Sahara
77b428a50aSSatoshi Sahara            $class = ($RevInfo->val('type') === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor' : '';
7808500ab3SSatoshi Sahara            $form->addTagOpen('li')->addClass($class);
7908500ab3SSatoshi Sahara            $form->addTagOpen('div')->addClass('li');
8008500ab3SSatoshi Sahara
81b428a50aSSatoshi Sahara            if ($RevInfo->isCurrent()) {
82d1575179SSatoshi Sahara                $form->addCheckbox('rev2[]')->val($rev);
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            $html = implode(' ', [
91b428a50aSSatoshi Sahara                $RevInfo->showEditDate(),          // edit date and time
92b428a50aSSatoshi Sahara                $RevInfo->showIconCompareWithCurrent(),  // link to diff view icon
93b428a50aSSatoshi Sahara                $RevInfo->showFileName(),          // name of page or media
9408500ab3SSatoshi Sahara                '<div>',
95b428a50aSSatoshi Sahara                $RevInfo->showEditSummary(),       // edit summary
96b428a50aSSatoshi Sahara                $RevInfo->showEditor(),            // editor info
97b428a50aSSatoshi Sahara                $RevInfo->showSizechange(),        // size change indicator
98b428a50aSSatoshi Sahara                $RevInfo->showCurrentIndicator(),  // current indicator (only when k=1)
9908500ab3SSatoshi Sahara                '</div>',
10008500ab3SSatoshi Sahara            ]);
10108500ab3SSatoshi Sahara            $form->addHTML($html);
10208500ab3SSatoshi Sahara
10308500ab3SSatoshi Sahara            $form->addTagClose('div');
10408500ab3SSatoshi Sahara            $form->addTagClose('li');
10508500ab3SSatoshi Sahara        }
10608500ab3SSatoshi Sahara        $form->addTagClose('ul');  // end of revision list
10708500ab3SSatoshi Sahara
10808500ab3SSatoshi Sahara        // show button for diff view
10908500ab3SSatoshi Sahara        $form->addButton('do[diff]', $lang['diff2'])->attr('type', 'submit');
11008500ab3SSatoshi Sahara
11108500ab3SSatoshi Sahara        $form->addTagClose('div'); // close div class=no
11208500ab3SSatoshi Sahara
113*26dfc232SAndreas Gohr        echo $form->toHTML('Revisions');
11408500ab3SSatoshi Sahara
115eeda7adaSGerrit Uitslag        // provide navigation for paginated revision list (of pages and/or media files)
116*26dfc232SAndreas Gohr        echo $this->navigation(
117e2d055f5SAndreas Gohr            $first,
118e2d055f5SAndreas Gohr            $hasNext,
119e2d055f5SAndreas Gohr            static fn($n) => media_managerURL(['first' => $n], '&', false, true)
120e2d055f5SAndreas Gohr        );
12108500ab3SSatoshi Sahara    }
12208500ab3SSatoshi Sahara}
123