xref: /dokuwiki/inc/Action/Revert.php (revision 6e4bf08e063f1f0b061525dfad582869333287e7)
1<?php
2
3namespace dokuwiki\Action;
4
5use dokuwiki\Action\Exception\ActionAbort;
6use dokuwiki\Action\Exception\ActionException;
7
8/**
9 * Class Revert
10 *
11 * Quick revert to an old revision
12 *
13 * @package dokuwiki\Action
14 */
15class Revert extends AbstractAction {
16
17    /** @inheritdoc */
18    function minimumPermission() {
19        global $INFO;
20        if($INFO['ismanager']) {
21            return AUTH_EDIT;
22        } else {
23            return AUTH_ADMIN;
24        }
25    }
26
27    // fixme check for writability of the current page ($INFO might do it wrong and check the attic version)
28
29    public function preProcess() {
30        if(!checkSecurityToken()) throw new ActionException();
31
32        global $ID;
33        global $REV;
34        global $lang;
35        global $INPUT;
36
37        // when no revision is given, delete current one
38        // FIXME this feature is not exposed in the GUI currently
39        $text = '';
40        $sum = $lang['deleted'];
41        if($REV) {
42            $text = rawWiki($ID, $REV);
43            if(!$text) throw new ActionException(); //something went wrong
44            $sum = sprintf($lang['restored'], dformat($REV));
45        }
46
47        // spam check
48        if(checkwordblock($text)) {
49            msg($lang['wordblock'], -1);
50            throw new ActionException('edit');
51        }
52
53        saveWikiText($ID, $text, $sum, false);
54        msg($sum, 1);
55
56        //delete any draft
57        act_draftdel('fixme'); // FIXME replace this utility function
58        //session_write_close(); // FIXME sessions should be close somewhere higher up, maybe ActionRouter
59
60        // when done, show current page
61        $INPUT->server->set('REQUEST_METHOD', 'post'); //should force a redirect // FIXME should we have a RedirectException?
62        $REV = '';
63
64        throw new ActionAbort();
65    }
66
67}
68