<?php
namespace Drupal\Core\Entity;
class EntityFormControllerNG extends EntityFormController {
public function form(array $form, array &$form_state, EntityInterface $entity) {
$info = $entity
->entityInfo();
if (!empty($info['fieldable'])) {
$entity
->setCompatibilityMode(TRUE);
field_attach_form($entity
->entityType(), $entity, $form, $form_state, $this
->getFormLangcode($form_state));
$entity
->setCompatibilityMode(FALSE);
}
return $form;
}
public function validate(array $form, array &$form_state) {
$entity = $this
->buildEntity($form, $form_state);
$info = $entity
->entityInfo();
if (!empty($info['fieldable'])) {
$entity
->setCompatibilityMode(TRUE);
field_attach_form_validate($entity
->entityType(), $entity, $form, $form_state);
$entity
->setCompatibilityMode(FALSE);
}
unset($form_state['validate_handlers']);
form_execute_handlers('validate', $form, $form_state);
}
public function buildEntity(array $form, array &$form_state) {
$entity = clone $this
->getEntity($form_state);
$entity_type = $entity
->entityType();
$info = entity_get_info($entity_type);
$values_excluding_fields = $info['fieldable'] ? array_diff_key($form_state['values'], field_info_instances($entity_type, $entity
->bundle())) : $form_state['values'];
$translation = $entity
->getTranslation($this
->getFormLangcode($form_state), FALSE);
$definitions = $translation
->getPropertyDefinitions();
foreach ($values_excluding_fields as $key => $value) {
if (isset($definitions[$key])) {
$translation->{$key} = $value;
}
}
if (isset($form['#entity_builders'])) {
foreach ($form['#entity_builders'] as $function) {
call_user_func_array($function, array(
$entity_type,
$entity,
&$form,
&$form_state,
));
}
}
if ($info['fieldable']) {
$entity
->setCompatibilityMode(TRUE);
field_attach_submit($entity_type, $entity, $form, $form_state);
$entity
->setCompatibilityMode(FALSE);
}
return $entity;
}
}