xref: /plugin/bez/mdl/Model.php (revision fe5d6d1ebd253c129098b67fff8cf438a54d8650)
1de02284cSSzymon Olewniczak<?php
2de02284cSSzymon Olewniczak
3de02284cSSzymon Olewniczak//require_once DOKU_PLUGIN.'bez/exceptions.php';
4de02284cSSzymon Olewniczak
5de02284cSSzymon Olewniczak//require_once 'acl.php';
6de02284cSSzymon Olewniczak//require_once 'validator.php';
7de02284cSSzymon Olewniczak
8de02284cSSzymon Olewniczak//require_once 'users.php';
9de02284cSSzymon Olewniczak//require_once 'threads.php';
10de02284cSSzymon Olewniczak//require_once 'issuetypes.php';
11de02284cSSzymon Olewniczak//require_once 'tasks.php';
12de02284cSSzymon Olewniczak//require_once 'tasktypes.php';
13de02284cSSzymon Olewniczak//require_once 'commcauses.php';
14de02284cSSzymon Olewniczak//require_once 'timeline.php';
15de02284cSSzymon Olewniczak
16de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
17de02284cSSzymon 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
26de02284cSSzymon Olewniczak	/** @var Acl */
27de02284cSSzymon Olewniczak    protected $acl;
28de02284cSSzymon Olewniczak
29de02284cSSzymon Olewniczak	//private $db;
30de02284cSSzymon Olewniczak
31de02284cSSzymon Olewniczak    //private $models = array('users', 'issues', 'tasks', 'tasktypes', 'commcauses', 'timeline');
32de02284cSSzymon Olewniczak	//private $users, $issues, $tasks, $tasktypes, $commcauses, $timeline;
33de02284cSSzymon Olewniczak
34de02284cSSzymon Olewniczak    protected $dw_auth, $user_nick, $action, $conf;
35de02284cSSzymon Olewniczak
36de02284cSSzymon Olewniczak    /** @var ThreadFactory */
37de02284cSSzymon Olewniczak    protected $threadFactory;
38de02284cSSzymon Olewniczak
39de02284cSSzymon Olewniczak    /** @var UserFactory  */
40de02284cSSzymon Olewniczak    protected $userFactory;
41de02284cSSzymon Olewniczak
42de02284cSSzymon Olewniczak    /** @var LabelFactory */
43de02284cSSzymon Olewniczak    protected $labelFactory;
44de02284cSSzymon Olewniczak
45de02284cSSzymon Olewniczak	public function __get($property) {
46de02284cSSzymon Olewniczak        $models = array('userFactory', 'threadFactory', 'labelFactory');
47de02284cSSzymon Olewniczak		if (in_array($property, $models) ||
48de02284cSSzymon Olewniczak            in_array($property, array('sqlite', 'db', 'acl', 'dw_auth', 'user_nick', 'action', 'conf'))) {
49de02284cSSzymon Olewniczak			return $this->$property;
50de02284cSSzymon Olewniczak		}
51de02284cSSzymon Olewniczak	}
52de02284cSSzymon Olewniczak
53de02284cSSzymon Olewniczak	public function __construct($dw_auth, $user_nick, $action, $conf) {
54de02284cSSzymon Olewniczak		$this->dw_auth = $dw_auth;
55de02284cSSzymon Olewniczak		$this->user_nick = $user_nick;
56de02284cSSzymon Olewniczak		$this->action = $action;
57de02284cSSzymon Olewniczak        $this->conf = $conf;
58de02284cSSzymon Olewniczak
59de02284cSSzymon Olewniczak//		$db_path = DOKU_INC . 'data/bez.sqlite';
60de02284cSSzymon Olewniczak//		//if database not exists
61de02284cSSzymon Olewniczak//		if (!file_exists($db_path)) {
62de02284cSSzymon Olewniczak//			$this->db = new PDO('sqlite:/' . $db_path);
63de02284cSSzymon Olewniczak//			$schema = file_get_contents(DOKU_PLUGIN . 'bez/mdl/schema.sql');
64de02284cSSzymon Olewniczak//			if ($schema === false) {
65de02284cSSzymon Olewniczak//				throw new Exception('cannot find schema file: '.$schema);
66de02284cSSzymon Olewniczak//			}
67de02284cSSzymon Olewniczak//			$this->db->exec($schema);
68de02284cSSzymon Olewniczak//		} else {
69de02284cSSzymon Olewniczak//			$this->db = new PDO('sqlite:/' . $db_path);
70de02284cSSzymon Olewniczak//		}
71de02284cSSzymon Olewniczak//		$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
72de02284cSSzymon Olewniczak//
73de02284cSSzymon Olewniczak//        //convert NULLS to empty strings
74de02284cSSzymon Olewniczak//        $this->db->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING);
75de02284cSSzymon Olewniczak
76de02284cSSzymon Olewniczak        $this->sqlite = plugin_load('helper', 'sqlite');
77de02284cSSzymon Olewniczak        if(!$this->sqlite) {
78*fe5d6d1eSSzymon Olewniczak            throw new \Exception('Couldn\'t load sqlite.');
79de02284cSSzymon Olewniczak        }
80de02284cSSzymon Olewniczak
81de02284cSSzymon Olewniczak        if($this->sqlite->getAdapter()->getName() != DOKU_EXT_PDO) {
82*fe5d6d1eSSzymon Olewniczak            throw new \Exception('Couldn\'t load PDO sqlite.');
83de02284cSSzymon Olewniczak        }
84de02284cSSzymon Olewniczak        $this->sqlite->getAdapter()->setUseNativeAlter(true);
85de02284cSSzymon Olewniczak
86de02284cSSzymon Olewniczak        // initialize the database connection
87de02284cSSzymon Olewniczak        if(!$this->sqlite->init('b3p', DOKU_PLUGIN . 'bez/db/')) {
88*fe5d6d1eSSzymon Olewniczak            throw new \Exception('Couldn\'t init sqlite.');
89de02284cSSzymon Olewniczak        }
90de02284cSSzymon Olewniczak
91de02284cSSzymon Olewniczak        $this->db = $this->sqlite->getAdapter()->getDb();
92de02284cSSzymon Olewniczak
93de02284cSSzymon Olewniczak        $this->acl = new Acl($this);
94de02284cSSzymon Olewniczak
95de02284cSSzymon Olewniczak        $this->userFactory = new UserFactory($this);
96*fe5d6d1eSSzymon Olewniczak
97*fe5d6d1eSSzymon Olewniczak        $this->threadFactory = new ThreadFactory($this);
98*fe5d6d1eSSzymon Olewniczak
99de02284cSSzymon Olewniczak        $this->labelFactory = new LabelFactory($this);
100de02284cSSzymon Olewniczak
101de02284cSSzymon Olewniczak//        $this->acl = new BEZ_mdl_Acl($this);
102de02284cSSzymon Olewniczak//
103de02284cSSzymon Olewniczak//        $this->issues = new BEZ_mdl_Issues($this);
104de02284cSSzymon Olewniczak//        $this->tasks = new BEZ_mdl_Tasks($this);
105de02284cSSzymon Olewniczak//
106de02284cSSzymon Olewniczak//		$this->users = new BEZ_mdl_Users($this);
107de02284cSSzymon Olewniczak//
108de02284cSSzymon Olewniczak//		$this->issuetypes = new BEZ_mdl_Issuetypes($this);
109de02284cSSzymon Olewniczak//
110de02284cSSzymon Olewniczak//		$this->tasktypes = new BEZ_mdl_Tasktypes($this);
111de02284cSSzymon Olewniczak//
112de02284cSSzymon Olewniczak//		$this->commcauses = new BEZ_mdl_Commcauses($this);
113de02284cSSzymon Olewniczak//        $this->timeline = new BEZ_mdl_Timeline($this);
114de02284cSSzymon Olewniczak	}
115de02284cSSzymon Olewniczak
116de02284cSSzymon Olewniczak//	public function __destruct() {
117de02284cSSzymon Olewniczak//		//http://stackoverflow.com/questions/18277233/pdo-closing-connection
118de02284cSSzymon Olewniczak//		$this->db = NULL;
119de02284cSSzymon Olewniczak//	}
120de02284cSSzymon Olewniczak}
121