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