Index: trunk/kernel/units/custom_fields/custom_fields_tag_processor.php =================================================================== diff -u -N -r4043 -r6093 --- trunk/kernel/units/custom_fields/custom_fields_tag_processor.php (.../custom_fields_tag_processor.php) (revision 4043) +++ trunk/kernel/units/custom_fields/custom_fields_tag_processor.php (.../custom_fields_tag_processor.php) (revision 6093) @@ -2,23 +2,55 @@ class CustomFieldsTagProcessor extends kDBTagProcessor { - function CustomField($params) + /** + * Return LEFT JOINed custom field name from main item config + * + * @param Array $params + * @return string + */ + function GetMainField($params) { $object =& $this->getObject($params); - $parent_item =& $this->Application->recallObject($params['SourcePrefix']); - - $field = $this->SelectParam($params, 'name,field'); - return $parent_item->GetField('cust_'.$object->GetField($field)); + $append = isset($params['append']) && $params['append'] ? $params['append'] : ''; + return 'cust_'.$object->GetDBField('FieldName').$append; } + function CustomField($params) + { + $params['name'] = $this->GetMainField($params); + $source_prefix = $this->Application->Parser->GetParam('SourcePrefix'); + return $this->Application->ProcessParsedTag($source_prefix, 'Field', $params); + } + + function CustomFormat($params) + { + $params['name'] = $this->GetMainField($params); + $source_prefix = $this->Application->Parser->GetParam('SourcePrefix'); + return $this->Application->ProcessParsedTag($source_prefix, 'Format', $params); + } + function CustomInputName($params) { - $object =& $this->getObject($params); + $params['name'] = $this->GetMainField($params); $source_prefix = $this->Application->Parser->GetParam('SourcePrefix'); + return $this->Application->ProcessParsedTag($source_prefix, 'InputName', $params); + } + + function CustomError($params) + { + $params['name'] = $this->GetMainField($params); + $source_prefix = $this->Application->Parser->GetParam('SourcePrefix'); + return $this->Application->ProcessParsedTag($source_prefix, 'Error', $params); + } + + function setParamValue(&$params, $param_name) + { + // $deep_level if GetParam = 1 used in case if PrintList is called during parsing "grid" block (=> +1 to deep_level) + if (!isset($params[$param_name])) { + $params[$param_name] = $this->Application->Parser->GetParam($param_name, 1); + } - $source_tp =& $this->Application->recallTagProcessor($source_prefix); - $params['name'] = 'cust_'.$object->GetDBField('FieldName'); - return $source_tp->InputName($params); + return $params[$param_name]; } /** @@ -30,23 +62,34 @@ */ function PrintList($params) { + $this->setParamValue($params, 'SourcePrefix'); + $this->setParamValue($params, 'value_field'); + $list =& $this->GetList($params); $id_field = $this->Application->getUnitOption($this->Prefix,'IDField'); $list->Query(); $o = ''; $list->GoFirst(); - - $block_params=$this->prepareTagParams($params); + + $block_params = $this->prepareTagParams($params); $block_params['name'] = $this->SelectParam($params, 'render_as,block'); $block_params['pass_params'] = 'true'; $prev_heading = ''; + $display_original = false; $source_prefix = getArrayValue($params, 'SourcePrefix'); if ($source_prefix) { $source_object =& $this->Application->recallObject($source_prefix); + $display_original = $this->Application->ProcessParsedTag($source_prefix, 'DisplayOriginal', Array('display_original' => $this->setParamValue($params, 'display_original'))); } + if ($display_original) { + $block_params['display_original'] = $display_original; + $block_params['original_title'] = $this->setParamValue($params, 'original_title'); + $original_object =& $this->Application->recallObject($source_prefix.'.original'); + } + if ($this->Special == 'general') { $this->groupRecords($list->Records, 'Heading'); } @@ -57,6 +100,10 @@ if ($source_prefix) { $list->SetDBField($params['value_field'], $source_object->GetDBField('cust_'.$list->GetDBField('FieldName'))); + if ($display_original) { + $list->SetDBField('OriginalValue', $original_object->GetField('cust_'.$list->GetDBField('FieldName'))); + } + $block_params['field'] = 'cust_'.$list->GetDBField('FieldName'); $block_params['show_heading'] = ($prev_heading != $list->GetDBField('Heading') ) ? 1 : 0; }