xref: /plugin/approve/action/approve.php (revision c7d53eaba29e207f5d28ea550cd66a04c154a49d)
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
121b552e87SSzymon Olewniczak    /** @var helper_plugin_approve */
131b552e87SSzymon Olewniczak    protected $helper;
141b552e87SSzymon Olewniczak
154474ed8aSSzymon Olewniczak    /**
164474ed8aSSzymon Olewniczak     * @return helper_plugin_sqlite
174474ed8aSSzymon Olewniczak     */
181b552e87SSzymon Olewniczak    protected function sqlite() {
194474ed8aSSzymon Olewniczak        if (!$this->sqlite) {
201b552e87SSzymon 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    /**
281b552e87SSzymon Olewniczak     * @return helper_plugin_approve
291b552e87SSzymon Olewniczak     */
301b552e87SSzymon Olewniczak    protected function helper() {
311b552e87SSzymon Olewniczak        if (!$this->helper) {
321b552e87SSzymon Olewniczak            $helper = plugin_load('helper', 'approve');
331b552e87SSzymon Olewniczak            $this->helper = $helper;
341b552e87SSzymon Olewniczak        }
351b552e87SSzymon Olewniczak        return $this->helper;
361b552e87SSzymon Olewniczak    }
371b552e87SSzymon Olewniczak
381b552e87SSzymon Olewniczak
391b552e87SSzymon 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
571b552e87SSzymon 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
761b552e87SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
774474ed8aSSzymon Olewniczak
781b552e87SSzymon 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
901b552e87SSzymon 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
103*c7d53eabSSzymon Olewniczak		                    SET approved=?, approved_by=?, version=?
1044474ed8aSSzymon Olewniczak                            WHERE page=? AND current=1 AND approved IS NULL',
105*c7d53eabSSzymon Olewniczak                            date('c'), $INFO['client'], $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
111*c7d53eabSSzymon Olewniczak            $this->sqlite()->query('UPDATE revision SET ready_for_approval=?, ready_for_approval_by=?
1124474ed8aSSzymon Olewniczak                            WHERE page=? AND current=1 AND ready_for_approval IS NULL',
113*c7d53eabSSzymon Olewniczak                            date('c'), $INFO['client'], $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
129*c7d53eabSSzymon Olewniczak        if ($INFO['rev'] != 0) return;
1304474ed8aSSzymon Olewniczak        if (auth_quickaclcheck($INFO['id']) >= AUTH_EDIT) return;
1311b552e87SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
1321aeb2b4dSghi
1331b552e87SSzymon 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;
149*c7d53eabSSzymon Olewniczak		/** @var DokuWiki_Auth_Plugin $auth */
150*c7d53eabSSzymon Olewniczak		global $auth;
151bab76148SSzymon Olewniczak
1521aeb2b4dSghi        if ($event->data != 'show') return;
1531aeb2b4dSghi        if (!$INFO['exists']) return;
154*c7d53eabSSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'], $maintainer)) return;
1551aeb2b4dSghi
1564474ed8aSSzymon Olewniczak//        $last_change_date = p_get_metadata($INFO['id'], 'last_change date');
1574474ed8aSSzymon Olewniczak        $last_change_date = @filemtime(wikiFN($INFO['id']));
1584474ed8aSSzymon Olewniczak        $rev = !$INFO['rev'] ? $last_change_date : $INFO['rev'];
1591aeb2b4dSghi
16055f447f4SSzymon Olewniczak
161*c7d53eabSSzymon Olewniczak        $res = $this->sqlite()->query('SELECT ready_for_approval, ready_for_approval_by,
162*c7d53eabSSzymon Olewniczak                                        approved, approved_by, version
1634474ed8aSSzymon Olewniczak                                FROM revision
1644474ed8aSSzymon Olewniczak                                WHERE page=? AND rev=?', $INFO['id'], $rev);
1654474ed8aSSzymon Olewniczak
1664474ed8aSSzymon Olewniczak        $approve = $this->sqlite()->res_fetch_assoc($res);
1674474ed8aSSzymon Olewniczak
1684474ed8aSSzymon Olewniczak		$classes = [];
16955f447f4SSzymon Olewniczak		if ($this->getConf('prettyprint')) {
17055f447f4SSzymon Olewniczak		    $classes[] = 'plugin__approve_noprint';
17155f447f4SSzymon Olewniczak        }
17255f447f4SSzymon Olewniczak
1734474ed8aSSzymon Olewniczak        if ($approve['approved']) {
17455f447f4SSzymon Olewniczak		    $classes[] = 'plugin__approve_green';
1754474ed8aSSzymon Olewniczak		} elseif ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) {
176bab76148SSzymon Olewniczak		    $classes[] = 'plugin__approve_ready';
17755f447f4SSzymon Olewniczak        } else {
17855f447f4SSzymon Olewniczak            $classes[] = 'plugin__approve_red';
17955f447f4SSzymon Olewniczak        }
18055f447f4SSzymon Olewniczak
18155f447f4SSzymon Olewniczak		ptln('<div id="plugin__approve" class="' . implode(' ', $classes) . '">');
1821aeb2b4dSghi
183*c7d53eabSSzymon Olewniczak//		tpl_pageinfo();
184*c7d53eabSSzymon Olewniczak//		ptln(' | ');
185af3e3cd8SSzymon Olewniczak
1864474ed8aSSzymon Olewniczak		if ($approve['approved']) {
187*c7d53eabSSzymon Olewniczak			ptln('<strong>'.$this->getLang('approved').'</strong>');
188*c7d53eabSSzymon Olewniczak            ptln(' ' . dformat(strtotime($approve['approved'])));
189*c7d53eabSSzymon Olewniczak            $user = $auth->getUserData($approve['approved_by']);
190*c7d53eabSSzymon Olewniczak            ptln(' ' . $this->getLang('by') . ' ' . $user['name']);
191*c7d53eabSSzymon Olewniczak            ptln(' (' . $this->getLang('version') .  ': ' . $approve['version'] . ')');
1924474ed8aSSzymon Olewniczak
1934474ed8aSSzymon Olewniczak			//not the newest page
1944474ed8aSSzymon Olewniczak			if ($rev != $last_change_date) {
1954474ed8aSSzymon Olewniczak                $res = $this->sqlite()->query('SELECT rev, current FROM revision
1964474ed8aSSzymon Olewniczak                                WHERE page=? AND approved IS NOT NULL
1974474ed8aSSzymon Olewniczak                                ORDER BY rev DESC LIMIT 1', $INFO['id']);
1984474ed8aSSzymon Olewniczak
199*c7d53eabSSzymon Olewniczak                $last_approve = $this->sqlite()->res_fetch_assoc($res);
2004474ed8aSSzymon Olewniczak
2014474ed8aSSzymon Olewniczak			    //we can see drafts
2024474ed8aSSzymon Olewniczak                if (auth_quickaclcheck($INFO['id']) >= AUTH_EDIT) {
2034474ed8aSSzymon Olewniczak                    ptln('<a href="' . wl($INFO['id']) . '">');
204*c7d53eabSSzymon Olewniczak                    ptln($this->getLang($last_approve['current'] ? 'newest_approved' : 'newest_draft'));
2051aeb2b4dSghi                    ptln('</a>');
206*c7d53eabSSzymon Olewniczak                //we cannot see link to draft but there is some newer approved version
207*c7d53eabSSzymon Olewniczak                } elseif ($last_approve['rev'] != $rev) {
2084474ed8aSSzymon Olewniczak                    $urlParameters = [];
209*c7d53eabSSzymon Olewniczak                    if (!$last_approve['current']) {
210*c7d53eabSSzymon Olewniczak                        $urlParameters['rev'] = $last_approve['rev'];
2114474ed8aSSzymon Olewniczak                    }
2124474ed8aSSzymon Olewniczak                    ptln('<a href="' . wl($INFO['id'], $urlParameters) . '">');
2131aeb2b4dSghi                    ptln($this->getLang('newest_approved'));
2141aeb2b4dSghi                    ptln('</a>');
2151aeb2b4dSghi                }
2164474ed8aSSzymon Olewniczak            }
2174474ed8aSSzymon Olewniczak
2181aeb2b4dSghi		} else {
2194474ed8aSSzymon Olewniczak		    if ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) {
220*c7d53eabSSzymon Olewniczak				ptln('<strong>'.$this->getLang('marked_approve_ready').'</strong>');
221*c7d53eabSSzymon Olewniczak                ptln(' ' . dformat(strtotime($approve['ready_for_approval'])));
222*c7d53eabSSzymon Olewniczak                $user = $auth->getUserData($approve['ready_for_approval_by']);
223*c7d53eabSSzymon Olewniczak                ptln(' ' . $this->getLang('by') . ' ' . $user['name']);
224*c7d53eabSSzymon Olewniczak			} else {
225*c7d53eabSSzymon Olewniczak                ptln('<strong>'.$this->getLang('draft').'</strong>');
22684047bdaSRuud            }
22784047bdaSRuud
22884047bdaSRuud
2294474ed8aSSzymon Olewniczak            $res = $this->sqlite()->query('SELECT rev, current FROM revision
2304474ed8aSSzymon Olewniczak                            WHERE page=? AND approved IS NOT NULL
2314474ed8aSSzymon Olewniczak                            ORDER BY rev DESC LIMIT 1', $INFO['id']);
2324474ed8aSSzymon Olewniczak
233*c7d53eabSSzymon Olewniczak            $last_approve = $this->sqlite()->res_fetch_assoc($res);
2344474ed8aSSzymon Olewniczak
2354474ed8aSSzymon Olewniczak
2364474ed8aSSzymon Olewniczak            //not exists approve for current page
237*c7d53eabSSzymon Olewniczak			if (!$last_approve) {
2384474ed8aSSzymon Olewniczak                //not the newest page
2394474ed8aSSzymon Olewniczak                if ($rev != $last_change_date) {
2404474ed8aSSzymon Olewniczak				    ptln('<a href="'.wl($INFO['id']).'">');
241274d699aSghi                    ptln($this->getLang('newest_draft'));
242274d699aSghi				    ptln('</a>');
243274d699aSghi				}
244274d699aSghi			} else {
2454474ed8aSSzymon Olewniczak                $urlParameters = [];
246*c7d53eabSSzymon Olewniczak                if (!$last_approve['current']) {
247*c7d53eabSSzymon Olewniczak                    $urlParameters['rev'] = $last_approve['rev'];
2484474ed8aSSzymon Olewniczak                }
2494474ed8aSSzymon Olewniczak                ptln('<a href="' . wl($INFO['id'], $urlParameters) . '">');
2501aeb2b4dSghi                ptln($this->getLang('newest_approved'));
2511aeb2b4dSghi				ptln('</a>');
2521aeb2b4dSghi			}
2531aeb2b4dSghi
2544474ed8aSSzymon Olewniczak			//we are in current page
2554474ed8aSSzymon Olewniczak			if ($rev == $last_change_date) {
2564474ed8aSSzymon Olewniczak
257*c7d53eabSSzymon Olewniczak			    //compare with the last approved page or 0 if there is no approved versions
2584474ed8aSSzymon Olewniczak                $last_approved_rev = 0;
259*c7d53eabSSzymon Olewniczak                if (isset($last_approve['rev'])) {
260*c7d53eabSSzymon Olewniczak                    $last_approved_rev = $last_approve['rev'];
2614474ed8aSSzymon Olewniczak                }
2624474ed8aSSzymon Olewniczak
2634474ed8aSSzymon Olewniczak                if ($this->getConf('ready_for_approval') &&
2644474ed8aSSzymon Olewniczak                    auth_quickaclcheck($INFO['id']) >= AUTH_EDIT &&
2654474ed8aSSzymon Olewniczak                    !$approve['ready_for_approval']) {
2664474ed8aSSzymon Olewniczak
2674474ed8aSSzymon Olewniczak                    $urlParameters = [
2684474ed8aSSzymon Olewniczak                        'rev' => $last_approved_rev,
2694474ed8aSSzymon Olewniczak                        'do' => 'diff',
2704474ed8aSSzymon Olewniczak                        'ready_for_approval' => 'ready_for_approval'
2714474ed8aSSzymon Olewniczak                    ];
2724474ed8aSSzymon Olewniczak                    ptln(' | <a href="'.wl($INFO['id'], $urlParameters).'">');
27384047bdaSRuud                    ptln($this->getLang('approve_ready'));
27484047bdaSRuud                    ptln('</a>');
27584047bdaSRuud                }
27684047bdaSRuud
2774474ed8aSSzymon Olewniczak                if (auth_quickaclcheck($INFO['id']) >= AUTH_DELETE) {
2784474ed8aSSzymon Olewniczak
2794474ed8aSSzymon Olewniczak                    $urlParameters = [
2804474ed8aSSzymon Olewniczak                        'rev' => $last_approved_rev,
2814474ed8aSSzymon Olewniczak                        'do' => 'diff',
2824474ed8aSSzymon Olewniczak                        'approve' => 'approve'
2834474ed8aSSzymon Olewniczak                    ];
2844474ed8aSSzymon Olewniczak                    ptln(' | <a href="'.wl($INFO['id'], $urlParameters).'">');
2851aeb2b4dSghi                    ptln($this->getLang('approve'));
2861aeb2b4dSghi                    ptln('</a>');
2871aeb2b4dSghi                }
288*c7d53eabSSzymon Olewniczak            }
289*c7d53eabSSzymon Olewniczak		}
29084047bdaSRuud
291*c7d53eabSSzymon Olewniczak		if ($maintainer) {
292*c7d53eabSSzymon Olewniczak            $user = $auth->getUserData($maintainer);
293*c7d53eabSSzymon Olewniczak            ptln(' | ' . $this->getLang('maintainer') . ': ' . $user['name']);
2944474ed8aSSzymon Olewniczak        }
295*c7d53eabSSzymon Olewniczak
2961aeb2b4dSghi		ptln('</div>');
2971aeb2b4dSghi	}
2981aeb2b4dSghi
299af3e3cd8SSzymon Olewniczak    /**
3004474ed8aSSzymon Olewniczak     * @return bool|string
3014474ed8aSSzymon Olewniczak     */
3024474ed8aSSzymon Olewniczak    protected function prev_rev($id) {
3034474ed8aSSzymon Olewniczak        $res = $this->sqlite()->query('SELECT rev FROM revision
3044474ed8aSSzymon Olewniczak                                        WHERE page=?
3054474ed8aSSzymon Olewniczak                                          AND current=1
3064474ed8aSSzymon Olewniczak                                          AND approved IS NULL
3074474ed8aSSzymon Olewniczak                                          AND ready_for_approval IS NULL', $id);
3084474ed8aSSzymon Olewniczak
3094474ed8aSSzymon Olewniczak        return $this->sqlite()->res2single($res);
3104474ed8aSSzymon Olewniczak    }
3114474ed8aSSzymon Olewniczak
3124474ed8aSSzymon Olewniczak    /**
3134474ed8aSSzymon Olewniczak     *
3144474ed8aSSzymon Olewniczak     * @param Doku_Event $event  event object by reference
3154474ed8aSSzymon Olewniczak     * @return void
3164474ed8aSSzymon Olewniczak     */
3174474ed8aSSzymon Olewniczak    public function handle_pagesave_after(Doku_Event $event) {
3181b552e87SSzymon Olewniczak        //no content was changed
3194474ed8aSSzymon Olewniczak        if (!$event->data['contentChanged']) return;
3204474ed8aSSzymon Olewniczak
3214474ed8aSSzymon Olewniczak        $changeType = $event->data['changeType'];
3224474ed8aSSzymon Olewniczak        if ($changeType == DOKU_CHANGE_TYPE_REVERT) {
3234474ed8aSSzymon Olewniczak            if ($event->data['oldContent'] == '') {
3244474ed8aSSzymon Olewniczak                $changeType = DOKU_CHANGE_TYPE_CREATE;
3254474ed8aSSzymon Olewniczak            } else {
3264474ed8aSSzymon Olewniczak                $changeType = DOKU_CHANGE_TYPE_EDIT;
3274474ed8aSSzymon Olewniczak            }
3284474ed8aSSzymon Olewniczak        }
3294474ed8aSSzymon Olewniczak
3304474ed8aSSzymon Olewniczak        $id = $event->data['id'];
3314474ed8aSSzymon Olewniczak        switch ($changeType) {
3324474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_EDIT:
3334474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_REVERT:
3344474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_MINOR_EDIT:
3354474ed8aSSzymon Olewniczak                $last_change_date = $event->data['newRevision'];
3364474ed8aSSzymon Olewniczak
3374474ed8aSSzymon Olewniczak                //if the current page has approved or ready_for_approval -- keep it
3384474ed8aSSzymon Olewniczak                $prev_rev = $this->prev_rev($id);
3394474ed8aSSzymon Olewniczak                if ($prev_rev) {
3404474ed8aSSzymon Olewniczak                    $this->sqlite()->query('UPDATE revision SET rev=? WHERE page=? AND rev=?',
3414474ed8aSSzymon Olewniczak                        $last_change_date, $id, $prev_rev);
3424474ed8aSSzymon Olewniczak
3434474ed8aSSzymon Olewniczak                } else {
3444474ed8aSSzymon Olewniczak                    //keep previous record
3454474ed8aSSzymon Olewniczak                    $this->sqlite()->query('UPDATE revision SET current=0
3464474ed8aSSzymon Olewniczak                                            WHERE page=?
3474474ed8aSSzymon Olewniczak                                            AND current=1', $id);
3484474ed8aSSzymon Olewniczak
3494474ed8aSSzymon Olewniczak                    $this->sqlite()->storeEntry('revision', [
3504474ed8aSSzymon Olewniczak                        'page' => $id,
3514474ed8aSSzymon Olewniczak                        'rev' => $last_change_date,
3524474ed8aSSzymon Olewniczak                        'current' => 1
3534474ed8aSSzymon Olewniczak                    ]);
3544474ed8aSSzymon Olewniczak                }
3554474ed8aSSzymon Olewniczak                break;
3564474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_DELETE:
3574474ed8aSSzymon Olewniczak                //delete information about availability of a page but keep the history
3584474ed8aSSzymon Olewniczak                $this->sqlite()->query('DELETE FROM page WHERE page=?', $id);
3594474ed8aSSzymon Olewniczak
3604474ed8aSSzymon Olewniczak                //delete revision if no information about approvals
3614474ed8aSSzymon Olewniczak                $prev_rev = $this->prev_rev($id);
3624474ed8aSSzymon Olewniczak                if ($prev_rev) {
3634474ed8aSSzymon Olewniczak                    $this->sqlite()->query('DELETE FROM revision WHERE page=? AND rev=?',
3644474ed8aSSzymon Olewniczak                        $id, $prev_rev);
3654474ed8aSSzymon Olewniczak                } else {
3664474ed8aSSzymon Olewniczak                    $this->sqlite()->query('UPDATE revision SET current=0 WHERE page=? AND rev=?',
3674474ed8aSSzymon Olewniczak                        $id, $prev_rev);
3684474ed8aSSzymon Olewniczak                }
3694474ed8aSSzymon Olewniczak
3704474ed8aSSzymon Olewniczak                break;
3714474ed8aSSzymon Olewniczak            case DOKU_CHANGE_TYPE_CREATE:
3724474ed8aSSzymon Olewniczak                $last_change_date = $event->data['newRevision'];
3731b552e87SSzymon Olewniczak                $hidden = $this->helper()->in_hidden_namespace($id);
3741b552e87SSzymon Olewniczak
3754474ed8aSSzymon Olewniczak                $this->sqlite()->storeEntry('page', [
3761b552e87SSzymon Olewniczak                    'page' => $id,
3771b552e87SSzymon Olewniczak                    'hidden' => $hidden
3784474ed8aSSzymon Olewniczak                ]);
3794474ed8aSSzymon Olewniczak
3804474ed8aSSzymon Olewniczak                $this->sqlite()->storeEntry('revision', [
3814474ed8aSSzymon Olewniczak                    'page' => $id,
3824474ed8aSSzymon Olewniczak                    'rev' => $last_change_date,
3834474ed8aSSzymon Olewniczak                    'current' => 1
3844474ed8aSSzymon Olewniczak                ]);
3854474ed8aSSzymon Olewniczak                break;
3864474ed8aSSzymon Olewniczak        }
3874474ed8aSSzymon Olewniczak    }
3881aeb2b4dSghi}
389