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