summaryrefslogtreecommitdiff
path: root/modules/field/field.install
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2011-03-10 01:40:12 -0600
committerwebchick <webchick@24967.no-reply.drupal.org>2011-03-10 01:40:12 -0600
commit34c6cdd66bac4c7b0c262cc2873c88a65f7b591c (patch)
treeaf26bdd33e7c96136bde2ab19c519c28e6ba2d76 /modules/field/field.install
parent6dabf4fc474bd3e3ad58e7733482c2d0f13220af (diff)
downloadbrdo-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/field/field.install')
-rw-r--r--modules/field/field.install25
1 files changed, 17 insertions, 8 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;
}