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