diff --git a/core/includes/form.inc b/core/includes/form.inc index d602d54..b4e51a1 100644 --- a/core/includes/form.inc +++ b/core/includes/form.inc @@ -1112,7 +1112,7 @@ function drupal_prepare_form($form_id, &$form, &$form_state) { // Ensure that modules can rely on #validate being set. $form['#validate'] = array(); if (isset($form_state['build_info']['callback_object'])) { - $form['#validate'][] = array($form_state['build_info']['callback_object'], 'validateForm'); + $form['#validate'][] = array(clone $form_state['build_info']['callback_object'], 'validateForm'); } // Check for a handler specific to $form_id. elseif (function_exists($form_id . '_validate')) { @@ -1129,7 +1129,7 @@ function drupal_prepare_form($form_id, &$form, &$form_state) { // Ensure that modules can rely on #submit being set. $form['#submit'] = array(); if (isset($form_state['build_info']['callback_object'])) { - $form['#submit'][] = array($form_state['build_info']['callback_object'], 'submitForm'); + $form['#submit'][] = array(clone $form_state['build_info']['callback_object'], 'submitForm'); } // Check for a handler specific to $form_id. elseif (function_exists($form_id . '_submit')) { diff --git a/core/modules/entity_reference/entity_reference.module b/core/modules/entity_reference/entity_reference.module index 54a7bac..07c63ed 100644 --- a/core/modules/entity_reference/entity_reference.module +++ b/core/modules/entity_reference/entity_reference.module @@ -193,8 +193,7 @@ function entity_reference_field_entity_update(FieldInterface $field) { * Implements hook_field_instance_settings_form(). */ function entity_reference_field_instance_settings_form($field, $instance, $form_state) { - $field = isset($form_state['entity_reference']['field']) ? $form_state['entity_reference']['field'] : $field; - $instance = isset($form_state['entity_reference']['instance']) ? $form_state['entity_reference']['instance'] : $instance; + $instance = isset($form_state['instance']) ? $form_state['instance'] : $instance; $settings = $instance['settings']; $settings += array('handler' => 'default'); @@ -222,8 +221,6 @@ function entity_reference_field_instance_settings_form($field, $instance, $form_ '_entity_reference_field_instance_settings_ajax_process', ), '#element_validate' => array('_entity_reference_field_instance_settings_validate'), - '#field' => $field, - '#instance' => $instance, ); $form['handler'] = array( '#type' => 'details', @@ -316,18 +313,15 @@ function _entity_reference_element_validate_filter(&$element, &$form_state) { } /** - * Form element validation handler; Stores the new values in the form state. + * Form element validation handler; Updates the instance settings. * * @see entity_reference_field_instance_settings_form() */ function _entity_reference_field_instance_settings_validate($form, &$form_state) { - $instance = $form['#instance']; if (isset($form_state['values']['instance'])) { - $instance['settings'] = $form_state['values']['instance']['settings']; + unset($form_state['values']['instance']['settings']['handler_submit']); + $form_state['instance']['settings'] = $form_state['values']['instance']['settings']; } - $form_state['entity_reference']['instance'] = $instance; - - unset($form_state['values']['instance']['settings']['handler_submit']); } /** diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php index 5f7ca61..8b3681c 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php @@ -15,7 +15,7 @@ use Drupal\field_ui\FieldUI; use Symfony\Component\DependencyInjection\ContainerInterface; -abstract class FieldInstanceFormBase implements FormInterface, ControllerInterface { +abstract class FieldInstanceFormBase implements FormInterface, ControllerInterface, \Serializable { /** * The field instance being edited. @@ -82,4 +82,22 @@ protected function getNextDestination() { return $next_destination; } + /** + * {@inheritdoc} + */ + public function serialize() { + // We just need the instance id so we can reload it later. + return $this->instance->id(); + } + + /** + * {@inheritdoc} + */ + public function unserialize($serialized) { + $this->instance = entity_load('field_instance', $serialized); + + $this->entityManager = \Drupal::service('plugin.manager.entity'); + $this->widgetManager = \Drupal::service('plugin.manager.field.widget'); + } + }