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