xref: /plugin/sqlite/admin.php (revision 8404199129b696e4ea180c1edf961ce8283fa642)
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 Gohrif (!defined('DOKU_LF')) define('DOKU_LF', "\n");
1393d995e0SAndreas Gohrif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t");
1493d995e0SAndreas Gohrif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
1593d995e0SAndreas Gohr
1693d995e0SAndreas Gohrrequire_once(DOKU_PLUGIN.'admin.php');
1793d995e0SAndreas Gohr
1893d995e0SAndreas Gohrclass admin_plugin_sqlite extends DokuWiki_Admin_Plugin {
1993d995e0SAndreas Gohr
2093d995e0SAndreas Gohr    function getInfo() {
2193d995e0SAndreas Gohr        return confToHash(dirname(__FILE__).'plugin.info.txt');
2293d995e0SAndreas Gohr    }
2393d995e0SAndreas Gohr
2493d995e0SAndreas Gohr    function getMenuSort() { return 500; }
2593d995e0SAndreas Gohr    function forAdminOnly() { return true; }
2693d995e0SAndreas Gohr
2793d995e0SAndreas Gohr    function handle() {
2893d995e0SAndreas Gohr    }
2993d995e0SAndreas Gohr
3093d995e0SAndreas Gohr    function html() {
3193d995e0SAndreas Gohr        global $ID;
3293d995e0SAndreas Gohr
3393d995e0SAndreas Gohr        echo $this->locale_xhtml('intro');
3493d995e0SAndreas Gohr
357f5f9a98SAndreas Gohr        if($_REQUEST['db'] && checkSecurityToken()){
3693d995e0SAndreas Gohr
3793d995e0SAndreas Gohr            echo '<h2>'.$this->getLang('db').' '.hsc($_REQUEST['db']).'</h2>';
3893d995e0SAndreas Gohr            echo '<div class="level2">';
3993d995e0SAndreas Gohr
4093d995e0SAndreas Gohr            echo '<ul>';
417f5f9a98SAndreas Gohr            echo '<li><div class="li"><a href="'.
427f5f9a98SAndreas Gohr                    wl($ID,array('do'     => 'admin',
437f5f9a98SAndreas Gohr                                 'page'   => 'sqlite',
447f5f9a98SAndreas Gohr                                 'db'     => $_REQUEST['db'],
45*84041991SKlap-in                                 'version'=> $_REQUEST['version'],
467f5f9a98SAndreas Gohr                                 'sql'    => 'SELECT name,sql FROM sqlite_master WHERE type=\'table\' ORDER BY name',
477f5f9a98SAndreas Gohr                                 'sectok' => getSecurityToken())).
48ab6c40f9SAdrian Lang                 '">'.$this->getLang('table').'</a></div></li>';
497f5f9a98SAndreas Gohr            echo '<li><div class="li"><a href="'.
507f5f9a98SAndreas Gohr                    wl($ID,array('do'     => 'admin',
517f5f9a98SAndreas Gohr                                 'page'   => 'sqlite',
527f5f9a98SAndreas Gohr                                 'db'     => $_REQUEST['db'],
53*84041991SKlap-in                                 'version'=> $_REQUEST['version'],
547f5f9a98SAndreas Gohr                                 'sql'    => 'SELECT name,sql FROM sqlite_master WHERE type=\'index\' ORDER BY name',
557f5f9a98SAndreas Gohr                                 'sectok' => getSecurityToken())).
56ab6c40f9SAdrian Lang                 '">'.$this->getLang('index').'</a></div></li>';
5793d995e0SAndreas Gohr            echo '</ul>';
5893d995e0SAndreas Gohr
59dd79791bSAndreas Gohr            $form = new Doku_Form(array('class'=>'sqliteplugin'));
6093d995e0SAndreas Gohr            $form->startFieldset('SQL Command');
6193d995e0SAndreas Gohr            $form->addHidden('id',$ID);
6293d995e0SAndreas Gohr            $form->addHidden('do','admin');
6393d995e0SAndreas Gohr            $form->addHidden('page','sqlite');
6493d995e0SAndreas Gohr            $form->addHidden('db',$_REQUEST['db']);
65*84041991SKlap-in            $form->addHidden('version', $_REQUEST['version']);
6693d995e0SAndreas Gohr            $form->addElement('<textarea name="sql" class="edit">'.hsc($_REQUEST['sql']).'</textarea>');
6793d995e0SAndreas Gohr            $form->addElement('<input type="submit" class="button" />');
6893d995e0SAndreas Gohr            $form->endFieldset();
6993d995e0SAndreas Gohr            $form->printForm();
7093d995e0SAndreas Gohr
7193d995e0SAndreas Gohr
7293d995e0SAndreas Gohr            if($_REQUEST['sql']){
7393d995e0SAndreas Gohr
74*84041991SKlap-in                /** @var $DBI helper_plugin_sqlite */
7593d995e0SAndreas Gohr                $DBI =& plugin_load('helper', 'sqlite');
7693d995e0SAndreas Gohr                if(!$DBI->init($_REQUEST['db'],'')) return;
7793d995e0SAndreas Gohr
7893d995e0SAndreas Gohr                $sql = explode(";",$_REQUEST['sql']);
7993d995e0SAndreas Gohr                foreach($sql as $s){
8093d995e0SAndreas Gohr                    $s = preg_replace('!^\s*--.*$!m', '', $s);
8193d995e0SAndreas Gohr                    $s = trim($s);
8293d995e0SAndreas Gohr                    if(!$s) continue;
83*84041991SKlap-in
84*84041991SKlap-in                    $time_start = microtime(true);
85*84041991SKlap-in
8693d995e0SAndreas Gohr                    $res = $DBI->query("$s;");
8793d995e0SAndreas Gohr                    if ($res === false) continue;
8893d995e0SAndreas Gohr
8993d995e0SAndreas Gohr                    $result = $DBI->res2arr($res);
90*84041991SKlap-in
91*84041991SKlap-in                    $time_end = microtime(true);
92*84041991SKlap-in                    $time = $time_end - $time_start;
93*84041991SKlap-in
94*84041991SKlap-in                    $cnt = $DBI->res2count($res);
95*84041991SKlap-in                    msg($cnt.' affected rows in '.($time<0.0001 ? substr($time,0,5).substr($time,-3) : substr($time,0,7)).' seconds',1);
96*84041991SKlap-in                    if(!$cnt) continue;
9793d995e0SAndreas Gohr
9893d995e0SAndreas Gohr                    echo '<p>';
9993d995e0SAndreas Gohr                    $ths = array_keys($result[0]);
10093d995e0SAndreas Gohr                    echo '<table class="inline">';
10193d995e0SAndreas Gohr                    echo '<tr>';
10293d995e0SAndreas Gohr                    foreach($ths as $th){
10393d995e0SAndreas Gohr                        echo '<th>'.hsc($th).'</th>';
10493d995e0SAndreas Gohr                    }
10593d995e0SAndreas Gohr                    echo '</tr>';
10693d995e0SAndreas Gohr                    foreach($result as $row){
10793d995e0SAndreas Gohr                        echo '<tr>';
10893d995e0SAndreas Gohr                        $tds = array_values($row);
10993d995e0SAndreas Gohr                        foreach($tds as $td){
11093d995e0SAndreas Gohr                            echo '<td>'.hsc($td).'</td>';
11193d995e0SAndreas Gohr                        }
11293d995e0SAndreas Gohr                        echo '</tr>';
11393d995e0SAndreas Gohr                    }
11493d995e0SAndreas Gohr                    echo '</table>';
11593d995e0SAndreas Gohr                    echo '</p>';
11693d995e0SAndreas Gohr                }
11793d995e0SAndreas Gohr
11893d995e0SAndreas Gohr            }
11993d995e0SAndreas Gohr
12093d995e0SAndreas Gohr            echo '</div>';
12193d995e0SAndreas Gohr        }
12293d995e0SAndreas Gohr    }
12393d995e0SAndreas Gohr
12493d995e0SAndreas Gohr    function getTOC(){
12593d995e0SAndreas Gohr        global $conf;
12693d995e0SAndreas Gohr        global $ID;
12793d995e0SAndreas Gohr
12893d995e0SAndreas Gohr        $toc = array();
12940698f67SKlap-in        $fileextensions = array('sqlite2'=>'.sqlite','sqlite3'=>'.sqlite3');
13093d995e0SAndreas Gohr
13140698f67SKlap-in        foreach($fileextensions as $dbformat => $fileextension){
13293d995e0SAndreas Gohr            $toc[] = array(
13340698f67SKlap-in                            'link'  => '',
13440698f67SKlap-in                            'title' => $dbformat.':',
13593d995e0SAndreas Gohr                            'level' => 1,
13693d995e0SAndreas Gohr                            'type'  => 'ul',
13793d995e0SAndreas Gohr                         );
13840698f67SKlap-in
13940698f67SKlap-in            $dbfiles = glob($conf['metadir'].'/*'.$fileextension);
14040698f67SKlap-in
14140698f67SKlap-in            if(is_array($dbfiles)) foreach($dbfiles as $file){
14240698f67SKlap-in                $db = basename($file,$fileextension);
14340698f67SKlap-in                $toc[] = array(
144*84041991SKlap-in                            'link'  => wl($ID,array('do'=>'admin','page'=>'sqlite','db'=>$db,'version'=>$dbformat,'sectok'=>getSecurityToken())),
14540698f67SKlap-in                            'title' => $this->getLang('db').' '.$db,
14640698f67SKlap-in                            'level' => 2,
14740698f67SKlap-in                            'type'  => 'ul',
14840698f67SKlap-in                         );
14940698f67SKlap-in            }
15093d995e0SAndreas Gohr        }
15193d995e0SAndreas Gohr
15293d995e0SAndreas Gohr        return $toc;
15393d995e0SAndreas Gohr    }
15493d995e0SAndreas Gohr}
15593d995e0SAndreas Gohr
156dd79791bSAndreas Gohr// vim:ts=4:sw=4:et:
157