diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-09-09 11:37:34 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-09-09 11:37:34 +0000 |
commit | a3f776f4d4620faa3fbe93656358a1ad96b290f9 (patch) | |
tree | 92c8ee6f4eb4af5f36ed6cf36cdfb35317dde8d3 /modules/field/field.crud.inc | |
parent | 933be1636ae812d4ec9272fb29172cae8120971b (diff) | |
download | brdo-a3f776f4d4620faa3fbe93656358a1ad96b290f9.tar.gz brdo-a3f776f4d4620faa3fbe93656358a1ad96b290f9.tar.bz2 |
- Patch #571934 by bjaspan: Fixed omissions in field_delete_(){field,instance}().
Diffstat (limited to 'modules/field/field.crud.inc')
-rw-r--r-- | modules/field/field.crud.inc | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/modules/field/field.crud.inc b/modules/field/field.crud.inc index 2ce0998ce..8e0ff1497 100644 --- a/modules/field/field.crud.inc +++ b/modules/field/field.crud.inc @@ -379,15 +379,17 @@ function field_read_fields($params = array(), $include_additional = array()) { * The field name to delete. */ function field_delete_field($field_name) { + // Delete all non-deleted instances. + $field = field_info_field($field_name); + if (isset($field['bundles'])) { + foreach ($field['bundles'] as $bundle) { + field_delete_instance($field_name, $bundle); + } + } + // Mark field storage for deletion. module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_delete_field', $field_name); - // Mark any instances of the field for deletion. - db_update('field_config_instance') - ->fields(array('deleted' => 1)) - ->condition('field_name', $field_name) - ->execute(); - // Mark the field for deletion. db_update('field_config') ->fields(array('deleted' => 1)) @@ -396,6 +398,8 @@ function field_delete_field($field_name) { // Clear the cache. field_cache_clear(TRUE); + + module_invoke_all('field_delete_field', $field); } /** @@ -683,6 +687,9 @@ function field_read_instances($params = array(), $include_additional = array()) * The bundle for the instance which will be deleted. */ function field_delete_instance($field_name, $bundle) { + // Save the instance for hook_field_delete_instance before it is deleted. + $instance = field_info_instance($field_name, $bundle); + // Mark the field instance for deletion. db_update('field_config_instance') ->fields(array('deleted' => 1)) @@ -694,6 +701,8 @@ function field_delete_instance($field_name, $bundle) { module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_delete_instance', $field_name, $bundle); // Clear the cache. field_cache_clear(); + + module_invoke_all('field_delete_instance', $instance); } /** |