11aeb2b4dSghi<?php 21aeb2b4dSghi 31aeb2b4dSghiif(!defined('DOKU_INC')) die(); 41aeb2b4dSghi 51aeb2b4dSghiclass action_plugin_approve_approve extends DokuWiki_Action_Plugin { 61aeb2b4dSghi 74474ed8aSSzymon Olewniczak /** @var helper_plugin_sqlite */ 84474ed8aSSzymon Olewniczak protected $sqlite; 9bab76148SSzymon Olewniczak 101b552e87SSzymon Olewniczak /** @var helper_plugin_approve */ 111b552e87SSzymon Olewniczak protected $helper; 121b552e87SSzymon Olewniczak 134474ed8aSSzymon Olewniczak /** 144474ed8aSSzymon Olewniczak * @return helper_plugin_sqlite 154474ed8aSSzymon Olewniczak */ 161b552e87SSzymon Olewniczak protected function sqlite() { 174474ed8aSSzymon Olewniczak if (!$this->sqlite) { 181b552e87SSzymon Olewniczak /** @var helper_plugin_approve_db $db_helper */ 194474ed8aSSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 204474ed8aSSzymon Olewniczak $this->sqlite = $db_helper->getDB(); 214474ed8aSSzymon Olewniczak } 224474ed8aSSzymon Olewniczak return $this->sqlite; 2350481663SSzymon Olewniczak } 2450481663SSzymon Olewniczak 254474ed8aSSzymon Olewniczak /** 261b552e87SSzymon Olewniczak * @return helper_plugin_approve 271b552e87SSzymon Olewniczak */ 281b552e87SSzymon Olewniczak protected function helper() { 291b552e87SSzymon Olewniczak if (!$this->helper) { 301b552e87SSzymon Olewniczak $helper = plugin_load('helper', 'approve'); 311b552e87SSzymon Olewniczak $this->helper = $helper; 321b552e87SSzymon Olewniczak } 331b552e87SSzymon Olewniczak return $this->helper; 341b552e87SSzymon Olewniczak } 351b552e87SSzymon Olewniczak 361b552e87SSzymon Olewniczak 371b552e87SSzymon Olewniczak /** 384474ed8aSSzymon Olewniczak * @param Doku_Event_Handler $controller 394474ed8aSSzymon Olewniczak */ 404474ed8aSSzymon Olewniczak public function register(Doku_Event_Handler $controller) { 414474ed8aSSzymon Olewniczak $controller->register_hook('TPL_ACT_RENDER', 'AFTER', $this, 'handle_diff_accept'); 424474ed8aSSzymon Olewniczak $controller->register_hook('HTML_SHOWREV_OUTPUT', 'BEFORE', $this, 'handle_showrev'); 434474ed8aSSzymon Olewniczak $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_approve'); 4407b13373SSzymon Olewniczak $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_mark_ready_for_approval'); 454474ed8aSSzymon Olewniczak $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_viewer'); 464474ed8aSSzymon Olewniczak $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'handle_display_banner'); 4755f447f4SSzymon Olewniczak $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'AFTER', $this, 'handle_pagesave_after'); 481aeb2b4dSghi } 491aeb2b4dSghi 504474ed8aSSzymon Olewniczak /** 514474ed8aSSzymon Olewniczak * @param Doku_Event $event 524474ed8aSSzymon Olewniczak */ 534474ed8aSSzymon Olewniczak public function handle_diff_accept(Doku_Event $event) { 544474ed8aSSzymon Olewniczak global $INFO; 554474ed8aSSzymon Olewniczak 561b552e87SSzymon Olewniczak if (!$this->helper()->use_approve_here($INFO['id'])) return; 5750481663SSzymon Olewniczak 581aeb2b4dSghi if ($event->data == 'diff' && isset($_GET['approve'])) { 594474ed8aSSzymon Olewniczak $href = wl($INFO['id'], ['approve' => 'approve']); 604474ed8aSSzymon Olewniczak ptln('<a href="' . $href . '">'.$this->getLang('approve').'</a>'); 611aeb2b4dSghi } 6284047bdaSRuud 634474ed8aSSzymon Olewniczak if ($this->getConf('ready_for_approval') && $event->data == 'diff' && isset($_GET['ready_for_approval'])) { 644474ed8aSSzymon Olewniczak $href = wl($INFO['id'], ['ready_for_approval' => 'ready_for_approval']); 65058bad72SSzymon Olewniczak ptln('<a href="' . $href . '">'.$this->getLang('approve_ready').'</a>'); 6684047bdaSRuud } 671aeb2b4dSghi } 681aeb2b4dSghi 694474ed8aSSzymon Olewniczak /** 704474ed8aSSzymon Olewniczak * @param Doku_Event $event 714474ed8aSSzymon Olewniczak */ 724474ed8aSSzymon Olewniczak public function handle_showrev(Doku_Event $event) { 734474ed8aSSzymon Olewniczak global $INFO; 741aeb2b4dSghi 751b552e87SSzymon Olewniczak if (!$this->helper()->use_approve_here($INFO['id'])) return; 764474ed8aSSzymon Olewniczak 771b552e87SSzymon Olewniczak $last_approved_rev = $this->helper()->find_last_approved($INFO['id']); 784474ed8aSSzymon Olewniczak if ($last_approved_rev == $INFO['rev']) { 791aeb2b4dSghi $event->preventDefault(); 801aeb2b4dSghi } 811aeb2b4dSghi } 821aeb2b4dSghi 834474ed8aSSzymon Olewniczak /** 844474ed8aSSzymon Olewniczak * @param Doku_Event $event 854474ed8aSSzymon Olewniczak */ 864474ed8aSSzymon Olewniczak public function handle_approve(Doku_Event $event) { 874474ed8aSSzymon Olewniczak global $INFO; 884474ed8aSSzymon Olewniczak 8907b13373SSzymon Olewniczak if ($event->data != 'show') return; 9007b13373SSzymon Olewniczak if (!isset($_GET['approve'])) return; 9107b13373SSzymon Olewniczak if (!$this->helper()->use_approve_here($INFO['id'], $approver)) return; 9207b13373SSzymon Olewniczak if (!$this->helper()->client_can_approve($INFO['id'], $approver)) return; 934474ed8aSSzymon Olewniczak 944474ed8aSSzymon Olewniczak $res = $this->sqlite()->query('SELECT MAX(version)+1 FROM revision 954474ed8aSSzymon Olewniczak WHERE page=?', $INFO['id']); 964474ed8aSSzymon Olewniczak $next_version = $this->sqlite()->res2single($res); 974474ed8aSSzymon Olewniczak if (!$next_version) { 984474ed8aSSzymon Olewniczak $next_version = 1; 9984047bdaSRuud } 1004474ed8aSSzymon Olewniczak //approved IS NULL prevents from overriding already approved page 1014474ed8aSSzymon Olewniczak $this->sqlite()->query('UPDATE revision 102c7d53eabSSzymon Olewniczak SET approved=?, approved_by=?, version=? 1034474ed8aSSzymon Olewniczak WHERE page=? AND current=1 AND approved IS NULL', 104c7d53eabSSzymon Olewniczak date('c'), $INFO['client'], $next_version, $INFO['id']); 10584047bdaSRuud 1064474ed8aSSzymon Olewniczak header('Location: ' . wl($INFO['id'])); 10707b13373SSzymon Olewniczak } 10807b13373SSzymon Olewniczak 10907b13373SSzymon Olewniczak /** 11007b13373SSzymon Olewniczak * @param Doku_Event $event 11107b13373SSzymon Olewniczak */ 11207b13373SSzymon Olewniczak public function handle_mark_ready_for_approval(Doku_Event $event) { 11307b13373SSzymon Olewniczak global $INFO; 11407b13373SSzymon Olewniczak 11507b13373SSzymon Olewniczak if ($event->data != 'show') return; 11607b13373SSzymon Olewniczak if (!isset($_GET['ready_for_approval'])) return; 11707b13373SSzymon Olewniczak if (!$this->helper()->use_approve_here($INFO['id'])) return; 11807b13373SSzymon Olewniczak if (!$this->helper()->client_can_mark_ready_for_approval($INFO['id'])) return; 11950481663SSzymon Olewniczak 120c7d53eabSSzymon Olewniczak $this->sqlite()->query('UPDATE revision SET ready_for_approval=?, ready_for_approval_by=? 1214474ed8aSSzymon Olewniczak WHERE page=? AND current=1 AND ready_for_approval IS NULL', 122c7d53eabSSzymon Olewniczak date('c'), $INFO['client'], $INFO['id']); 12350481663SSzymon Olewniczak 1244474ed8aSSzymon Olewniczak header('Location: ' . wl($INFO['id'])); 1251aeb2b4dSghi } 12655f447f4SSzymon Olewniczak 1274474ed8aSSzymon Olewniczak /** 1284474ed8aSSzymon Olewniczak * Redirect to newest approved page for user that don't have EDIT permission. 1294474ed8aSSzymon Olewniczak * 1304474ed8aSSzymon Olewniczak * @param Doku_Event $event 1314474ed8aSSzymon Olewniczak */ 1324474ed8aSSzymon Olewniczak public function handle_viewer(Doku_Event $event) { 1334474ed8aSSzymon Olewniczak global $INFO; 1344474ed8aSSzymon Olewniczak 13538d03fbdSghi if ($event->data != 'show') return; 1364474ed8aSSzymon Olewniczak //apply only to current page 137c7d53eabSSzymon Olewniczak if ($INFO['rev'] != 0) return; 13807b13373SSzymon Olewniczak if (!$this->helper()->use_approve_here($INFO['id'], $approver)) return; 13907b13373SSzymon Olewniczak if ($this->helper()->client_can_see_drafts($INFO['id'], $approver)) return; 1401aeb2b4dSghi 1411b552e87SSzymon Olewniczak $last_approved_rev = $this->helper()->find_last_approved($INFO['id']); 14238d03fbdSghi //no page is approved 1434474ed8aSSzymon Olewniczak if (!$last_approved_rev) return; 14438d03fbdSghi 1454474ed8aSSzymon Olewniczak $last_change_date = @filemtime(wikiFN($INFO['id'])); 1464474ed8aSSzymon Olewniczak //current page is approved 1474474ed8aSSzymon Olewniczak if ($last_approved_rev == $last_change_date) return; 1484474ed8aSSzymon Olewniczak 149*de24d3c4SSzymon Olewniczak header("Location: " . wl($INFO['id'], ['rev' => $last_approved_rev], false, '&')); 1501aeb2b4dSghi } 15155f447f4SSzymon Olewniczak 1524474ed8aSSzymon Olewniczak /** 1534474ed8aSSzymon Olewniczak * @param Doku_Event $event 1544474ed8aSSzymon Olewniczak */ 1554474ed8aSSzymon Olewniczak public function handle_display_banner(Doku_Event $event) { 1564474ed8aSSzymon Olewniczak global $INFO; 157bab76148SSzymon Olewniczak 1581aeb2b4dSghi if ($event->data != 'show') return; 1591aeb2b4dSghi if (!$INFO['exists']) return; 1602ce523c6SSzymon Olewniczak if (!$this->helper()->use_approve_here($INFO['id'], $approver)) return; 1611aeb2b4dSghi 1624474ed8aSSzymon Olewniczak// $last_change_date = p_get_metadata($INFO['id'], 'last_change date'); 1634474ed8aSSzymon Olewniczak $last_change_date = @filemtime(wikiFN($INFO['id'])); 1644474ed8aSSzymon Olewniczak $rev = !$INFO['rev'] ? $last_change_date : $INFO['rev']; 1651aeb2b4dSghi 16655f447f4SSzymon Olewniczak 167c7d53eabSSzymon Olewniczak $res = $this->sqlite()->query('SELECT ready_for_approval, ready_for_approval_by, 168c7d53eabSSzymon Olewniczak approved, approved_by, version 1694474ed8aSSzymon Olewniczak FROM revision 1704474ed8aSSzymon Olewniczak WHERE page=? AND rev=?', $INFO['id'], $rev); 1714474ed8aSSzymon Olewniczak 1724474ed8aSSzymon Olewniczak $approve = $this->sqlite()->res_fetch_assoc($res); 1734474ed8aSSzymon Olewniczak 1744474ed8aSSzymon Olewniczak $classes = []; 17555f447f4SSzymon Olewniczak if ($this->getConf('prettyprint')) { 17655f447f4SSzymon Olewniczak $classes[] = 'plugin__approve_noprint'; 17755f447f4SSzymon Olewniczak } 17855f447f4SSzymon Olewniczak 1794474ed8aSSzymon Olewniczak if ($approve['approved']) { 18055f447f4SSzymon Olewniczak $classes[] = 'plugin__approve_green'; 1814474ed8aSSzymon Olewniczak } elseif ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) { 182bab76148SSzymon Olewniczak $classes[] = 'plugin__approve_ready'; 18355f447f4SSzymon Olewniczak } else { 18455f447f4SSzymon Olewniczak $classes[] = 'plugin__approve_red'; 18555f447f4SSzymon Olewniczak } 18655f447f4SSzymon Olewniczak 18755f447f4SSzymon Olewniczak ptln('<div id="plugin__approve" class="' . implode(' ', $classes) . '">'); 1881aeb2b4dSghi 189c7d53eabSSzymon Olewniczak// tpl_pageinfo(); 190c7d53eabSSzymon Olewniczak// ptln(' | '); 191af3e3cd8SSzymon Olewniczak 1924474ed8aSSzymon Olewniczak if ($approve['approved']) { 193c7d53eabSSzymon Olewniczak ptln('<strong>'.$this->getLang('approved').'</strong>'); 194c7d53eabSSzymon Olewniczak ptln(' ' . dformat(strtotime($approve['approved']))); 195d8ede060SSzymon Olewniczak ptln(' ' . $this->getLang('by') . ' ' . userlink($approve['approved_by'], true)); 196c7d53eabSSzymon Olewniczak ptln(' (' . $this->getLang('version') . ': ' . $approve['version'] . ')'); 1974474ed8aSSzymon Olewniczak 1984474ed8aSSzymon Olewniczak //not the newest page 1994474ed8aSSzymon Olewniczak if ($rev != $last_change_date) { 2004474ed8aSSzymon Olewniczak $res = $this->sqlite()->query('SELECT rev, current FROM revision 2014474ed8aSSzymon Olewniczak WHERE page=? AND approved IS NOT NULL 2024474ed8aSSzymon Olewniczak ORDER BY rev DESC LIMIT 1', $INFO['id']); 2034474ed8aSSzymon Olewniczak 204c7d53eabSSzymon Olewniczak $last_approve = $this->sqlite()->res_fetch_assoc($res); 2054474ed8aSSzymon Olewniczak 2064474ed8aSSzymon Olewniczak //we can see drafts 20707b13373SSzymon Olewniczak if ($this->helper()->client_can_see_drafts($INFO['id'], $approver)) { 2084474ed8aSSzymon Olewniczak ptln('<a href="' . wl($INFO['id']) . '">'); 209c7d53eabSSzymon Olewniczak ptln($this->getLang($last_approve['current'] ? 'newest_approved' : 'newest_draft')); 2101aeb2b4dSghi ptln('</a>'); 211c7d53eabSSzymon Olewniczak //we cannot see link to draft but there is some newer approved version 212c7d53eabSSzymon Olewniczak } elseif ($last_approve['rev'] != $rev) { 2134474ed8aSSzymon Olewniczak $urlParameters = []; 214c7d53eabSSzymon Olewniczak if (!$last_approve['current']) { 215c7d53eabSSzymon Olewniczak $urlParameters['rev'] = $last_approve['rev']; 2164474ed8aSSzymon Olewniczak } 2174474ed8aSSzymon Olewniczak ptln('<a href="' . wl($INFO['id'], $urlParameters) . '">'); 2181aeb2b4dSghi ptln($this->getLang('newest_approved')); 2191aeb2b4dSghi ptln('</a>'); 2201aeb2b4dSghi } 2214474ed8aSSzymon Olewniczak } 2224474ed8aSSzymon Olewniczak 2231aeb2b4dSghi } else { 2244474ed8aSSzymon Olewniczak if ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) { 225c7d53eabSSzymon Olewniczak ptln('<strong>'.$this->getLang('marked_approve_ready').'</strong>'); 226c7d53eabSSzymon Olewniczak ptln(' ' . dformat(strtotime($approve['ready_for_approval']))); 227d8ede060SSzymon Olewniczak ptln(' ' . $this->getLang('by') . ' ' . userlink($approve['ready_for_approval_by'], true)); 228c7d53eabSSzymon Olewniczak } else { 229c7d53eabSSzymon Olewniczak ptln('<strong>'.$this->getLang('draft').'</strong>'); 23084047bdaSRuud } 23184047bdaSRuud 23284047bdaSRuud 2334474ed8aSSzymon Olewniczak $res = $this->sqlite()->query('SELECT rev, current FROM revision 2344474ed8aSSzymon Olewniczak WHERE page=? AND approved IS NOT NULL 2354474ed8aSSzymon Olewniczak ORDER BY rev DESC LIMIT 1', $INFO['id']); 2364474ed8aSSzymon Olewniczak 237c7d53eabSSzymon Olewniczak $last_approve = $this->sqlite()->res_fetch_assoc($res); 2384474ed8aSSzymon Olewniczak 2394474ed8aSSzymon Olewniczak 2404474ed8aSSzymon Olewniczak //not exists approve for current page 241c7d53eabSSzymon Olewniczak if (!$last_approve) { 2424474ed8aSSzymon Olewniczak //not the newest page 2434474ed8aSSzymon Olewniczak if ($rev != $last_change_date) { 2444474ed8aSSzymon Olewniczak ptln('<a href="'.wl($INFO['id']).'">'); 245274d699aSghi ptln($this->getLang('newest_draft')); 246274d699aSghi ptln('</a>'); 247274d699aSghi } 248274d699aSghi } else { 2494474ed8aSSzymon Olewniczak $urlParameters = []; 250c7d53eabSSzymon Olewniczak if (!$last_approve['current']) { 251c7d53eabSSzymon Olewniczak $urlParameters['rev'] = $last_approve['rev']; 2524474ed8aSSzymon Olewniczak } 2534474ed8aSSzymon Olewniczak ptln('<a href="' . wl($INFO['id'], $urlParameters) . '">'); 2541aeb2b4dSghi ptln($this->getLang('newest_approved')); 2551aeb2b4dSghi ptln('</a>'); 2561aeb2b4dSghi } 2571aeb2b4dSghi 2584474ed8aSSzymon Olewniczak //we are in current page 2594474ed8aSSzymon Olewniczak if ($rev == $last_change_date) { 2604474ed8aSSzymon Olewniczak 261c7d53eabSSzymon Olewniczak //compare with the last approved page or 0 if there is no approved versions 2624474ed8aSSzymon Olewniczak $last_approved_rev = 0; 263c7d53eabSSzymon Olewniczak if (isset($last_approve['rev'])) { 264c7d53eabSSzymon Olewniczak $last_approved_rev = $last_approve['rev']; 2654474ed8aSSzymon Olewniczak } 2664474ed8aSSzymon Olewniczak 2674474ed8aSSzymon Olewniczak if ($this->getConf('ready_for_approval') && 26807b13373SSzymon Olewniczak $this->helper()->client_can_mark_ready_for_approval($INFO['id']) && 2694474ed8aSSzymon Olewniczak !$approve['ready_for_approval']) { 2704474ed8aSSzymon Olewniczak 2714474ed8aSSzymon Olewniczak $urlParameters = [ 2724474ed8aSSzymon Olewniczak 'rev' => $last_approved_rev, 2734474ed8aSSzymon Olewniczak 'do' => 'diff', 2744474ed8aSSzymon Olewniczak 'ready_for_approval' => 'ready_for_approval' 2754474ed8aSSzymon Olewniczak ]; 2764474ed8aSSzymon Olewniczak ptln(' | <a href="'.wl($INFO['id'], $urlParameters).'">'); 27784047bdaSRuud ptln($this->getLang('approve_ready')); 27884047bdaSRuud ptln('</a>'); 27984047bdaSRuud } 28084047bdaSRuud 28107b13373SSzymon Olewniczak if ($this->helper()->client_can_approve($INFO['id'], $approver)) { 2824474ed8aSSzymon Olewniczak 2834474ed8aSSzymon Olewniczak $urlParameters = [ 2844474ed8aSSzymon Olewniczak 'rev' => $last_approved_rev, 2854474ed8aSSzymon Olewniczak 'do' => 'diff', 2864474ed8aSSzymon Olewniczak 'approve' => 'approve' 2874474ed8aSSzymon Olewniczak ]; 2884474ed8aSSzymon Olewniczak ptln(' | <a href="'.wl($INFO['id'], $urlParameters).'">'); 2891aeb2b4dSghi ptln($this->getLang('approve')); 2901aeb2b4dSghi ptln('</a>'); 2911aeb2b4dSghi } 292c7d53eabSSzymon Olewniczak } 293c7d53eabSSzymon Olewniczak } 29484047bdaSRuud 2952ce523c6SSzymon Olewniczak if ($approver) { 2962ce523c6SSzymon Olewniczak ptln(' | ' . $this->getLang('approver') . ': ' . userlink($approver, true)); 2974474ed8aSSzymon Olewniczak } 298c7d53eabSSzymon Olewniczak 2991aeb2b4dSghi ptln('</div>'); 3001aeb2b4dSghi } 3011aeb2b4dSghi 302af3e3cd8SSzymon Olewniczak /** 3034474ed8aSSzymon Olewniczak * @return bool|string 3044474ed8aSSzymon Olewniczak */ 305b1ff32a1SSzymon Olewniczak protected function lastRevisionHasntApprovalData($id) { 3064474ed8aSSzymon Olewniczak $res = $this->sqlite()->query('SELECT rev FROM revision 3074474ed8aSSzymon Olewniczak WHERE page=? 3084474ed8aSSzymon Olewniczak AND current=1 3094474ed8aSSzymon Olewniczak AND approved IS NULL 3104474ed8aSSzymon Olewniczak AND ready_for_approval IS NULL', $id); 3114474ed8aSSzymon Olewniczak 3124474ed8aSSzymon Olewniczak return $this->sqlite()->res2single($res); 3134474ed8aSSzymon Olewniczak } 3144474ed8aSSzymon Olewniczak 3154474ed8aSSzymon Olewniczak /** 3164474ed8aSSzymon Olewniczak * 3174474ed8aSSzymon Olewniczak * @param Doku_Event $event event object by reference 3184474ed8aSSzymon Olewniczak * @return void 3194474ed8aSSzymon Olewniczak */ 3204474ed8aSSzymon Olewniczak public function handle_pagesave_after(Doku_Event $event) { 3211b552e87SSzymon Olewniczak //no content was changed 3224474ed8aSSzymon Olewniczak if (!$event->data['contentChanged']) return; 3234474ed8aSSzymon Olewniczak 3244474ed8aSSzymon Olewniczak $changeType = $event->data['changeType']; 3254474ed8aSSzymon Olewniczak if ($changeType == DOKU_CHANGE_TYPE_REVERT) { 3264474ed8aSSzymon Olewniczak if ($event->data['oldContent'] == '') { 3274474ed8aSSzymon Olewniczak $changeType = DOKU_CHANGE_TYPE_CREATE; 3284474ed8aSSzymon Olewniczak } else { 3294474ed8aSSzymon Olewniczak $changeType = DOKU_CHANGE_TYPE_EDIT; 3304474ed8aSSzymon Olewniczak } 3314474ed8aSSzymon Olewniczak } 3324474ed8aSSzymon Olewniczak 3334474ed8aSSzymon Olewniczak $id = $event->data['id']; 3344474ed8aSSzymon Olewniczak switch ($changeType) { 3354474ed8aSSzymon Olewniczak case DOKU_CHANGE_TYPE_EDIT: 3364474ed8aSSzymon Olewniczak case DOKU_CHANGE_TYPE_REVERT: 3374474ed8aSSzymon Olewniczak case DOKU_CHANGE_TYPE_MINOR_EDIT: 3384474ed8aSSzymon Olewniczak $last_change_date = $event->data['newRevision']; 3394474ed8aSSzymon Olewniczak 3404474ed8aSSzymon Olewniczak //if the current page has approved or ready_for_approval -- keep it 341b1ff32a1SSzymon Olewniczak $rev = $this->lastRevisionHasntApprovalData($id); 342b1ff32a1SSzymon Olewniczak if ($rev) { 3434474ed8aSSzymon Olewniczak $this->sqlite()->query('UPDATE revision SET rev=? WHERE page=? AND rev=?', 344b1ff32a1SSzymon Olewniczak $last_change_date, $id, $rev); 3454474ed8aSSzymon Olewniczak 3464474ed8aSSzymon Olewniczak } else { 3474474ed8aSSzymon Olewniczak //keep previous record 3484474ed8aSSzymon Olewniczak $this->sqlite()->query('UPDATE revision SET current=0 3494474ed8aSSzymon Olewniczak WHERE page=? 3504474ed8aSSzymon Olewniczak AND current=1', $id); 3514474ed8aSSzymon Olewniczak 3524474ed8aSSzymon Olewniczak $this->sqlite()->storeEntry('revision', [ 3534474ed8aSSzymon Olewniczak 'page' => $id, 3544474ed8aSSzymon Olewniczak 'rev' => $last_change_date, 3554474ed8aSSzymon Olewniczak 'current' => 1 3564474ed8aSSzymon Olewniczak ]); 3574474ed8aSSzymon Olewniczak } 3584474ed8aSSzymon Olewniczak break; 3594474ed8aSSzymon Olewniczak case DOKU_CHANGE_TYPE_DELETE: 3604474ed8aSSzymon Olewniczak //delete information about availability of a page but keep the history 3614474ed8aSSzymon Olewniczak $this->sqlite()->query('DELETE FROM page WHERE page=?', $id); 3624474ed8aSSzymon Olewniczak 3634474ed8aSSzymon Olewniczak //delete revision if no information about approvals 364b1ff32a1SSzymon Olewniczak $rev = $this->lastRevisionHasntApprovalData($id); 365b1ff32a1SSzymon Olewniczak if ($rev) { 366b1ff32a1SSzymon Olewniczak $this->sqlite()->query('DELETE FROM revision WHERE page=? AND rev=?', $id, $rev); 3674474ed8aSSzymon Olewniczak } else { 368b1ff32a1SSzymon Olewniczak $this->sqlite()->query('UPDATE revision SET current=0 WHERE page=? AND current=1', $id); 3694474ed8aSSzymon Olewniczak } 3704474ed8aSSzymon Olewniczak 3714474ed8aSSzymon Olewniczak break; 3724474ed8aSSzymon Olewniczak case DOKU_CHANGE_TYPE_CREATE: 3732ce523c6SSzymon Olewniczak if ($this->helper()->isPageAssigned($id, $newApprover)) { 374b1ff32a1SSzymon Olewniczak $data = [ 3751b552e87SSzymon Olewniczak 'page' => $id, 376b1ff32a1SSzymon Olewniczak 'hidden' => $this->helper()->in_hidden_namespace($id) ? '1' : '0' 377b1ff32a1SSzymon Olewniczak ]; 3782ce523c6SSzymon Olewniczak if (!blank($newApprover)) { 3792ce523c6SSzymon Olewniczak $data['approver'] = $newApprover; 380b1ff32a1SSzymon Olewniczak } 381b1ff32a1SSzymon Olewniczak $this->sqlite()->storeEntry('page', $data); 382b1ff32a1SSzymon Olewniczak } 3834474ed8aSSzymon Olewniczak 384b1ff32a1SSzymon Olewniczak //store revision 385b1ff32a1SSzymon Olewniczak $last_change_date = $event->data['newRevision']; 3864474ed8aSSzymon Olewniczak $this->sqlite()->storeEntry('revision', [ 3874474ed8aSSzymon Olewniczak 'page' => $id, 3884474ed8aSSzymon Olewniczak 'rev' => $last_change_date, 3894474ed8aSSzymon Olewniczak 'current' => 1 3904474ed8aSSzymon Olewniczak ]); 3914474ed8aSSzymon Olewniczak break; 3924474ed8aSSzymon Olewniczak } 3934474ed8aSSzymon Olewniczak } 3941aeb2b4dSghi} 395