Index: trunk/core/units/admin/admin_events_handler.php
===================================================================
diff -u -r7887 -r7991
--- trunk/core/units/admin/admin_events_handler.php (.../admin_events_handler.php) (revision 7887)
+++ trunk/core/units/admin/admin_events_handler.php (.../admin_events_handler.php) (revision 7991)
@@ -53,17 +53,29 @@
echo 'error: no table name specified';
return ;
}
-
- if (!preg_match('/^'.preg_quote(TABLE_PREFIX, '/').'(.*)/', $table_name)) {
+
+ if (TABLE_PREFIX && !preg_match('/^'.preg_quote(TABLE_PREFIX, '/').'(.*)/', $table_name)) {
+ // table name without prefix, then add it
$table_name = TABLE_PREFIX.$table_name;
}
+ if (!$this->Conn->TableFound($table_name)) {
+ // table with prefix doesn't exist, assume that just config prefix passed -> resolve table name from it
+ $table_name = $this->Application->getUnitOption(substr($table_name, strlen(TABLE_PREFIX)), 'TableName');
+ }
+
$table_info = $this->Conn->Query('DESCRIBE '.$table_name);
// 1. prepare config keys
+ $id_field = '';
$fields = Array();
$float_types = Array ('float', 'double', 'numeric');
foreach ($table_info as $field_info) {
+ if (preg_match('/l[\d]+_.*/', $field_info['Field'])) {
+ // don't put multilingual fields in config
+ continue;
+ }
+
$field_options = Array ();
// 1. get php field type by mysql field type
@@ -76,49 +88,78 @@
$default_value = $field_info['Default'];
if (in_array($php_type, $float_types)) {
- // this is float number, add formatter
+ // this is float number
if (preg_match('/'.$db_types.'\([\d]+,([\d]+)\)/i', $field_info['Type'], $regs)) {
+ // size is described in structure -> add formatter
$field_options['formatter'] = 'kFormatter';
$field_options['format'] = '%01.'.$regs[1].'f';
$default_value = 0;
}
+ else {
+ // no size information, just convert to float
+ $default_value = (float)$default_value;
+ }
}
+ if (preg_match('/varchar\(([\d]+)\)/i', $field_info['Type'], $regs)) {
+ $field_options['max_len'] = (int)$regs[1];
+ }
+
if ($field_info['Null'] != 'YES') {
$field_options['not_null'] = 1;
}
if ($field_info['Key'] == 'PRI') {
$default_value = 0;
- $config['IDField'] = "'".$field_info['Field']."'";
+ $id_field = $field_info['Field'];
}
- $field_options['default'] = $default_value;
-
- // format config keys
- $ret = '';
- foreach ($field_options as $key_name => $key_value) {
- if (!preg_match('/^[-\d]+$/', $key_value)) {
- // if not only digits are present, then treat as string
- $key_value = "'".$key_value."'";
- }
-
- $ret .= "'".$key_name."' => ".$key_value.', ';
+ if ($php_type == 'int' && ($field_info['Null'] != 'YES' || is_numeric($default_value))) {
+ // is integer field AND not null
+ $field_options['default'] = (int)$default_value;
}
+ else {
+ $field_options['default'] = $default_value;
+ }
- $fields[ $field_info['Field'] ] = 'Array('.rtrim($ret,',').')';
+ $fields[ $field_info['Field'] ] = $this->transformDump($field_options);
}
-
- $config['Fields'] = $fields;
-
- echo 'Close Window
';
- $ret = print_r($config, true);
- $ret = preg_replace( Array('/\[(.*)\]/',"/(.*)\)/"), Array("'\\1'",'\\1),'), $ret);
- print_pre($ret, '', true);
+ $ret = stripslashes(var_export($fields, true));
+ $ret = preg_replace("/'(.*?)' => 'Array \((.*?), \)',/", "'\\1' => Array (\\2),", $ret);
+ $ret = preg_replace("/\n '/", "\n\t'", $ret);
+ $ret = "'IDField' => '".$id_field."',\n'Fields' => A".substr($ret, 1).',';
+
+ ob_start();
+ ?>
+
+