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