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