xref: /plugin/bez/mdl/Model.php (revision bc0bd078d16a56fa359e30b98f08026eb9de38bb)
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