xref: /plugin/bez/mdl/SubscriptionFactory.php (revision bc0bd078d16a56fa359e30b98f08026eb9de38bb)
1*bc0bd078SSzymon Olewniczak<?php
2*bc0bd078SSzymon Olewniczak
3*bc0bd078SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
4*bc0bd078SSzymon Olewniczak
5*bc0bd078SSzymon Olewniczak
6*bc0bd078SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\PermissionDeniedException;
7*bc0bd078SSzymon Olewniczak
8*bc0bd078SSzymon Olewniczakclass SubscriptionFactory extends Factory {
9*bc0bd078SSzymon Olewniczak
10*bc0bd078SSzymon Olewniczak    protected function checkToken($token) {
11*bc0bd078SSzymon Olewniczak        $q = "SELECT user_id FROM {$this->get_table_name()} WHERE token=?";
12*bc0bd078SSzymon Olewniczak        $r = $this->model->sqlite->query($q, $token);
13*bc0bd078SSzymon Olewniczak        return $this->model->sqlite->res2single($r);
14*bc0bd078SSzymon Olewniczak    }
15*bc0bd078SSzymon Olewniczak
16*bc0bd078SSzymon Olewniczak    public function mute($token='') {
17*bc0bd078SSzymon Olewniczak        //mute by token
18*bc0bd078SSzymon Olewniczak        if ($token) {
19*bc0bd078SSzymon Olewniczak            $user_id = $this->checkToken($token);
20*bc0bd078SSzymon Olewniczak            if (!$user_id) {
21*bc0bd078SSzymon Olewniczak                throw new PermissionDeniedException();
22*bc0bd078SSzymon Olewniczak            }
23*bc0bd078SSzymon Olewniczak            $q = "UPDATE {$this->get_table_name()} SET mute=1 WHERE user_id=?";
24*bc0bd078SSzymon Olewniczak            $this->model->sqlite->query($q, $user_id);
25*bc0bd078SSzymon Olewniczak        //mute currently loged user
26*bc0bd078SSzymon Olewniczak        } else {
27*bc0bd078SSzymon Olewniczak            if ($this->model->get_level() < BEZ_AUTH_USER) {
28*bc0bd078SSzymon Olewniczak                throw new PermissionDeniedException();
29*bc0bd078SSzymon Olewniczak            }
30*bc0bd078SSzymon Olewniczak            $q = "UPDATE {$this->get_table_name()} SET mute=1 WHERE user_id=?";
31*bc0bd078SSzymon Olewniczak            $this->model->sqlite->query($q, $this->model->user_nick);
32*bc0bd078SSzymon Olewniczak        }
33*bc0bd078SSzymon Olewniczak
34*bc0bd078SSzymon Olewniczak    }
35*bc0bd078SSzymon Olewniczak
36*bc0bd078SSzymon Olewniczak    public function unmute() {
37*bc0bd078SSzymon Olewniczak        if ($this->model->get_level() < BEZ_AUTH_USER) {
38*bc0bd078SSzymon Olewniczak            throw new PermissionDeniedException();
39*bc0bd078SSzymon Olewniczak        }
40*bc0bd078SSzymon Olewniczak        $q = "UPDATE {$this->get_table_name()} SET mute=0 WHERE user_id=?";
41*bc0bd078SSzymon Olewniczak        $this->model->sqlite->query($q, $this->model->user_nick);
42*bc0bd078SSzymon Olewniczak    }
43*bc0bd078SSzymon Olewniczak
44*bc0bd078SSzymon Olewniczak    public function isMuted() {
45*bc0bd078SSzymon Olewniczak        if ($this->model->get_level() < BEZ_AUTH_USER) {
46*bc0bd078SSzymon Olewniczak            throw new PermissionDeniedException();
47*bc0bd078SSzymon Olewniczak        }
48*bc0bd078SSzymon Olewniczak
49*bc0bd078SSzymon Olewniczak        $q = "SELECT mute FROM {$this->get_table_name()} WHERE user_id=?";
50*bc0bd078SSzymon Olewniczak        $r = $this->model->sqlite->query($q, $this->model->user_nick);
51*bc0bd078SSzymon Olewniczak        $mute = $this->model->sqlite->res2single($r);
52*bc0bd078SSzymon Olewniczak        if ($mute === false) {
53*bc0bd078SSzymon Olewniczak            $this->getUserToken();
54*bc0bd078SSzymon Olewniczak            return $this->isMuted();
55*bc0bd078SSzymon Olewniczak        }
56*bc0bd078SSzymon Olewniczak        return $mute;
57*bc0bd078SSzymon Olewniczak    }
58*bc0bd078SSzymon Olewniczak
59*bc0bd078SSzymon Olewniczak    public function getUserToken($user='') {
60*bc0bd078SSzymon Olewniczak        if ($this->model->get_level() < BEZ_AUTH_USER) {
61*bc0bd078SSzymon Olewniczak            throw new PermissionDeniedException();
62*bc0bd078SSzymon Olewniczak        }
63*bc0bd078SSzymon Olewniczak        if (!$user) $user = $this->model->user_nick;
64*bc0bd078SSzymon Olewniczak
65*bc0bd078SSzymon Olewniczak        $q = "SELECT token FROM {$this->get_table_name()} WHERE user_id=?";
66*bc0bd078SSzymon Olewniczak        $r = $this->model->sqlite->query($q, $user);
67*bc0bd078SSzymon Olewniczak        $token = $this->model->sqlite->res2single($r);
68*bc0bd078SSzymon Olewniczak        if ($token === false) {
69*bc0bd078SSzymon Olewniczak            $token = bin2hex(openssl_random_pseudo_bytes(16));
70*bc0bd078SSzymon Olewniczak            $this->model->sqlite->storeEntry($this->get_table_name(),
71*bc0bd078SSzymon Olewniczak                array(  'user_id'         => $user,
72*bc0bd078SSzymon Olewniczak                        'token'           => $token
73*bc0bd078SSzymon Olewniczak                ));
74*bc0bd078SSzymon Olewniczak        }
75*bc0bd078SSzymon Olewniczak        return $token;
76*bc0bd078SSzymon Olewniczak    }
77*bc0bd078SSzymon Olewniczak
78*bc0bd078SSzymon Olewniczak    public function getMutedUsers() {
79*bc0bd078SSzymon Olewniczak        $q = "SELECT user_id FROM {$this->get_table_name()} WHERE mute=1";
80*bc0bd078SSzymon Olewniczak        $r = $this->model->sqlite->query($q);
81*bc0bd078SSzymon Olewniczak        return array_map(function ($row) {
82*bc0bd078SSzymon Olewniczak            return $row['user_id'];
83*bc0bd078SSzymon Olewniczak        }, $this->model->sqlite->res2arr($r));
84*bc0bd078SSzymon Olewniczak    }
85*bc0bd078SSzymon Olewniczak}