diff options
Diffstat (limited to 'modules/field')
-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 |
3 files changed, 31 insertions, 10 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']}"; |