1de02284cSSzymon Olewniczak<?php 2de02284cSSzymon Olewniczak 3de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4de02284cSSzymon Olewniczak 5a0cd8c78SSzymon Olewniczak//ACL level defines 6a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_NONE', 0); 7a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_VIEWER', 2); 8a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_USER', 5); 9a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_LEADER', 10); 10a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_ADMIN', 20); 11a0cd8c78SSzymon Olewniczak 12a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_UNKNOWN', -1); 13a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_NONE', 0); 14a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_VIEW', 1); 15a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_CHANGE', 2); 16a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_DELETE', 3); 17a0cd8c78SSzymon Olewniczak 18de02284cSSzymon Olewniczak 19de02284cSSzymon Olewniczakclass Model { 20de02284cSSzymon Olewniczak /** @var \helper_plugin_sqlite */ 21de02284cSSzymon Olewniczak protected $sqlite; 22de02284cSSzymon Olewniczak 23de02284cSSzymon Olewniczak /** @var \SQLite3 */ 24de02284cSSzymon Olewniczak protected $db; 25de02284cSSzymon Olewniczak 26a0cd8c78SSzymon Olewniczak protected $level = BEZ_AUTH_NONE; 27de02284cSSzymon Olewniczak 28de02284cSSzymon Olewniczak protected $dw_auth, $user_nick, $action, $conf; 29de02284cSSzymon Olewniczak 30de02284cSSzymon Olewniczak /** @var ThreadFactory */ 31de02284cSSzymon Olewniczak protected $threadFactory; 32de02284cSSzymon Olewniczak 33de02284cSSzymon Olewniczak /** @var UserFactory */ 34de02284cSSzymon Olewniczak protected $userFactory; 35de02284cSSzymon Olewniczak 36de02284cSSzymon Olewniczak /** @var LabelFactory */ 37de02284cSSzymon Olewniczak protected $labelFactory; 38de02284cSSzymon Olewniczak 398a638198SSzymon Olewniczak /** @var Thread_commentFactory */ 408a638198SSzymon Olewniczak protected $thread_commentFactory; 418a638198SSzymon Olewniczak 428a638198SSzymon Olewniczak /** @var TaskFactory */ 438a638198SSzymon Olewniczak protected $taskFactory; 448a638198SSzymon Olewniczak 45e8827d73SSzymon Olewniczak /** @var Task_programFactory */ 46e8827d73SSzymon Olewniczak protected $task_programFactory; 47e8827d73SSzymon Olewniczak 48e8827d73SSzymon Olewniczak /** @var Task_commentFactory */ 49e8827d73SSzymon Olewniczak protected $task_commentFactory; 50e8827d73SSzymon Olewniczak 51e8827d73SSzymon Olewniczak /** @var Authentication_tokenFactory */ 52e8827d73SSzymon Olewniczak protected $authentication_tokenFactory; 53e8827d73SSzymon Olewniczak 54bc0bd078SSzymon Olewniczak /** @var SubscriptionFactory */ 55bc0bd078SSzymon Olewniczak protected $subscriptionFactory; 56bc0bd078SSzymon Olewniczak 57de02284cSSzymon Olewniczak public function __get($property) { 58bc0bd078SSzymon Olewniczak $models = array('userFactory', 'threadFactory', 'labelFactory', 'thread_commentFactory', 'taskFactory', 'task_programFactory', 'task_commentFactory', 'authentication_tokenFactory', 'subscriptionFactory'); 59de02284cSSzymon Olewniczak if (in_array($property, $models) || 60de02284cSSzymon Olewniczak in_array($property, array('sqlite', 'db', 'acl', 'dw_auth', 'user_nick', 'action', 'conf'))) { 61de02284cSSzymon Olewniczak return $this->$property; 62de02284cSSzymon Olewniczak } 63de02284cSSzymon Olewniczak } 64de02284cSSzymon Olewniczak 65a0cd8c78SSzymon Olewniczak public function factory($table) { 66a0cd8c78SSzymon Olewniczak $prop = $table . 'Factory'; 67a0cd8c78SSzymon Olewniczak 68a0cd8c78SSzymon Olewniczak return $this->$prop; 69a0cd8c78SSzymon Olewniczak } 70a0cd8c78SSzymon Olewniczak 7114a1f0a4SSzymon Olewniczak protected function update_level($level) { 72a0cd8c78SSzymon Olewniczak if ($level > $this->level) { 73a0cd8c78SSzymon Olewniczak $this->level = $level; 74a0cd8c78SSzymon Olewniczak } 75a0cd8c78SSzymon Olewniczak } 76a0cd8c78SSzymon Olewniczak 77a0cd8c78SSzymon Olewniczak public function get_level() { 78a0cd8c78SSzymon Olewniczak return $this->level; 79a0cd8c78SSzymon Olewniczak } 80a0cd8c78SSzymon Olewniczak 81522c019cSSzymon Olewniczak public function __construct($dw_auth, $user_nick, $action, $skip_acl=false) { 82de02284cSSzymon Olewniczak $this->dw_auth = $dw_auth; 83de02284cSSzymon Olewniczak $this->user_nick = $user_nick; 84de02284cSSzymon Olewniczak $this->action = $action; 8514a1f0a4SSzymon Olewniczak $this->conf = $action->getGlobalConf(); 86de02284cSSzymon Olewniczak 87e8827d73SSzymon Olewniczak $this->db_helper = plugin_load('helper', 'bez_db'); 88de02284cSSzymon Olewniczak 89e8827d73SSzymon Olewniczak $this->sqlite = $this->db_helper->getDB(); 90*d3caa25dSSzymon Olewniczak $this->db = $this->sqlite->getAdapter()->getPdo(); 918a638198SSzymon Olewniczak $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 9250558c45SSzymon Olewniczak $busy_timeout = 1000 * (int)$this->action->getConf('busy_timeout'); 9350558c45SSzymon Olewniczak $this->db->exec("PRAGMA busy_timeout = $busy_timeout"); 948a638198SSzymon Olewniczak 95de02284cSSzymon Olewniczak $this->userFactory = new UserFactory($this); 96fe5d6d1eSSzymon Olewniczak 97fe5d6d1eSSzymon Olewniczak $this->threadFactory = new ThreadFactory($this); 98fe5d6d1eSSzymon Olewniczak 99de02284cSSzymon Olewniczak $this->labelFactory = new LabelFactory($this); 100de02284cSSzymon Olewniczak 1018a638198SSzymon Olewniczak $this->thread_commentFactory = new Thread_commentFactory($this); 1028a638198SSzymon Olewniczak 1038a638198SSzymon Olewniczak $this->taskFactory = new TaskFactory($this); 1048a638198SSzymon Olewniczak 105e8827d73SSzymon Olewniczak $this->task_programFactory = new Task_programFactory($this); 106de02284cSSzymon Olewniczak 107e8827d73SSzymon Olewniczak $this->task_commentFactory = new Task_commentFactory($this); 108e8827d73SSzymon Olewniczak 109e8827d73SSzymon Olewniczak $this->authentication_tokenFactory = new Authentication_tokenFactory($this); 110a0cd8c78SSzymon Olewniczak 111bc0bd078SSzymon Olewniczak $this->subscriptionFactory = new SubscriptionFactory($this); 112bc0bd078SSzymon Olewniczak 113522c019cSSzymon Olewniczak if ($skip_acl) { 114522c019cSSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 115522c019cSSzymon Olewniczak } else { 116a0cd8c78SSzymon Olewniczak $userd = $this->dw_auth->getUserData($this->user_nick); 117a0cd8c78SSzymon Olewniczak if ($userd !== false && is_array($userd['grps'])) { 118a0cd8c78SSzymon Olewniczak $grps = $userd['grps']; 119a0cd8c78SSzymon Olewniczak if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) { 120a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 121a0cd8c78SSzymon Olewniczak } elseif (in_array('bez_leader', $grps )) { 122a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_LEADER); 123a0cd8c78SSzymon Olewniczak } else { 124a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_USER); 125a0cd8c78SSzymon Olewniczak } 126a0cd8c78SSzymon Olewniczak } elseif (isset($_GET['t'])) { 127a0cd8c78SSzymon Olewniczak $page_id = $this->action->id(); 128a0cd8c78SSzymon Olewniczak 129a0cd8c78SSzymon Olewniczak $user_tok = trim($_GET['t']); 130a0cd8c78SSzymon Olewniczak if ($this->authentication_tokenFactory->get_token($page_id) == $user_tok) { 131a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_VIEWER); 132a0cd8c78SSzymon Olewniczak } 133a0cd8c78SSzymon Olewniczak } 134e8827d73SSzymon Olewniczak } 135de02284cSSzymon Olewniczak } 136522c019cSSzymon Olewniczak} 137