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