summaryrefslogtreecommitdiff
path: root/modules/field/field.crud.inc
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-09-09 11:37:34 +0000
committerDries Buytaert <dries@buytaert.net>2009-09-09 11:37:34 +0000
commita3f776f4d4620faa3fbe93656358a1ad96b290f9 (patch)
tree92c8ee6f4eb4af5f36ed6cf36cdfb35317dde8d3 /modules/field/field.crud.inc
parent933be1636ae812d4ec9272fb29172cae8120971b (diff)
downloadbrdo-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.inc21
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);
}
/**