? .DS_Store ? 400450-disabled-content-types-be-nice-D7-v6.patch ? graceful-editing-400450.patch ? node.232327_0.patch ? includes/.new.g6VMKW ? sites/.DS_Store ? sites/all/.DS_Store ? sites/all/modules/.DS_Store ? sites/all/modules/devel ? sites/all/modules/devel-7.x-1.0-beta2.tar.gz ? sites/default/.DS_Store ? sites/default/files ? sites/default/settings.php Index: modules/node/node.pages.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v retrieving revision 1.130 diff -u -p -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 11:26:21 -0000 @@ -13,7 +13,15 @@ function node_page_edit($node) { $type_name = node_type_get_name($node); drupal_set_title(t('Edit @type @title', array('@type' => $type_name, '@title' => $node->title)), PASS_THROUGH); - return drupal_get_form($node->type . '_node_form', $node); + 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_add_page() { @@ -486,50 +494,59 @@ function node_delete_confirm_submit($for */ function node_revision_overview($node) { drupal_set_title(t('Revisions for %title', array('%title' => $node->title)), PASS_THROUGH); - - $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); + + $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; } - 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"); + 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); } - if ($delete_permission) { - $operations[] = l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete"); + 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"); + } } + $rows[] = array_merge($row, $operations); } - $rows[] = array_merge($row, $operations); - } - $build['node_revisions_table'] = array( - '#theme' => 'table', - '#rows' => $rows, - '#header' => $header, - ); + $build['node_revisions_table'] = array( + '#theme' => 'table', + '#rows' => $rows, + '#header' => $header, + ); - return $build; + 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 -u -p -r1.92 node.test --- modules/node/node.test 8 Aug 2010 13:02:37 -0000 1.92 +++ modules/node/node.test 22 Aug 2010 11:26:21 -0000 @@ -298,6 +298,14 @@ class PageEditTestCase extends DrupalWeb $first_node_version = node_load($node->nid, $node->vid); $second_node_version = node_load($node->nid, $revised_node->vid); $this->assertNotIdentical($first_node_version->revision_uid, $second_node_version->revision_uid, 'Each revision has a distinct user.'); + + // 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.'); } /**