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