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}