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