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 45*8a638198SSzymon Olewniczak /** @var Thread_commentFactory */ 46*8a638198SSzymon Olewniczak protected $thread_commentFactory; 47*8a638198SSzymon Olewniczak 48*8a638198SSzymon Olewniczak /** @var TaskFactory */ 49*8a638198SSzymon Olewniczak protected $taskFactory; 50*8a638198SSzymon Olewniczak 51de02284cSSzymon Olewniczak public function __get($property) { 52*8a638198SSzymon Olewniczak $models = array('userFactory', 'threadFactory', 'labelFactory', 'thread_commentFactory', 'taskFactory'); 53de02284cSSzymon Olewniczak if (in_array($property, $models) || 54de02284cSSzymon Olewniczak in_array($property, array('sqlite', 'db', 'acl', 'dw_auth', 'user_nick', 'action', 'conf'))) { 55de02284cSSzymon Olewniczak return $this->$property; 56de02284cSSzymon Olewniczak } 57de02284cSSzymon Olewniczak } 58de02284cSSzymon Olewniczak 59de02284cSSzymon Olewniczak public function __construct($dw_auth, $user_nick, $action, $conf) { 60de02284cSSzymon Olewniczak $this->dw_auth = $dw_auth; 61de02284cSSzymon Olewniczak $this->user_nick = $user_nick; 62de02284cSSzymon Olewniczak $this->action = $action; 63de02284cSSzymon Olewniczak $this->conf = $conf; 64de02284cSSzymon Olewniczak 65de02284cSSzymon Olewniczak// $db_path = DOKU_INC . 'data/bez.sqlite'; 66de02284cSSzymon Olewniczak// //if database not exists 67de02284cSSzymon Olewniczak// if (!file_exists($db_path)) { 68de02284cSSzymon Olewniczak// $this->db = new PDO('sqlite:/' . $db_path); 69de02284cSSzymon Olewniczak// $schema = file_get_contents(DOKU_PLUGIN . 'bez/mdl/schema.sql'); 70de02284cSSzymon Olewniczak// if ($schema === false) { 71de02284cSSzymon Olewniczak// throw new Exception('cannot find schema file: '.$schema); 72de02284cSSzymon Olewniczak// } 73de02284cSSzymon Olewniczak// $this->db->exec($schema); 74de02284cSSzymon Olewniczak// } else { 75de02284cSSzymon Olewniczak// $this->db = new PDO('sqlite:/' . $db_path); 76de02284cSSzymon Olewniczak// } 77de02284cSSzymon Olewniczak// $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 78de02284cSSzymon Olewniczak// 79de02284cSSzymon Olewniczak// //convert NULLS to empty strings 80de02284cSSzymon Olewniczak// $this->db->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING); 81de02284cSSzymon Olewniczak 82de02284cSSzymon Olewniczak $this->sqlite = plugin_load('helper', 'sqlite'); 83de02284cSSzymon Olewniczak if(!$this->sqlite) { 84fe5d6d1eSSzymon Olewniczak throw new \Exception('Couldn\'t load sqlite.'); 85de02284cSSzymon Olewniczak } 86de02284cSSzymon Olewniczak 87de02284cSSzymon Olewniczak if($this->sqlite->getAdapter()->getName() != DOKU_EXT_PDO) { 88fe5d6d1eSSzymon Olewniczak throw new \Exception('Couldn\'t load PDO sqlite.'); 89de02284cSSzymon Olewniczak } 90de02284cSSzymon Olewniczak $this->sqlite->getAdapter()->setUseNativeAlter(true); 91de02284cSSzymon Olewniczak 92de02284cSSzymon Olewniczak // initialize the database connection 93de02284cSSzymon Olewniczak if(!$this->sqlite->init('b3p', DOKU_PLUGIN . 'bez/db/')) { 94fe5d6d1eSSzymon Olewniczak throw new \Exception('Couldn\'t init sqlite.'); 95de02284cSSzymon Olewniczak } 96de02284cSSzymon Olewniczak 97de02284cSSzymon Olewniczak $this->db = $this->sqlite->getAdapter()->getDb(); 98de02284cSSzymon Olewniczak 99*8a638198SSzymon Olewniczak $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 100*8a638198SSzymon Olewniczak 101de02284cSSzymon Olewniczak $this->acl = new Acl($this); 102de02284cSSzymon Olewniczak 103de02284cSSzymon Olewniczak $this->userFactory = new UserFactory($this); 104fe5d6d1eSSzymon Olewniczak 105fe5d6d1eSSzymon Olewniczak $this->threadFactory = new ThreadFactory($this); 106fe5d6d1eSSzymon Olewniczak 107de02284cSSzymon Olewniczak $this->labelFactory = new LabelFactory($this); 108de02284cSSzymon Olewniczak 109*8a638198SSzymon Olewniczak $this->thread_commentFactory = new Thread_commentFactory($this); 110*8a638198SSzymon Olewniczak 111*8a638198SSzymon Olewniczak $this->taskFactory = new TaskFactory($this); 112*8a638198SSzymon Olewniczak 113de02284cSSzymon Olewniczak// $this->acl = new BEZ_mdl_Acl($this); 114de02284cSSzymon Olewniczak// 115de02284cSSzymon Olewniczak// $this->issues = new BEZ_mdl_Issues($this); 116de02284cSSzymon Olewniczak// $this->tasks = new BEZ_mdl_Tasks($this); 117de02284cSSzymon Olewniczak// 118de02284cSSzymon Olewniczak// $this->users = new BEZ_mdl_Users($this); 119de02284cSSzymon Olewniczak// 120de02284cSSzymon Olewniczak// $this->issuetypes = new BEZ_mdl_Issuetypes($this); 121de02284cSSzymon Olewniczak// 122de02284cSSzymon Olewniczak// $this->tasktypes = new BEZ_mdl_Tasktypes($this); 123de02284cSSzymon Olewniczak// 124de02284cSSzymon Olewniczak// $this->commcauses = new BEZ_mdl_Commcauses($this); 125de02284cSSzymon Olewniczak// $this->timeline = new BEZ_mdl_Timeline($this); 126de02284cSSzymon Olewniczak } 127de02284cSSzymon Olewniczak 128de02284cSSzymon Olewniczak// public function __destruct() { 129de02284cSSzymon Olewniczak// //http://stackoverflow.com/questions/18277233/pdo-closing-connection 130de02284cSSzymon Olewniczak// $this->db = NULL; 131de02284cSSzymon Olewniczak// } 132de02284cSSzymon Olewniczak} 133