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