? 232327-improve-ability-to-handle-orphan-node-types-02 ? 232327-improve-ability-to-handle-orphan-node-types-02.patch ? 232327-improve-ability-to-handle-orphan-node-types-03.patch ? 232327-improve-ability-to-handle-orphan-node-types-04.patch ? 232327-improve-ability-to-handle-orphan-node-types.patch ? comment-field-fix-890128.patch ? drupal.comment-approval.55.patch ? nbproject ? node.232327_0.patch ? test.patch ? modules/node/.cvsignore ? sites/all/modules/.cvsignore ? sites/all/modules/admin_menu ? sites/all/modules/devel ? 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 -r1.97 node.admin.inc 92a93,110 > $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]'); > } > } > $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]'); > } > } 97c115 < ) + node_type_get_names(), --- > ) + $types, 164c182,187 < $value = $filters[$type]['options'][$value]; --- > if (isset($filters[$type]['options'][$value])) { > $value = $filters[$type]['options'][$value]; > } > if (isset($filters[$type]['options'][$value])) { > $value = $filters[$type]['options'][$value]; > } 475c498 < 'type' => check_plain(node_type_get_name($node)), --- > '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 -r1.130 node.pages.inc 16c16,24 < 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; > } 489,511c497,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); --- > > $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; 513,517c513,521 < 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); 519,520c523,531 < 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"); > } 521a533 > $rows[] = array_merge($row, $operations); 523,524d534 < $rows[] = array_merge($row, $operations); < } 526,530c536,540 < $build['node_revisions_table'] = array( < '#theme' => 'table', < '#rows' => $rows, < '#header' => $header, < ); --- > $build['node_revisions_table'] = array( > '#theme' => 'table', > '#rows' => $rows, > '#header' => $header, > ); 532c542,549 < 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.93 diff -r1.93 node.test 300a301,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.');