Issue #232327 by tizzo, jhedstrom, sumitk, NicolasH, disasm, tim.plunkett: Fixed Deleting node type leaves orphan nodes.

8.0.x
catch 2012-08-15 15:22:38 +01:00
parent e1befb5433
commit 292a4c56a8
2 changed files with 47 additions and 3 deletions

View File

@ -446,14 +446,16 @@ function node_type_delete_confirm($form, &$form_state, $type) {
$form['name'] = array('#type' => 'value', '#value' => $type->name);
$message = t('Are you sure you want to delete the content type %type?', array('%type' => $type->name));
$caption = '';
$num_nodes = db_query("SELECT COUNT(*) FROM {node} WHERE type = :type", array(':type' => $type->type))->fetchField();
if ($num_nodes) {
$caption .= '<p>' . format_plural($num_nodes, '%type is used by 1 piece of content on your site. If you remove this content type, you will not be able to edit the %type content and it may not display correctly.', '%type is used by @count pieces of content on your site. If you remove %type, you will not be able to edit the %type content and it may not display correctly.', array('%type' => $type->name)) . '</p>';
drupal_set_title($message, PASS_THROUGH);
$caption = '<p>' . format_plural($num_nodes, '%type is used by 1 piece of content on your site. You can not remove this content type until you have removed all of the %type content.', '%type is used by @count pieces of content on your site. You may not remove %type until you have removed all of the %type content.', array('%type' => $type->name)) . '</p>';
$form['description'] = array('#markup' => $caption);
return $form;
}
$caption .= '<p>' . t('This action cannot be undone.') . '</p>';
$caption = '<p>' . t('This action cannot be undone.') . '</p>';
return confirm_form($form, $message, 'admin/structure/types', $caption, t('Delete'));
}

View File

@ -167,4 +167,46 @@ class NodeTypeTest extends NodeTestBase {
$this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), t('%type type is enabled.', array('%type' => $type)));
}
}
/**
* Tests deleting a content type that still has content.
*/
function testNodeTypeDeletion() {
// Create a content type programmatically.
$type = $this->drupalCreateContentType();
// Log in a test user.
$web_user = $this->drupalCreateUser(array(
'bypass node access',
'administer content types',
));
$this->drupalLogin($web_user);
// Add a new node of this type.
$node = $this->drupalCreateNode(array('type' => $type->type));
// Attempt to delete the content type, which should not be allowed.
$this->drupalGet('admin/structure/types/manage/' . $type->name . '/delete');
$this->assertRaw(
t(
'%type is used by 1 piece of content on your site. You can not remove this content type until you have removed all of the %type content.',
array('%type' => $type->name)
),
'The content type will not be deleted until all nodes of that type are removed.'
);
$this->assertNoText(t('This action cannot be undone.'), 'The node type deletion confirmation form is not available.');
// Delete the node.
$node->delete();
// Attempt to delete the content type, which should now be allowed.
$this->drupalGet('admin/structure/types/manage/' . $type->name . '/delete');
$this->assertRaw(
t(
'Are you sure you want to delete the content type %type?',
array('%type' => $type->name)
),
'The content type is available for deletion.'
);
$this->assertText(t('This action cannot be undone.'), 'The node type deletion confirmation form is available.');
}
}