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