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 Gohrclass admin_plugin_sqlite extends DokuWiki_Admin_Plugin { 1393d995e0SAndreas Gohr 140542fc8eSKlap-in function getMenuSort() { 150542fc8eSKlap-in return 500; 160542fc8eSKlap-in } 170542fc8eSKlap-in 180542fc8eSKlap-in function forAdminOnly() { 190542fc8eSKlap-in return true; 200542fc8eSKlap-in } 2193d995e0SAndreas Gohr 2293d995e0SAndreas Gohr function handle() { 23a34ef333SKlap-in global $conf; 240dbd1d4cSSzymon Olewniczak global $INPUT; 250dbd1d4cSSzymon Olewniczak 26a34ef333SKlap-in if(isset($_POST['sqlite_rename'])) { 27a34ef333SKlap-in 28a34ef333SKlap-in $path = $conf['metadir'].'/'.$_REQUEST['db']; 29a34ef333SKlap-in if(io_rename($path.'.sqlite', $path.'.sqlite3')) { 30a34ef333SKlap-in msg('Renamed database file succesfull!', 1); 31a34ef333SKlap-in //set to new situation 32a34ef333SKlap-in $_REQUEST['version'] = 'sqlite3'; 33a34ef333SKlap-in 34a34ef333SKlap-in } else { 35a34ef333SKlap-in msg('Renaming database file fails!', -1); 36a34ef333SKlap-in } 37a34ef333SKlap-in 38a34ef333SKlap-in } elseif(isset($_POST['sqlite_convert'])) { 39a34ef333SKlap-in 40a34ef333SKlap-in /** @var $DBI helper_plugin_sqlite */ 4179288b58SGerrit Uitslag $DBI = plugin_load('helper', 'sqlite'); 42a34ef333SKlap-in $time_start = microtime(true); 43a34ef333SKlap-in 44a34ef333SKlap-in if($dumpfile = $DBI->dumpDatabase($_REQUEST['db'], DOKU_EXT_SQLITE)) { 45a34ef333SKlap-in msg('Database temporary dumped to file: '.hsc($dumpfile).'. Now loading in new database...', 1); 46a34ef333SKlap-in 47a34ef333SKlap-in if(!$DBI->fillDatabaseFromDump($_REQUEST['db'], $dumpfile)) { 48a34ef333SKlap-in msg('Conversion failed!', -1); 49a34ef333SKlap-in return false; 50a34ef333SKlap-in } 51a34ef333SKlap-in 52a34ef333SKlap-in //TODO delete dumpfile 53a34ef333SKlap-in //return @unlink($dumpfile); 54a34ef333SKlap-in //TODO delete old sqlite2-db 55a34ef333SKlap-in // return @unlink($conf['metadir'].'/'.$_REQUEST['db'].'.sqlite'); 56a34ef333SKlap-in 57a34ef333SKlap-in msg('Conversion succeed!', 1); 58a34ef333SKlap-in //set to new situation 59a34ef333SKlap-in $_REQUEST['version'] = 'sqlite3'; 60a34ef333SKlap-in } 61a34ef333SKlap-in $time_end = microtime(true); 62a34ef333SKlap-in $time = $time_end - $time_start; 63a34ef333SKlap-in msg('Database "'.hsc($_REQUEST['db']).'" converted from sqlite 2 to 3 in '.$time.' seconds.', 0); 64a34ef333SKlap-in 650dbd1d4cSSzymon Olewniczak } elseif($INPUT->bool('sqlite_export') && checkSecurityToken()) { 660dbd1d4cSSzymon Olewniczak 670dbd1d4cSSzymon Olewniczak /** @var $DBI helper_plugin_sqlite */ 680dbd1d4cSSzymon Olewniczak $DBI = plugin_load('helper', 'sqlite'); 690dbd1d4cSSzymon Olewniczak $dbname = $INPUT->str('db'); 700dbd1d4cSSzymon Olewniczak 710dbd1d4cSSzymon Olewniczak $dumpfile = $DBI->dumpDatabase($dbname, DOKU_EXT_PDO, true); 720dbd1d4cSSzymon Olewniczak if ($dumpfile) { 730dbd1d4cSSzymon Olewniczak header('Content-Type: text/sql'); 740dbd1d4cSSzymon Olewniczak header('Content-Disposition: attachment; filename="'.$dbname.'.sql";'); 750dbd1d4cSSzymon Olewniczak 760dbd1d4cSSzymon Olewniczak readfile($dumpfile); 770dbd1d4cSSzymon Olewniczak exit(0); 780dbd1d4cSSzymon Olewniczak } 790dbd1d4cSSzymon Olewniczak } elseif($INPUT->bool('sqlite_import') && checkSecurityToken()) { 800dbd1d4cSSzymon Olewniczak global $conf; 810dbd1d4cSSzymon Olewniczak 820dbd1d4cSSzymon Olewniczak /** @var $DBI helper_plugin_sqlite */ 830dbd1d4cSSzymon Olewniczak $DBI = plugin_load('helper', 'sqlite'); 840dbd1d4cSSzymon Olewniczak $dbname = $INPUT->str('db'); 850dbd1d4cSSzymon Olewniczak $dumpfile = $_FILES['dumpfile']['tmp_name']; 860dbd1d4cSSzymon Olewniczak 870dbd1d4cSSzymon Olewniczak if (empty($dumpfile)) { 880dbd1d4cSSzymon Olewniczak msg($this->getLang('import_no_file'), -1); 890dbd1d4cSSzymon Olewniczak return; 900dbd1d4cSSzymon Olewniczak } 910dbd1d4cSSzymon Olewniczak 920dbd1d4cSSzymon Olewniczak if ($DBI->fillDatabaseFromDump($dbname, $dumpfile, true)) { 930dbd1d4cSSzymon Olewniczak msg($this->getLang('import_success'), 1); 940dbd1d4cSSzymon Olewniczak } 95a34ef333SKlap-in } 9693d995e0SAndreas Gohr } 9793d995e0SAndreas Gohr 9893d995e0SAndreas Gohr function html() { 9993d995e0SAndreas Gohr global $ID; 100a34ef333SKlap-in global $conf; 101*271f9caeSSzymon Olewniczak global $INPUT; 10293d995e0SAndreas Gohr 10393d995e0SAndreas Gohr echo $this->locale_xhtml('intro'); 10493d995e0SAndreas Gohr 105a34ef333SKlap-in if(isset($_REQUEST['db']) && checkSecurityToken()) { 10693d995e0SAndreas Gohr 107a34ef333SKlap-in echo '<h2>'.$this->getLang('db').' "'.hsc($_REQUEST['db']).'"</h2>'; 10893d995e0SAndreas Gohr echo '<div class="level2">'; 10993d995e0SAndreas Gohr 110a34ef333SKlap-in $sqlcommandform = true; 111a34ef333SKlap-in /** @var $DBI helper_plugin_sqlite */ 11279288b58SGerrit Uitslag $DBI = plugin_load('helper', 'sqlite'); 113a34ef333SKlap-in if($_REQUEST['version'] == 'sqlite2') { 114a34ef333SKlap-in if(helper_plugin_sqlite_adapter::isSqlite3db($conf['metadir'].'/'.$_REQUEST['db'].'.sqlite')) { 115a34ef333SKlap-in 116a34ef333SKlap-in msg('This is a database in sqlite3 format.', 2); 117a34ef333SKlap-in msg( 118a34ef333SKlap-in 'This plugin needs your database file has the extension ".sqlite3" 119a34ef333SKlap-in instead of ".sqlite" before it will be recognized as sqlite3 database.', 2 120a34ef333SKlap-in ); 121a34ef333SKlap-in $form = new Doku_Form(array('method'=> 'post')); 122a34ef333SKlap-in $form->addHidden('page', 'sqlite'); 123a34ef333SKlap-in $form->addHidden('sqlite_rename', 'go'); 124a34ef333SKlap-in $form->addHidden('db', $_REQUEST['db']); 125a34ef333SKlap-in $form->addElement(form_makeButton('submit', 'admin', sprintf($this->getLang('rename2to3'), hsc($_REQUEST['db'])))); 126a34ef333SKlap-in $form->printForm(); 127a34ef333SKlap-in 128a34ef333SKlap-in if($DBI->existsPDOSqlite()) $sqlcommandform = false; 129a34ef333SKlap-in 130a34ef333SKlap-in } else { 131a34ef333SKlap-in if($DBI->existsPDOSqlite()) { 132a34ef333SKlap-in $sqlcommandform = false; 133a34ef333SKlap-in msg('This is a database in sqlite2 format.', 2); 134a34ef333SKlap-in 135a34ef333SKlap-in if($DBI->existsSqlite2()) { 136a34ef333SKlap-in $form = new Doku_Form(array('method'=> 'post')); 137a34ef333SKlap-in $form->addHidden('page', 'sqlite'); 138a34ef333SKlap-in $form->addHidden('sqlite_convert', 'go'); 139a34ef333SKlap-in $form->addHidden('db', $_REQUEST['db']); 140a34ef333SKlap-in $form->addElement(form_makeButton('submit', 'admin', sprintf($this->getLang('convert2to3'), hsc($_REQUEST['db'])))); 141a34ef333SKlap-in $form->printForm(); 142a34ef333SKlap-in } else { 143a34ef333SKlap-in msg( 144a34ef333SKlap-in 'Before PDO sqlite can handle this format, it needs a conversion to the sqlite3 format. 145a34ef333SKlap-in Because PHP sqlite extension is not available, 146a34ef333SKlap-in you should manually convert "'.hsc($_REQUEST['db']).'.sqlite" in the meta directory to "'.hsc($_REQUEST['db']).'.sqlite3".<br /> 147a34ef333SKlap-in See for info about the conversion '.$this->external_link('http://www.sqlite.org/version3.html').'.', -1 148a34ef333SKlap-in ); 149a34ef333SKlap-in } 150a34ef333SKlap-in } 151a34ef333SKlap-in } 152a34ef333SKlap-in } else { 153a34ef333SKlap-in if(!$DBI->existsPDOSqlite()) { 154a34ef333SKlap-in $sqlcommandform = false; 155a34ef333SKlap-in msg('A database in sqlite3 format needs the PHP PDO sqlite plugin.', -1); 156a34ef333SKlap-in } 157a34ef333SKlap-in } 158a34ef333SKlap-in 159a34ef333SKlap-in if($sqlcommandform) { 16093d995e0SAndreas Gohr echo '<ul>'; 1617f5f9a98SAndreas Gohr echo '<li><div class="li"><a href="'. 162a34ef333SKlap-in wl( 163a34ef333SKlap-in $ID, array( 164a34ef333SKlap-in 'do' => 'admin', 1657f5f9a98SAndreas Gohr 'page' => 'sqlite', 1667f5f9a98SAndreas Gohr 'db' => $_REQUEST['db'], 16784041991SKlap-in 'version'=> $_REQUEST['version'], 1687f5f9a98SAndreas Gohr 'sql' => 'SELECT name,sql FROM sqlite_master WHERE type=\'table\' ORDER BY name', 169a34ef333SKlap-in 'sectok' => getSecurityToken() 170a34ef333SKlap-in ) 171a34ef333SKlap-in ). 172ab6c40f9SAdrian Lang '">'.$this->getLang('table').'</a></div></li>'; 1737f5f9a98SAndreas Gohr echo '<li><div class="li"><a href="'. 174a34ef333SKlap-in wl( 175a34ef333SKlap-in $ID, array( 176a34ef333SKlap-in 'do' => 'admin', 1777f5f9a98SAndreas Gohr 'page' => 'sqlite', 1787f5f9a98SAndreas Gohr 'db' => $_REQUEST['db'], 17984041991SKlap-in 'version'=> $_REQUEST['version'], 1807f5f9a98SAndreas Gohr 'sql' => 'SELECT name,sql FROM sqlite_master WHERE type=\'index\' ORDER BY name', 181a34ef333SKlap-in 'sectok' => getSecurityToken() 182a34ef333SKlap-in ) 183a34ef333SKlap-in ). 184ab6c40f9SAdrian Lang '">'.$this->getLang('index').'</a></div></li>'; 1850dbd1d4cSSzymon Olewniczak echo '<li><div class="li"><a href="'. 1860dbd1d4cSSzymon Olewniczak wl( 1870dbd1d4cSSzymon Olewniczak $ID, array( 1880dbd1d4cSSzymon Olewniczak 'do' => 'admin', 1890dbd1d4cSSzymon Olewniczak 'page' => 'sqlite', 1900dbd1d4cSSzymon Olewniczak 'db' => $_REQUEST['db'], 1910dbd1d4cSSzymon Olewniczak 'version'=> $_REQUEST['version'], 1920dbd1d4cSSzymon Olewniczak 'sqlite_export' => '1', 1930dbd1d4cSSzymon Olewniczak 'sectok' => getSecurityToken() 1940dbd1d4cSSzymon Olewniczak ) 1950dbd1d4cSSzymon Olewniczak ). 1960dbd1d4cSSzymon Olewniczak '">'.$this->getLang('export').'</a></div></li>'; 1970dbd1d4cSSzymon Olewniczak 1980dbd1d4cSSzymon Olewniczak 1990dbd1d4cSSzymon Olewniczak $form = new \dokuwiki\Form\Form(array('enctype' => 'multipart/form-data')); 2000dbd1d4cSSzymon Olewniczak $form->setHiddenField('id', $ID); 2010dbd1d4cSSzymon Olewniczak $form->setHiddenField('do', 'admin'); 2020dbd1d4cSSzymon Olewniczak $form->setHiddenField('page', 'sqlite'); 2030dbd1d4cSSzymon Olewniczak $form->setHiddenField('db', $_REQUEST['db']); 2040dbd1d4cSSzymon Olewniczak $form->setHiddenField('version', $_REQUEST['version']); 2050dbd1d4cSSzymon Olewniczak $form->addElement(new dokuwiki\Form\InputElement('file', 'dumpfile')); 2060dbd1d4cSSzymon Olewniczak $form->addButton('sqlite_import', $this->getLang('import')); 2070dbd1d4cSSzymon Olewniczak echo '<li>' . $form->toHTML() . '</li>'; 20893d995e0SAndreas Gohr echo '</ul>'; 20993d995e0SAndreas Gohr 210*271f9caeSSzymon Olewniczak if(!$DBI->init($_REQUEST['db'], '')) return; 211*271f9caeSSzymon Olewniczak 212*271f9caeSSzymon Olewniczak if($INPUT->str('action') == 'save') { 213*271f9caeSSzymon Olewniczak $ok = true; 214*271f9caeSSzymon Olewniczak if(empty($INPUT->str('sql'))) { 215*271f9caeSSzymon Olewniczak echo '<div class="error">give the query</div>'; 216*271f9caeSSzymon Olewniczak $ok = false; 217*271f9caeSSzymon Olewniczak } 218*271f9caeSSzymon Olewniczak if(empty($INPUT->str('name'))) { 219*271f9caeSSzymon Olewniczak echo '<div class="error">give the query name</div>'; 220*271f9caeSSzymon Olewniczak $ok = false; 221*271f9caeSSzymon Olewniczak } 222*271f9caeSSzymon Olewniczak if($ok) { 223*271f9caeSSzymon Olewniczak // Create queries table if not exists 224*271f9caeSSzymon Olewniczak $res = $DBI->query("CREATE TABLE IF NOT EXISTS meta_queries 225*271f9caeSSzymon Olewniczak (id INTEGER PRIMARY KEY, 226*271f9caeSSzymon Olewniczak name TEXT NOT NULL, 227*271f9caeSSzymon Olewniczak sql TEXT NOT NULL);"); 228*271f9caeSSzymon Olewniczak $DBI->storeEntry('meta_queries', array( 229*271f9caeSSzymon Olewniczak 'name' => $INPUT->str('name'), 230*271f9caeSSzymon Olewniczak 'sql' => $INPUT->str('sql') 231*271f9caeSSzymon Olewniczak )); 232*271f9caeSSzymon Olewniczak echo '<div class="success">query saved</div>'; 233*271f9caeSSzymon Olewniczak } 234*271f9caeSSzymon Olewniczak } elseif($INPUT->str('action') == 'delete') { 235*271f9caeSSzymon Olewniczak $DBI->query("DELETE FROM meta_queries WHERE id=?;", $INPUT->int('id')); 236*271f9caeSSzymon Olewniczak echo '<div class="success">query deleted</div>'; 237*271f9caeSSzymon Olewniczak } 238*271f9caeSSzymon Olewniczak 239dd79791bSAndreas Gohr $form = new Doku_Form(array('class'=> 'sqliteplugin')); 24093d995e0SAndreas Gohr $form->startFieldset('SQL Command'); 24193d995e0SAndreas Gohr $form->addHidden('id', $ID); 24293d995e0SAndreas Gohr $form->addHidden('do', 'admin'); 24393d995e0SAndreas Gohr $form->addHidden('page', 'sqlite'); 24493d995e0SAndreas Gohr $form->addHidden('db', $_REQUEST['db']); 24584041991SKlap-in $form->addHidden('version', $_REQUEST['version']); 24693d995e0SAndreas Gohr $form->addElement('<textarea name="sql" class="edit">'.hsc($_REQUEST['sql']).'</textarea>'); 24793d995e0SAndreas Gohr $form->addElement('<input type="submit" class="button" /> '); 248*271f9caeSSzymon Olewniczak $form->addElement('<label>Query name: <input type="text" name="name" /></label> '); 249*271f9caeSSzymon Olewniczak $form->addElement('<button name="action" value="save">Save</button>'); 25093d995e0SAndreas Gohr $form->endFieldset(); 25193d995e0SAndreas Gohr $form->printForm(); 25293d995e0SAndreas Gohr 253*271f9caeSSzymon Olewniczak // List saved queries 254*271f9caeSSzymon Olewniczak $meta_queries_table_name = 'meta_queries'; 255*271f9caeSSzymon Olewniczak $res = $DBI->query("SELECT name FROM sqlite_master WHERE type='table' AND name=?;", $meta_queries_table_name); 256*271f9caeSSzymon Olewniczak $cnt = $DBI->res2count($res); 257*271f9caeSSzymon Olewniczak if($cnt == 1) { 258*271f9caeSSzymon Olewniczak print '<h3>Saved queries</h3>'; 259*271f9caeSSzymon Olewniczak $res = $DBI->query("SELECT id, name, sql FROM $meta_queries_table_name"); 260*271f9caeSSzymon Olewniczak $result = $DBI->res2arr($res); 261*271f9caeSSzymon Olewniczak echo '<div>'; 262*271f9caeSSzymon Olewniczak echo '<table class="inline">'; 263*271f9caeSSzymon Olewniczak echo '<tr>'; 264*271f9caeSSzymon Olewniczak echo '<th>id</th>'; 265*271f9caeSSzymon Olewniczak echo '<th>name</th>'; 266*271f9caeSSzymon Olewniczak echo '<th>sql</th>'; 267*271f9caeSSzymon Olewniczak echo '<th></th>'; 268*271f9caeSSzymon Olewniczak echo '</tr>'; 269*271f9caeSSzymon Olewniczak foreach($result as $row) { 270*271f9caeSSzymon Olewniczak echo '<tr>'; 271*271f9caeSSzymon Olewniczak echo '<td>'.hsc($row['id']).'</td>'; 272*271f9caeSSzymon Olewniczak echo '<td>'.hsc($row['name']).'</td>'; 273*271f9caeSSzymon Olewniczak $link = wl($ID, array( 'do'=> 'admin', 274*271f9caeSSzymon Olewniczak 'page'=> 'sqlite', 275*271f9caeSSzymon Olewniczak 'db'=> $_REQUEST['db'], 276*271f9caeSSzymon Olewniczak 'version'=> $_REQUEST['version'], 277*271f9caeSSzymon Olewniczak 'sql' => $row['sql'], 278*271f9caeSSzymon Olewniczak 'sectok'=> getSecurityToken())); 279*271f9caeSSzymon Olewniczak echo '<td><a href="'.$link.'">'.hsc($row['sql']).'</a></td>'; 280*271f9caeSSzymon Olewniczak 281*271f9caeSSzymon Olewniczak $link = wl($ID, array( 'do'=> 'admin', 282*271f9caeSSzymon Olewniczak 'page'=> 'sqlite', 283*271f9caeSSzymon Olewniczak 'db'=> $_REQUEST['db'], 284*271f9caeSSzymon Olewniczak 'version'=> $_REQUEST['version'], 285*271f9caeSSzymon Olewniczak 'action' => 'delete', 286*271f9caeSSzymon Olewniczak 'id' => $row['id'], 287*271f9caeSSzymon Olewniczak 'sectok'=> getSecurityToken())); 288*271f9caeSSzymon Olewniczak echo '<td><a href="'.$link.'">delete</a></td>'; 289*271f9caeSSzymon Olewniczak echo '</tr>'; 290*271f9caeSSzymon Olewniczak } 291*271f9caeSSzymon Olewniczak echo '</table>'; 292*271f9caeSSzymon Olewniczak echo '</div>'; 293*271f9caeSSzymon Olewniczak } 294*271f9caeSSzymon Olewniczak 295*271f9caeSSzymon Olewniczak $result = $DBI->res2arr($res); 296*271f9caeSSzymon Olewniczak 29793d995e0SAndreas Gohr if($_REQUEST['sql']) { 298*271f9caeSSzymon Olewniczak print '<h3>Query results</h3>'; 299a34ef333SKlap-in $sql = $DBI->SQLstring2array($_REQUEST['sql']); 30093d995e0SAndreas Gohr foreach($sql as $s) { 30193d995e0SAndreas Gohr $s = preg_replace('!^\s*--.*$!m', '', $s); 30293d995e0SAndreas Gohr $s = trim($s); 30393d995e0SAndreas Gohr if(!$s) continue; 30484041991SKlap-in 30584041991SKlap-in $time_start = microtime(true); 30684041991SKlap-in 30793d995e0SAndreas Gohr $res = $DBI->query("$s;"); 30893d995e0SAndreas Gohr if($res === false) continue; 30993d995e0SAndreas Gohr 31093d995e0SAndreas Gohr $result = $DBI->res2arr($res); 31184041991SKlap-in 31284041991SKlap-in $time_end = microtime(true); 31384041991SKlap-in $time = $time_end - $time_start; 31484041991SKlap-in 31584041991SKlap-in $cnt = $DBI->res2count($res); 31684041991SKlap-in msg($cnt.' affected rows in '.($time < 0.0001 ? substr($time, 0, 5).substr($time, -3) : substr($time, 0, 7)).' seconds', 1); 31784041991SKlap-in if(!$cnt) continue; 31893d995e0SAndreas Gohr 319f57002afSPPPCR echo '<div>'; 32093d995e0SAndreas Gohr $ths = array_keys($result[0]); 32193d995e0SAndreas Gohr echo '<table class="inline">'; 32293d995e0SAndreas Gohr echo '<tr>'; 32393d995e0SAndreas Gohr foreach($ths as $th) { 32493d995e0SAndreas Gohr echo '<th>'.hsc($th).'</th>'; 32593d995e0SAndreas Gohr } 32693d995e0SAndreas Gohr echo '</tr>'; 32793d995e0SAndreas Gohr foreach($result as $row) { 32893d995e0SAndreas Gohr echo '<tr>'; 32993d995e0SAndreas Gohr $tds = array_values($row); 33093d995e0SAndreas Gohr foreach($tds as $td) { 3315eb2cff1SAndreas Gohr if($td === null) $td='␀'; 33293d995e0SAndreas Gohr echo '<td>'.hsc($td).'</td>'; 33393d995e0SAndreas Gohr } 33493d995e0SAndreas Gohr echo '</tr>'; 33593d995e0SAndreas Gohr } 33693d995e0SAndreas Gohr echo '</table>'; 337f57002afSPPPCR echo '</div>'; 33893d995e0SAndreas Gohr } 33993d995e0SAndreas Gohr } 34093d995e0SAndreas Gohr 341a34ef333SKlap-in } 34293d995e0SAndreas Gohr echo '</div>'; 34393d995e0SAndreas Gohr } 34493d995e0SAndreas Gohr } 34593d995e0SAndreas Gohr 34693d995e0SAndreas Gohr function getTOC() { 34793d995e0SAndreas Gohr global $conf; 34893d995e0SAndreas Gohr global $ID; 34993d995e0SAndreas Gohr 35093d995e0SAndreas Gohr $toc = array(); 35140698f67SKlap-in $fileextensions = array('sqlite2'=> '.sqlite', 'sqlite3'=> '.sqlite3'); 35293d995e0SAndreas Gohr 35340698f67SKlap-in foreach($fileextensions as $dbformat => $fileextension) { 35493d995e0SAndreas Gohr $toc[] = array( 3550542fc8eSKlap-in 'link' => wl($ID, array('do'=> 'admin', 'page'=> 'sqlite')), 35640698f67SKlap-in 'title' => $dbformat.':', 35793d995e0SAndreas Gohr 'level' => 1, 35893d995e0SAndreas Gohr 'type' => 'ul', 35993d995e0SAndreas Gohr ); 36040698f67SKlap-in 36140698f67SKlap-in $dbfiles = glob($conf['metadir'].'/*'.$fileextension); 36240698f67SKlap-in 36340698f67SKlap-in if(is_array($dbfiles)) foreach($dbfiles as $file) { 36440698f67SKlap-in $db = basename($file, $fileextension); 36540698f67SKlap-in $toc[] = array( 36684041991SKlap-in 'link' => wl($ID, array('do'=> 'admin', 'page'=> 'sqlite', 'db'=> $db, 'version'=> $dbformat, 'sectok'=> getSecurityToken())), 36740698f67SKlap-in 'title' => $this->getLang('db').' '.$db, 36840698f67SKlap-in 'level' => 2, 36940698f67SKlap-in 'type' => 'ul', 37040698f67SKlap-in ); 37140698f67SKlap-in } 37293d995e0SAndreas Gohr } 37393d995e0SAndreas Gohr 37493d995e0SAndreas Gohr return $toc; 37593d995e0SAndreas Gohr } 37693d995e0SAndreas Gohr} 37793d995e0SAndreas Gohr 378dd79791bSAndreas Gohr// vim:ts=4:sw=4:et: 379