1*e8827d73SSzymon Olewniczak<?php 2*e8827d73SSzymon Olewniczak/** 3*e8827d73SSzymon Olewniczak * DokuWiki Plugin struct (Helper Component) 4*e8827d73SSzymon Olewniczak * 5*e8827d73SSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6*e8827d73SSzymon Olewniczak * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 7*e8827d73SSzymon Olewniczak */ 8*e8827d73SSzymon Olewniczak 9*e8827d73SSzymon Olewniczak// must be run within Dokuwiki 10*e8827d73SSzymon Olewniczakuse dokuwiki\plugin\struct\meta\StructException; 11*e8827d73SSzymon Olewniczak 12*e8827d73SSzymon Olewniczakif(!defined('DOKU_INC')) die(); 13*e8827d73SSzymon Olewniczak 14*e8827d73SSzymon Olewniczakclass helper_plugin_bez_db extends DokuWiki_Plugin { 15*e8827d73SSzymon Olewniczak /** @var helper_plugin_sqlite */ 16*e8827d73SSzymon Olewniczak protected $sqlite; 17*e8827d73SSzymon Olewniczak 18*e8827d73SSzymon Olewniczak /** 19*e8827d73SSzymon Olewniczak * helper_plugin_struct_db constructor. 20*e8827d73SSzymon Olewniczak */ 21*e8827d73SSzymon Olewniczak public function __construct() { 22*e8827d73SSzymon Olewniczak $this->init(); 23*e8827d73SSzymon Olewniczak } 24*e8827d73SSzymon Olewniczak 25*e8827d73SSzymon Olewniczak /** 26*e8827d73SSzymon Olewniczak * Initialize the database 27*e8827d73SSzymon Olewniczak * 28*e8827d73SSzymon Olewniczak * @throws Exception 29*e8827d73SSzymon Olewniczak */ 30*e8827d73SSzymon Olewniczak protected function init() { 31*e8827d73SSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 32*e8827d73SSzymon Olewniczak $this->sqlite = plugin_load('helper', 'sqlite'); 33*e8827d73SSzymon Olewniczak if(!$this->sqlite) { 34*e8827d73SSzymon Olewniczak if(defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t load sqlite.'); 35*e8827d73SSzymon Olewniczak return; 36*e8827d73SSzymon Olewniczak } 37*e8827d73SSzymon Olewniczak 38*e8827d73SSzymon Olewniczak if($this->sqlite->getAdapter()->getName() != DOKU_EXT_PDO) { 39*e8827d73SSzymon Olewniczak if(defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t load PDO sqlite.'); 40*e8827d73SSzymon Olewniczak $this->sqlite = null; 41*e8827d73SSzymon Olewniczak return; 42*e8827d73SSzymon Olewniczak } 43*e8827d73SSzymon Olewniczak $this->sqlite->getAdapter()->setUseNativeAlter(true); 44*e8827d73SSzymon Olewniczak 45*e8827d73SSzymon Olewniczak // initialize the database connection 46*e8827d73SSzymon Olewniczak if(!$this->sqlite->init('b3p', DOKU_PLUGIN . 'bez/db/')) { 47*e8827d73SSzymon Olewniczak if(defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t init sqlite.'); 48*e8827d73SSzymon Olewniczak $this->sqlite = null; 49*e8827d73SSzymon Olewniczak return; 50*e8827d73SSzymon Olewniczak } 51*e8827d73SSzymon Olewniczak 52*e8827d73SSzymon Olewniczak 53*e8827d73SSzymon Olewniczak } 54*e8827d73SSzymon Olewniczak 55*e8827d73SSzymon Olewniczak /** 56*e8827d73SSzymon Olewniczak * @param bool $throw throw an Exception when sqlite not available? 57*e8827d73SSzymon Olewniczak * @return helper_plugin_sqlite|null 58*e8827d73SSzymon Olewniczak */ 59*e8827d73SSzymon Olewniczak public function getDB($throw=true) { 60*e8827d73SSzymon Olewniczak global $conf; 61*e8827d73SSzymon Olewniczak $len = strlen($conf['metadir']); 62*e8827d73SSzymon Olewniczak if ($this->sqlite && $conf['metadir'] != substr($this->sqlite->getAdapter()->getDbFile(),0,$len)) { 63*e8827d73SSzymon Olewniczak $this->init(); 64*e8827d73SSzymon Olewniczak } 65*e8827d73SSzymon Olewniczak if(!$this->sqlite && $throw) { 66*e8827d73SSzymon Olewniczak throw new StructException('no sqlite'); 67*e8827d73SSzymon Olewniczak } 68*e8827d73SSzymon Olewniczak return $this->sqlite; 69*e8827d73SSzymon Olewniczak } 70*e8827d73SSzymon Olewniczak 71*e8827d73SSzymon Olewniczak /** 72*e8827d73SSzymon Olewniczak * Completely remove the database and reinitialize it 73*e8827d73SSzymon Olewniczak * 74*e8827d73SSzymon Olewniczak * You do not want to call this except for testing! 75*e8827d73SSzymon Olewniczak */ 76*e8827d73SSzymon Olewniczak public function resetDB() { 77*e8827d73SSzymon Olewniczak if(!$this->sqlite) return; 78*e8827d73SSzymon Olewniczak $file = $this->sqlite->getAdapter()->getDbFile(); 79*e8827d73SSzymon Olewniczak if(!$file) return; 80*e8827d73SSzymon Olewniczak unlink($file); 81*e8827d73SSzymon Olewniczak clearstatcache(true, $file); 82*e8827d73SSzymon Olewniczak $this->init(); 83*e8827d73SSzymon Olewniczak } 84*e8827d73SSzymon Olewniczak} 85*e8827d73SSzymon Olewniczak 86*e8827d73SSzymon Olewniczak// vim:ts=4:sw=4:et: 87