diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-09-29 19:46:40 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-09-29 19:46:40 +0000 |
commit | 0a8e9c5b20c09e896f7627a15b5cf817e9ed5f9e (patch) | |
tree | 1d2b9ace8b4387e78ccede842f4ab8a1a11f2ed4 /modules/node/node.install | |
parent | a6a4073b808b6af1b6e60f7a82666a1ccfd405c2 (diff) | |
download | brdo-0a8e9c5b20c09e896f7627a15b5cf817e9ed5f9e.tar.gz brdo-0a8e9c5b20c09e896f7627a15b5cf817e9ed5f9e.tar.bz2 |
- Patch #898558 by Damien Tournoud, chx, ksenzee: clean-up the upgrade path: node.
Diffstat (limited to 'modules/node/node.install')
-rw-r--r-- | modules/node/node.install | 80 |
1 files changed, 49 insertions, 31 deletions
diff --git a/modules/node/node.install b/modules/node/node.install index f63caa1e7..56af7bce3 100644 --- a/modules/node/node.install +++ b/modules/node/node.install @@ -485,10 +485,9 @@ function node_update_7004() { // Map old preview setting to new values order. $original_preview ? $original_preview = 2 : $original_preview = 1; drupal_static_reset('_node_types_build'); - $type_list = node_type_get_types(); // Apply original settings to all types. - foreach ($type_list as $type => $entity) { + foreach (_update_7000_node_get_types() as $type => $type_object) { variable_set('teaser_length_' . $type, $original_length); variable_set('node_preview_' . $type, $original_preview); } @@ -517,18 +516,27 @@ function node_update_7006(&$sandbox) { // Get node type info for every invocation. drupal_static_reset('_node_types_build'); - $node_types = node_type_get_types(); if (!isset($sandbox['total'])) { // Initial invocation. + // First, create the body field. + $body_field = array( + 'field_name' => 'body', + 'type' => 'text_with_summary', + 'module' => 'text', + 'cardinality' => 1, + 'entity_types' => array('node'), + 'translatable' => TRUE, + ); + _update_7000_field_create_field($body_field); + + $default_trim_length = variable_get('teaser_length', 600); + // Get node type info, specifically the body field settings. - $result = db_select('node_type', 'node_type') - ->fields('node_type') - ->execute(); - foreach ($result as $type_object) { - $node_types[$type_object->type] = $type_object; - } + $node_types = _update_7000_node_get_types(); + + // Create default settings for orphan nodes. $extra_types = db_query('SELECT DISTINCT type FROM {node} WHERE type NOT IN (:types)', array(':types' => array_keys($node_types)))->fetchCol(); foreach ($extra_types as $type) { $type_object = new stdClass; @@ -541,26 +549,38 @@ function node_update_7006(&$sandbox) { $node_types[$type_object->type] = $type_object; } - $default_trim_length = variable_get('teaser_length', 600); // Add body field instances for existing node types. foreach ($node_types as $node_type) { if ($node_type->has_body) { - $instance = node_add_body_field($node_type, $node_type->body_label); - // Update newly created instance to convert teaser_length variable - // into formatter settings. $trim_length = variable_get('teaser_length_' . $node_type->type, $default_trim_length); - $instance_changed = FALSE; - foreach ($instance['display'] as $view_mode => $view_mode_info) { - if ($view_mode_info['type'] == 'text_trimmed' || $view_mode_info['type'] == 'text_summary_or_trimmed') { - if (!isset($view_mode_info['settings']['trim_length'])) { - $instance['display'][$view_mode]['settings']['trim_length'] = $trim_length; - $instance_changed = TRUE; - } - } - } - if ($instance_changed) { - field_update_instance($instance); - } + + $instance = array( + 'entity_type' => 'node', + 'bundle' => $node_type->type, + 'label' => $node_type->body_label, + 'widget' => array( + 'type' => 'text_textarea_with_summary', + 'settings' => array( + 'rows' => 20, + 'summary_rows' => 5, + ), + 'weight' => -4, + 'module' => 'text', + ), + 'settings' => array('display_summary' => TRUE), + 'display' => array( + 'default' => array( + 'label' => 'hidden', + 'type' => 'text_default', + ), + 'teaser' => array( + 'label' => 'hidden', + 'type' => 'text_summary_or_trimmed', + 'trim_length' => $trim_length, + ), + ), + ); + _update_7000_field_create_instance($body_field, $instance); variable_del('teaser_length_' . $node_type->type); } // Leave 'teaser_length' variable for aggregator module upgrade. @@ -580,14 +600,12 @@ function node_update_7006(&$sandbox) { $query = db_select('node', 'n'); $query->join('node_revision', 'nr', 'n.vid = nr.vid'); $sandbox['total'] = $query->countQuery()->execute()->fetchField(); + + $sandbox['body_field_id'] = $body_field['id']; } else { // Subsequent invocations. - // Grab the body field ID for field_sql_storage_field_storage_write(). - $body_field = field_info_field('body'); - $body_field_id = $body_field['id']; - $found = FALSE; if ($sandbox['total']) { // Operate on every revision of every node (whee!), in batches. @@ -647,7 +665,7 @@ function node_update_7006(&$sandbox) { } // This is a core update and no contrib modules are enabled yet, so // we can assume default field storage for a faster update. - field_sql_storage_field_storage_write('node', $node, FIELD_STORAGE_INSERT, array($body_field_id)); + _update_7000_field_sql_storage_write('node', $node->type, $node->nid, $node->vid, 'body', $node->body); } // Migrate the status columns to the {node_revision} table. @@ -699,7 +717,7 @@ function node_update_7007() { function node_update_7008() { $roles = user_roles(FALSE, 'administer nodes'); foreach ($roles as $rid => $role) { - user_role_grant_permissions($rid, array('access content overview')); + _update_7000_user_role_grant_permissions($rid, array('access content overview'), 'node'); } } |