1de02284cSSzymon Olewniczak<?php 2de02284cSSzymon Olewniczak 3de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4de02284cSSzymon Olewniczak 5*67fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/Exception.php'; 6*67fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/PHPMailer.php'; 7*67fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/SMTP.php'; 8*67fdb426SSzymon Olewniczak 9a0cd8c78SSzymon Olewniczak//ACL level defines 10a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_NONE', 0); 11a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_VIEWER', 2); 12a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_USER', 5); 13a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_LEADER', 10); 14a0cd8c78SSzymon Olewniczakdefine('BEZ_AUTH_ADMIN', 20); 15a0cd8c78SSzymon Olewniczak 16a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_UNKNOWN', -1); 17a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_NONE', 0); 18a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_VIEW', 1); 19a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_CHANGE', 2); 20a0cd8c78SSzymon Olewniczakdefine('BEZ_PERMISSION_DELETE', 3); 21a0cd8c78SSzymon Olewniczak 22de02284cSSzymon Olewniczak 23de02284cSSzymon Olewniczakclass Model { 24de02284cSSzymon Olewniczak /** @var \helper_plugin_sqlite */ 25de02284cSSzymon Olewniczak protected $sqlite; 26de02284cSSzymon Olewniczak 27de02284cSSzymon Olewniczak /** @var \SQLite3 */ 28de02284cSSzymon Olewniczak protected $db; 29de02284cSSzymon Olewniczak 30a0cd8c78SSzymon Olewniczak protected $level = BEZ_AUTH_NONE; 31de02284cSSzymon Olewniczak 32de02284cSSzymon Olewniczak protected $dw_auth, $user_nick, $action, $conf; 33de02284cSSzymon Olewniczak 34de02284cSSzymon Olewniczak /** @var ThreadFactory */ 35de02284cSSzymon Olewniczak protected $threadFactory; 36de02284cSSzymon Olewniczak 37de02284cSSzymon Olewniczak /** @var UserFactory */ 38de02284cSSzymon Olewniczak protected $userFactory; 39de02284cSSzymon Olewniczak 40de02284cSSzymon Olewniczak /** @var LabelFactory */ 41de02284cSSzymon Olewniczak protected $labelFactory; 42de02284cSSzymon Olewniczak 438a638198SSzymon Olewniczak /** @var Thread_commentFactory */ 448a638198SSzymon Olewniczak protected $thread_commentFactory; 458a638198SSzymon Olewniczak 468a638198SSzymon Olewniczak /** @var TaskFactory */ 478a638198SSzymon Olewniczak protected $taskFactory; 488a638198SSzymon Olewniczak 49e8827d73SSzymon Olewniczak /** @var Task_programFactory */ 50e8827d73SSzymon Olewniczak protected $task_programFactory; 51e8827d73SSzymon Olewniczak 52e8827d73SSzymon Olewniczak /** @var Task_commentFactory */ 53e8827d73SSzymon Olewniczak protected $task_commentFactory; 54e8827d73SSzymon Olewniczak 55e8827d73SSzymon Olewniczak /** @var Authentication_tokenFactory */ 56e8827d73SSzymon Olewniczak protected $authentication_tokenFactory; 57e8827d73SSzymon Olewniczak 58de02284cSSzymon Olewniczak public function __get($property) { 59e8827d73SSzymon Olewniczak $models = array('userFactory', 'threadFactory', 'labelFactory', 'thread_commentFactory', 'taskFactory', 'task_programFactory', 'task_commentFactory', 'authentication_tokenFactory'); 60de02284cSSzymon Olewniczak if (in_array($property, $models) || 61de02284cSSzymon Olewniczak in_array($property, array('sqlite', 'db', 'acl', 'dw_auth', 'user_nick', 'action', 'conf'))) { 62de02284cSSzymon Olewniczak return $this->$property; 63de02284cSSzymon Olewniczak } 64de02284cSSzymon Olewniczak } 65de02284cSSzymon Olewniczak 66a0cd8c78SSzymon Olewniczak public function factory($table) { 67a0cd8c78SSzymon Olewniczak $prop = $table . 'Factory'; 68a0cd8c78SSzymon Olewniczak 69a0cd8c78SSzymon Olewniczak return $this->$prop; 70a0cd8c78SSzymon Olewniczak } 71a0cd8c78SSzymon Olewniczak 7214a1f0a4SSzymon Olewniczak protected function update_level($level) { 73a0cd8c78SSzymon Olewniczak if ($level > $this->level) { 74a0cd8c78SSzymon Olewniczak $this->level = $level; 75a0cd8c78SSzymon Olewniczak } 76a0cd8c78SSzymon Olewniczak } 77a0cd8c78SSzymon Olewniczak 78a0cd8c78SSzymon Olewniczak public function get_level() { 79a0cd8c78SSzymon Olewniczak return $this->level; 80a0cd8c78SSzymon Olewniczak } 81a0cd8c78SSzymon Olewniczak 82522c019cSSzymon Olewniczak public function __construct($dw_auth, $user_nick, $action, $skip_acl=false) { 83de02284cSSzymon Olewniczak $this->dw_auth = $dw_auth; 84de02284cSSzymon Olewniczak $this->user_nick = $user_nick; 85de02284cSSzymon Olewniczak $this->action = $action; 8614a1f0a4SSzymon Olewniczak $this->conf = $action->getGlobalConf(); 87de02284cSSzymon Olewniczak 88e8827d73SSzymon Olewniczak $this->db_helper = plugin_load('helper', 'bez_db'); 89de02284cSSzymon Olewniczak 90e8827d73SSzymon Olewniczak $this->sqlite = $this->db_helper->getDB(); 91de02284cSSzymon Olewniczak $this->db = $this->sqlite->getAdapter()->getDb(); 928a638198SSzymon Olewniczak $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 9350558c45SSzymon Olewniczak $busy_timeout = 1000 * (int)$this->action->getConf('busy_timeout'); 9450558c45SSzymon Olewniczak $this->db->exec("PRAGMA busy_timeout = $busy_timeout"); 958a638198SSzymon Olewniczak 96de02284cSSzymon Olewniczak $this->userFactory = new UserFactory($this); 97fe5d6d1eSSzymon Olewniczak 98fe5d6d1eSSzymon Olewniczak $this->threadFactory = new ThreadFactory($this); 99fe5d6d1eSSzymon Olewniczak 100de02284cSSzymon Olewniczak $this->labelFactory = new LabelFactory($this); 101de02284cSSzymon Olewniczak 1028a638198SSzymon Olewniczak $this->thread_commentFactory = new Thread_commentFactory($this); 1038a638198SSzymon Olewniczak 1048a638198SSzymon Olewniczak $this->taskFactory = new TaskFactory($this); 1058a638198SSzymon Olewniczak 106e8827d73SSzymon Olewniczak $this->task_programFactory = new Task_programFactory($this); 107de02284cSSzymon Olewniczak 108e8827d73SSzymon Olewniczak $this->task_commentFactory = new Task_commentFactory($this); 109e8827d73SSzymon Olewniczak 110e8827d73SSzymon Olewniczak $this->authentication_tokenFactory = new Authentication_tokenFactory($this); 111a0cd8c78SSzymon Olewniczak 112522c019cSSzymon Olewniczak if ($skip_acl) { 113522c019cSSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 114522c019cSSzymon Olewniczak } else { 115a0cd8c78SSzymon Olewniczak $userd = $this->dw_auth->getUserData($this->user_nick); 116a0cd8c78SSzymon Olewniczak if ($userd !== false && is_array($userd['grps'])) { 117a0cd8c78SSzymon Olewniczak $grps = $userd['grps']; 118a0cd8c78SSzymon Olewniczak if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) { 119a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 120a0cd8c78SSzymon Olewniczak } elseif (in_array('bez_leader', $grps )) { 121a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_LEADER); 122a0cd8c78SSzymon Olewniczak } else { 123a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_USER); 124a0cd8c78SSzymon Olewniczak } 125a0cd8c78SSzymon Olewniczak } elseif (isset($_GET['t'])) { 126a0cd8c78SSzymon Olewniczak $page_id = $this->action->id(); 127a0cd8c78SSzymon Olewniczak 128a0cd8c78SSzymon Olewniczak $user_tok = trim($_GET['t']); 129a0cd8c78SSzymon Olewniczak if ($this->authentication_tokenFactory->get_token($page_id) == $user_tok) { 130a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_VIEWER); 131a0cd8c78SSzymon Olewniczak } 132a0cd8c78SSzymon Olewniczak } 133e8827d73SSzymon Olewniczak } 134de02284cSSzymon Olewniczak } 135522c019cSSzymon Olewniczak} 136