xref: /dokuwiki/inc/Action/Save.php (revision d4f83172d9533c4d84f450fe22ef630816b21d75)
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 Save
10ab583a1bSAndreas Gohr *
11ab583a1bSAndreas Gohr * Save at the end of an edit session
12ab583a1bSAndreas Gohr *
13ab583a1bSAndreas Gohr * @package dokuwiki\Action
14ab583a1bSAndreas Gohr */
158c7c53b0SAndreas Gohrclass Save extends AbstractAction
168c7c53b0SAndreas Gohr{
17f21dad39SAndreas Gohr    /** @inheritdoc */
18d868eb89SAndreas Gohr    public function minimumPermission()
19d868eb89SAndreas Gohr    {
20f21dad39SAndreas Gohr        global $INFO;
21f21dad39SAndreas Gohr        if ($INFO['exists']) {
22f21dad39SAndreas Gohr            return AUTH_EDIT;
23f21dad39SAndreas Gohr        } else {
24f21dad39SAndreas Gohr            return AUTH_CREATE;
25f21dad39SAndreas Gohr        }
26f21dad39SAndreas Gohr    }
27f21dad39SAndreas Gohr
28ab583a1bSAndreas Gohr    /** @inheritdoc */
29d868eb89SAndreas Gohr    public function preProcess()
30d868eb89SAndreas Gohr    {
31f21dad39SAndreas Gohr        if (!checkSecurityToken()) throw new ActionException('preview');
32f21dad39SAndreas Gohr
33f21dad39SAndreas Gohr        global $ID;
34f21dad39SAndreas Gohr        global $DATE;
35f21dad39SAndreas Gohr        global $PRE;
36f21dad39SAndreas Gohr        global $TEXT;
37f21dad39SAndreas Gohr        global $SUF;
38f21dad39SAndreas Gohr        global $SUM;
39f21dad39SAndreas Gohr        global $lang;
40f21dad39SAndreas Gohr        global $INFO;
41f21dad39SAndreas Gohr        global $INPUT;
42f21dad39SAndreas Gohr
43f21dad39SAndreas Gohr        //spam check
44f21dad39SAndreas Gohr        if (checkwordblock()) {
45f21dad39SAndreas Gohr            msg($lang['wordblock'], -1);
46f21dad39SAndreas Gohr            throw new ActionException('edit');
47f21dad39SAndreas Gohr        }
48f21dad39SAndreas Gohr        //conflict check
49*7d34963bSAndreas Gohr        if (
50*7d34963bSAndreas Gohr            $DATE != 0
51056bf31fSDamien Regad            && isset($INFO['meta']['date']['modified'])
52056bf31fSDamien Regad            && $INFO['meta']['date']['modified'] > $DATE
53056bf31fSDamien Regad        ) {
54f21dad39SAndreas Gohr            throw new ActionException('conflict');
55f21dad39SAndreas Gohr        }
56f21dad39SAndreas Gohr
57f21dad39SAndreas Gohr        //save it
58f21dad39SAndreas Gohr        saveWikiText($ID, con($PRE, $TEXT, $SUF, true), $SUM, $INPUT->bool('minor')); //use pretty mode for con
59f21dad39SAndreas Gohr        //unlock it
60f21dad39SAndreas Gohr        unlock($ID);
61f21dad39SAndreas Gohr
62231f749dSAndreas Gohr        // continue with draftdel -> redirect -> show
63231f749dSAndreas Gohr        throw new ActionAbort('draftdel');
64f21dad39SAndreas Gohr    }
65f21dad39SAndreas Gohr}
66