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