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