xref: /plugin/ireadit/helper/db.php (revision 692a14509184c6b7e10ac11e9d8c2b8e6d16b1f1)
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