185300102SSzymon Olewniczak<?php 285300102SSzymon Olewniczak/** 385300102SSzymon Olewniczak * DokuWiki Plugin watchcycle (Helper Component) 485300102SSzymon Olewniczak * 585300102SSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 685300102SSzymon Olewniczak * @author Szymon Olewniczak <dokuwiki@cosmocode.de> 785300102SSzymon Olewniczak */ 885300102SSzymon Olewniczak 985300102SSzymon Olewniczak// must be run within Dokuwiki 1085300102SSzymon Olewniczak 1185300102SSzymon Olewniczakif (!defined('DOKU_INC')) { 1285300102SSzymon Olewniczak die(); 1385300102SSzymon Olewniczak} 1485300102SSzymon Olewniczak 1585300102SSzymon Olewniczakclass helper_plugin_ireadit_db extends DokuWiki_Plugin 1685300102SSzymon Olewniczak{ 1785300102SSzymon Olewniczak /** @var helper_plugin_sqlite */ 1885300102SSzymon Olewniczak protected $sqlite; 1985300102SSzymon Olewniczak 2085300102SSzymon Olewniczak /** 2185300102SSzymon Olewniczak * helper_plugin_struct_db constructor. 2285300102SSzymon Olewniczak */ 2385300102SSzymon Olewniczak public function __construct() 2485300102SSzymon Olewniczak { 2585300102SSzymon Olewniczak $this->init(); 2685300102SSzymon Olewniczak } 2785300102SSzymon Olewniczak 2885300102SSzymon Olewniczak /** 2985300102SSzymon Olewniczak * Initialize the database 3085300102SSzymon Olewniczak * 3185300102SSzymon Olewniczak * @throws Exception 3285300102SSzymon Olewniczak */ 3385300102SSzymon Olewniczak protected function init() 3485300102SSzymon Olewniczak { 3585300102SSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 3685300102SSzymon Olewniczak $this->sqlite = plugin_load('helper', 'sqlite'); 3785300102SSzymon Olewniczak if (!$this->sqlite) { 3885300102SSzymon Olewniczak if (defined('DOKU_UNITTEST')) { 3985300102SSzymon Olewniczak throw new \Exception('Couldn\'t load sqlite.'); 4085300102SSzymon Olewniczak } 4185300102SSzymon Olewniczak return; 4285300102SSzymon Olewniczak } 4385300102SSzymon Olewniczak 4485300102SSzymon Olewniczak if ($this->sqlite->getAdapter()->getName() != DOKU_EXT_PDO) { 4585300102SSzymon Olewniczak if (defined('DOKU_UNITTEST')) { 4685300102SSzymon Olewniczak throw new \Exception('Couldn\'t load PDO sqlite.'); 4785300102SSzymon Olewniczak } 4885300102SSzymon Olewniczak $this->sqlite = null; 4985300102SSzymon Olewniczak return; 5085300102SSzymon Olewniczak } 5185300102SSzymon Olewniczak $this->sqlite->getAdapter()->setUseNativeAlter(true); 5285300102SSzymon Olewniczak 5385300102SSzymon Olewniczak // initialize the database connection 5485300102SSzymon Olewniczak if (!$this->sqlite->init('ireadit', DOKU_PLUGIN . 'ireadit/db/')) { 5585300102SSzymon Olewniczak if (defined('DOKU_UNITTEST')) { 5685300102SSzymon Olewniczak throw new \Exception('Couldn\'t init sqlite.'); 5785300102SSzymon Olewniczak } 5885300102SSzymon Olewniczak $this->sqlite = null; 5985300102SSzymon Olewniczak return; 6085300102SSzymon Olewniczak } 6185300102SSzymon Olewniczak } 6285300102SSzymon Olewniczak 6385300102SSzymon Olewniczak /** 64*692a1450SSzymon Olewniczak * @param bool $throw throw an Exception when sqlite not available? 6585300102SSzymon Olewniczak * @return helper_plugin_sqlite|null 66*692a1450SSzymon Olewniczak * @throws Exception 6785300102SSzymon Olewniczak */ 68*692a1450SSzymon Olewniczak public function getDB($throw=true) 6985300102SSzymon Olewniczak { 7085300102SSzymon Olewniczak global $conf; 7185300102SSzymon Olewniczak $len = strlen($conf['metadir']); 7285300102SSzymon Olewniczak if ($this->sqlite && $conf['metadir'] != substr($this->sqlite->getAdapter()->getDbFile(), 0, $len)) { 7385300102SSzymon Olewniczak $this->init(); 7485300102SSzymon Olewniczak } 75*692a1450SSzymon Olewniczak if(!$this->sqlite && $throw) { 76*692a1450SSzymon Olewniczak throw new \Exception('The ireadit plugin requires the sqlite plugin. Please install and enable it.'); 7785300102SSzymon Olewniczak } 7885300102SSzymon Olewniczak return $this->sqlite; 7985300102SSzymon Olewniczak } 8085300102SSzymon Olewniczak 8185300102SSzymon Olewniczak /** 8285300102SSzymon Olewniczak * Completely remove the database and reinitialize it 8385300102SSzymon Olewniczak * 8485300102SSzymon Olewniczak * You do not want to call this except for testing! 8585300102SSzymon Olewniczak */ 8685300102SSzymon Olewniczak public function resetDB() 8785300102SSzymon Olewniczak { 8885300102SSzymon Olewniczak if (!$this->sqlite) { 8985300102SSzymon Olewniczak return; 9085300102SSzymon Olewniczak } 9185300102SSzymon Olewniczak $file = $this->sqlite->getAdapter()->getDbFile(); 9285300102SSzymon Olewniczak if (!$file) { 9385300102SSzymon Olewniczak return; 9485300102SSzymon Olewniczak } 9585300102SSzymon Olewniczak unlink($file); 9685300102SSzymon Olewniczak clearstatcache(true, $file); 9785300102SSzymon Olewniczak $this->init(); 9885300102SSzymon Olewniczak } 9985300102SSzymon Olewniczak} 10085300102SSzymon Olewniczak 10185300102SSzymon Olewniczak// vim:ts=4:sw=4:et: 102