xref: /plugin/ireadit/action/auth.php (revision d0cab33c70741e3b980d195617fdaa5a25767f97)
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    public function handle_auth_user_change(Doku_Event $event) {
20        $type = $event->data['type'];
21
22        /** @var helper_plugin_ireadit_db $db_helper */
23        $db_helper = plugin_load('helper', 'ireadit_db');
24        $sqlite = $db_helper->getDB();
25
26        /** @var helper_plugin_ireadit $helper */
27        $helper = plugin_load('helper', 'ireadit');
28
29        switch ($type) {
30            case 'create':
31                $user = $event->data['params'][0];
32                $res = $sqlite->query('SELECT page,meta FROM meta');
33                $rows = $sqlite->res2arr($res);
34                foreach ($rows as $row) {
35                    $page = $row['page'];
36                    $meta = json_decode($row['meta'], true);
37                    if ($helper->in_users_set($user, $meta)) {
38                        $last_change_date = p_get_metadata($page, 'last_change date');
39                        $sqlite->storeEntry('ireadit', [
40                            'page' => $page,
41                            'rev' => $last_change_date,
42                            'user' => $user
43                        ]);
44                    }
45                }
46                break;
47            case 'modify':
48                $old_username =  $event->data['params'][0];
49                if (!isset($event->data['params'][1]['user'])) return;
50
51                $new_username =  $event->data['params'][1]['user'];
52                if ($old_username == $new_username) return;
53
54                $sqlite->query('UPDATE ireadit SET user=? WHERE user=?', $new_username, $old_username);
55                break;
56            case 'delete':
57                $user = $event->data['params'][0][0];
58
59                $sqlite->query('DELETE FROM ireadit WHERE user=? AND timestamp IS NULL', $user);
60                break;
61        }
62
63    }
64
65}
66