enhanced db-tools to deal with the new mulitcolum-index-syntax and to define these indices

This commit is contained in:
Ralf Becker 2003-10-26 19:28:08 +00:00
parent 554a3e93bb
commit 830197249f
4 changed files with 170 additions and 25 deletions

View File

@ -44,13 +44,13 @@
var $setup_header = '<?php
/**************************************************************************\\
* phpGroupWare - Setup *
* http://www.phpgroupware.org *
* http://www.eGroupWare.org *
* Created by eTemplates DB-Tools written by ralfbecker@outdoor-training.de *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\\**************************************************************************/
/* $Id$ */
@ -71,6 +71,8 @@
{
ExecMethod('phpgwapi.applications.read_installed_apps');
}
$GLOBALS['phpgw_info']['flags']['app_header'] =
$GLOBALS['phpgw_info']['apps']['etemplate']['title'].' - '.lang('DB-Tools');
}
/*!
@ -81,9 +83,9 @@
*/
function edit($content='',$msg = '')
{
if (isset($GLOBALS['HTTP_GET_VARS']['app']))
if (isset($_GET['app']))
{
$this->app = $GLOBALS['HTTP_GET_VARS']['app'];
$this->app = $_GET['app'];
}
if (is_array($content))
{
@ -192,6 +194,8 @@
ExecMethod('etemplate.editor.edit');
return;
}
$add_index = isset($content['add_index']);
// from here on, filling new content for eTemplate
$content = array(
'msg' => $msg,
@ -208,7 +212,7 @@
);
if ($this->table != '' && isset($this->data[$this->table]))
{
$content += $this->table2content($this->data[$this->table]);
$content += $this->table2content($this->data[$this->table],$sel_options['Index'],$add_index);
}
$no_button = array( );
if (!$this->app || !$this->table)
@ -315,6 +319,35 @@
return True; // dont continue in edit
}
/*!
@function has_single_index
@syntax has_single_index( $col,$index )
@author ralfbecker
@abstract checks if there is an index (only) on $col (not a multiple index incl. $col)
@param $col column name
@param $index ix or uc array of table-defintion
@result True if $col has a single index
*/
function has_single_index($col,$index,&$options)
{
foreach($index as $in)
{
if ($in == $col || is_array($in) && $in[0] == $col && !isset($in[1]))
{
if ($in != $col && isset($in['options']))
{
foreach($in['options'] as $db => $opts)
{
$options[] = $db.'('.(is_array($opts)?implode(',',$opts):$opts).')';
}
$options = implode(', ',$options);
}
return True;
}
}
return False;
}
/*!
@function table2content
@syntax table2content( $table )
@ -323,15 +356,15 @@
@param $table table-definition, eg. $phpgw_baseline[$table_name]
@result content-array
*/
function table2content($table)
function table2content($table,&$columns,$extra_index=False)
{
$content = array();
$content = $columns = array();
for ($n = 1; list($col_name,$col_defs) = each($table['fd']); ++$n)
{
$col_defs['name'] = $col_name;
$col_defs['pk'] = in_array($col_name,$table['pk']);
$col_defs['uc'] = in_array($col_name,$table['uc']);
$col_defs['ix'] = in_array($col_name,$table['ix']);
$col_defs['uc'] = $this->has_single_index($col_name,$table['uc'],$col_defs['options']);
$col_defs['ix'] = $this->has_single_index($col_name,$table['ix'],$col_defs['options']);
$col_defs['fk'] = $table['fk'][$col_name];
if (isset($col_defs['default']) && $col_defs['default'] == '')
{
@ -342,10 +375,34 @@
$col_defs['n'] = $n;
$content["Row$n"] = $col_defs;
$columns[$n] = $col_name;
}
$n = 2;
foreach(array('uc','ix') as $type)
{
foreach($table[$type] as $index)
{
if (is_array($index) && isset($index[1])) // multicolum index
{
$content['Index'][$n]['unique'] = $type == 'uc';
$content['Index'][$n]['n'] = $n - 1;
foreach($index as $col)
{
$content['Index'][$n][] = array_search($col,$columns);
}
++$n;
}
}
}
if ($extra_index)
{
$content['Index'][$n]['n'] = $n-1;
}
if ($this->debug >= 3)
{
echo "<p>table2content: content ="; _debug_array($content);
echo "<p>table2content(,,'$extra_index'): content ="; _debug_array($content);
echo "<p>columns ="; _debug_array($columns);
}
return $content;
}
@ -392,7 +449,7 @@
{
switch ($col['type']) // set some defaults for precision, else setup fails
{
case 'float':
case 'float':
case 'int': $col['precision'] = 4; break;
case 'char': $col['precision'] = 1; break;
case 'varchar': $col['precision'] = 255; break;
@ -423,7 +480,23 @@
case 'ix':
if ($val)
{
$table[$prop][] = $name;
if ($col['options'])
{
$opts = array();
foreach(explode(',',$col['options']) as $opt)
{
list($db,$opt) = split('[(:)]',$opt);
$opts[$db] = is_numeric($opt) ? intval($opt) : $opt;
}
$table[$prop][] = array(
$name,
'options' => $opts
);
}
else
{
$table[$prop][] = $name;
}
}
break;
case 'fk':
@ -434,6 +507,29 @@
break;
}
}
$num2col[$n] = $col['name'];
}
}
foreach($content['Index'] as $n => $index)
{
$idx_arr = array();
foreach($index as $key => $num)
{
if (is_numeric($key) && $num && @$num2col[$num])
{
$idx_arr[] = $num2col[$num];
}
}
if (count($idx_arr) && !isset($content['delete_index'][$n]))
{
if ($index['unique'])
{
$table['uc'][] = $idx_arr;
}
else
{
$table['ix'][] = $idx_arr;
}
}
}
if ($this->debug >= 2)
@ -480,10 +576,6 @@
if (in_array($parent,array('pk','fk','ix','uc')))
{
$depth = 0;
if ($parent != 'fk')
{
$only_vals = True;
}
}
if ($depth)
{
@ -499,17 +591,17 @@
$n = 0;
foreach($arr as $key => $val)
{
if (!$only_vals)
if (!is_int($key))
{
$def .= "'$key' => ";
}
if (is_array($val))
{
$def .= $this->write_array($val,$parent == 'fd' ? 0 : $depth,$key,$only_vals);
$def .= $this->write_array($val,$parent == 'fd' ? 0 : $depth,$key);
}
else
{
if (!$only_vals && $key == 'nullable')
if (!$only_vals && $key === 'nullable')
{
$def .= $val ? 'True' : 'False';
}
@ -857,6 +949,37 @@
return $update;
}
/*!
@function normalize_index
@abstract orders the single-colum-indices after the columns and the multicolunm ones bedind
@syntax normalize_index( $index,$cols )
@param index array with indices
@param cols array with column-defs (col-name in key)
@author ralfbecker
@result the new array
*/
function normalize_index($index,$cols)
{
$normalized = array();
foreach($cols as $col => $data)
{
foreach($index as $n => $idx)
{
if ($idx == $col || is_array($idx) && $idx[0] == $col && !isset($idx[1]))
{
$normalized[] = isset($idx['options']) ? $idx : $col;
unset($index[$n]);
break;
}
}
}
foreach($index as $idx)
{
$normalized[] = $idx;
}
return $normalized;
}
/*!
@function normalize
@syntax normalize( $table )
@ -882,8 +1005,8 @@
'fd' => $table['fd'],
'pk' => $table['pk'],
'fk' => $table['fk'],
'ix' => $table['ix'],
'uc' => $table['uc']
'ix' => $this->normalize_index($table['ix'],$table['fd']),
'uc' => $this->normalize_index($table['uc'],$table['fd'])
);
}

View File

@ -1,5 +1,5 @@
<?php
// eTemplates for Application 'etemplate', generated by etemplate.dump() 2003-09-25 03:23
// eTemplates for Application 'etemplate', generated by etemplate.dump() 2003-10-26 18:35
/* $Id$ */
@ -141,3 +141,9 @@ $templ_data[] = array('name' => 'etemplate.nextmatch_widget.nm_row','template' =
$templ_data[] = array('name' => 'etemplate.db-tools.cols','template' => '','lang' => '','group' => '0','version' => '0.9.15.002','data' => 'a:3:{i:0;a:2:{s:2:\"c1\";s:3:\"nmh\";s:2:\"c2\";s:3:\"nmr\";}i:1;a:12:{s:1:\"A\";a:4:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:1:\"#\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";}s:1:\"B\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"C\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:4:\"Type\";}s:1:\"D\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:9:\"Precision\";}s:1:\"E\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:5:\"Scale\";}s:1:\"F\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:8:\"NOT NULL\";}s:1:\"G\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:6:\"Unique\";}s:1:\"H\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:11:\"Primary Key\";}s:1:\"I\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:7:\"Indexed\";}s:1:\"J\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:11:\"Foreign Key\";}s:1:\"K\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:7:\"Default\";}s:1:\"L\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:10:\"Add Column\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:10:\"add_column\";s:4:\"help\";s:42:\"Add a new column (after the existing ones)\";}}i:2;a:12:{s:1:\"A\";a:4:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:12:\"Row${row}[n]\";}s:1:\"B\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"20\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:15:\"Row${row}[name]\";s:4:\"help\";s:127:\"need to be unique in the table and no reseved word from SQL, best prefix all with a common 2-digit short for the app, eg. \'et_\'\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"select\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:15:\"Row${row}[type]\";s:4:\"help\";s:18:\"type of the column\";}s:1:\"D\";a:4:{s:4:\"type\";s:3:\"int\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:20:\"Row${row}[precision]\";s:4:\"help\";s:64:\"length for char+varchar, precisions int: 2, 4, 8 and float: 4, 8\";}s:1:\"E\";a:3:{s:4:\"type\";s:3:\"int\";s:4:\"name\";s:16:\"Row${row}[scale]\";s:4:\"help\";s:15:\"scale for float\";}s:1:\"F\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:18:\"Row${row}[notnull]\";s:4:\"help\";s:35:\"can not have special SQL-value NULL\";}s:1:\"G\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[uc]\";s:4:\"help\";s:59:\"DB ensures that every row has a unique value in that column\";}s:1:\"H\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[pk]\";s:4:\"help\";s:52:\"Primary key for the table, gets automaticaly indexed\";}s:1:\"I\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[ix]\";s:4:\"help\";s:81:\"an indexed column speeds up querys using that column (cost space on the disk !!!)\";}s:1:\"J\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"20\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[fk]\";s:4:\"help\";s:46:\"name of other table where column is a key from\";}s:1:\"K\";a:4:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"20\";s:4:\"name\";s:18:\"Row${row}[default]\";s:4:\"help\";s:54:\"enter \'\' for an empty default, nothing mean no default\";}s:1:\"L\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:13:\"Delete Column\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:12:\"delete[$row]\";s:4:\"help\";s:19:\"Deletes this column\";}}}','size' => '','style' => '','modified' => '1064452548',);
$templ_data[] = array('name' => 'etemplate.db-tools.cols','template' => '','lang' => '','group' => '0','version' => '0.9.15.003','data' => 'a:3:{i:0;a:2:{s:2:\"c1\";s:3:\"nmh\";s:2:\"c2\";s:3:\"nmr\";}i:1;a:13:{s:1:\"A\";a:4:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:1:\"#\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";}s:1:\"B\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"C\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:4:\"Type\";}s:1:\"D\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:9:\"Precision\";}s:1:\"E\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:5:\"Scale\";}s:1:\"F\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:8:\"NOT NULL\";}s:1:\"G\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:11:\"Primary Key\";}s:1:\"H\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:6:\"Unique\";}s:1:\"I\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:7:\"Indexed\";}s:1:\"J\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:12:\"Indexoptions\";}s:1:\"K\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:11:\"Foreign Key\";}s:1:\"L\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:7:\"Default\";}s:1:\"M\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:10:\"Add Column\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:10:\"add_column\";s:4:\"help\";s:42:\"Add a new column (after the existing ones)\";}}i:2;a:13:{s:1:\"A\";a:4:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:12:\"Row${row}[n]\";}s:1:\"B\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"15\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:15:\"Row${row}[name]\";s:4:\"help\";s:127:\"need to be unique in the table and no reseved word from SQL, best prefix all with a common 2-digit short for the app, eg. \'et_\'\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"select\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:15:\"Row${row}[type]\";s:4:\"help\";s:18:\"type of the column\";}s:1:\"D\";a:4:{s:4:\"type\";s:3:\"int\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:20:\"Row${row}[precision]\";s:4:\"help\";s:64:\"length for char+varchar, precisions int: 2, 4, 8 and float: 4, 8\";}s:1:\"E\";a:3:{s:4:\"type\";s:3:\"int\";s:4:\"name\";s:16:\"Row${row}[scale]\";s:4:\"help\";s:15:\"scale for float\";}s:1:\"F\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:18:\"Row${row}[notnull]\";s:4:\"help\";s:35:\"can not have special SQL-value NULL\";}s:1:\"G\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[pk]\";s:4:\"help\";s:52:\"Primary key for the table, gets automaticaly indexed\";}s:1:\"H\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[uc]\";s:4:\"help\";s:59:\"DB ensures that every row has a unique value in that column\";}s:1:\"I\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[ix]\";s:4:\"help\";s:81:\"an indexed column speeds up querys using that column (cost space on the disk !!!)\";}s:1:\"J\";a:4:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"15\";s:4:\"name\";s:18:\"Row${row}[options]\";s:4:\"help\";s:105:\"DB-specific index options (comma-sep.), eg. mysql(FULLTEXT) or mysql(100) for the indexed length of a col\";}s:1:\"K\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"20\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:13:\"Row${row}[fk]\";s:4:\"help\";s:46:\"name of other table where column is a key from\";}s:1:\"L\";a:4:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:1:\"8\";s:4:\"name\";s:18:\"Row${row}[default]\";s:4:\"help\";s:54:\"enter \'\' for an empty default, nothing mean no default\";}s:1:\"M\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:13:\"Delete Column\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:12:\"delete[$row]\";s:4:\"help\";s:19:\"Deletes this column\";}}}','size' => '','style' => '','modified' => '1067163210',);
$templ_data[] = array('name' => 'etemplate.db-tools.edit','template' => '','lang' => '','group' => '0','version' => '0.9.15.002','data' => 'a:4:{i:0;a:1:{s:1:\"D\";s:2:\"1%\";}i:1;a:7:{s:1:\"A\";a:7:{s:4:\"type\";s:10:\"select-app\";s:4:\"size\";s:19:\"Select one ...,,all\";s:5:\"label\";s:11:\"Application\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:3:\"app\";s:8:\"onchange\";s:1:\"1\";s:4:\"help\";s:40:\"Select an application, (*) = uninstalled\";}s:1:\"B\";a:6:{s:4:\"type\";s:6:\"select\";s:5:\"label\";s:9:\"TableName\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:10:\"table_name\";s:8:\"onchange\";s:1:\"1\";s:4:\"help\";s:34:\"Select an table of the application\";}s:1:\"C\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"20\";s:5:\"align\";s:5:\"right\";s:4:\"name\";s:14:\"new_table_name\";s:4:\"help\";s:20:\"Name of table to add\";}s:1:\"D\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:9:\"Add Table\";s:4:\"name\";s:9:\"add_table\";s:4:\"help\";s:38:\"Create a new table for the application\";}s:1:\"E\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:6:\"Import\";s:4:\"name\";s:6:\"import\";s:4:\"help\";s:47:\"Import table-definitions from existing db-table\";}s:1:\"F\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:10:\"Drop Table\";s:4:\"name\";s:10:\"drop_table\";s:8:\"disabled\";s:1:\"1\";s:4:\"help\";s:37:\"Drop a table - this can NOT be undone\";}s:1:\"G\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:12:\"Write Tables\";s:4:\"name\";s:12:\"write_tables\";s:4:\"help\";s:40:\"Write <app>/setup/tables_current.inc.php\";}}i:2;a:7:{s:1:\"A\";a:3:{s:4:\"type\";s:8:\"template\";s:4:\"span\";s:3:\"all\";s:4:\"name\";s:23:\"etemplate.db-tools.cols\";}s:1:\"B\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"D\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"E\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"F\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"G\";a:1:{s:4:\"type\";s:5:\"label\";}}i:3;a:7:{s:1:\"A\";a:3:{s:4:\"type\";s:8:\"template\";s:4:\"span\";s:3:\"all\";s:4:\"name\";s:26:\"etemplate.db-tools.indices\";}s:1:\"B\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"D\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"E\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"F\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"G\";a:1:{s:4:\"type\";s:5:\"label\";}}}','size' => '100%','style' => '','modified' => '1067164025',);
$templ_data[] = array('name' => 'etemplate.db-tools.indices','template' => '','lang' => '','group' => '0','version' => '0.9.15.001','data' => 'a:4:{i:0;a:3:{s:2:\"c1\";s:2:\"th\";s:2:\"c2\";s:2:\"th\";s:2:\"c3\";s:3:\"row\";}i:1;a:8:{s:1:\"A\";a:3:{s:4:\"type\";s:5:\"label\";s:4:\"span\";s:3:\"all\";s:5:\"label\";s:19:\"Multicolumn Indices\";}s:1:\"B\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"D\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"E\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"F\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"G\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"H\";a:1:{s:4:\"type\";s:5:\"label\";}}i:2;a:8:{s:1:\"A\";a:4:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:1:\"#\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";}s:1:\"B\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"C\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"D\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"E\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"F\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:10:\"ColumnName\";}s:1:\"G\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:6:\"Unique\";}s:1:\"H\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:9:\"Add Index\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:9:\"add_index\";s:4:\"help\";s:28:\"Add a new multi-column index\";}}i:3;a:8:{s:1:\"A\";a:4:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:14:\"Index[$row][n]\";}s:1:\"B\";a:5:{s:4:\"type\";s:6:\"select\";s:4:\"size\";s:4:\"none\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:14:\"Index[$row][0]\";s:4:\"help\";s:49:\"Select the indexed columns in their desired order\";}s:1:\"C\";a:6:{s:4:\"type\";s:6:\"select\";s:4:\"size\";s:4:\"none\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:14:\"Index[$row][1]\";s:4:\"help\";s:49:\"Select the indexed columns in their desired order\";}s:1:\"D\";a:5:{s:4:\"type\";s:6:\"select\";s:4:\"size\";s:4:\"none\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:14:\"Index[$row][2]\";s:4:\"help\";s:49:\"Select the indexed columns in their desired order\";}s:1:\"E\";a:6:{s:4:\"type\";s:6:\"select\";s:4:\"size\";s:4:\"none\";s:7:\"no_lang\";s:1:\"1\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:14:\"Index[$row][3]\";s:4:\"help\";s:49:\"Select the indexed columns in their desired order\";}s:1:\"F\";a:5:{s:4:\"type\";s:6:\"select\";s:4:\"size\";s:4:\"none\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:14:\"Index[$row][4]\";s:4:\"help\";s:49:\"Select the indexed columns in their desired order\";}s:1:\"G\";a:4:{s:4:\"type\";s:8:\"checkbox\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:19:\"Index[$row][unique]\";s:4:\"help\";s:59:\"DB ensures that every row has a unique value in that column\";}s:1:\"H\";a:5:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:12:\"Delete Index\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:18:\"delete_index[$row]\";s:4:\"help\";s:18:\"Deletes this index\";}}}','size' => '','style' => '','modified' => '1067173445',);

View File

@ -11,7 +11,9 @@
%s readonly etemplate de %s Schreibschutz
a pattern to be searched for etemplate de ein Muster nach dem gesucht werden soll
add a new column (after the existing ones) etemplate de Neue Spalte hinzufügen (hinter den bestehenden)
add a new multi-column index etemplate de Fügt einen mehrspaltigen Index hinzu
add column etemplate de Spalte zufügen
add index etemplate de Index zufügen
add table etemplate de Tabelle zufügen
align etemplate de Ausrichtung
alignment of label and input-field in table-cell etemplate de Ausrichtung der Beschriftung und des Eingabefeldes in der Tabellenzelle
@ -52,6 +54,7 @@ date+time etemplate de Datum+Uhrzeit
datum etemplate de Datum
day etemplate de Tag
db ensures that every row has a unique value in that column etemplate de die Datenbank stelt sicher das alle Zeilen einen einmaligen Wert in dieser Spalte haben
db-specific index options (comma-sep.), eg. mysql(fulltext) or mysql(100) for the indexed length of a col etemplate de DB-spezifische Index-Optionen (Komma-getrennt), zB. mysql(FULLTEXT) oder mysql(100) für die indizierte Länge der Spalte
db-tools etemplate de DB-Tools
deck etemplate de Deck (intern)
default etemplate de Vorgabe
@ -59,11 +62,13 @@ delete etemplate de L
delete a single entry by passing the id. etemplate de Löscht einen einzelnen Eintrag über seine Id.
delete all selected etemplates, without further inquiry etemplate de löscht ALLE ausgewählten eTemplates OHNE weitere Rückfrage
delete column etemplate de Spalte löschen
delete index etemplate de Index löschen
delete this etemplate etemplate de dieses eTemplate löschen
delete whole column (can not be undone!!!) etemplate de ganze Zeile löschen (kann NICHT rückgängig gemacht werden)
deletes the above spez. etemplate from the database, can not be undone etemplate de löscht das oben spezifiziert eTemplate aus der Datenbank, kann NICHT rückgängig gemacht werden
deletes the etemplate spez. above etemplate de löscht das oben spezifizierte eTemplate
deletes this column etemplate de Löscht diese Spalte
deletes this index etemplate de Löscht diesen Index
discard changes etemplate de verwirft Änderungen
displayed in front of input or input is inserted for a '%s' in the label (label of the submitbutton or image-filename) etemplate de wird vor dem Eingabefeld angezeigt oder das Feld wird für ein '%s' eingefügt (Beschriftung einer Schaltfläche oder Dateiname eine Grafik)
displayed in statusline of browser if input-field gets focus etemplate de wird in der Statuszeile des Browsers angezeit, wenn das Eingabefeld angesprochen wird
@ -128,6 +133,7 @@ import table-definitions from existing db-table etemplate de Importiert die Tabe
import xml etemplate de XML Import
index/name of returned content (name of the template, link / method for image) etemplate de Index / Name des zurückgelieferten Inhalts (Name des eTemplates oder Link/Methode für Grafik)
indexed etemplate de Indiziert
indexoptions etemplate de Indexoptionen
insert new column behind this one etemplate de Neue Spalte hinter dieser einfügen
insert new column in front of all etemplate de Neue Spalte vor dieser einfüben
insert new row after this one etemplate de Neue Zeile nach dieser einfügen
@ -148,6 +154,7 @@ linkto etemplate de Verk
load this template into the editor etemplate de lädt diese Template zum Bearbeiten
minute etemplate de Minute
month etemplate de Monat
multicolumn indices etemplate de Mehrspaltige Indices
name etemplate de Name
name of other table where column is a key from etemplate de Name der anderen Tabelle von der diese Spalte ein Schlüssel ist
name of phpgw-template set (e.g. verdilak): '' = default (will read pref. template, us 'default' to read default template '') etemplate de Name des phpGW layouts (zb. verdilak): '' = Standard (ließt das bevorzugte Layout, benutze 'default' um das standard Layout '' zu lesen)
@ -212,6 +219,7 @@ select one ... etemplate de Eine ausw
select percentage etemplate de Prozente auswählen
select priority etemplate de Priorität auswählen
select state etemplate de US-State auswählen
select the indexed columns in their desired order etemplate de Zu indizierende Spalten in der gewünchten Reihenfolge auswählen
select this etemplate to delete it etemplate de dieses eTemplate zum Löschen auswählen
select year etemplate de Jahr auswählen
selectbox etemplate de Auswahlbox

View File

@ -11,7 +11,9 @@
%s readonly etemplate en %s readonly
a pattern to be searched for etemplate en a pattern to be searched for
add a new column (after the existing ones) etemplate en Add a new column (after the existing ones)
add a new multi-column index etemplate en Add a new multi-column index
add column etemplate en Add Column
add index etemplate en Add Index
add table etemplate en Add Table
align etemplate en Align
alignment of label and input-field in table-cell etemplate en alignment of label and input-field in table-cell
@ -52,6 +54,7 @@ date+time etemplate en Date+Time
datum etemplate en Datum
day etemplate en Day
db ensures that every row has a unique value in that column etemplate en DB ensures that every row has a unique value in that column
db-specific index options (comma-sep.), eg. mysql(fulltext) or mysql(100) for the indexed length of a col etemplate en db-specific index options (comma-sep.), eg. mysql(FULLTEXT) or mysql(100) for the indexed length of a col
db-tools etemplate en DB-Tools
deck etemplate en Deck (internal)
default etemplate en Default
@ -59,11 +62,13 @@ delete etemplate en Delete
delete a single entry by passing the id. etemplate en Delete a single entry by passing the id.
delete all selected etemplates, without further inquiry etemplate en delete ALL selected eTemplates, WITHOUT further inquiry
delete column etemplate en Delete Column
delete index etemplate en Delete Index
delete this etemplate etemplate en delete this eTemplate
delete whole column (can not be undone!!!) etemplate en delete whole column (can NOT be undone!!!)
deletes the above spez. etemplate from the database, can not be undone etemplate en deletes the above spez. eTemplate from the database, can NOT be undone
deletes the etemplate spez. above etemplate en deletes the eTemplate spez. above
deletes this column etemplate en Deletes this column
deletes this index etemplate en Deletes this index
discard changes etemplate en discard changes
displayed in front of input or input is inserted for a '%s' in the label (label of the submitbutton or image-filename) etemplate en displayed in front of input or input is inserted for a '%s' in the label (label of the Submitbutton or Image-filename)
displayed in statusline of browser if input-field gets focus etemplate en displayed in statusline of browser if input-field gets focus
@ -128,6 +133,7 @@ import table-definitions from existing db-table etemplate en Import table-defini
import xml etemplate en Import XML
index/name of returned content (name of the template, link / method for image) etemplate en index/name of returned content (name of the Template, Link / Method for Image)
indexed etemplate en Indexed
indexoptions etemplate en Indexoptions
insert new column behind this one etemplate en insert new column behind this one
insert new column in front of all etemplate en insert new column in front of all
insert new row after this one etemplate en insert new row after this one
@ -148,6 +154,7 @@ linkto etemplate en LinkTo
load this template into the editor etemplate en load this template into the editor
minute etemplate en Minute
month etemplate en Month
multicolumn indices etemplate en Multicolumn Indices
name etemplate en Name
name of other table where column is a key from etemplate en name of other table where column is a key from
name of phpgw-template set (e.g. verdilak): '' = default (will read pref. template, us 'default' to read default template '') etemplate en name of phpgw-template set (e.g. verdilak): '' = default (will read pref. template, us 'default' to read default template '')
@ -212,6 +219,7 @@ select one ... etemplate en Select One ...
select percentage etemplate en Select Percentage
select priority etemplate en Select Priority
select state etemplate en Select State
select the indexed columns in their desired order etemplate en Select the indexed columns in their desired order
select this etemplate to delete it etemplate en select this eTemplate to delete it
select year etemplate en Select Year
selectbox etemplate en Selectbox