Issue #232327 by tizzo, jhedstrom, sumitk, NicolasH, disasm, tim.plunkett: Fixed Deleting node type leaves orphan nodes.
parent
e1befb5433
commit
292a4c56a8
|
@ -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'));
|
||||
}
|
||||
|
|
|
@ -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.');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue