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