summaryrefslogtreecommitdiff
path: root/modules/field/field.attach.inc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field/field.attach.inc')
-rw-r--r--modules/field/field.attach.inc27
1 files changed, 16 insertions, 11 deletions
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index 4ca15f543..2419201de 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -43,7 +43,7 @@ class FieldValidationException extends FieldException {
* such as a cloud-based database.
*
* Each field defines which storage backend it uses. The Drupal system variable
- * 'field_default_storage' identifies the storage backend used by default.
+ * 'field_storage_default' identifies the storage backend used by default.
*/
/**
@@ -303,9 +303,6 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
if (!isset($fields[$field_id])) {
$fields[$field_id] = $field;
}
- // Group the corresponding instances and entities.
- $grouped_instances[$field_id][$id] = $instance;
- $grouped_entities[$field_id][$id] = $entities[$id];
// Extract the field values into a separate variable, easily accessed
// by hook implementations.
// Unless a language suggestion is provided we iterate on all the
@@ -315,6 +312,10 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
$languages = _field_language_suggestion($available_languages, $language, $field_name);
foreach ($languages as $langcode) {
$grouped_items[$field_id][$langcode][$id] = isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : array();
+ // Group the instances and entities corresponding to the current
+ // field.
+ $grouped_instances[$field_id][$langcode][$id] = $instance;
+ $grouped_entities[$field_id][$langcode][$id] = $entities[$id];
}
}
}
@@ -327,8 +328,10 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
$field_name = $field['field_name'];
$function = $options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op;
// Iterate over all the field translations.
- foreach ($grouped_items[$field_id] as $langcode => $items) {
- $results = $function($entity_type, $grouped_entities[$field_id], $field, $grouped_instances[$field_id], $langcode, $grouped_items[$field_id][$langcode], $a, $b);
+ foreach ($grouped_items[$field_id] as $langcode => &$items) {
+ $entities = $grouped_entities[$field_id][$langcode];
+ $instances = $grouped_instances[$field_id][$langcode];
+ $results = $function($entity_type, $entities, $field, $instances, $langcode, $items, $a, $b);
if (isset($results)) {
// Collect results by entity.
// For hooks with array results, we merge results together.
@@ -346,9 +349,9 @@ function _field_invoke_multiple($op, $entity_type, $entities, &$a = NULL, &$b =
// Populate field values back in the entities, but avoid replacing missing
// fields with an empty array (those are not equivalent on update).
- foreach ($grouped_entities[$field_id] as $id => $entity) {
- foreach ($grouped_items[$field_id] as $langcode => $items) {
- if (isset($grouped_items[$field_id][$langcode][$id]) && ($grouped_items[$field_id][$langcode][$id] !== array() || isset($entity->{$field_name}[$langcode]))) {
+ foreach ($grouped_entities[$field_id] as $langcode => $entities) {
+ foreach ($entities as $id => $entity) {
+ if ($grouped_items[$field_id][$langcode][$id] !== array() || isset($entity->{$field_name}[$langcode])) {
$entity->{$field_name}[$langcode] = $grouped_items[$field_id][$langcode][$id];
}
}
@@ -1333,8 +1336,10 @@ function field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
* The bundle to delete.
*/
function field_attach_delete_bundle($entity_type, $bundle) {
- // First, delete the instances themseves.
- $instances = field_info_instances($entity_type, $bundle);
+ // First, delete the instances themselves. field_read_instances() must be
+ // used here since field_info_instances() does not return instances for
+ // disabled entity types or bundles.
+ $instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle), array('include_inactive' => 1));
foreach ($instances as $instance) {
field_delete_instance($instance);
}