xref: /plugin/sqlite/admin.php (revision 09a0e52b9672c84e9df36f31b6cb3ce4ca9a3d16)
193d995e0SAndreas Gohr<?php
293d995e0SAndreas Gohr/**
393d995e0SAndreas Gohr * DokuWiki Plugin sqlite (Admin Component)
493d995e0SAndreas Gohr *
593d995e0SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
693d995e0SAndreas Gohr * @author  Andreas Gohr <andi@splitbrain.org>
793d995e0SAndreas Gohr */
893d995e0SAndreas Gohr
993d995e0SAndreas Gohr// must be run within Dokuwiki
1093d995e0SAndreas Gohrif(!defined('DOKU_INC')) die();
1193d995e0SAndreas Gohr
1293d995e0SAndreas Gohrclass admin_plugin_sqlite extends DokuWiki_Admin_Plugin {
1393d995e0SAndreas Gohr
140542fc8eSKlap-in    function getMenuSort() {
150542fc8eSKlap-in        return 500;
160542fc8eSKlap-in    }
170542fc8eSKlap-in
180542fc8eSKlap-in    function forAdminOnly() {
190542fc8eSKlap-in        return true;
200542fc8eSKlap-in    }
2193d995e0SAndreas Gohr
2293d995e0SAndreas Gohr    function handle() {
23a34ef333SKlap-in        global $conf;
240dbd1d4cSSzymon Olewniczak        global $INPUT;
250dbd1d4cSSzymon Olewniczak
26a34ef333SKlap-in        if(isset($_POST['sqlite_rename'])) {
27a34ef333SKlap-in
28a34ef333SKlap-in            $path = $conf['metadir'].'/'.$_REQUEST['db'];
29a34ef333SKlap-in            if(io_rename($path.'.sqlite', $path.'.sqlite3')) {
30a34ef333SKlap-in                msg('Renamed database file succesfull!', 1);
31a34ef333SKlap-in                //set to new situation
32a34ef333SKlap-in                $_REQUEST['version'] = 'sqlite3';
33a34ef333SKlap-in
34a34ef333SKlap-in            } else {
35a34ef333SKlap-in                msg('Renaming database file fails!', -1);
36a34ef333SKlap-in            }
37a34ef333SKlap-in
38a34ef333SKlap-in        } elseif(isset($_POST['sqlite_convert'])) {
39a34ef333SKlap-in
40a34ef333SKlap-in            /** @var $DBI helper_plugin_sqlite */
4179288b58SGerrit Uitslag            $DBI        = plugin_load('helper', 'sqlite');
42a34ef333SKlap-in            $time_start = microtime(true);
43a34ef333SKlap-in
44a34ef333SKlap-in            if($dumpfile = $DBI->dumpDatabase($_REQUEST['db'], DOKU_EXT_SQLITE)) {
45a34ef333SKlap-in                msg('Database temporary dumped to file: '.hsc($dumpfile).'. Now loading in new database...', 1);
46a34ef333SKlap-in
47a34ef333SKlap-in                if(!$DBI->fillDatabaseFromDump($_REQUEST['db'], $dumpfile)) {
48a34ef333SKlap-in                    msg('Conversion failed!', -1);
49a34ef333SKlap-in                    return false;
50a34ef333SKlap-in                }
51a34ef333SKlap-in
52a34ef333SKlap-in                //TODO delete dumpfile
53a34ef333SKlap-in                //return @unlink($dumpfile);
54a34ef333SKlap-in                //TODO delete old sqlite2-db
55a34ef333SKlap-in                // return @unlink($conf['metadir'].'/'.$_REQUEST['db'].'.sqlite');
56a34ef333SKlap-in
57a34ef333SKlap-in                msg('Conversion succeed!', 1);
58a34ef333SKlap-in                //set to new situation
59a34ef333SKlap-in                $_REQUEST['version'] = 'sqlite3';
60a34ef333SKlap-in            }
61a34ef333SKlap-in            $time_end = microtime(true);
62a34ef333SKlap-in            $time     = $time_end - $time_start;
63a34ef333SKlap-in            msg('Database "'.hsc($_REQUEST['db']).'" converted from sqlite 2 to 3 in '.$time.' seconds.', 0);
64a34ef333SKlap-in
650dbd1d4cSSzymon Olewniczak        } elseif($INPUT->bool('sqlite_export') && checkSecurityToken()) {
660dbd1d4cSSzymon Olewniczak
670dbd1d4cSSzymon Olewniczak            /** @var $DBI helper_plugin_sqlite */
680dbd1d4cSSzymon Olewniczak            $DBI        = plugin_load('helper', 'sqlite');
690dbd1d4cSSzymon Olewniczak            $dbname = $INPUT->str('db');
700dbd1d4cSSzymon Olewniczak
710dbd1d4cSSzymon Olewniczak            $dumpfile = $DBI->dumpDatabase($dbname, DOKU_EXT_PDO, true);
720dbd1d4cSSzymon Olewniczak            if ($dumpfile) {
730dbd1d4cSSzymon Olewniczak                header('Content-Type: text/sql');
740dbd1d4cSSzymon Olewniczak                header('Content-Disposition: attachment; filename="'.$dbname.'.sql";');
750dbd1d4cSSzymon Olewniczak
760dbd1d4cSSzymon Olewniczak                readfile($dumpfile);
770dbd1d4cSSzymon Olewniczak                exit(0);
780dbd1d4cSSzymon Olewniczak            }
790dbd1d4cSSzymon Olewniczak        } elseif($INPUT->bool('sqlite_import') && checkSecurityToken()) {
800dbd1d4cSSzymon Olewniczak            global $conf;
810dbd1d4cSSzymon Olewniczak
820dbd1d4cSSzymon Olewniczak            /** @var $DBI helper_plugin_sqlite */
830dbd1d4cSSzymon Olewniczak            $DBI        = plugin_load('helper', 'sqlite');
840dbd1d4cSSzymon Olewniczak            $dbname = $INPUT->str('db');
850dbd1d4cSSzymon Olewniczak            $dumpfile = $_FILES['dumpfile']['tmp_name'];
860dbd1d4cSSzymon Olewniczak
870dbd1d4cSSzymon Olewniczak            if (empty($dumpfile)) {
880dbd1d4cSSzymon Olewniczak                msg($this->getLang('import_no_file'), -1);
890dbd1d4cSSzymon Olewniczak                return;
900dbd1d4cSSzymon Olewniczak            }
910dbd1d4cSSzymon Olewniczak
920dbd1d4cSSzymon Olewniczak            if ($DBI->fillDatabaseFromDump($dbname, $dumpfile, true)) {
930dbd1d4cSSzymon Olewniczak                msg($this->getLang('import_success'), 1);
940dbd1d4cSSzymon Olewniczak            }
95a34ef333SKlap-in        }
9693d995e0SAndreas Gohr    }
9793d995e0SAndreas Gohr
9893d995e0SAndreas Gohr    function html() {
9993d995e0SAndreas Gohr        global $ID;
100a34ef333SKlap-in        global $conf;
101271f9caeSSzymon Olewniczak        global $INPUT;
10293d995e0SAndreas Gohr
10393d995e0SAndreas Gohr        echo $this->locale_xhtml('intro');
10493d995e0SAndreas Gohr
105a34ef333SKlap-in        if(isset($_REQUEST['db']) && checkSecurityToken()) {
10693d995e0SAndreas Gohr
107a34ef333SKlap-in            echo '<h2>'.$this->getLang('db').' "'.hsc($_REQUEST['db']).'"</h2>';
10893d995e0SAndreas Gohr            echo '<div class="level2">';
10993d995e0SAndreas Gohr
110a34ef333SKlap-in            $sqlcommandform = true;
111a34ef333SKlap-in            /** @var $DBI helper_plugin_sqlite */
11279288b58SGerrit Uitslag            $DBI = plugin_load('helper', 'sqlite');
113a34ef333SKlap-in            if($_REQUEST['version'] == 'sqlite2') {
114a34ef333SKlap-in                if(helper_plugin_sqlite_adapter::isSqlite3db($conf['metadir'].'/'.$_REQUEST['db'].'.sqlite')) {
115a34ef333SKlap-in
116a34ef333SKlap-in                    msg('This is a database in sqlite3 format.', 2);
117a34ef333SKlap-in                    msg(
118a34ef333SKlap-in                        'This plugin needs your database file has the extension ".sqlite3"
119a34ef333SKlap-in                        instead of ".sqlite" before it will be recognized as sqlite3 database.', 2
120a34ef333SKlap-in                    );
121a34ef333SKlap-in                    $form = new Doku_Form(array('method'=> 'post'));
122a34ef333SKlap-in                    $form->addHidden('page', 'sqlite');
123a34ef333SKlap-in                    $form->addHidden('sqlite_rename', 'go');
124a34ef333SKlap-in                    $form->addHidden('db', $_REQUEST['db']);
125a34ef333SKlap-in                    $form->addElement(form_makeButton('submit', 'admin', sprintf($this->getLang('rename2to3'), hsc($_REQUEST['db']))));
126a34ef333SKlap-in                    $form->printForm();
127a34ef333SKlap-in
128a34ef333SKlap-in                    if($DBI->existsPDOSqlite()) $sqlcommandform = false;
129a34ef333SKlap-in
130a34ef333SKlap-in                } else {
131a34ef333SKlap-in                    if($DBI->existsPDOSqlite()) {
132a34ef333SKlap-in                        $sqlcommandform = false;
133a34ef333SKlap-in                        msg('This is a database in sqlite2 format.', 2);
134a34ef333SKlap-in
135a34ef333SKlap-in                        if($DBI->existsSqlite2()) {
136a34ef333SKlap-in                            $form = new Doku_Form(array('method'=> 'post'));
137a34ef333SKlap-in                            $form->addHidden('page', 'sqlite');
138a34ef333SKlap-in                            $form->addHidden('sqlite_convert', 'go');
139a34ef333SKlap-in                            $form->addHidden('db', $_REQUEST['db']);
140a34ef333SKlap-in                            $form->addElement(form_makeButton('submit', 'admin', sprintf($this->getLang('convert2to3'), hsc($_REQUEST['db']))));
141a34ef333SKlap-in                            $form->printForm();
142a34ef333SKlap-in                        } else {
143a34ef333SKlap-in                            msg(
144a34ef333SKlap-in                                'Before PDO sqlite can handle this format, it needs a conversion to the sqlite3 format.
145a34ef333SKlap-in                                Because PHP sqlite extension is not available,
146a34ef333SKlap-in                                you should manually convert "'.hsc($_REQUEST['db']).'.sqlite" in the meta directory to "'.hsc($_REQUEST['db']).'.sqlite3".<br />
147a34ef333SKlap-in                                See for info about the conversion '.$this->external_link('http://www.sqlite.org/version3.html').'.', -1
148a34ef333SKlap-in                            );
149a34ef333SKlap-in                        }
150a34ef333SKlap-in                    }
151a34ef333SKlap-in                }
152a34ef333SKlap-in            } else {
153a34ef333SKlap-in                if(!$DBI->existsPDOSqlite()) {
154a34ef333SKlap-in                    $sqlcommandform = false;
155a34ef333SKlap-in                    msg('A database in sqlite3 format needs the PHP PDO sqlite plugin.', -1);
156a34ef333SKlap-in                }
157a34ef333SKlap-in            }
158a34ef333SKlap-in
159a34ef333SKlap-in            if($sqlcommandform) {
16093d995e0SAndreas Gohr                echo '<ul>';
1617f5f9a98SAndreas Gohr                echo '<li><div class="li"><a href="'.
162a34ef333SKlap-in                    wl(
163a34ef333SKlap-in                        $ID, array(
164a34ef333SKlap-in                                  'do'     => 'admin',
1657f5f9a98SAndreas Gohr                                  'page'   => 'sqlite',
1667f5f9a98SAndreas Gohr                                  'db'     => $_REQUEST['db'],
16784041991SKlap-in                                  'version'=> $_REQUEST['version'],
1687f5f9a98SAndreas Gohr                                  'sql'    => 'SELECT name,sql FROM sqlite_master WHERE type=\'table\' ORDER BY name',
169a34ef333SKlap-in                                  'sectok' => getSecurityToken()
170a34ef333SKlap-in                             )
171a34ef333SKlap-in                    ).
172ab6c40f9SAdrian Lang                    '">'.$this->getLang('table').'</a></div></li>';
1737f5f9a98SAndreas Gohr                echo '<li><div class="li"><a href="'.
174a34ef333SKlap-in                    wl(
175a34ef333SKlap-in                        $ID, array(
176a34ef333SKlap-in                                  'do'     => 'admin',
1777f5f9a98SAndreas Gohr                                  'page'   => 'sqlite',
1787f5f9a98SAndreas Gohr                                  'db'     => $_REQUEST['db'],
17984041991SKlap-in                                  'version'=> $_REQUEST['version'],
1807f5f9a98SAndreas Gohr                                  'sql'    => 'SELECT name,sql FROM sqlite_master WHERE type=\'index\' ORDER BY name',
181a34ef333SKlap-in                                  'sectok' => getSecurityToken()
182a34ef333SKlap-in                             )
183a34ef333SKlap-in                    ).
184ab6c40f9SAdrian Lang                    '">'.$this->getLang('index').'</a></div></li>';
1850dbd1d4cSSzymon Olewniczak                echo '<li><div class="li"><a href="'.
1860dbd1d4cSSzymon Olewniczak                    wl(
1870dbd1d4cSSzymon Olewniczak                        $ID, array(
1880dbd1d4cSSzymon Olewniczak                               'do'     => 'admin',
1890dbd1d4cSSzymon Olewniczak                               'page'   => 'sqlite',
1900dbd1d4cSSzymon Olewniczak                               'db'     => $_REQUEST['db'],
1910dbd1d4cSSzymon Olewniczak                               'version'=> $_REQUEST['version'],
1920dbd1d4cSSzymon Olewniczak                               'sqlite_export' => '1',
1930dbd1d4cSSzymon Olewniczak                               'sectok' => getSecurityToken()
1940dbd1d4cSSzymon Olewniczak                           )
1950dbd1d4cSSzymon Olewniczak                    ).
1960dbd1d4cSSzymon Olewniczak                    '">'.$this->getLang('export').'</a></div></li>';
1970dbd1d4cSSzymon Olewniczak
1980dbd1d4cSSzymon Olewniczak
1990dbd1d4cSSzymon Olewniczak                $form = new \dokuwiki\Form\Form(array('enctype' => 'multipart/form-data'));
2000dbd1d4cSSzymon Olewniczak                $form->setHiddenField('id', $ID);
2010dbd1d4cSSzymon Olewniczak                $form->setHiddenField('do', 'admin');
2020dbd1d4cSSzymon Olewniczak                $form->setHiddenField('page', 'sqlite');
2030dbd1d4cSSzymon Olewniczak                $form->setHiddenField('db', $_REQUEST['db']);
2040dbd1d4cSSzymon Olewniczak                $form->setHiddenField('version', $_REQUEST['version']);
2050dbd1d4cSSzymon Olewniczak                $form->addElement(new dokuwiki\Form\InputElement('file', 'dumpfile'));
2060dbd1d4cSSzymon Olewniczak                $form->addButton('sqlite_import', $this->getLang('import'));
2070dbd1d4cSSzymon Olewniczak                echo '<li>' . $form->toHTML() . '</li>';
20893d995e0SAndreas Gohr                echo '</ul>';
20993d995e0SAndreas Gohr
210*09a0e52bSSzymon Olewniczak                /** @var $helper helper_plugin_sqlite */
211*09a0e52bSSzymon Olewniczak                $sqlite_db = plugin_load('helper', 'sqlite');
212*09a0e52bSSzymon Olewniczak                $sqlite_db->init('sqlite', DOKU_PLUGIN . 'sqlite/db/');
213271f9caeSSzymon Olewniczak
214271f9caeSSzymon Olewniczak                if($INPUT->str('action') == 'save') {
215271f9caeSSzymon Olewniczak                    $ok = true;
216271f9caeSSzymon Olewniczak                    if(empty($INPUT->str('sql'))) {
217271f9caeSSzymon Olewniczak                        echo '<div class="error">give the query</div>';
218271f9caeSSzymon Olewniczak                        $ok = false;
219271f9caeSSzymon Olewniczak                    }
220271f9caeSSzymon Olewniczak                    if(empty($INPUT->str('name'))) {
221271f9caeSSzymon Olewniczak                        echo '<div class="error">give the query name</div>';
222271f9caeSSzymon Olewniczak                        $ok = false;
223271f9caeSSzymon Olewniczak                    }
224*09a0e52bSSzymon Olewniczak
225271f9caeSSzymon Olewniczak                    if($ok) {
226*09a0e52bSSzymon Olewniczak                        $sqlite_db->storeEntry('queries', array(
227*09a0e52bSSzymon Olewniczak                            'db' => $_REQUEST['db'],
228271f9caeSSzymon Olewniczak                            'name' => $INPUT->str('name'),
229271f9caeSSzymon Olewniczak                            'sql' => $INPUT->str('sql')
230271f9caeSSzymon Olewniczak                        ));
231271f9caeSSzymon Olewniczak                        echo '<div class="success">query saved</div>';
232271f9caeSSzymon Olewniczak                    }
233271f9caeSSzymon Olewniczak                } elseif($INPUT->str('action') == 'delete') {
234*09a0e52bSSzymon Olewniczak                    $sqlite_db->query("DELETE FROM queries WHERE id=?;", $INPUT->int('id'));
235271f9caeSSzymon Olewniczak                    echo '<div class="success">query deleted</div>';
236271f9caeSSzymon Olewniczak                }
237271f9caeSSzymon Olewniczak
238dd79791bSAndreas Gohr                $form = new Doku_Form(array('class'=> 'sqliteplugin'));
23993d995e0SAndreas Gohr                $form->startFieldset('SQL Command');
24093d995e0SAndreas Gohr                $form->addHidden('id', $ID);
24193d995e0SAndreas Gohr                $form->addHidden('do', 'admin');
24293d995e0SAndreas Gohr                $form->addHidden('page', 'sqlite');
24393d995e0SAndreas Gohr                $form->addHidden('db', $_REQUEST['db']);
24484041991SKlap-in                $form->addHidden('version', $_REQUEST['version']);
24593d995e0SAndreas Gohr                $form->addElement('<textarea name="sql" class="edit">'.hsc($_REQUEST['sql']).'</textarea>');
24693d995e0SAndreas Gohr                $form->addElement('<input type="submit" class="button" /> ');
247271f9caeSSzymon Olewniczak                $form->addElement('<label>Query name: <input type="text" name="name" /></label> ');
248271f9caeSSzymon Olewniczak                $form->addElement('<button name="action" value="save">Save</button>');
24993d995e0SAndreas Gohr                $form->endFieldset();
25093d995e0SAndreas Gohr                $form->printForm();
25193d995e0SAndreas Gohr
252271f9caeSSzymon Olewniczak                // List saved queries
253*09a0e52bSSzymon Olewniczak                $res = $sqlite_db->query("SELECT id, name, sql FROM queries WHERE db=?", $_REQUEST['db']);
254*09a0e52bSSzymon Olewniczak                $result = $sqlite_db->res2arr($res);
255*09a0e52bSSzymon Olewniczak                if(count($result) > 0) {
256*09a0e52bSSzymon Olewniczak                    echo '<h3>Saved queries</h3>';
257271f9caeSSzymon Olewniczak                    echo '<div>';
258271f9caeSSzymon Olewniczak                    echo '<table class="inline">';
259271f9caeSSzymon Olewniczak                    echo '<tr>';
260271f9caeSSzymon Olewniczak                    echo '<th>name</th>';
261271f9caeSSzymon Olewniczak                    echo '<th>sql</th>';
262271f9caeSSzymon Olewniczak                    echo '<th></th>';
263271f9caeSSzymon Olewniczak                    echo '</tr>';
264271f9caeSSzymon Olewniczak                    foreach($result as $row) {
265271f9caeSSzymon Olewniczak                        echo '<tr>';
266271f9caeSSzymon Olewniczak                        echo '<td>'.hsc($row['name']).'</td>';
267271f9caeSSzymon Olewniczak                        $link = wl($ID, array(  'do'=> 'admin',
268271f9caeSSzymon Olewniczak                                                'page'=> 'sqlite',
269271f9caeSSzymon Olewniczak                                                'db'=> $_REQUEST['db'],
270271f9caeSSzymon Olewniczak                                                'version'=> $_REQUEST['version'],
271271f9caeSSzymon Olewniczak                                                'sql' => $row['sql'],
272271f9caeSSzymon Olewniczak                                                'sectok'=> getSecurityToken()));
273271f9caeSSzymon Olewniczak                        echo '<td><a href="'.$link.'">'.hsc($row['sql']).'</a></td>';
274271f9caeSSzymon Olewniczak
275271f9caeSSzymon Olewniczak                        $link = wl($ID, array(  'do'=> 'admin',
276271f9caeSSzymon Olewniczak                            'page'=> 'sqlite',
277271f9caeSSzymon Olewniczak                            'db'=> $_REQUEST['db'],
278271f9caeSSzymon Olewniczak                            'version'=> $_REQUEST['version'],
279271f9caeSSzymon Olewniczak                            'action' => 'delete',
280271f9caeSSzymon Olewniczak                            'id' => $row['id'],
281271f9caeSSzymon Olewniczak                            'sectok'=> getSecurityToken()));
282271f9caeSSzymon Olewniczak                        echo '<td><a href="'.$link.'">delete</a></td>';
283271f9caeSSzymon Olewniczak                        echo '</tr>';
284271f9caeSSzymon Olewniczak                    }
285271f9caeSSzymon Olewniczak                    echo '</table>';
286271f9caeSSzymon Olewniczak                    echo '</div>';
287271f9caeSSzymon Olewniczak                }
288271f9caeSSzymon Olewniczak
28993d995e0SAndreas Gohr                if($_REQUEST['sql']) {
290*09a0e52bSSzymon Olewniczak
291*09a0e52bSSzymon Olewniczak                    if(!$DBI->init($_REQUEST['db'], '')) return;
292*09a0e52bSSzymon Olewniczak
293271f9caeSSzymon Olewniczak                    print '<h3>Query results</h3>';
294a34ef333SKlap-in                    $sql = $DBI->SQLstring2array($_REQUEST['sql']);
29593d995e0SAndreas Gohr                    foreach($sql as $s) {
29693d995e0SAndreas Gohr                        $s = preg_replace('!^\s*--.*$!m', '', $s);
29793d995e0SAndreas Gohr                        $s = trim($s);
29893d995e0SAndreas Gohr                        if(!$s) continue;
29984041991SKlap-in
30084041991SKlap-in                        $time_start = microtime(true);
30184041991SKlap-in
30293d995e0SAndreas Gohr                        $res = $DBI->query("$s;");
30393d995e0SAndreas Gohr                        if($res === false) continue;
30493d995e0SAndreas Gohr
30593d995e0SAndreas Gohr                        $result = $DBI->res2arr($res);
30684041991SKlap-in
30784041991SKlap-in                        $time_end = microtime(true);
30884041991SKlap-in                        $time     = $time_end - $time_start;
30984041991SKlap-in
31084041991SKlap-in                        $cnt = $DBI->res2count($res);
31184041991SKlap-in                        msg($cnt.' affected rows in '.($time < 0.0001 ? substr($time, 0, 5).substr($time, -3) : substr($time, 0, 7)).' seconds', 1);
31284041991SKlap-in                        if(!$cnt) continue;
31393d995e0SAndreas Gohr
314f57002afSPPPCR                        echo '<div>';
31593d995e0SAndreas Gohr                        $ths = array_keys($result[0]);
31693d995e0SAndreas Gohr                        echo '<table class="inline">';
31793d995e0SAndreas Gohr                        echo '<tr>';
31893d995e0SAndreas Gohr                        foreach($ths as $th) {
31993d995e0SAndreas Gohr                            echo '<th>'.hsc($th).'</th>';
32093d995e0SAndreas Gohr                        }
32193d995e0SAndreas Gohr                        echo '</tr>';
32293d995e0SAndreas Gohr                        foreach($result as $row) {
32393d995e0SAndreas Gohr                            echo '<tr>';
32493d995e0SAndreas Gohr                            $tds = array_values($row);
32593d995e0SAndreas Gohr                            foreach($tds as $td) {
3265eb2cff1SAndreas Gohr                                if($td === null) $td='';
32793d995e0SAndreas Gohr                                echo '<td>'.hsc($td).'</td>';
32893d995e0SAndreas Gohr                            }
32993d995e0SAndreas Gohr                            echo '</tr>';
33093d995e0SAndreas Gohr                        }
33193d995e0SAndreas Gohr                        echo '</table>';
332f57002afSPPPCR                        echo '</div>';
33393d995e0SAndreas Gohr                    }
33493d995e0SAndreas Gohr                }
33593d995e0SAndreas Gohr
336a34ef333SKlap-in            }
33793d995e0SAndreas Gohr            echo '</div>';
33893d995e0SAndreas Gohr        }
33993d995e0SAndreas Gohr    }
34093d995e0SAndreas Gohr
34193d995e0SAndreas Gohr    function getTOC() {
34293d995e0SAndreas Gohr        global $conf;
34393d995e0SAndreas Gohr        global $ID;
34493d995e0SAndreas Gohr
34593d995e0SAndreas Gohr        $toc            = array();
34640698f67SKlap-in        $fileextensions = array('sqlite2'=> '.sqlite', 'sqlite3'=> '.sqlite3');
34793d995e0SAndreas Gohr
34840698f67SKlap-in        foreach($fileextensions as $dbformat => $fileextension) {
34993d995e0SAndreas Gohr            $toc[] = array(
3500542fc8eSKlap-in                'link'  => wl($ID, array('do'=> 'admin', 'page'=> 'sqlite')),
35140698f67SKlap-in                'title' => $dbformat.':',
35293d995e0SAndreas Gohr                'level' => 1,
35393d995e0SAndreas Gohr                'type'  => 'ul',
35493d995e0SAndreas Gohr            );
35540698f67SKlap-in
35640698f67SKlap-in            $dbfiles = glob($conf['metadir'].'/*'.$fileextension);
35740698f67SKlap-in
35840698f67SKlap-in            if(is_array($dbfiles)) foreach($dbfiles as $file) {
35940698f67SKlap-in                $db    = basename($file, $fileextension);
36040698f67SKlap-in                $toc[] = array(
36184041991SKlap-in                    'link'  => wl($ID, array('do'=> 'admin', 'page'=> 'sqlite', 'db'=> $db, 'version'=> $dbformat, 'sectok'=> getSecurityToken())),
36240698f67SKlap-in                    'title' => $this->getLang('db').' '.$db,
36340698f67SKlap-in                    'level' => 2,
36440698f67SKlap-in                    'type'  => 'ul',
36540698f67SKlap-in                );
36640698f67SKlap-in            }
36793d995e0SAndreas Gohr        }
36893d995e0SAndreas Gohr
36993d995e0SAndreas Gohr        return $toc;
37093d995e0SAndreas Gohr    }
37193d995e0SAndreas Gohr}
37293d995e0SAndreas Gohr
373dd79791bSAndreas Gohr// vim:ts=4:sw=4:et:
374