Index: kbase.php =================================================================== --- kbase.php (revision 14653) +++ kbase.php (working copy) @@ -418,7 +418,7 @@ $this->defineFields(); - $this->ApplyFieldModifiers(); // should be called only after all fields definitions been set + $this->ApplyFieldModifiers(null, true); // should be called only after all fields definitions been set $this->prepareConfigOptions(); // this should go last, but before setDefaultValues, order is significant! $this->SetDefaultValues($populate_ml_fields); @@ -477,18 +477,19 @@ * @access private * @author Alex */ - function ApplyFieldModifiers($field_modifiers = null) + function ApplyFieldModifiers($field_modifiers = null, $from_submit = false) { - $allowed_modifiers = Array('required', 'multiple'); + $allowed_modifiers = Array ('required', 'multiple'); - if ($this->Application->isAdminUser) { + if ( $this->Application->isAdminUser ) { // can change upload dir on the fly (admin only!) $allowed_modifiers[] = 'upload_dir'; } - if (!isset($field_modifiers)) { + if ( !isset($field_modifiers) ) { $field_modifiers = $this->Application->GetVar('field_modifiers'); - if (!$field_modifiers) { + + if ( !$field_modifiers ) { // no field modifiers return false; } @@ -496,19 +497,38 @@ $field_modifiers = getArrayValue($field_modifiers, $this->getPrefixSpecial()); } - if (!$field_modifiers) { + if ( !$field_modifiers ) { // no field modifiers for current prefix_special return false; } - foreach ($field_modifiers as $field => $field_options) - { - foreach ($field_options as $option_name => $option_value) - { - if ( !in_array(strtolower($option_name), $allowed_modifiers) ) continue; + $fields = $this->Application->getUnitOption($this->Prefix, 'Fields', Array ()); + $virtual_fields = $this->Application->getUnitOption($this->Prefix, 'VirtualFields', Array ()); + + foreach ($field_modifiers as $field => $field_options) { + foreach ($field_options as $option_name => $option_value) { + if ( !in_array(strtolower($option_name), $allowed_modifiers) ) { + continue; + } + + if ( $from_submit ) { + // there are no "lN_FieldName" fields, since ApplyFieldModifiers is + // called before PrepareOptions method, which creates them + $field = preg_replace('/^l[\d]+_(.*)/', '\\1', $field); + } + + if ( isset($this->VirtualFields[$field]) ) { + $virtual_fields[$field][$option_name] = $option_value; + $this->VirtualFields[$field][$option_name] = $option_value; + } + + $fields[$field][$option_name] = $option_value; $this->Fields[$field][$option_name] = $option_value; } } + + $this->Application->setUnitOption($this->Prefix, 'Fields', $fields); + $this->Application->setUnitOption($this->Prefix, 'VirtualFields', $virtual_fields); } /**