xref: /plugin/sqlite/admin.php (revision 93d995e06c3e9935e1305ffa7d6d2464c42af06b)
1*93d995e0SAndreas Gohr<?php
2*93d995e0SAndreas Gohr/**
3*93d995e0SAndreas Gohr * DokuWiki Plugin sqlite (Admin Component)
4*93d995e0SAndreas Gohr *
5*93d995e0SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6*93d995e0SAndreas Gohr * @author  Andreas Gohr <andi@splitbrain.org>
7*93d995e0SAndreas Gohr */
8*93d995e0SAndreas Gohr
9*93d995e0SAndreas Gohr// must be run within Dokuwiki
10*93d995e0SAndreas Gohrif (!defined('DOKU_INC')) die();
11*93d995e0SAndreas Gohr
12*93d995e0SAndreas Gohrif (!defined('DOKU_LF')) define('DOKU_LF', "\n");
13*93d995e0SAndreas Gohrif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t");
14*93d995e0SAndreas Gohrif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
15*93d995e0SAndreas Gohr
16*93d995e0SAndreas Gohrrequire_once(DOKU_PLUGIN.'admin.php');
17*93d995e0SAndreas Gohr
18*93d995e0SAndreas Gohrclass admin_plugin_sqlite extends DokuWiki_Admin_Plugin {
19*93d995e0SAndreas Gohr
20*93d995e0SAndreas Gohr    function getInfo() {
21*93d995e0SAndreas Gohr        return confToHash(dirname(__FILE__).'plugin.info.txt');
22*93d995e0SAndreas Gohr    }
23*93d995e0SAndreas Gohr
24*93d995e0SAndreas Gohr    function getMenuSort() { return 500; }
25*93d995e0SAndreas Gohr    function forAdminOnly() { return true; }
26*93d995e0SAndreas Gohr
27*93d995e0SAndreas Gohr    function handle() {
28*93d995e0SAndreas Gohr    }
29*93d995e0SAndreas Gohr
30*93d995e0SAndreas Gohr    function html() {
31*93d995e0SAndreas Gohr        global $ID;
32*93d995e0SAndreas Gohr
33*93d995e0SAndreas Gohr        echo $this->locale_xhtml('intro');
34*93d995e0SAndreas Gohr
35*93d995e0SAndreas Gohr        if($_REQUEST['db']){
36*93d995e0SAndreas Gohr
37*93d995e0SAndreas Gohr            echo '<h2>'.$this->getLang('db').' '.hsc($_REQUEST['db']).'</h2>';
38*93d995e0SAndreas Gohr            echo '<div class="level2">';
39*93d995e0SAndreas Gohr
40*93d995e0SAndreas Gohr            echo '<ul>';
41*93d995e0SAndreas Gohr            echo '<li><div class="li"><a href="'.wl($ID,array('do'=>'admin','page'=>'sqlite','db'=>$_REQUEST['db'],'sql'=>'SELECT name,sql FROM sqlite_master WHERE type=\'table\' ORDER BY name')).'">'.$this->getLang('table').'</a></li>';
42*93d995e0SAndreas Gohr            echo '<li><div class="li"><a href="'.wl($ID,array('do'=>'admin','page'=>'sqlite','db'=>$_REQUEST['db'],'sql'=>'SELECT name,sql FROM sqlite_master WHERE type=\'index\' ORDER BY name')).'">'.$this->getLang('index').'</a></li>';
43*93d995e0SAndreas Gohr            echo '</ul>';
44*93d995e0SAndreas Gohr
45*93d995e0SAndreas Gohr            $form = new Doku_Form(array());
46*93d995e0SAndreas Gohr            $form->startFieldset('SQL Command');
47*93d995e0SAndreas Gohr            $form->addHidden('id',$ID);
48*93d995e0SAndreas Gohr            $form->addHidden('do','admin');
49*93d995e0SAndreas Gohr            $form->addHidden('page','sqlite');
50*93d995e0SAndreas Gohr            $form->addHidden('db',$_REQUEST['db']);
51*93d995e0SAndreas Gohr            $form->addElement('<textarea name="sql" class="edit">'.hsc($_REQUEST['sql']).'</textarea>');
52*93d995e0SAndreas Gohr            $form->addElement('<input type="submit" class="button" />');
53*93d995e0SAndreas Gohr            $form->endFieldset();
54*93d995e0SAndreas Gohr            $form->printForm();
55*93d995e0SAndreas Gohr
56*93d995e0SAndreas Gohr
57*93d995e0SAndreas Gohr            if($_REQUEST['sql']){
58*93d995e0SAndreas Gohr
59*93d995e0SAndreas Gohr                $DBI =& plugin_load('helper', 'sqlite');
60*93d995e0SAndreas Gohr                if(!$DBI->init($_REQUEST['db'],'')) return;
61*93d995e0SAndreas Gohr
62*93d995e0SAndreas Gohr                $sql = explode(";",$_REQUEST['sql']);
63*93d995e0SAndreas Gohr                foreach($sql as $s){
64*93d995e0SAndreas Gohr                    $s = preg_replace('!^\s*--.*$!m', '', $s);
65*93d995e0SAndreas Gohr                    $s = trim($s);
66*93d995e0SAndreas Gohr                    if(!$s) continue;
67*93d995e0SAndreas Gohr                    $res = $DBI->query("$s;");
68*93d995e0SAndreas Gohr                    if ($res === false) continue;
69*93d995e0SAndreas Gohr
70*93d995e0SAndreas Gohr                    $result = $DBI->res2arr($res);
71*93d995e0SAndreas Gohr                    if(!count($result)) continue;
72*93d995e0SAndreas Gohr
73*93d995e0SAndreas Gohr                    echo '<p>';
74*93d995e0SAndreas Gohr                    $ths = array_keys($result[0]);
75*93d995e0SAndreas Gohr                    echo '<table class="inline">';
76*93d995e0SAndreas Gohr                    echo '<tr>';
77*93d995e0SAndreas Gohr                    foreach($ths as $th){
78*93d995e0SAndreas Gohr                        echo '<th>'.hsc($th).'</th>';
79*93d995e0SAndreas Gohr                    }
80*93d995e0SAndreas Gohr                    echo '</tr>';
81*93d995e0SAndreas Gohr                    foreach($result as $row){
82*93d995e0SAndreas Gohr                        echo '<tr>';
83*93d995e0SAndreas Gohr                        $tds = array_values($row);
84*93d995e0SAndreas Gohr                        foreach($tds as $td){
85*93d995e0SAndreas Gohr                            echo '<td>'.hsc($td).'</td>';
86*93d995e0SAndreas Gohr                        }
87*93d995e0SAndreas Gohr                        echo '</tr>';
88*93d995e0SAndreas Gohr                    }
89*93d995e0SAndreas Gohr                    echo '</table>';
90*93d995e0SAndreas Gohr                    echo '</p>';
91*93d995e0SAndreas Gohr                }
92*93d995e0SAndreas Gohr
93*93d995e0SAndreas Gohr            }
94*93d995e0SAndreas Gohr
95*93d995e0SAndreas Gohr            echo '</div>';
96*93d995e0SAndreas Gohr        }
97*93d995e0SAndreas Gohr    }
98*93d995e0SAndreas Gohr
99*93d995e0SAndreas Gohr    function getTOC(){
100*93d995e0SAndreas Gohr        global $conf;
101*93d995e0SAndreas Gohr        global $ID;
102*93d995e0SAndreas Gohr
103*93d995e0SAndreas Gohr        $toc = array();
104*93d995e0SAndreas Gohr        $dbfiles = glob($conf['metadir'].'/*.sqlite');
105*93d995e0SAndreas Gohr
106*93d995e0SAndreas Gohr
107*93d995e0SAndreas Gohr        foreach($dbfiles as $file){
108*93d995e0SAndreas Gohr            $db = basename($file,'.sqlite');
109*93d995e0SAndreas Gohr            $toc[] = array(
110*93d995e0SAndreas Gohr                        'link'  => wl($ID,array('do'=>'admin','page'=>'sqlite','db'=>$db)),
111*93d995e0SAndreas Gohr                        'title' => $this->getLang('db').' '.$db,
112*93d995e0SAndreas Gohr                        'level' => 1,
113*93d995e0SAndreas Gohr                        'type'  => 'ul',
114*93d995e0SAndreas Gohr                     );
115*93d995e0SAndreas Gohr        }
116*93d995e0SAndreas Gohr
117*93d995e0SAndreas Gohr        return $toc;
118*93d995e0SAndreas Gohr    }
119*93d995e0SAndreas Gohr}
120*93d995e0SAndreas Gohr
121*93d995e0SAndreas Gohr// vim:ts=4:sw=4:et:enc=utf-8:
122