? modules/comment/.comment.module.swp ? sites/default/files ? sites/default/settings.php Index: modules/node/node.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.admin.inc,v retrieving revision 1.97 diff -p -0 -r1.97 node.admin.inc *** modules/node/node.admin.inc 7 Jul 2010 17:56:42 -0000 1.97 --- modules/node/node.admin.inc 22 Aug 2010 12:33:52 -0000 *************** function node_filters() { *** 92 **** --- 93,101 ---- + $types = node_type_get_names(); + // If content orphaned by type deletion must be added to the select list + // so that the orphaned content can be cleaned up. + $items = db_query("SELECT type FROM {node} GROUP BY type")->fetchCol(); + foreach($items as $item) { + if (!array_key_exists($item, $types)) { + $types[$item] = $item . t(' [Deleted Content Type]'); + } + } *************** function node_filters() { *** 97 **** ! ) + node_type_get_names(), --- 106 ---- ! ) + $types, *************** function node_filter_form() { *** 164 **** ! $value = $filters[$type]['options'][$value]; --- 173,175 ---- ! if (isset($filters[$type]['options'][$value])) { ! $value = $filters[$type]['options'][$value]; ! } *************** function node_admin_nodes() { *** 475 **** ! 'type' => check_plain(node_type_get_name($node)), --- 486 ---- ! 'type' => node_type_get_name($node) ? check_plain(node_type_get_name($node)) : check_plain($node->type) . t(' [Deleted Content Type]'), Index: modules/node/node.pages.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v retrieving revision 1.130 diff -p -0 -r1.130 node.pages.inc *** modules/node/node.pages.inc 20 Aug 2010 01:23:43 -0000 1.130 --- modules/node/node.pages.inc 22 Aug 2010 12:33:53 -0000 *************** function node_page_edit($node) { *** 16 **** ! return drupal_get_form($node->type . '_node_form', $node); --- 16,24 ---- ! if ($type_name) { ! return drupal_get_form($node->type . '_node_form', $node); ! } ! else { ! $page = array(); ! $types_link = user_access('administer content types') ? l(t(' Edit content types.'), 'admin/structure/types') : ''; ! drupal_set_message(t('This content cannot be edited because the content type %type has been disabled or removed.', array('%type' => $node->type)) . $types_link, 'error'); ! return $page; ! } *************** function node_revision_overview($node) { *** 489,511 **** ! ! $header = array(t('Revision'), array('data' => t('Operations'), 'colspan' => 2)); ! ! $revisions = node_revision_list($node); ! ! $rows = array(); ! $revert_permission = FALSE; ! if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) { ! $revert_permission = TRUE; ! } ! $delete_permission = FALSE; ! if ((user_access('delete revisions') || user_access('administer nodes')) && node_access('delete', $node)) { ! $delete_permission = TRUE; ! } ! foreach ($revisions as $revision) { ! $row = array(); ! $operations = array(); ! ! if ($revision->current_vid > 0) { ! $row[] = array('data' => t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'short'), "node/$node->nid"), '!username' => theme('username', array('account' => $revision)))) ! . (($revision->log != '') ? '

' . filter_xss($revision->log) . '

' : ''), ! 'class' => array('revision-current')); ! $operations[] = array('data' => drupal_placeholder(t('current revision')), 'class' => array('revision-current'), 'colspan' => 2); --- 497,511 ---- ! ! $type_name = node_type_get_name($node); ! if ($type_name) { ! $header = array(t('Revision'), array('data' => t('Operations'), 'colspan' => 2)); ! ! $revisions = node_revision_list($node); ! ! $rows = array(); ! $revert_permission = FALSE; ! if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) { ! $revert_permission = TRUE; ! } ! $delete_permission = FALSE; ! if ((user_access('delete revisions') || user_access('administer nodes')) && node_access('delete', $node)) { ! $delete_permission = TRUE; *************** function node_revision_overview($node) { *** 513,517 **** ! else { ! $row[] = t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'short'), "node/$node->nid/revisions/$revision->vid/view"), '!username' => theme('username', array('account' => $revision)))) ! . (($revision->log != '') ? '

' . filter_xss($revision->log) . '

' : ''); ! if ($revert_permission) { ! $operations[] = l(t('revert'), "node/$node->nid/revisions/$revision->vid/revert"); --- 513,521 ---- ! foreach ($revisions as $revision) { ! $row = array(); ! $operations = array(); ! ! if ($revision->current_vid > 0) { ! $row[] = array('data' => t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'short'), "node/$node->nid"), '!username' => theme('username', array('account' => $revision)))) ! . (($revision->log != '') ? '

' . filter_xss($revision->log) . '

' : ''), ! 'class' => array('revision-current')); ! $operations[] = array('data' => drupal_placeholder(t('current revision')), 'class' => array('revision-current'), 'colspan' => 2); *************** function node_revision_overview($node) { *** 519,520 **** ! if ($delete_permission) { ! $operations[] = l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete"); --- 523,531 ---- ! else { ! $row[] = t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'short'), "node/$node->nid/revisions/$revision->vid/view"), '!username' => theme('username', array('account' => $revision)))) ! . (($revision->log != '') ? '

' . filter_xss($revision->log) . '

' : ''); ! if ($revert_permission) { ! $operations[] = l(t('revert'), "node/$node->nid/revisions/$revision->vid/revert"); ! } ! if ($delete_permission) { ! $operations[] = l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete"); ! } *************** function node_revision_overview($node) { *** 521 **** --- 533 ---- + $rows[] = array_merge($row, $operations); *************** function node_revision_overview($node) { *** 523,524 **** - $rows[] = array_merge($row, $operations); - } --- 534 ---- *************** function node_revision_overview($node) { *** 526,530 **** ! $build['node_revisions_table'] = array( ! '#theme' => 'table', ! '#rows' => $rows, ! '#header' => $header, ! ); --- 536,540 ---- ! $build['node_revisions_table'] = array( ! '#theme' => 'table', ! '#rows' => $rows, ! '#header' => $header, ! ); *************** function node_revision_overview($node) { *** 532 **** ! return $build; --- 542,549 ---- ! return $build; ! } ! else { ! $page = array(); ! $types_link = user_access('administer content types') ? l(t(' Edit content types.'), 'admin/structure/types') : ''; ! drupal_set_message(t('This content cannot be reverted to a previous revision because the content type %type has been disabled or removed.', array('%type' => $node->type)) . $types_link, 'error'); ! return $page; ! } Index: modules/node/node.test =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.test,v retrieving revision 1.92 diff -p -0 -r1.92 node.test *** modules/node/node.test 8 Aug 2010 13:02:37 -0000 1.92 --- modules/node/node.test 22 Aug 2010 12:33:56 -0000 *************** class PageEditTestCase extends DrupalWeb *** 300 **** --- 301,308 ---- + + // Ensure that the node edit screen throws a message when type no longer exists. + module_enable(array('poll')); + $this->drupalLogin($this->admin_user); + $node = $this->drupalCreateNode(array('type' => 'poll')); + module_disable(array('poll')); + $this->drupalGet("node/$node->nid/edit"); + $this->assertRaw(t('This content cannot be edited because the content type %type has been disabled or removed.', array('%type' => $node->type)), 'Nodes cannot be edited if their type no longer exists.');