1de02284cSSzymon Olewniczak<?php 2de02284cSSzymon Olewniczak 3de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4de02284cSSzymon Olewniczak 567fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/Exception.php'; 667fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/PHPMailer.php'; 767fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/SMTP.php'; 867fdb426SSzymon 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 58*bc0bd078SSzymon Olewniczak /** @var SubscriptionFactory */ 59*bc0bd078SSzymon Olewniczak protected $subscriptionFactory; 60*bc0bd078SSzymon Olewniczak 61de02284cSSzymon Olewniczak public function __get($property) { 62*bc0bd078SSzymon Olewniczak $models = array('userFactory', 'threadFactory', 'labelFactory', 'thread_commentFactory', 'taskFactory', 'task_programFactory', 'task_commentFactory', 'authentication_tokenFactory', 'subscriptionFactory'); 63de02284cSSzymon Olewniczak if (in_array($property, $models) || 64de02284cSSzymon Olewniczak in_array($property, array('sqlite', 'db', 'acl', 'dw_auth', 'user_nick', 'action', 'conf'))) { 65de02284cSSzymon Olewniczak return $this->$property; 66de02284cSSzymon Olewniczak } 67de02284cSSzymon Olewniczak } 68de02284cSSzymon Olewniczak 69a0cd8c78SSzymon Olewniczak public function factory($table) { 70a0cd8c78SSzymon Olewniczak $prop = $table . 'Factory'; 71a0cd8c78SSzymon Olewniczak 72a0cd8c78SSzymon Olewniczak return $this->$prop; 73a0cd8c78SSzymon Olewniczak } 74a0cd8c78SSzymon Olewniczak 7514a1f0a4SSzymon Olewniczak protected function update_level($level) { 76a0cd8c78SSzymon Olewniczak if ($level > $this->level) { 77a0cd8c78SSzymon Olewniczak $this->level = $level; 78a0cd8c78SSzymon Olewniczak } 79a0cd8c78SSzymon Olewniczak } 80a0cd8c78SSzymon Olewniczak 81a0cd8c78SSzymon Olewniczak public function get_level() { 82a0cd8c78SSzymon Olewniczak return $this->level; 83a0cd8c78SSzymon Olewniczak } 84a0cd8c78SSzymon Olewniczak 85522c019cSSzymon Olewniczak public function __construct($dw_auth, $user_nick, $action, $skip_acl=false) { 86de02284cSSzymon Olewniczak $this->dw_auth = $dw_auth; 87de02284cSSzymon Olewniczak $this->user_nick = $user_nick; 88de02284cSSzymon Olewniczak $this->action = $action; 8914a1f0a4SSzymon Olewniczak $this->conf = $action->getGlobalConf(); 90de02284cSSzymon Olewniczak 91e8827d73SSzymon Olewniczak $this->db_helper = plugin_load('helper', 'bez_db'); 92de02284cSSzymon Olewniczak 93e8827d73SSzymon Olewniczak $this->sqlite = $this->db_helper->getDB(); 94de02284cSSzymon Olewniczak $this->db = $this->sqlite->getAdapter()->getDb(); 958a638198SSzymon Olewniczak $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 9650558c45SSzymon Olewniczak $busy_timeout = 1000 * (int)$this->action->getConf('busy_timeout'); 9750558c45SSzymon Olewniczak $this->db->exec("PRAGMA busy_timeout = $busy_timeout"); 988a638198SSzymon Olewniczak 99de02284cSSzymon Olewniczak $this->userFactory = new UserFactory($this); 100fe5d6d1eSSzymon Olewniczak 101fe5d6d1eSSzymon Olewniczak $this->threadFactory = new ThreadFactory($this); 102fe5d6d1eSSzymon Olewniczak 103de02284cSSzymon Olewniczak $this->labelFactory = new LabelFactory($this); 104de02284cSSzymon Olewniczak 1058a638198SSzymon Olewniczak $this->thread_commentFactory = new Thread_commentFactory($this); 1068a638198SSzymon Olewniczak 1078a638198SSzymon Olewniczak $this->taskFactory = new TaskFactory($this); 1088a638198SSzymon Olewniczak 109e8827d73SSzymon Olewniczak $this->task_programFactory = new Task_programFactory($this); 110de02284cSSzymon Olewniczak 111e8827d73SSzymon Olewniczak $this->task_commentFactory = new Task_commentFactory($this); 112e8827d73SSzymon Olewniczak 113e8827d73SSzymon Olewniczak $this->authentication_tokenFactory = new Authentication_tokenFactory($this); 114a0cd8c78SSzymon Olewniczak 115*bc0bd078SSzymon Olewniczak $this->subscriptionFactory = new SubscriptionFactory($this); 116*bc0bd078SSzymon Olewniczak 117522c019cSSzymon Olewniczak if ($skip_acl) { 118522c019cSSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 119522c019cSSzymon Olewniczak } else { 120a0cd8c78SSzymon Olewniczak $userd = $this->dw_auth->getUserData($this->user_nick); 121a0cd8c78SSzymon Olewniczak if ($userd !== false && is_array($userd['grps'])) { 122a0cd8c78SSzymon Olewniczak $grps = $userd['grps']; 123a0cd8c78SSzymon Olewniczak if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) { 124a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 125a0cd8c78SSzymon Olewniczak } elseif (in_array('bez_leader', $grps )) { 126a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_LEADER); 127a0cd8c78SSzymon Olewniczak } else { 128a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_USER); 129a0cd8c78SSzymon Olewniczak } 130a0cd8c78SSzymon Olewniczak } elseif (isset($_GET['t'])) { 131a0cd8c78SSzymon Olewniczak $page_id = $this->action->id(); 132a0cd8c78SSzymon Olewniczak 133a0cd8c78SSzymon Olewniczak $user_tok = trim($_GET['t']); 134a0cd8c78SSzymon Olewniczak if ($this->authentication_tokenFactory->get_token($page_id) == $user_tok) { 135a0cd8c78SSzymon Olewniczak $this->update_level(BEZ_AUTH_VIEWER); 136a0cd8c78SSzymon Olewniczak } 137a0cd8c78SSzymon Olewniczak } 138e8827d73SSzymon Olewniczak } 139de02284cSSzymon Olewniczak } 140522c019cSSzymon Olewniczak} 141