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