xref: /plugin/ireadit/action/auth.php (revision 58604840363f7f258228d4d126cb604f32b1df03)
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