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