/** * Try to find (recursively) if there is a new field to add to the content type * * @param array $formArray * @param FieldType $fieldType */ private function addNewField(array $formArray, FieldType $fieldType) { if (array_key_exists('add', $formArray)) { if (isset($formArray['ems:internal:add:field:name']) && strcmp($formArray['ems:internal:add:field:name'], '') != 0 && isset($formArray['ems:internal:add:field:class']) && strcmp($formArray['ems:internal:add:field:class'], '') != 0) { if ($this->isValidName($formArray['ems:internal:add:field:name'])) { $fieldTypeNameOrServiceName = $formArray['ems:internal:add:field:class']; $fieldName = $formArray['ems:internal:add:field:name']; /** @var DataFieldType $dataFieldType */ $dataFieldType = $this->getDataFielType($fieldTypeNameOrServiceName); $child = new FieldType(); $child->setName($fieldName); $child->setType($fieldTypeNameOrServiceName); $child->setParent($fieldType); $child->setOptions($dataFieldType->getDefaultOptions($fieldName)); $fieldType->addChild($child); $this->addFlash('notice', 'The field ' . $child->getName() . ' has been prepared to be added'); return '_ems_' . $child->getName() . '_modal_options'; } else { $this->addFlash('error', 'The field\'s name is not valid (format: [a-z][a-z0-9_-]*)'); } } else { $this->addFlash('error', 'The field\'s name and type are mandatory'); } return true; } else { /** @var FieldType $child */ foreach ($fieldType->getChildren() as $child) { if (!$child->getDeleted()) { $out = $this->addNewField($formArray['ems_' . $child->getName()], $child); if ($out !== false) { return '_ems_' . $child->getName() . $out; } } } } return false; }