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