Issue #3008170 by joseph.olstad, NicolasH, disasm, tizzo, tim.plunkett, sumitk, jhedstrom: Deleting node type leaves orphan nodes
parent
2a225b29f6
commit
cd4e1d2961
|
@ -417,14 +417,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 cannot 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 cannot remove this content 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'));
|
||||
}
|
||||
|
|
|
@ -1614,6 +1614,48 @@ class NodeTypeTestCase extends DrupalWebTestCase {
|
|||
$this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), format_string('%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 cannot 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($node->nid);
|
||||
// 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