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