summaryrefslogtreecommitdiff
path: root/modules/field
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field')
-rw-r--r--modules/field/field.attach.inc3
-rw-r--r--modules/field/field.default.inc23
-rw-r--r--modules/field/field.form.inc15
-rw-r--r--modules/field/tests/field_test.entity.inc29
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;
}