xref: /plugin/approve/action/approve.php (revision 1b552e8770c2762b98667d8e9f261a9c379a4ec6)
11aeb2b4dSghi<?php
21aeb2b4dSghi
3bab76148SSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ApproveConst;
41aeb2b4dSghi
51aeb2b4dSghiif(!defined('DOKU_INC')) die();
61aeb2b4dSghi
71aeb2b4dSghiclass action_plugin_approve_approve extends DokuWiki_Action_Plugin {
81aeb2b4dSghi
94474ed8aSSzymon Olewniczak    /** @var helper_plugin_sqlite */
104474ed8aSSzymon Olewniczak    protected $sqlite;
11bab76148SSzymon Olewniczak
12*1b552e87SSzymon Olewniczak    /** @var helper_plugin_approve */
13*1b552e87SSzymon Olewniczak    protected $helper;
14*1b552e87SSzymon Olewniczak
154474ed8aSSzymon Olewniczak    /**
164474ed8aSSzymon Olewniczak     * @return helper_plugin_sqlite
174474ed8aSSzymon Olewniczak     */
18*1b552e87SSzymon Olewniczak    protected function sqlite() {
194474ed8aSSzymon Olewniczak        if (!$this->sqlite) {
20*1b552e87SSzymon Olewniczak            /** @var helper_plugin_approve_db $db_helper */
214474ed8aSSzymon Olewniczak            $db_helper = plugin_load('helper', 'approve_db');
224474ed8aSSzymon Olewniczak            $this->sqlite = $db_helper->getDB();
234474ed8aSSzymon Olewniczak        }
244474ed8aSSzymon Olewniczak        return $this->sqlite;
2550481663SSzymon Olewniczak    }
2650481663SSzymon Olewniczak
274474ed8aSSzymon Olewniczak    /**
28*1b552e87SSzymon Olewniczak     * @return helper_plugin_approve
29*1b552e87SSzymon Olewniczak     */
30*1b552e87SSzymon Olewniczak    protected function helper() {
31*1b552e87SSzymon Olewniczak        if (!$this->helper) {
32*1b552e87SSzymon Olewniczak            $helper = plugin_load('helper', 'approve');
33*1b552e87SSzymon Olewniczak            $this->helper = $helper;
34*1b552e87SSzymon Olewniczak        }
35*1b552e87SSzymon Olewniczak        return $this->helper;
36*1b552e87SSzymon Olewniczak    }
37*1b552e87SSzymon Olewniczak
38*1b552e87SSzymon Olewniczak
39*1b552e87SSzymon Olewniczak    /**
404474ed8aSSzymon Olewniczak     * @param Doku_Event_Handler $controller
414474ed8aSSzymon Olewniczak     */
424474ed8aSSzymon Olewniczak    public function register(Doku_Event_Handler $controller) {
434474ed8aSSzymon Olewniczak        $controller->register_hook('TPL_ACT_RENDER', 'AFTER', $this, 'handle_diff_accept');
444474ed8aSSzymon Olewniczak        $controller->register_hook('HTML_SHOWREV_OUTPUT', 'BEFORE', $this, 'handle_showrev');
454474ed8aSSzymon Olewniczak        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_approve');
464474ed8aSSzymon Olewniczak        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_viewer');
474474ed8aSSzymon Olewniczak        $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'handle_display_banner');
4855f447f4SSzymon Olewniczak        $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'AFTER', $this, 'handle_pagesave_after');
491aeb2b4dSghi    }
501aeb2b4dSghi
514474ed8aSSzymon Olewniczak    /**
524474ed8aSSzymon Olewniczak     * @param Doku_Event $event
534474ed8aSSzymon Olewniczak     */
544474ed8aSSzymon Olewniczak    public function handle_diff_accept(Doku_Event $event) {
554474ed8aSSzymon Olewniczak		global $INFO;
564474ed8aSSzymon Olewniczak
57*1b552e87SSzymon Olewniczak		if (!$this->helper()->use_approve_here($INFO['id'])) return;
5850481663SSzymon Olewniczak
591aeb2b4dSghi		if ($event->data == 'diff' && isset($_GET['approve'])) {
604474ed8aSSzymon Olewniczak		    $href = wl($INFO['id'], ['approve' => 'approve']);
614474ed8aSSzymon Olewniczak			ptln('<a href="' . $href . '">'.$this->getLang('approve').'</a>');
621aeb2b4dSghi		}
6384047bdaSRuud
644474ed8aSSzymon Olewniczak        if ($this->getConf('ready_for_approval') && $event->data == 'diff' && isset($_GET['ready_for_approval'])) {
654474ed8aSSzymon Olewniczak            $href = wl($INFO['id'], ['ready_for_approval' => 'ready_for_approval']);
664474ed8aSSzymon Olewniczak            ptln('<a href="' . $href . '">'.$this->getLang('approve').'</a>');
6784047bdaSRuud		}
681aeb2b4dSghi	}
691aeb2b4dSghi
704474ed8aSSzymon Olewniczak    /**
714474ed8aSSzymon Olewniczak     * @param Doku_Event $event
724474ed8aSSzymon Olewniczak     */
734474ed8aSSzymon Olewniczak    public function handle_showrev(Doku_Event $event) {
744474ed8aSSzymon Olewniczak        global $INFO;
751aeb2b4dSghi
76*1b552e87SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
774474ed8aSSzymon Olewniczak
78*1b552e87SSzymon Olewniczak        $last_approved_rev = $this->helper()->find_last_approved($INFO['id']);
794474ed8aSSzymon Olewniczak		if ($last_approved_rev == $INFO['rev']) {
801aeb2b4dSghi            $event->preventDefault();
811aeb2b4dSghi        }
821aeb2b4dSghi	}
831aeb2b4dSghi
844474ed8aSSzymon Olewniczak	/**
854474ed8aSSzymon Olewniczak     * @param Doku_Event $event
864474ed8aSSzymon Olewniczak     */
874474ed8aSSzymon Olewniczak    public function handle_approve(Doku_Event $event) {
884474ed8aSSzymon Olewniczak		global $INFO;
894474ed8aSSzymon Olewniczak
90*1b552e87SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
914474ed8aSSzymon Olewniczak
924474ed8aSSzymon Olewniczak		if ($event->data == 'show' && isset($_GET['approve']) &&
934474ed8aSSzymon Olewniczak            auth_quickaclcheck($INFO['id']) >= AUTH_DELETE) {
944474ed8aSSzymon Olewniczak
954474ed8aSSzymon Olewniczak		    $res = $this->sqlite()->query('SELECT MAX(version)+1 FROM revision
964474ed8aSSzymon Olewniczak                                            WHERE page=?', $INFO['id']);
974474ed8aSSzymon Olewniczak		    $next_version = $this->sqlite()->res2single($res);
984474ed8aSSzymon Olewniczak		    if (!$next_version) {
994474ed8aSSzymon Olewniczak                $next_version = 1;
10084047bdaSRuud            }
1014474ed8aSSzymon Olewniczak		    //approved IS NULL prevents from overriding already approved page
1024474ed8aSSzymon Olewniczak		    $this->sqlite()->query('UPDATE revision
1034474ed8aSSzymon Olewniczak		                    SET approved=?, version=?
1044474ed8aSSzymon Olewniczak                            WHERE page=? AND current=1 AND approved IS NULL',
1054474ed8aSSzymon Olewniczak                            date('c'), $next_version, $INFO['id']);
10684047bdaSRuud
1074474ed8aSSzymon Olewniczak			header('Location: ' . wl($INFO['id']));
1084474ed8aSSzymon Olewniczak		} elseif ($event->data == 'show' && isset($_GET['ready_for_approval']) &&
1094474ed8aSSzymon Olewniczak            auth_quickaclcheck($INFO['id']) >= AUTH_EDIT) {
11050481663SSzymon Olewniczak
1114474ed8aSSzymon Olewniczak            $this->sqlite()->query('UPDATE revision SET ready_for_approval=?
1124474ed8aSSzymon Olewniczak                            WHERE page=? AND current=1 AND ready_for_approval IS NULL',
1134474ed8aSSzymon Olewniczak                            date('c'), $INFO['id']);
11450481663SSzymon Olewniczak
1154474ed8aSSzymon Olewniczak            header('Location: ' . wl($INFO['id']));
1161aeb2b4dSghi		}
11738d03fbdSghi	}
11855f447f4SSzymon Olewniczak
1194474ed8aSSzymon Olewniczak    /**
1204474ed8aSSzymon Olewniczak     * Redirect to newest approved page for user that don't have EDIT permission.
1214474ed8aSSzymon Olewniczak     *
1224474ed8aSSzymon Olewniczak     * @param Doku_Event $event
1234474ed8aSSzymon Olewniczak     */
1244474ed8aSSzymon Olewniczak    public function handle_viewer(Doku_Event $event) {
1254474ed8aSSzymon Olewniczak        global $INFO;
1264474ed8aSSzymon Olewniczak
12738d03fbdSghi        if ($event->data != 'show') return;
1284474ed8aSSzymon Olewniczak        //apply only to current page
1294474ed8aSSzymon Olewniczak        if (!$INFO['rev']) return;
1304474ed8aSSzymon Olewniczak        if (auth_quickaclcheck($INFO['id']) >= AUTH_EDIT) return;
131*1b552e87SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
1321aeb2b4dSghi
133*1b552e87SSzymon Olewniczak        $last_approved_rev = $this->helper()->find_last_approved($INFO['id']);
13438d03fbdSghi        //no page is approved
1354474ed8aSSzymon Olewniczak        if (!$last_approved_rev) return;
13638d03fbdSghi
1374474ed8aSSzymon Olewniczak        $last_change_date = @filemtime(wikiFN($INFO['id']));
1384474ed8aSSzymon Olewniczak        //current page is approved
1394474ed8aSSzymon Olewniczak        if ($last_approved_rev == $last_change_date) return;
1404474ed8aSSzymon Olewniczak
1414474ed8aSSzymon Olewniczak	    header("Location: " . wl($INFO['id'], ['rev' => $last_approved_rev]));
1421aeb2b4dSghi	}
14355f447f4SSzymon Olewniczak
1444474ed8aSSzymon Olewniczak    /**
1454474ed8aSSzymon Olewniczak     * @param Doku_Event $event
1464474ed8aSSzymon Olewniczak     */
1474474ed8aSSzymon Olewniczak    public function handle_display_banner(Doku_Event $event) {
1484474ed8aSSzymon Olewniczak		global $INFO;
149bab76148SSzymon Olewniczak
1501aeb2b4dSghi        if ($event->data != 'show') return;
1511aeb2b4dSghi        if (!$INFO['exists']) return;
152*1b552e87SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
1531aeb2b4dSghi
1544474ed8aSSzymon Olewniczak//        $last_change_date = p_get_metadata($INFO['id'], 'last_change date');
1554474ed8aSSzymon Olewniczak        $last_change_date = @filemtime(wikiFN($INFO['id']));
1564474ed8aSSzymon Olewniczak        $rev = !$INFO['rev'] ? $last_change_date : $INFO['rev'];
1571aeb2b4dSghi
15855f447f4SSzymon Olewniczak
1594474ed8aSSzymon Olewniczak        $res = $this->sqlite()->query('SELECT ready_for_approval, approved, version
1604474ed8aSSzymon Olewniczak                                FROM revision
1614474ed8aSSzymon Olewniczak                                WHERE page=? AND rev=?', $INFO['id'], $rev);
1624474ed8aSSzymon Olewniczak
1634474ed8aSSzymon Olewniczak        $approve = $this->sqlite()->res_fetch_assoc($res);
1644474ed8aSSzymon Olewniczak
1654474ed8aSSzymon Olewniczak		$classes = [];
16655f447f4SSzymon Olewniczak		if ($this->getConf('prettyprint')) {
16755f447f4SSzymon Olewniczak		    $classes[] = 'plugin__approve_noprint';
16855f447f4SSzymon Olewniczak        }
16955f447f4SSzymon Olewniczak
1704474ed8aSSzymon Olewniczak        if ($approve['approved']) {
17155f447f4SSzymon Olewniczak		    $classes[] = 'plugin__approve_green';
1724474ed8aSSzymon Olewniczak		} elseif ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) {
173bab76148SSzymon Olewniczak		    $classes[] = 'plugin__approve_ready';
17455f447f4SSzymon Olewniczak        } else {
17555f447f4SSzymon Olewniczak            $classes[] = 'plugin__approve_red';
17655f447f4SSzymon Olewniczak        }
17755f447f4SSzymon Olewniczak
17855f447f4SSzymon Olewniczak		ptln('<div id="plugin__approve" class="' . implode(' ', $classes) . '">');
1791aeb2b4dSghi
1801aeb2b4dSghi		tpl_pageinfo();
1811aeb2b4dSghi		ptln(' | ');
182af3e3cd8SSzymon Olewniczak
1834474ed8aSSzymon Olewniczak		if ($approve['approved']) {
1844474ed8aSSzymon Olewniczak			ptln('<strong>'.$this->getLang('approved').'</strong> ('
1854474ed8aSSzymon Olewniczak                . $this->getLang('version') .  ': ' . $approve['version'] . ')');
1864474ed8aSSzymon Olewniczak
1874474ed8aSSzymon Olewniczak			//not the newest page
1884474ed8aSSzymon Olewniczak			if ($rev != $last_change_date) {
1894474ed8aSSzymon Olewniczak                $res = $this->sqlite()->query('SELECT rev, current FROM revision
1904474ed8aSSzymon Olewniczak                                WHERE page=? AND approved IS NOT NULL
1914474ed8aSSzymon Olewniczak                                ORDER BY rev DESC LIMIT 1', $INFO['id']);
1924474ed8aSSzymon Olewniczak
1934474ed8aSSzymon Olewniczak                $lastest_approve = $this->sqlite()->res_fetch_assoc($res);
1944474ed8aSSzymon Olewniczak
1954474ed8aSSzymon Olewniczak			    //we can see drafts
1964474ed8aSSzymon Olewniczak                if (auth_quickaclcheck($INFO['id']) >= AUTH_EDIT) {
1974474ed8aSSzymon Olewniczak                    ptln('<a href="' . wl($INFO['id']) . '">');
1984474ed8aSSzymon Olewniczak                    ptln($this->getLang($lastest_approve['current'] ? 'newest_approved' : 'newest_draft'));
1991aeb2b4dSghi                    ptln('</a>');
2004474ed8aSSzymon Olewniczak                } else {
2014474ed8aSSzymon Olewniczak                    $urlParameters = [];
2024474ed8aSSzymon Olewniczak                    if (!$lastest_approve['current']) {
2034474ed8aSSzymon Olewniczak                        $urlParameters['rev'] = $lastest_approve['rev'];
2044474ed8aSSzymon Olewniczak                    }
2054474ed8aSSzymon Olewniczak                    ptln('<a href="' . wl($INFO['id'], $urlParameters) . '">');
2061aeb2b4dSghi                    ptln($this->getLang('newest_approved'));
2071aeb2b4dSghi                    ptln('</a>');
2081aeb2b4dSghi                }
2094474ed8aSSzymon Olewniczak            }
2104474ed8aSSzymon Olewniczak
2111aeb2b4dSghi		} else {
2121aeb2b4dSghi			ptln('<span>'.$this->getLang('draft').'</span>');
2131aeb2b4dSghi
2144474ed8aSSzymon Olewniczak			if ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) {
21584047bdaSRuud				ptln('<span>| '.$this->getLang('marked_approve_ready').'</span>');
21684047bdaSRuud			}
21784047bdaSRuud
21884047bdaSRuud
2194474ed8aSSzymon Olewniczak            $res = $this->sqlite()->query('SELECT rev, current FROM revision
2204474ed8aSSzymon Olewniczak                            WHERE page=? AND approved IS NOT NULL
2214474ed8aSSzymon Olewniczak                            ORDER BY rev DESC LIMIT 1', $INFO['id']);
2224474ed8aSSzymon Olewniczak
2234474ed8aSSzymon Olewniczak            $lastest_approve = $this->sqlite()->res_fetch_assoc($res);
2244474ed8aSSzymon Olewniczak
2254474ed8aSSzymon Olewniczak
2264474ed8aSSzymon Olewniczak            //not exists approve for current page
2274474ed8aSSzymon Olewniczak			if (!$lastest_approve) {
2284474ed8aSSzymon Olewniczak                //not the newest page
2294474ed8aSSzymon Olewniczak                if ($rev != $last_change_date) {
2304474ed8aSSzymon Olewniczak				    ptln('<a href="'.wl($INFO['id']).'">');
231274d699aSghi                    ptln($this->getLang('newest_draft'));
232274d699aSghi				    ptln('</a>');
233274d699aSghi				}
234274d699aSghi			} else {
2354474ed8aSSzymon Olewniczak                $urlParameters = [];
2364474ed8aSSzymon Olewniczak                if (!$lastest_approve['current']) {
2374474ed8aSSzymon Olewniczak                    $urlParameters['rev'] = $lastest_approve['rev'];
2384474ed8aSSzymon Olewniczak                }
2394474ed8aSSzymon Olewniczak                ptln('<a href="' . wl($INFO['id'], $urlParameters) . '">');
2401aeb2b4dSghi                ptln($this->getLang('newest_approved'));
2411aeb2b4dSghi				ptln('</a>');
2421aeb2b4dSghi			}
2431aeb2b4dSghi
2444474ed8aSSzymon Olewniczak			//we are in current page
2454474ed8aSSzymon Olewniczak			if ($rev == $last_change_date) {
2464474ed8aSSzymon Olewniczak
2474474ed8aSSzymon Olewniczak                $last_approved_rev = 0;
2484474ed8aSSzymon Olewniczak                if (isset($lastest_approve['rev'])) {
2494474ed8aSSzymon Olewniczak                    $last_approved_rev = $lastest_approve['rev'];
2504474ed8aSSzymon Olewniczak                }
2514474ed8aSSzymon Olewniczak
2524474ed8aSSzymon Olewniczak                if ($this->getConf('ready_for_approval') &&
2534474ed8aSSzymon Olewniczak                    auth_quickaclcheck($INFO['id']) >= AUTH_EDIT &&
2544474ed8aSSzymon Olewniczak                    !$approve['ready_for_approval']) {
2554474ed8aSSzymon Olewniczak
2564474ed8aSSzymon Olewniczak                    $urlParameters = [
2574474ed8aSSzymon Olewniczak                        'rev' => $last_approved_rev,
2584474ed8aSSzymon Olewniczak                        'do' => 'diff',
2594474ed8aSSzymon Olewniczak                        'ready_for_approval' => 'ready_for_approval'
2604474ed8aSSzymon Olewniczak                    ];
2614474ed8aSSzymon Olewniczak                    ptln(' | <a href="'.wl($INFO['id'], $urlParameters).'">');
26284047bdaSRuud                    ptln($this->getLang('approve_ready'));
26384047bdaSRuud                    ptln('</a>');
26484047bdaSRuud                }
26584047bdaSRuud
2664474ed8aSSzymon Olewniczak                if (auth_quickaclcheck($INFO['id']) >= AUTH_DELETE) {
2674474ed8aSSzymon Olewniczak
2684474ed8aSSzymon Olewniczak                    $urlParameters = [
2694474ed8aSSzymon Olewniczak                        'rev' => $last_approved_rev,
2704474ed8aSSzymon Olewniczak                        'do' => 'diff',
2714474ed8aSSzymon Olewniczak                        'approve' => 'approve'
2724474ed8aSSzymon Olewniczak                    ];
2734474ed8aSSzymon Olewniczak                    ptln(' | <a href="'.wl($INFO['id'], $urlParameters).'">');
2741aeb2b4dSghi                    ptln($this->getLang('approve'));
2751aeb2b4dSghi                    ptln('</a>');
2761aeb2b4dSghi                }
27784047bdaSRuud
2784474ed8aSSzymon Olewniczak            }
2791aeb2b4dSghi		}
2801aeb2b4dSghi		ptln('</div>');
2811aeb2b4dSghi	}
2821aeb2b4dSghi
283af3e3cd8SSzymon Olewniczak    /**
2844474ed8aSSzymon Olewniczak     * @return bool|string
2854474ed8aSSzymon Olewniczak     */
2864474ed8aSSzymon Olewniczak    protected function prev_rev($id) {
2874474ed8aSSzymon Olewniczak        $res = $this->sqlite()->query('SELECT rev FROM revision
2884474ed8aSSzymon Olewniczak                                        WHERE page=?
2894474ed8aSSzymon Olewniczak                                          AND current=1
2904474ed8aSSzymon Olewniczak                                          AND approved IS NULL
2914474ed8aSSzymon Olewniczak                                          AND ready_for_approval IS NULL', $id);
2924474ed8aSSzymon Olewniczak
2934474ed8aSSzymon Olewniczak        return $this->sqlite()->res2single($res);
2944474ed8aSSzymon Olewniczak    }
2954474ed8aSSzymon Olewniczak
2964474ed8aSSzymon Olewniczak    /**
2974474ed8aSSzymon Olewniczak     *
2984474ed8aSSzymon Olewniczak     * @param Doku_Event $event  event object by reference
2994474ed8aSSzymon Olewniczak     * @return void
3004474ed8aSSzymon Olewniczak     */
3014474ed8aSSzymon Olewniczak    public function handle_pagesave_after(Doku_Event $event) {
302*1b552e87SSzymon Olewniczak        //no content was changed
3034474ed8aSSzymon Olewniczak        if (!$event->data['contentChanged']) return;
3044474ed8aSSzymon Olewniczak
3054474ed8aSSzymon Olewniczak        $changeType = $event->data['changeType'];
3064474ed8aSSzymon Olewniczak        if ($changeType == DOKU_CHANGE_TYPE_REVERT) {
3074474ed8aSSzymon Olewniczak            if ($event->data['oldContent'] == '') {
3084474ed8aSSzymon Olewniczak                $changeType = DOKU_CHANGE_TYPE_CREATE;
3094474ed8aSSzymon Olewniczak            } else {
3104474ed8aSSzymon Olewniczak                $changeType = DOKU_CHANGE_TYPE_EDIT;
3114474ed8aSSzymon Olewniczak            }
3124474ed8aSSzymon Olewniczak        }
3134474ed8aSSzymon Olewniczak
3144474ed8aSSzymon Olewniczak        $id = $event->data['id'];
3154474ed8aSSzymon Olewniczak        switch ($changeType) {
3164474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_EDIT:
3174474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_REVERT:
3184474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_MINOR_EDIT:
3194474ed8aSSzymon Olewniczak                $last_change_date = $event->data['newRevision'];
3204474ed8aSSzymon Olewniczak
3214474ed8aSSzymon Olewniczak                //if the current page has approved or ready_for_approval -- keep it
3224474ed8aSSzymon Olewniczak                $prev_rev = $this->prev_rev($id);
3234474ed8aSSzymon Olewniczak                if ($prev_rev) {
3244474ed8aSSzymon Olewniczak                    $this->sqlite()->query('UPDATE revision SET rev=? WHERE page=? AND rev=?',
3254474ed8aSSzymon Olewniczak                        $last_change_date, $id, $prev_rev);
3264474ed8aSSzymon Olewniczak
3274474ed8aSSzymon Olewniczak                } else {
3284474ed8aSSzymon Olewniczak                    //keep previous record
3294474ed8aSSzymon Olewniczak                    $this->sqlite()->query('UPDATE revision SET current=0
3304474ed8aSSzymon Olewniczak                                            WHERE page=?
3314474ed8aSSzymon Olewniczak                                            AND current=1', $id);
3324474ed8aSSzymon Olewniczak
3334474ed8aSSzymon Olewniczak                    $this->sqlite()->storeEntry('revision', [
3344474ed8aSSzymon Olewniczak                        'page' => $id,
3354474ed8aSSzymon Olewniczak                        'rev' => $last_change_date,
3364474ed8aSSzymon Olewniczak                        'current' => 1
3374474ed8aSSzymon Olewniczak                    ]);
3384474ed8aSSzymon Olewniczak                }
3394474ed8aSSzymon Olewniczak                break;
3404474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_DELETE:
3414474ed8aSSzymon Olewniczak                //delete information about availability of a page but keep the history
3424474ed8aSSzymon Olewniczak                $this->sqlite()->query('DELETE FROM page WHERE page=?', $id);
3434474ed8aSSzymon Olewniczak
3444474ed8aSSzymon Olewniczak                //delete revision if no information about approvals
3454474ed8aSSzymon Olewniczak                $prev_rev = $this->prev_rev($id);
3464474ed8aSSzymon Olewniczak                if ($prev_rev) {
3474474ed8aSSzymon Olewniczak                    $this->sqlite()->query('DELETE FROM revision WHERE page=? AND rev=?',
3484474ed8aSSzymon Olewniczak                        $id, $prev_rev);
3494474ed8aSSzymon Olewniczak                } else {
3504474ed8aSSzymon Olewniczak                    $this->sqlite()->query('UPDATE revision SET current=0 WHERE page=? AND rev=?',
3514474ed8aSSzymon Olewniczak                        $id, $prev_rev);
3524474ed8aSSzymon Olewniczak                }
3534474ed8aSSzymon Olewniczak
3544474ed8aSSzymon Olewniczak                break;
3554474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_CREATE:
3564474ed8aSSzymon Olewniczak                $last_change_date = $event->data['newRevision'];
357*1b552e87SSzymon Olewniczak                $hidden = $this->helper()->in_hidden_namespace($id);
358*1b552e87SSzymon Olewniczak
3594474ed8aSSzymon Olewniczak                $this->sqlite()->storeEntry('page', [
360*1b552e87SSzymon Olewniczak                    'page' => $id,
361*1b552e87SSzymon Olewniczak                    'hidden' => $hidden
3624474ed8aSSzymon Olewniczak                ]);
3634474ed8aSSzymon Olewniczak
3644474ed8aSSzymon Olewniczak                $this->sqlite()->storeEntry('revision', [
3654474ed8aSSzymon Olewniczak                    'page' => $id,
3664474ed8aSSzymon Olewniczak                    'rev' => $last_change_date,
3674474ed8aSSzymon Olewniczak                    'current' => 1
3684474ed8aSSzymon Olewniczak                ]);
3694474ed8aSSzymon Olewniczak                break;
3704474ed8aSSzymon Olewniczak        }
3714474ed8aSSzymon Olewniczak    }
3721aeb2b4dSghi}
373