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'], 457f5f9a98SAndreas Gohr 'sql' => 'SELECT name,sql FROM sqlite_master WHERE type=\'table\' ORDER BY name', 467f5f9a98SAndreas Gohr 'sectok' => getSecurityToken())). 47*ab6c40f9SAdrian Lang '">'.$this->getLang('table').'</a></div></li>'; 487f5f9a98SAndreas Gohr echo '<li><div class="li"><a href="'. 497f5f9a98SAndreas Gohr wl($ID,array('do' => 'admin', 507f5f9a98SAndreas Gohr 'page' => 'sqlite', 517f5f9a98SAndreas Gohr 'db' => $_REQUEST['db'], 527f5f9a98SAndreas Gohr 'sql' => 'SELECT name,sql FROM sqlite_master WHERE type=\'index\' ORDER BY name', 537f5f9a98SAndreas Gohr 'sectok' => getSecurityToken())). 54*ab6c40f9SAdrian Lang '">'.$this->getLang('index').'</a></div></li>'; 5593d995e0SAndreas Gohr echo '</ul>'; 5693d995e0SAndreas Gohr 5793d995e0SAndreas Gohr $form = new Doku_Form(array()); 5893d995e0SAndreas Gohr $form->startFieldset('SQL Command'); 5993d995e0SAndreas Gohr $form->addHidden('id',$ID); 6093d995e0SAndreas Gohr $form->addHidden('do','admin'); 6193d995e0SAndreas Gohr $form->addHidden('page','sqlite'); 6293d995e0SAndreas Gohr $form->addHidden('db',$_REQUEST['db']); 6393d995e0SAndreas Gohr $form->addElement('<textarea name="sql" class="edit">'.hsc($_REQUEST['sql']).'</textarea>'); 6493d995e0SAndreas Gohr $form->addElement('<input type="submit" class="button" />'); 6593d995e0SAndreas Gohr $form->endFieldset(); 6693d995e0SAndreas Gohr $form->printForm(); 6793d995e0SAndreas Gohr 6893d995e0SAndreas Gohr 6993d995e0SAndreas Gohr if($_REQUEST['sql']){ 7093d995e0SAndreas Gohr 7193d995e0SAndreas Gohr $DBI =& plugin_load('helper', 'sqlite'); 7293d995e0SAndreas Gohr if(!$DBI->init($_REQUEST['db'],'')) return; 7393d995e0SAndreas Gohr 7493d995e0SAndreas Gohr $sql = explode(";",$_REQUEST['sql']); 7593d995e0SAndreas Gohr foreach($sql as $s){ 7693d995e0SAndreas Gohr $s = preg_replace('!^\s*--.*$!m', '', $s); 7793d995e0SAndreas Gohr $s = trim($s); 7893d995e0SAndreas Gohr if(!$s) continue; 7993d995e0SAndreas Gohr $res = $DBI->query("$s;"); 8093d995e0SAndreas Gohr if ($res === false) continue; 8193d995e0SAndreas Gohr 82fd69a32cSAndreas Gohr msg(sqlite_num_rows($res).' affected rows',1); 8393d995e0SAndreas Gohr $result = $DBI->res2arr($res); 8493d995e0SAndreas Gohr if(!count($result)) continue; 8593d995e0SAndreas Gohr 8693d995e0SAndreas Gohr echo '<p>'; 8793d995e0SAndreas Gohr $ths = array_keys($result[0]); 8893d995e0SAndreas Gohr echo '<table class="inline">'; 8993d995e0SAndreas Gohr echo '<tr>'; 9093d995e0SAndreas Gohr foreach($ths as $th){ 9193d995e0SAndreas Gohr echo '<th>'.hsc($th).'</th>'; 9293d995e0SAndreas Gohr } 9393d995e0SAndreas Gohr echo '</tr>'; 9493d995e0SAndreas Gohr foreach($result as $row){ 9593d995e0SAndreas Gohr echo '<tr>'; 9693d995e0SAndreas Gohr $tds = array_values($row); 9793d995e0SAndreas Gohr foreach($tds as $td){ 9893d995e0SAndreas Gohr echo '<td>'.hsc($td).'</td>'; 9993d995e0SAndreas Gohr } 10093d995e0SAndreas Gohr echo '</tr>'; 10193d995e0SAndreas Gohr } 10293d995e0SAndreas Gohr echo '</table>'; 10393d995e0SAndreas Gohr echo '</p>'; 10493d995e0SAndreas Gohr } 10593d995e0SAndreas Gohr 10693d995e0SAndreas Gohr } 10793d995e0SAndreas Gohr 10893d995e0SAndreas Gohr echo '</div>'; 10993d995e0SAndreas Gohr } 11093d995e0SAndreas Gohr } 11193d995e0SAndreas Gohr 11293d995e0SAndreas Gohr function getTOC(){ 11393d995e0SAndreas Gohr global $conf; 11493d995e0SAndreas Gohr global $ID; 11593d995e0SAndreas Gohr 11693d995e0SAndreas Gohr $toc = array(); 11793d995e0SAndreas Gohr $dbfiles = glob($conf['metadir'].'/*.sqlite'); 11893d995e0SAndreas Gohr 11993d995e0SAndreas Gohr 120a1a04581SAndreas Gohr if(is_array($dbfiles)) foreach($dbfiles as $file){ 12193d995e0SAndreas Gohr $db = basename($file,'.sqlite'); 12293d995e0SAndreas Gohr $toc[] = array( 1237f5f9a98SAndreas Gohr 'link' => wl($ID,array('do'=>'admin','page'=>'sqlite','db'=>$db,'sectok'=>getSecurityToken())), 12493d995e0SAndreas Gohr 'title' => $this->getLang('db').' '.$db, 12593d995e0SAndreas Gohr 'level' => 1, 12693d995e0SAndreas Gohr 'type' => 'ul', 12793d995e0SAndreas Gohr ); 12893d995e0SAndreas Gohr } 12993d995e0SAndreas Gohr 13093d995e0SAndreas Gohr return $toc; 13193d995e0SAndreas Gohr } 13293d995e0SAndreas Gohr} 13393d995e0SAndreas Gohr 13493d995e0SAndreas Gohr// vim:ts=4:sw=4:et:enc=utf-8: 135