/** * @param Form $entity * @param $sessionFields */ public function setFields(Form $entity, $sessionFields) { $order = 1; $existingFields = $entity->getFields()->toArray(); $formName = $entity->generateFormName(); foreach ($sessionFields as $key => $properties) { $isNew = !empty($properties['id']) && isset($existingFields[$properties['id']]) ? false : true; $field = !$isNew ? $existingFields[$properties['id']] : new Field(); if (!$isNew) { if (empty($properties['alias'])) { $properties['alias'] = $field->getAlias(); } if (empty($properties['label'])) { $properties['label'] = $field->getLabel(); } } if ($formName === $properties['alias']) { // Change the alias to prevent potential ID collisions in the rendered HTML $properties['alias'] = 'f_' . $properties['alias']; } foreach ($properties as $f => $v) { if (in_array($f, ['id', 'order'])) { continue; } $func = 'set' . ucfirst($f); if (method_exists($field, $func)) { $field->{$func}($v); } } $field->setForm($entity); $field->setSessionId($key); $field->setOrder($order); ++$order; $entity->addField($properties['id'], $field); } // Persist if the entity is known if ($entity->getId()) { $this->formFieldModel->saveEntities($existingFields); } }