protected function duplicateOrReplaceFields(&$fields) { $tasks = array('dup' => array()); foreach ($fields as $field) { if ($field->isComposite()) { $innertasks = $this->duplicateOrReplaceFields($field->FieldSet()); $tasks['dup'] = array_merge($tasks['dup'], $innertasks['dup']); } else { if (($fieldname = $field->Name()) && array_key_exists($fieldname, $this->original_values)) { // Get a copy of the original field to show the untranslated value if (is_subclass_of($field->class, 'TextareaField')) { $nonEditableField = new ToggleField($fieldname, $field->Title(), '', '+', '-'); $nonEditableField->labelMore = '+'; $nonEditableField->labelLess = '-'; } else { $nonEditableField = $field->performDisabledTransformation(); } $nonEditableField_holder = new CompositeField($nonEditableField); $nonEditableField_holder->setName($fieldname . '_holder'); $nonEditableField_holder->addExtraClass('originallang_holder'); $nonEditableField->setValue($this->original_values[$fieldname]); $nonEditableField->setName($fieldname . '_original'); $nonEditableField->addExtraClass('originallang'); if (array_search($fieldname, $this->translatableFields) !== false) { // Duplicate the field if ($field->Title()) { $nonEditableField->setTitle('Original'); } $nonEditableField_holder->insertBeforeRecursive($field, $fieldname . '_original'); $tasks['dup'][$fieldname] = $nonEditableField_holder; } } } } return $tasks; }
public function insertBeforeRecursive($field, $insertBefore, $level) { $level = parent::insertBeforeRecursive($field, $insertBefore, $level + 1); if ($level === 0) { $field->setTabSet($this); } return $level; }