Index: branches/5.2.x/core/kernel/kbase.php =================================================================== diff -u -N -r14244 -r14596 --- branches/5.2.x/core/kernel/kbase.php (.../kbase.php) (revision 14244) +++ branches/5.2.x/core/kernel/kbase.php (.../kbase.php) (revision 14596) @@ -1,6 +1,6 @@ populateMultiLangFields = $populate_ml_fields; @@ -420,6 +435,7 @@ $this->IDField = $this->Application->getUnitOption($this->Prefix, 'IDField'); $this->TableName = $this->Application->getUnitOption($this->Prefix, 'TableName'); + $this->initForm($form_name); $this->defineFields(); $this->ApplyFieldModifiers(); // should be called only after all fields definitions been set @@ -432,26 +448,78 @@ } /** + * Adjusts object accoding to given form name + * + */ + protected function initForm($form_name = null) + { + $forms = $this->Application->getUnitOption($this->Prefix, 'Forms', Array ()); + + $this->formName = $form_name; + $this->formConfig = isset($forms['default']) ? $forms['default'] : Array (); + + if ( !$this->formName ) { + return ; + } + + if ( !isset($forms[$this->formName]) ) { + trigger_error('Form "' . $this->formName . '" isn\'t declared in "' . $this->Prefix . '" unit config.', E_USER_NOTICE); + } + else { + $this->formConfig = kUtil::array_merge_recursive($this->formConfig, $forms[$this->formName]); + } + } + + /** * Add field definitions from all possible sources * Used field sources: database fields, custom fields, virtual fields, calculated fields, aggregated calculated fields * * @access protected */ protected function defineFields() { - $this->Fields = $this->Application->getUnitOption($this->Prefix, 'Fields', Array ()); - $this->customFields = $this->Application->getUnitOption($this->Prefix, 'CustomFields', Array()); + $this->Fields = $this->getFormOption('Fields', Array ()); + $this->customFields = $this->getFormOption('CustomFields', Array()); - $this->setVirtualFields( $this->Application->getUnitOption($this->Prefix, 'VirtualFields', Array ()) ); + $this->setVirtualFields( $this->getFormOption('VirtualFields', Array ()) ); - $calculated_fields = $this->Application->getUnitOption($this->Prefix, 'CalculatedFields', Array()); + $calculated_fields = $this->getFormOption('CalculatedFields', Array()); $this->CalculatedFields = $this->getFieldsBySpecial($calculated_fields); - $aggregated_calculated_fields = $this->Application->getUnitOption($this->Prefix, 'AggregatedCalculatedFields', Array()); + $aggregated_calculated_fields = $this->getFormOption('AggregatedCalculatedFields', Array()); $this->AggregatedCalculatedFields = $this->getFieldsBySpecial($aggregated_calculated_fields); } /** + * Returns form name, used for validation + * + * @return string + */ + public function getFormName() + { + return $this->formName; + } + + /** + * Reads unit (specified by $prefix) option specified by $option and applies form change to it + * + * @param string $option + * @param mixed $default + * @return string + * @access public + */ + public function getFormOption($option, $default = false) + { + $ret = $this->Application->getUnitOption($this->Prefix, $option, $default); + + if ( isset($this->formConfig[$option]) ) { + $ret = kUtil::array_merge_recursive($ret, $this->formConfig[$option]); + } + + return $ret; + } + + /** * Only exteracts fields, that match current object Special * * @param Array $fields @@ -537,38 +605,41 @@ /** * Override field options with ones defined in submit via "field_modfiers" array (common for all prefixes) * - * @author Alex + * @param Array $field_modifiers + * @return void * @access public + * @author Alex */ public function ApplyFieldModifiers($field_modifiers = null) { - $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; + return ; } $field_modifiers = getArrayValue($field_modifiers, $this->getPrefixSpecial()); } - if (!$field_modifiers) { + if ( !$field_modifiers ) { // no field modifiers for current prefix_special - return false; + return ; } - foreach ($field_modifiers as $field => $field_options) - { - foreach ($field_options as $option_name => $option_value) - { - if ( !in_array(strtolower($option_name), $allowed_modifiers) ) continue; + foreach ($field_modifiers as $field => $field_options) { + foreach ($field_options as $option_name => $option_value) { + if ( !in_array(strtolower($option_name), $allowed_modifiers) ) { + continue; + } + $this->Fields[$field][$option_name] = $option_value; } } @@ -722,13 +793,14 @@ */ public function GetField($name, $format = null) { - $options = $this->GetFieldOptions($name); + $formatter_class = $this->GetFieldOption($name, 'formatter'); - if (array_key_exists('formatter', $options)) { - $formatter_class = $options['formatter']; + if ( $formatter_class ) { $value = ($formatter_class == 'kMultiLanguage') && !preg_match('/^l[0-9]+_/', $name) ? '' : $this->GetDBField($name); $formatter =& $this->Application->recallObject($formatter_class); + /* @var $formatter kFormatter */ + return $formatter->Format($value, $name, $this, $format); } @@ -766,16 +838,19 @@ * * @param Array $fields * @access public - * @todo maybe should not be publically accessable + * @todo Maybe should not be publicly accessible */ public function UpdateFormattersSubFields($fields = null) { - if (!is_array($fields)) { + if ( !is_array($fields) ) { $fields = array_keys($this->Fields); } + foreach ($fields as $field) { if ( isset($this->Fields[$field]['formatter']) ) { $formatter =& $this->Application->recallObject($this->Fields[$field]['formatter']); + /* @var $formatter kFormatter */ + $formatter->UpdateSubFields($field, $this->GetDBField($field), $this->Fields[$field], $this); } }