diff options
Diffstat (limited to 'modules/field')
-rw-r--r-- | modules/field/field.attach.inc | 3 | ||||
-rw-r--r-- | modules/field/field.default.inc | 23 | ||||
-rw-r--r-- | modules/field/field.form.inc | 15 | ||||
-rw-r--r-- | modules/field/tests/field_test.entity.inc | 29 |
4 files changed, 24 insertions, 46 deletions
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc index d461eca46..3f4a641b3 100644 --- a/modules/field/field.attach.inc +++ b/modules/field/field.attach.inc @@ -547,9 +547,6 @@ function field_attach_form($entity_type, $entity, &$form, &$form_state, $langcod $form['#entity_type'] = $entity_type; $form['#bundle'] = $bundle; - // Save the original entity to allow later re-use. - $form_state['entity'] = $entity; - // Let other modules make changes to the form. // Avoid module_invoke_all() to let parameters be taken by reference. foreach (module_implements('field_attach_form') as $module) { diff --git a/modules/field/field.default.inc b/modules/field/field.default.inc index 4cd512392..060ad990e 100644 --- a/modules/field/field.default.inc +++ b/modules/field/field.default.inc @@ -65,25 +65,12 @@ function field_default_validate($entity_type, $entity, $field, $instance, $langc } function field_default_submit($entity_type, $entity, $field, $instance, $langcode, &$items, $form, &$form_state) { - $field_name = $field['field_name']; - - if (isset($form_state['values'][$field_name][$langcode])) { - // Reorder items to account for drag-n-drop reordering. - if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT) { - $items = _field_sort_items($field, $items); - } - // Filter out empty values. - $items = _field_filter_items($field, $items); - } - elseif (!empty($entity->revision) && isset($form_state['entity']->{$field_name}[$langcode])) { - // To ensure new revisions are created with all field values in all - // languages, populate values not included in the form with the ones from - // the original object. This covers: - // - partial forms including only a subset of the fields, - // - fields for which the user has no edit access, - // - languages not involved in the form. - $items = $form_state['entity']->{$field_name}[$langcode]; + // Reorder items to account for drag-n-drop reordering. + if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT) { + $items = _field_sort_items($field, $items); } + // Filter out empty values. + $items = _field_filter_items($field, $items); } /** diff --git a/modules/field/field.form.inc b/modules/field/field.form.inc index 32c4d3a9a..e042fd728 100644 --- a/modules/field/field.form.inc +++ b/modules/field/field.form.inc @@ -359,17 +359,12 @@ function field_default_form_errors($entity_type, $entity, $field, $instance, $la * to return just the changed part of the form. */ function field_add_more_submit($form, &$form_state) { - // Set the form to rebuild and run submit handlers. - if (isset($form['#builder_function']) && function_exists($form['#builder_function'])) { - $entity = $form['#builder_function']($form, $form_state); - - // Make the changes we want to the form state. - $field_name = $form_state['clicked_button']['#field_name']; - $langcode = $form_state['clicked_button']['#language']; - if ($form_state['values'][$field_name . '_add_more']) { - $form_state['field_item_count'][$field_name] = count($form_state['values'][$field_name][$langcode]); - } + $field_name = $form_state['clicked_button']['#field_name']; + $langcode = $form_state['clicked_button']['#language']; + if ($form_state['values'][$field_name . '_add_more']) { + $form_state['field_item_count'][$field_name] = count($form_state['values'][$field_name][$langcode]); } + $form_state['rebuild'] = TRUE; } /** diff --git a/modules/field/tests/field_test.entity.inc b/modules/field/tests/field_test.entity.inc index b078714b9..b7887c812 100644 --- a/modules/field/tests/field_test.entity.inc +++ b/modules/field/tests/field_test.entity.inc @@ -289,10 +289,15 @@ function field_test_entity_edit($entity) { * Test_entity form. */ function field_test_entity_form($form, &$form_state, $entity, $add = FALSE) { - if (isset($form_state['test_entity'])) { - $entity = $form_state['test_entity'] + (array) $entity; + // During initial form build, add the entity to the form state for use during + // form building and processing. During a rebuild, use what is in the form + // state. + if (!isset($form_state['test_entity'])) { + $form_state['test_entity'] = $entity; + } + else { + $entity = $form_state['test_entity']; } - $entity = (object) $entity; foreach (array('ftid', 'ftvid', 'fttype') as $key) { $form[$key] = array( @@ -327,15 +332,14 @@ function field_test_entity_form($form, &$form_state, $entity, $add = FALSE) { * Validate handler for field_test_entity_form(). */ function field_test_entity_form_validate($form, &$form_state) { - $entity = field_test_create_stub_entity($form_state['values']['ftid'], $form_state['values']['ftvid'], $form_state['values']['fttype']); - field_attach_form_validate('test_entity', $entity, $form, $form_state); + entity_form_field_validate('test_entity', $form, $form_state); } /** * Submit handler for field_test_entity_form(). */ function field_test_entity_form_submit($form, &$form_state) { - $entity = field_test_entity_form_submit_builder($form, $form_state); + $entity = $form['#builder_function']($form, $form_state); $insert = empty($entity->ftid); field_test_entity_save($entity); @@ -343,25 +347,20 @@ function field_test_entity_form_submit($form, &$form_state) { drupal_set_message($message); if ($entity->ftid) { - unset($form_state['rebuild']); $form_state['redirect'] = 'test-entity/' . $entity->ftid . '/edit'; } else { // Error on save. drupal_set_message(t('The entity could not be saved.'), 'error'); + $form_state['rebuild'] = TRUE; } } /** - * Builds a test_entity from submitted form values. + * Updates the form state's entity by processing this submission's values. */ function field_test_entity_form_submit_builder($form, &$form_state) { - $entity = field_test_create_stub_entity($form_state['values']['ftid'], $form_state['values']['ftvid'], $form_state['values']['fttype']); - $entity->revision = !empty($form_state['values']['revision']); - field_attach_submit('test_entity', $entity, $form, $form_state); - - $form_state['test_entity'] = (array) $entity; - $form_state['rebuild'] = TRUE; - + $entity = $form_state['test_entity']; + entity_form_submit_build_entity('test_entity', $entity, $form, $form_state); return $entity; } |