summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2011-05-13 10:41:03 -0400
committerwebchick <webchick@24967.no-reply.drupal.org>2011-05-13 10:41:03 -0400
commitb1bd7f76152725a976059e27f5cf3ed8acb0a627 (patch)
treee19bc84661ae1043e824450c96937a11cef1d663
parent8e471a22a7db5089eb3bfec61580719e4ebb88d2 (diff)
downloadbrdo-b1bd7f76152725a976059e27f5cf3ed8acb0a627.tar.gz
brdo-b1bd7f76152725a976059e27f5cf3ed8acb0a627.tar.bz2
Issue #1017672 by catch, q0rban: D6 to D7 update process permanently deletes comment bodies and other data, and throws fatal SQL errors.
-rw-r--r--modules/node/node.install34
-rw-r--r--modules/simpletest/tests/upgrade/upgrade.node.test64
2 files changed, 84 insertions, 14 deletions
diff --git a/modules/node/node.install b/modules/node/node.install
index c5378dc85..14290e3ad 100644
--- a/modules/node/node.install
+++ b/modules/node/node.install
@@ -469,7 +469,26 @@ function node_update_dependencies() {
* @ingroup update-api-6.x-to-7.x
*/
function _update_7000_node_get_types() {
- return db_query('SELECT * FROM {node_type}')->fetchAllAssoc('type', PDO::FETCH_OBJ);
+ $node_types = db_query('SELECT * FROM {node_type}')->fetchAllAssoc('type', PDO::FETCH_OBJ);
+
+ // Create default settings for orphan nodes.
+ $all_types = db_query('SELECT DISTINCT type FROM {node}')->fetchCol();
+ $extra_types = array_diff($all_types, array_keys($node_types));
+
+ foreach ($extra_types as $type) {
+ $type_object = new stdClass;
+ $type_object->type = $type;
+
+ // In Drupal 6, whether you have a body field or not is a flag in the node
+ // type table. If it's enabled, nodes may or may not have an empty string
+ // for the bodies. As we can't detect what this setting should be in
+ // Drupal 7 without access to the Drupal 6 node type settings, we assume
+ // the default, which is to enable the body field.
+ $type_object->has_body = 1;
+ $type_object->body_label = 'Body';
+ $node_types[$type_object->type] = $type_object;
+ }
+ return $node_types;
}
/**
@@ -600,19 +619,6 @@ function node_update_7006(&$sandbox) {
// Get node type info, specifically the body field settings.
$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;
- $type_object->type = $type;
- // Always create a body. Querying node_revisions for a non-empty body
- // would skip creating body fields for types that have a body but
- // the nodes of that type so far had empty bodies.
- $type_object->has_body = 1;
- $type_object->body_label = 'Body';
- $node_types[$type_object->type] = $type_object;
- }
-
// Add body field instances for existing node types.
foreach ($node_types as $node_type) {
if ($node_type->has_body) {
diff --git a/modules/simpletest/tests/upgrade/upgrade.node.test b/modules/simpletest/tests/upgrade/upgrade.node.test
index 163dbef5e..774ab58e1 100644
--- a/modules/simpletest/tests/upgrade/upgrade.node.test
+++ b/modules/simpletest/tests/upgrade/upgrade.node.test
@@ -46,6 +46,70 @@ class NodeBodyUpgradePathTestCase extends UpgradePathTestCase {
}
/**
+ * Upgrade test for node disabled node types.
+ *
+ * Load a filled installation of Drupal 6 and run the upgrade process on it.
+ */
+class DisabledNodeTypeTestCase extends UpgradePathTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Disabled node type upgrade path',
+ 'description' => 'Disabled node type upgrade path tests.',
+ 'group' => 'Upgrade path',
+ );
+ }
+
+ public function setUp() {
+ // Path to the database dump.
+ $this->databaseDumpFiles = array(
+ drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
+ drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.node_type_broken.database.php',
+ );
+ parent::setUp();
+ }
+
+ /**
+ * Test a successful upgrade.
+ */
+ public function testDisabledNodeTypeUpgrade() {
+ $this->assertTrue($this->performUpgrade(), t('The upgrade was completed successfully.'));
+ $this->assertTrue(field_info_instance('comment', 'comment_body', 'comment_node_broken'), 'Comment body field instance was created for comments attached to the disabled broken node type');
+ }
+}
+
+/**
+ * Upgrade test for node disabled node types.
+ *
+ * Load a filled installation of Drupal 6 and run the upgrade process on it.
+ */
+class DisabledNodeTypeTestCase extends UpgradePathTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Disabled node type upgrade path',
+ 'description' => 'Disabled node type upgrade path tests.',
+ 'group' => 'Upgrade path',
+ );
+ }
+
+ public function setUp() {
+ // Path to the database dump.
+ $this->databaseDumpFiles = array(
+ drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
+ drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.node_type_broken.database.php',
+ );
+ parent::setUp();
+ }
+
+ /**
+ * Test a successful upgrade.
+ */
+ public function testDisabledNodeTypeUpgrade() {
+ $this->assertTrue($this->performUpgrade(), t('The upgrade was completed successfully.'));
+ $this->assertTrue(field_info_instance('comment', 'comment_body', 'comment_node_broken'), 'Comment body field instance was created for comments attached to the disabled broken node type');
+ }
+}
+
+/**
* Upgrade test for node type poll.
*
* Load a bare installation of Drupal 6 and run the upgrade process on it.