allow to group fields in forms

This commit is contained in:
Crack
2010-07-03 19:02:54 +02:00
parent 49c2562eae
commit 9130ebb7b6
5 changed files with 99 additions and 8 deletions

View File

@@ -84,6 +84,8 @@ $cfg_db['Export']['format'] = array('codegen', 'csv', 'excel', 'htmlexcel',
$cfg_db['Export']['compression'] = array('none', 'zip', 'gzip', 'bzip2'); $cfg_db['Export']['compression'] = array('none', 'zip', 'gzip', 'bzip2');
$cfg_db['Export']['charset'] = array_merge(array(''), $GLOBALS['cfg']['AvailableCharsets']); $cfg_db['Export']['charset'] = array_merge(array(''), $GLOBALS['cfg']['AvailableCharsets']);
$cfg_db['Export']['codegen_format'] = array('#', 'NHibernate C# DO', 'NHibernate XML'); $cfg_db['Export']['codegen_format'] = array('#', 'NHibernate C# DO', 'NHibernate XML');
$cfg_db['Export']['excel_edition'] = array('win' => 'Windows',
'mac_excel2003' => 'Excel 2003 / Macintosh', 'mac_excel2008' => 'Excel 2008 / Macintosh');
/** /**
* Default values overrides * Default values overrides

View File

@@ -88,13 +88,25 @@ class Form
trigger_error("$option_path - not a static value list", E_USER_ERROR); trigger_error("$option_path - not a static value list", E_USER_ERROR);
return array(); return array();
} }
// convert value list array('a', 'b') to array('a' => 'a', 'b' => 'b') // convert array('#', 'a', 'b') to array('a', 'b')
// and array('#', 'a', 'b') to array('a', 'b') if (isset($value[0]) && $value[0] == '#') {
if ($value[0] == '#') { // remove first element ('#')
array_shift($value); array_shift($value);
return $value; } else {
// convert value list array('a', 'b') to array('a' => 'a', 'b' => 'b')
$has_string_keys = false;
for ($i = 0; $i < count($value); $i++) {
if (!isset($value[$i])) {
$has_string_keys = true;
break;
} }
return array_combine($value, $value); }
if (!$has_string_keys) {
$value = array_combine($value, $value);
}
}
// $value has keys and value names, return it
return $value;
} }
/** /**
@@ -148,6 +160,10 @@ class Form
{ {
$cf = ConfigFile::getInstance(); $cf = ConfigFile::getInstance();
foreach ($this->fields as $name => $path) { foreach ($this->fields as $name => $path) {
if (strpos($name, ':group:') === 0) {
$this->fieldsTypes[$name] = 'group';
continue;
}
$v = $cf->getDbEntry($path); $v = $cf->getDbEntry($path);
if ($v !== null) { if ($v !== null) {
$type = is_array($v) ? 'select' : $v; $type = is_array($v) ? 'select' : $v;

View File

@@ -327,6 +327,14 @@ class FormDisplay
$value = (array) $value; $value = (array) $value;
$value_default = (array) $value_default; $value_default = (array) $value_default;
break; break;
case 'group':
$text = substr($field, 7);
if ($text != 'end') {
display_group_header($text);
} else {
display_group_footer();
}
return;
case 'NULL': case 'NULL':
trigger_error("Field $system_path has no type", E_USER_WARNING); trigger_error("Field $system_path has no type", E_USER_WARNING);
return; return;

View File

@@ -66,6 +66,10 @@ function display_tabs_top($tabs) {
*/ */
function display_fieldset_top($title = '', $description = '', $errors = null, $attributes = array()) function display_fieldset_top($title = '', $description = '', $errors = null, $attributes = array())
{ {
global $_FormDisplayGroup;
$_FormDisplayGroup = false;
$attributes = array_merge(array('class' => 'optbox'), $attributes); $attributes = array_merge(array('class' => 'optbox'), $attributes);
foreach ($attributes as $k => &$attr) { foreach ($attributes as $k => &$attr) {
$attr = $k . '="' . htmlspecialchars($attr) . '"'; $attr = $k . '="' . htmlspecialchars($attr) . '"';
@@ -113,6 +117,7 @@ function display_fieldset_top($title = '', $description = '', $errors = null, $a
*/ */
function display_input($path, $name, $description = '', $type, $value, $value_is_default = true, $opts = null) function display_input($path, $name, $description = '', $type, $value, $value_is_default = true, $opts = null)
{ {
global $_FormDisplayGroup;
static $base_dir, $img_path; static $base_dir, $img_path;
$is_setup_script = defined('PMA_SETUP') && PMA_SETUP; $is_setup_script = defined('PMA_SETUP') && PMA_SETUP;
@@ -129,8 +134,17 @@ function display_input($path, $name, $description = '', $type, $value, $value_is
} }
$field_class = $field_class ? ' class="' . $field_class . '"' : ''; $field_class = $field_class ? ' class="' . $field_class . '"' : '';
$name_id = 'name="' . $path . '" id="' . $path . '"'; $name_id = 'name="' . $path . '" id="' . $path . '"';
$tr_class = $_FormDisplayGroup ? ' class="group-field"' : '';
if (isset($opts['setvalue']) && $opts['setvalue'] == ':group') {
unset($opts['setvalue']);
$tr_class = ' class="group-header"';
if ($_FormDisplayGroup) {
display_group_footer();
}
$_FormDisplayGroup = true;
}
?> ?>
<tr> <tr<?php echo $tr_class ?>>
<th> <th>
<label for="<?php echo htmlspecialchars($path) ?>"><?php echo $name ?></label> <label for="<?php echo htmlspecialchars($path) ?>"><?php echo $name ?></label>
<?php if (!empty($opts['doc']) || !empty($opts['wiki'])): ?> <?php if (!empty($opts['doc']) || !empty($opts['wiki'])): ?>
@@ -229,9 +243,46 @@ function display_input($path, $name, $description = '', $type, $value, $value_is
} }
/** /**
* Displays bottom part of a fieldset * Display group header
* *
* @param array $js_array * @param string $header_text
*/
function display_group_header($header_text)
{
global $_FormDisplayGroup;
if ($_FormDisplayGroup) {
display_group_footer();
}
$_FormDisplayGroup = true;
if (!$header_text) {
return;
}
$colspan = 2;
if (defined('PMA_SETUP') && PMA_SETUP) {
$colspan++;
}
?>
<tr class="group-header">
<th colspan="<?php echo $colspan ?>">
<?php echo $header_text ?>
</th>
</tr>
<?php
}
/**
* Display group footer
*/
function display_group_footer()
{
global $_FormDisplayGroup;
$_FormDisplayGroup = false;
}
/**
* Displays bottom part of a fieldset
*/ */
function display_fieldset_bottom() function display_fieldset_bottom()
{ {

View File

@@ -286,6 +286,20 @@ fieldset th, fieldset td, .form .lastrow {
border-top: 1px #555 dotted; border-top: 1px #555 dotted;
} }
fieldset .group-header th, fieldset .group-header td {
background: #F7FBFF;
border: 0 #DEE1FF solid;
border-width: 2px 0 0 0.5em;
}
fieldset .group-header td {
border-left: none;
}
fieldset .group-field th {
padding-left: 1em;
}
fieldset .lastrow, .form .lastrow { fieldset .lastrow, .form .lastrow {
background: #F7FBFF; background: #F7FBFF;
padding: 0.5em; padding: 0.5em;