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