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(helper_plugin_sqlite $sqlite, $user) { 23 /** @var helper_plugin_ireadit $helper */ 24 $helper = plugin_load('helper', 'ireadit'); 25 26 $res = $sqlite->query('SELECT page,meta FROM meta'); 27 $rows = $sqlite->res2arr($res); 28 foreach ($rows as $row) { 29 $page = $row['page']; 30 $meta = json_decode($row['meta'], true); 31 if ($helper->in_users_set($user, $meta)) { 32 $last_change_date = p_get_metadata($page, 'last_change date'); 33 $sqlite->storeEntry('ireadit', [ 34 'page' => $page, 35 'rev' => $last_change_date, 36 'user' => $user 37 ]); 38 } 39 } 40 } 41 42 public function handle_auth_user_change(Doku_Event $event) { 43 $type = $event->data['type']; 44 45 try { 46 /** @var \helper_plugin_ireadit_db $db_helper */ 47 $db_helper = plugin_load('helper', 'ireadit_db'); 48 $sqlite = $db_helper->getDB(); 49 } catch (Exception $e) { 50 msg($e->getMessage(), -1); 51 return false; 52 } 53 54 switch ($type) { 55 case 'create': 56 $user = $event->data['params'][0]; 57 $this->updateUserIreadits($sqlite, $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($sqlite, $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