summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/content_migrate/content_migrate.install65
1 files changed, 65 insertions, 0 deletions
diff --git a/modules/content_migrate/content_migrate.install b/modules/content_migrate/content_migrate.install
new file mode 100644
index 0000000..e64f497
--- /dev/null
+++ b/modules/content_migrate/content_migrate.install
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Transfer weights from the D6 Manage Fields screen
+ * to the D7 stored settings array. Do this once only, on install,
+ * so later changes to these values in the Field UI screen will
+ * not be overwritten.
+ */
+function content_migrate_install() {
+ $stored_settings = variable_get('field_bundle_settings', array());
+
+ // $stored_settings might be empty, set up the basic structure of the
+ // array to avoid errors.
+ if (empty($stored_settings) || !array_key_exists('node', $stored_settings)) {
+ $stored_settings['node'] = array();
+ }
+ foreach (node_type_get_names() as $type_name => $label) {
+ // This type name may not yet exist in the array, set it up.
+ if (!array_key_exists($type_name, $stored_settings['node'])) {
+ $stored_settings['node'][$type_name] = array(
+ 'extra_fields' => array('form' => array(), 'display' => array()),
+ 'view_modes' => array(),
+ );
+ }
+ $weights = variable_get('content_extra_weights_'. $type_name, array());
+
+ // If body has never been set in D6, it should be set to 0 to match the way D6 worked.
+ // The D7 core update may have set it to a value like -4.
+ if (empty($weights) || !array_key_exists('body_field', $weights)) {
+ $stored_settings['node'][$type_name]['extra_fields']['form']['body'] = array('weight' => 0);
+ }
+
+ // If a field name provided by a custom module has changed from D6 to D7,
+ // they will have to alter this array too. We will set the original
+ // field name, other modules could take this information and move it
+ // to a setting with the new field name.
+
+ // @TODO Have any of the other core field names changed?
+ // @TODO Should we do anything to alter the display settings?
+ foreach ($weights as $field => $weight) {
+ switch ($field) {
+ case 'body_field':
+ $new_field = 'body';
+ break;
+ default:
+ $new_field = $field;
+ break;
+ }
+ $stored_settings['node'][$type_name]['extra_fields']['form'][$new_field] = array('weight' => $weight);
+ }
+
+ // While we're here, update the body field with the right weight.
+ $body_weight = !empty($weights['body_field']) ? $weights['body_field'] : 0;
+ $instance = field_info_instance('node', 'body', $type_name);
+ if (!empty($instance)) {
+ $instance['widget']['weight'] = $body_weight;
+ foreach ($instance['display'] as $context => $format) {
+ $instance['display'][$context]['weight'] = $body_weight;
+ }
+ field_update_instance($instance);
+ }
+ }
+ variable_set('field_bundle_settings', $stored_settings);
+ field_info_cache_clear();
+} \ No newline at end of file