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