xref: /dokuwiki/inc/Action/Revert.php (revision 84e1c54096731e0b1fea154e6d561e2bf083b667)
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    public function minimumPermission() {
19        return AUTH_EDIT;
20    }
21
22    /**
23     *
24     * @inheritdoc
25     * @throws ActionAbort
26     * @throws ActionException
27     * @todo 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
36        // when no revision is given, delete current one
37        // FIXME this feature is not exposed in the GUI currently
38        $text = '';
39        $sum = $lang['deleted'];
40        if($REV) {
41            $text = rawWiki($ID, $REV);
42            if(!$text) throw new ActionException(); //something went wrong
43            $sum = sprintf($lang['restored'], dformat($REV));
44        }
45
46        // spam check
47        if(checkwordblock($text)) {
48            msg($lang['wordblock'], -1);
49            throw new ActionException('edit');
50        }
51
52        saveWikiText($ID, $text, $sum, false);
53        msg($sum, 1);
54        $REV = '';
55
56        // continue with draftdel -> redirect -> show
57        throw new ActionAbort('draftdel');
58    }
59
60}
61