1<?php 2 3// must be run within Dokuwiki 4 5if(!defined('DOKU_INC')) die(); 6 7class action_plugin_ireadit_auth extends DokuWiki_Action_Plugin { 8 9 /** 10 * Registers a callback function for a given event 11 * 12 * @param Doku_Event_Handler $controller DokuWiki's event controller object 13 * @return void 14 */ 15 public function register(Doku_Event_Handler $controller) { 16 $controller->register_hook('AUTH_USER_CHANGE', 'AFTER', $this, 'handle_auth_user_change'); 17 } 18 19 /** 20 * @param $user 21 */ 22 protected function updateUserIreadits($user) { 23 24 /** @var helper_plugin_ireadit_db $db_helper */ 25 $db_helper = plugin_load('helper', 'ireadit_db'); 26 $sqlite = $db_helper->getDB(); 27 28 /** @var helper_plugin_ireadit $helper */ 29 $helper = plugin_load('helper', 'ireadit'); 30 31 $res = $sqlite->query('SELECT page,meta FROM meta'); 32 $rows = $sqlite->res2arr($res); 33 foreach ($rows as $row) { 34 $page = $row['page']; 35 $meta = json_decode($row['meta'], true); 36 if ($helper->in_users_set($user, $meta)) { 37 $last_change_date = p_get_metadata($page, 'last_change date'); 38 $sqlite->storeEntry('ireadit', [ 39 'page' => $page, 40 'rev' => $last_change_date, 41 'user' => $user 42 ]); 43 } 44 } 45 } 46 47 public function handle_auth_user_change(Doku_Event $event) { 48 $type = $event->data['type']; 49 50 /** @var helper_plugin_ireadit_db $db_helper */ 51 $db_helper = plugin_load('helper', 'ireadit_db'); 52 $sqlite = $db_helper->getDB(); 53 54 switch ($type) { 55 case 'create': 56 $user = $event->data['params'][0]; 57 $this->updateUserIreadits($user); 58 break; 59 case 'modify': 60 //update username 61 $user = $event->data['params'][0]; 62 if (isset($event->data['params'][1]['user'])) { 63 $old_username = $user; 64 $new_username = $event->data['params'][1]['user']; 65 if ($old_username != $new_username) { 66 $sqlite->query('UPDATE ireadit SET user=? WHERE user=?', $new_username, $old_username); 67 $user = $new_username; 68 } 69 } 70 //update groups 71 if (isset($event->data['params'][1]['grps'])) { 72 $sqlite->query('DELETE FROM ireadit WHERE user=? AND timestamp IS NULL', $user); 73 $this->updateUserIreadits($user); 74 } 75 76 break; 77 case 'delete': 78 $user = $event->data['params'][0][0]; 79 80 $sqlite->query('DELETE FROM ireadit WHERE user=? AND timestamp IS NULL', $user); 81 break; 82 } 83 84 } 85 86} 87