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