xref: /dokuwiki/inc/Action/Edit.php (revision 6e4bf08e063f1f0b061525dfad582869333287e7)
1<?php
2
3namespace dokuwiki\Action;
4
5use dokuwiki\Action\Exception\ActionAbort;
6
7/**
8 * Class Edit
9 *
10 * Handle editing
11 *
12 * @package dokuwiki\Action
13 */
14class Edit extends AbstractAction {
15
16    /** @inheritdoc */
17    function minimumPermission() {
18        global $INFO;
19        if($INFO['exists']) {
20            return AUTH_READ; // we check again below
21        } else {
22            return AUTH_CREATE;
23        }
24    }
25
26    /**
27     * @inheritdoc falls back to 'source' if page not writable
28     */
29    public function checkPermissions() {
30        parent::checkPermissions();
31        global $INFO;
32
33        // no edit permission? view source
34        if($INFO['exists'] && !$INFO['writable']) {
35            throw new ActionAbort('source');
36        }
37    }
38
39    public function preProcess() {
40        global $ID;
41        global $INFO;
42
43        global $TEXT;
44        global $RANGE;
45        global $PRE;
46        global $SUF;
47        global $REV;
48        global $SUM;
49        global $lang;
50        global $DATE;
51
52        if(!isset($TEXT)) {
53            if($INFO['exists']) {
54                if($RANGE) {
55                    list($PRE, $TEXT, $SUF) = rawWikiSlices($RANGE, $ID, $REV);
56                } else {
57                    $TEXT = rawWiki($ID, $REV);
58                }
59            } else {
60                $TEXT = pageTemplate($ID);
61            }
62        }
63
64        //set summary default
65        if(!$SUM) {
66            if($REV) {
67                $SUM = sprintf($lang['restored'], dformat($REV));
68            } elseif(!$INFO['exists']) {
69                $SUM = $lang['created'];
70            }
71        }
72
73        // Use the date of the newest revision, not of the revision we edit
74        // This is used for conflict detection
75        if(!$DATE) $DATE = @filemtime(wikiFN($ID));
76
77        //check if locked by anyone - if not lock for my self
78        $lockedby = checklock($ID);
79        if($lockedby) {
80            throw new ActionAbort('locked');
81        };
82        lock($ID);
83    }
84
85    public function tplContent() {
86        html_edit();
87    }
88
89}
90