diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2011-03-10 01:40:12 -0600 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2011-03-10 01:40:12 -0600 |
commit | 34c6cdd66bac4c7b0c262cc2873c88a65f7b591c (patch) | |
tree | af26bdd33e7c96136bde2ab19c519c28e6ba2d76 /modules | |
parent | 6dabf4fc474bd3e3ad58e7733482c2d0f13220af (diff) | |
download | brdo-34c6cdd66bac4c7b0c262cc2873c88a65f7b591c.tar.gz brdo-34c6cdd66bac4c7b0c262cc2873c88a65f7b591c.tar.bz2 |
Issue #1022924 by yched, chx: Fixed critical bug: Updates are broken for deleted fields in installs upgraded from rc1.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/field/field.install | 25 | ||||
-rw-r--r-- | modules/field/modules/list/list.install | 14 | ||||
-rw-r--r-- | modules/field/modules/text/text.install | 2 | ||||
-rw-r--r-- | modules/taxonomy/taxonomy.install | 8 |
4 files changed, 37 insertions, 12 deletions
diff --git a/modules/field/field.install b/modules/field/field.install index d5cea52ba..d56eb904c 100644 --- a/modules/field/field.install +++ b/modules/field/field.install @@ -309,18 +309,27 @@ function _update_7000_field_delete_instance($field_name, $entity_type, $bundle) /** * Utility function: fetch all the field definitions from the database. * + * Warning: unlike the field_read_fields() API function, this function returns + * all fields by default, including deleted and inactive fields, unless + * specified otherwise in the $conditions parameter. + * * @param $conditions * An array of conditions to limit the select query to. + * @param $key + * The name of the field property the return array is indexed by. Using + * anything else than 'id' might cause incomplete results if the $conditions + * do not filter out deleted fields. + * + * @return + * An array of fields matching $conditions, keyed by the property specified + * by the $key parameter. */ -function _update_7000_field_read_fields(array $conditions = array()) { +function _update_7000_field_read_fields(array $conditions = array(), $key = 'id') { $fields = array(); $query = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC)) - ->fields('fc') - ->condition('deleted', 0); - if (!empty($conditions)) { - foreach ($conditions as $column => $value) { - $query->condition($column, $value); - } + ->fields('fc'); + foreach ($conditions as $column => $value) { + $query->condition($column, $value); } foreach ($query->execute() as $record) { $field = unserialize($record['data']); @@ -337,7 +346,7 @@ function _update_7000_field_read_fields(array $conditions = array()) { $field['translatable'] = $record['translatable']; $field['deleted'] = $record['deleted']; - $fields[$field['field_name']] = $field; + $fields[$field[$key]] = $field; } return $fields; } diff --git a/modules/field/modules/list/list.install b/modules/field/modules/list/list.install index 6c2897b8d..91c7649c1 100644 --- a/modules/field/modules/list/list.install +++ b/modules/field/modules/list/list.install @@ -50,7 +50,7 @@ function list_field_schema($field) { */ function list_update_7001() { $fields = _update_7000_field_read_fields(array('module' => 'list')); - foreach ($fields as $field_name => $field) { + foreach ($fields as $field) { $update = array(); // Translate the old string format into the new array format. @@ -115,3 +115,15 @@ function _list_update_7001_extract_allowed_values($string, $position_keys) { return $values; } + +/** + * Re-apply list_update_7001() for deleted fields. + */ +function list_update_7002() { + // See http://drupal.org/node/1022924: list_update_7001() intitally + // overlooked deleted fields, which then caused fatal errors when the fields + // were being purged. + // list_update_7001() has the required checks to ensure it is reentrant, so + // it can simply be executed once more.. + list_update_7001(); +}
\ No newline at end of file diff --git a/modules/field/modules/text/text.install b/modules/field/modules/text/text.install index 11c137053..b9bd25f19 100644 --- a/modules/field/modules/text/text.install +++ b/modules/field/modules/text/text.install @@ -92,7 +92,7 @@ function text_update_7000() { 'module' => 'text', 'storage_type' => 'field_sql_storage', )); - foreach ($fields as $field_name => $field) { + foreach ($fields as $field) { if ($field['deleted']) { $table = "field_deleted_data_{$field['id']}"; $revision_table = "field_deleted_revision_{$field['id']}"; diff --git a/modules/taxonomy/taxonomy.install b/modules/taxonomy/taxonomy.install index e19f175ca..f28ffedf4 100644 --- a/modules/taxonomy/taxonomy.install +++ b/modules/taxonomy/taxonomy.install @@ -566,8 +566,12 @@ function taxonomy_update_7005(&$sandbox) { // of term references stored so far for the current revision, which // provides the delta value for each term reference data insert. The // deltas are reset for each new revision. - - $field_info = _update_7000_field_read_fields(); + + $conditions = array( + 'type' => 'taxonomy_term_reference', + 'deleted' => 0, + ); + $field_info = _update_7000_field_read_fields($conditions, 'field_name'); // This is a multi-pass update. On the first call we need to initialize some // variables. |