xref: /dokuwiki/inc/Action/Revert.php (revision 601a1f6035681df99fd3c393afa21be465812974)
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 */
15*601a1f60SAndreas Gohrclass Revert extends AbstractUserAction
16*601a1f60SAndreas Gohr{
17f21dad39SAndreas Gohr
18f21dad39SAndreas Gohr    /** @inheritdoc */
19*601a1f60SAndreas Gohr    public function minimumPermission()
20*601a1f60SAndreas Gohr    {
21f21dad39SAndreas Gohr        return AUTH_EDIT;
22f21dad39SAndreas Gohr    }
23f21dad39SAndreas Gohr
24ec701221SAndreas Gohr    /**
25ec701221SAndreas Gohr     *
26ec701221SAndreas Gohr     * @inheritdoc
27ec701221SAndreas Gohr     * @throws ActionAbort
28ec701221SAndreas Gohr     * @throws ActionException
29ec701221SAndreas Gohr     * @todo check for writability of the current page ($INFO might do it wrong and check the attic version)
30ec701221SAndreas Gohr     */
31*601a1f60SAndreas Gohr    public function preProcess()
32*601a1f60SAndreas Gohr    {
33f21dad39SAndreas Gohr        if (!checkSecurityToken()) throw new ActionException();
34f21dad39SAndreas Gohr
35f21dad39SAndreas Gohr        global $ID;
36f21dad39SAndreas Gohr        global $REV;
37f21dad39SAndreas Gohr        global $lang;
38f21dad39SAndreas Gohr
39f21dad39SAndreas Gohr        // when no revision is given, delete current one
40f21dad39SAndreas Gohr        // FIXME this feature is not exposed in the GUI currently
41f21dad39SAndreas Gohr        $text = '';
42f21dad39SAndreas Gohr        $sum = $lang['deleted'];
43f21dad39SAndreas Gohr        if ($REV) {
44f21dad39SAndreas Gohr            $text = rawWiki($ID, $REV);
45f21dad39SAndreas Gohr            if (!$text) throw new ActionException(); //something went wrong
46f21dad39SAndreas Gohr            $sum = sprintf($lang['restored'], dformat($REV));
47f21dad39SAndreas Gohr        }
48f21dad39SAndreas Gohr
49f21dad39SAndreas Gohr        // spam check
50f21dad39SAndreas Gohr        if (checkwordblock($text)) {
51f21dad39SAndreas Gohr            msg($lang['wordblock'], -1);
52f21dad39SAndreas Gohr            throw new ActionException('edit');
53f21dad39SAndreas Gohr        }
54f21dad39SAndreas Gohr
55f21dad39SAndreas Gohr        saveWikiText($ID, $text, $sum, false);
56f21dad39SAndreas Gohr        msg($sum, 1);
57f21dad39SAndreas Gohr        $REV = '';
58231f749dSAndreas Gohr
59231f749dSAndreas Gohr        // continue with draftdel -> redirect -> show
60231f749dSAndreas Gohr        throw new ActionAbort('draftdel');
61f21dad39SAndreas Gohr    }
62f21dad39SAndreas Gohr
63f21dad39SAndreas Gohr}
64