summaryrefslogtreecommitdiff
path: root/modules
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
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')
-rw-r--r--modules/field/field.install25
-rw-r--r--modules/field/modules/list/list.install14
-rw-r--r--modules/field/modules/text/text.install2
-rw-r--r--modules/taxonomy/taxonomy.install8
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.