public function updateDataStructure(FieldType $meta) { //no need to generate the structure for subfields ( $isContainer = true; if (null !== $this->getFieldType()) { $type = $this->getFieldType()->getType(); $datFieldType = new $type(); $isContainer = $datFieldType->isContainer(); } if ($isContainer) { /** @var FieldType $field */ foreach ($meta->getChildren() as $field) { //no need to generate the structure for delete field if (!$field->getDeleted()) { $child = $this->__get('ems_' . $field->getName()); if (null == $child) { $child = new DataField(); $child->setFieldType($field); $child->setOrderKey($field->getOrderKey()); $child->setParent($this); $this->addChild($child); if (isset($field->getDisplayOptions()['defaultValue'])) { $child->setEncodedText($field->getDisplayOptions()['defaultValue']); } } if (strcmp($field->getType(), CollectionFieldType::class) != 0) { $child->updateDataStructure($field); } } } } }
/** * Try to find (recursively) if there is a container where subfields must be reordered in the content type * * @param array $formArray * @param FieldType $fieldType */ private function reorderFields(array $formArray, FieldType $fieldType) { if (array_key_exists('reorder', $formArray)) { $keys = array_keys($formArray); /** @var FieldType $child */ foreach ($fieldType->getChildren() as $child) { if (!$child->getDeleted()) { $child->setOrderKey(array_search('ems_' . $child->getName(), $keys)); } } $this->addFlash('notice', 'Subfields in ' . $fieldType->getName() . ' has been prepared to be reordered'); return true; } else { /** @var FieldType $child */ foreach ($fieldType->getChildren() as $child) { if (!$child->getDeleted() && $this->reorderFields($formArray['ems_' . $child->getName()], $child)) { return true; } } } return false; }
private function getMultipleField(FieldType $criteriaFieldType) { /**@var FieldType $criteria*/ foreach ($criteriaFieldType->getChildren() as $criteria) { if (!$criteria->getDeleted()) { if ($criteria->getType() == ContainerFieldType::class) { $out = $this->getMultipleField($criteria); if ($out) { return $out; } } else { if (isset($criteria->getDisplayOptions()['multiple']) && $criteria->getDisplayOptions()['multiple']) { return $criteria->getName(); } } } } return false; }