Index: branches/5.2.x/core/kernel/utility/formatters/multilang_formatter.php =================================================================== diff -u -N -r13840 -r14095 --- branches/5.2.x/core/kernel/utility/formatters/multilang_formatter.php (.../multilang_formatter.php) (revision 13840) +++ branches/5.2.x/core/kernel/utility/formatters/multilang_formatter.php (.../multilang_formatter.php) (revision 14095) @@ -1,6 +1,6 @@ helper =& $this->Application->recallObject('kMultiLanguageHelper'); } @@ -80,6 +80,7 @@ $this->Application->setUnitOption($object->Prefix, 'TitleField', $lang_field_name); } + $languages = $this->helper->getLanguages(); $primary_language_id = $this->Application->GetDefaultLanguageId(); $fields = $this->Application->getUnitOption($object->Prefix, 'Fields', Array ()); $virtual_fields = $this->Application->getUnitOption($object->Prefix, 'VirtualFields', Array ()); @@ -91,11 +92,7 @@ $tmp_field_options['error_field'] = $field_name; $field_required = array_key_exists('required', $tmp_field_options) && $tmp_field_options['required']; - for ($language_id = 1; $language_id <= $this->helper->languageCount; $language_id++) { - if (!$this->helper->LanguageFound($language_id)) { - continue; - } - + foreach ($languages as $language_id) { // make all non-primary language fields not required if ($language_id != $primary_language_id) { unset($tmp_field_options['required']); @@ -106,15 +103,17 @@ $translated_field = 'l' . $language_id . '_' . $field_name; $fields[$translated_field] = $tmp_field_options; - $object->Fields[$translated_field] = $tmp_field_options; + $object->SetFieldOptions($translated_field, $tmp_field_options); } // makes original field non-required - unset($fields[$field_name]['required'], $object->Fields[$field_name]['required']); + $object_fields = $object->getFields(); + unset($fields[$field_name]['required'], $object_fields[$field_name]['required']); + $object->setFields($object_fields); // prevents real field with formatter set to be saved in db - $virtual_fields[$field_name] = $object->Fields[$field_name]; - $object->VirtualFields[$field_name] = $object->Fields[$field_name]; + $virtual_fields[$field_name] = $object_fields[$field_name]; + $object->SetFieldOptions($field_name, $object_fields[$field_name], true); } elseif (array_key_exists($field_name, $virtual_fields)) { // substitude virtual field @@ -126,11 +125,7 @@ $tmp_field_options['error_field'] = $field_name; $field_required = array_key_exists('required', $tmp_field_options) && $tmp_field_options['required']; - for ($language_id = 1; $language_id <= $this->helper->languageCount; $language_id++) { - if (!$this->helper->LanguageFound($language_id)) { - continue; - } - + foreach ($languages as $language_id) { // make all non-primary language fields not required if ($language_id != $primary_language_id) { unset($tmp_field_options['required']); @@ -141,7 +136,7 @@ $translated_field = 'l' . $language_id . '_' . $field_name; $virtual_fields[$translated_field] = $tmp_field_options; - $object->VirtualFields[$translated_field] = $tmp_field_options; + $object->SetFieldOptions($translated_field, $tmp_field_options, true); // substitude calculated fields associated with given virtual field foreach ($calculated_fields as $special => $special_fields) { @@ -152,27 +147,31 @@ $calculated_fields[$special][$translated_field] = str_replace('%2$s', $language_id, $special_fields[$field_name]); if ($special === $calculated_field_special) { - $object->CalculatedFields[$translated_field] = $calculated_fields[$special][$translated_field]; + $object->addCalculatedField($translated_field, $calculated_fields[$special][$translated_field]); } } // manually copy virtual field back to fields (see kDBBase::setVirtualFields about that) $fields[$translated_field] = $tmp_field_options; - $object->Fields[$translated_field] = $tmp_field_options; + $object->SetFieldOptions($translated_field, $tmp_field_options); } // remove original calculated field foreach ($calculated_fields as $special => $special_fields) { unset($calculated_fields[$special][$field_name]); } - unset($object->CalculatedFields[$field_name]); + $object_calculated_fields = $object->getCalculatedFields(); + unset($object_calculated_fields[$field_name]); + $object->setCalculatedFields($object_calculated_fields); // save back calculated fields $this->Application->setUnitOption($object->Prefix, 'CalculatedFields', $calculated_fields); // makes original field non-required - unset($virtual_fields[$field_name]['required'], $object->VirtualFields[$field_name]['required']); + $virtual_field_options = $object->GetFieldOptions($field_name, true); + unset($virtual_fields[$field_name]['required'], $virtual_field_options['required']); + $object->SetFieldOptions($field_name, $virtual_field_options, true); } //substitude grid fields @@ -188,7 +187,7 @@ $grids[$name]['Fields'][$field_name]['format'] = 'no_default'; } - array_rename_key($grids[$name]['Fields'], $field_name, $lang_field_name); + kUtil::array_rename_key($grids[$name]['Fields'], $field_name, $lang_field_name); } // update sort fields - used for sorting and filtering in SQLs foreach ($grid['Fields'] as $grid_fld_name => $fld_options) { @@ -203,10 +202,10 @@ $sortings = $this->Application->getUnitOption($object->Prefix, 'ListSortings', Array()); foreach ($sortings as $special => $the_sortings) { if (isset($the_sortings['ForcedSorting'])) { - array_rename_key($sortings[$special]['ForcedSorting'], $field_name, $lang_field_name); + kUtil::array_rename_key($sortings[$special]['ForcedSorting'], $field_name, $lang_field_name); } if (isset($the_sortings['Sorting'])) { - array_rename_key($sortings[$special]['Sorting'], $field_name, $lang_field_name); + kUtil::array_rename_key($sortings[$special]['Sorting'], $field_name, $lang_field_name); } } $this->Application->setUnitOption($object->Prefix, 'ListSortings', $sortings); @@ -247,16 +246,26 @@ if ( !$object->ValidateRequired($def_lang_field, $options) ) { $object->SetError($master_field, 'primary_lang_required'); - if (array_key_exists($def_lang_field, $object->Fields)) { + if ( $object->isField($def_lang_field) ) { $object->SetError($def_lang_field, 'primary_lang_required'); } } } } + /** + * Formats field value + * + * @param string $value + * @param string $field_name + * @param kDBItem $object + * @param string $format + * @return string + */ function Format($value, $field_name, &$object, $format=null) { - $master_field = isset($object->Fields[$field_name]['master_field']) ? $object->Fields[$field_name]['master_field'] : false; + $master_field = $object->GetFieldOption($field_name, 'master_field'); + if (!$master_field) { // if THIS field is master it does NOT have reference to it's master_field $lang = $this->Application->GetVar('m_lang'); $value = $object->GetDBField('l'.$lang.'_'.$field_name); //getting value of current language