Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.568 diff -u -r1.568 common.inc --- includes/common.inc 30 Aug 2006 08:46:16 -0000 1.568 +++ includes/common.inc 30 Aug 2006 19:06:38 -0000 @@ -318,16 +318,22 @@ */ function drupal_not_found() { drupal_set_header('HTTP/1.0 404 Not Found'); - watchdog('page not found', check_plain($_GET['q']), WATCHDOG_WARNING); + $return = ''; + + if (variable_get('site_404_message_display', TRUE)) { + $message = variable_get('site_404_message', t('We are sorry, the requested page was not found on this webserver. Either the URL does not exist or the page you were looking has been deleted.')); + drupal_set_message(filter_xss_admin($message)); + } + // Keep old path for reference if (!isset($_REQUEST['destination'])) { $_REQUEST['destination'] = $_GET['q']; } $path = drupal_get_normal_path(variable_get('site_404', '')); - if ($path && $path != $_GET['q']) { + if (!empty($path) && $path != $_GET['q']) { menu_set_active_item($path); $return = menu_execute_active_handler(); } @@ -336,8 +342,9 @@ menu_set_active_item(''); } - if (empty($return)) { - drupal_set_title(t('Page not found')); + if (empty($return) || $return == MENU_NOT_FOUND || $return == MENU_ACCESS_DENIED) { + drupal_set_title(t('404 - File not found')); + $return = ' '; } // To conserve CPU and bandwidth, omit the blocks print theme('page', $return, FALSE); @@ -350,13 +357,20 @@ drupal_set_header('HTTP/1.0 403 Forbidden'); watchdog('access denied', check_plain($_GET['q']), WATCHDOG_WARNING); -// Keep old path for reference + $return = ''; + + if (variable_get('site_403_message_display', TRUE)) { + $message = variable_get('site_403_message', t('We are sorry, you do not have access to this page. If you are not already logged in, please try to login and then visit this page again. If you think should be able to access this page, please contact site admins.')); + drupal_set_message(filter_xss_admin($message)); + } + + // Keep old path for reference if (!isset($_REQUEST['destination'])) { $_REQUEST['destination'] = $_GET['q']; } $path = drupal_get_normal_path(variable_get('site_403', '')); - if ($path && $path != $_GET['q']) { + if (!empty($path) && $path != $_GET['q']) { menu_set_active_item($path); $return = menu_execute_active_handler(); } @@ -365,9 +379,9 @@ menu_set_active_item(''); } - if (empty($return)) { - drupal_set_title(t('Access denied')); - $return = t('You are not authorized to access this page.'); + if (empty($return) || $return == MENU_NOT_FOUND || $return == MENU_ACCESS_DENIED) { + drupal_set_title(t('403 - Access denied')); + $return = ' '; } print theme('page', $return); } Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.355 diff -u -r1.355 system.module --- modules/system/system.module 29 Aug 2006 20:19:41 -0000 1.355 +++ modules/system/system.module 30 Aug 2006 19:06:40 -0000 @@ -550,35 +550,67 @@ } function system_error_reporting_settings() { - - $form['site_403'] = array( + $form['403'] = array( + '#type' => 'fieldset', + '#title' => t('Access denied page (403)'), + '#description' => t('These settings apply when the requested document is denied to the current user, i.e. a 403 error.'), + ); + $form['403']['site_403'] = array( '#type' => 'textfield', - '#title' => t('Default 403 (access denied) page'), + '#title' => t('Page to display'), '#default_value' => variable_get('site_403', ''), - '#description' => t('This page is displayed when the requested document is denied to the current user. If you are not using clean URLs, specify the part after "?q=". If unsure, specify nothing.') + '#description' => t('This page is displayed when a 403 error occurs. If you are not using clean URLs, specify the part after "?q=". If unsure, leave blank.'), ); - - $form['site_404'] = array( + $form['403']['site_403_message_display'] = array( + '#type' => 'checkbox', + '#title' => t('Display error message'), + '#description' => t('Enabling this feature will display the message below when a 403 error occurs, even if "Page to display" is set.'), + '#default_value' => variable_get('site_403_message_display', TRUE), + ); + $form['403']['site_403_message'] = array( + '#type' => 'textarea', + '#title' => t('Message'), + '#default_value' => variable_get('site_403_message', t('We are sorry, you do not have access to this page. If you are not already logged in, please try to login and then visit this page again. If you think should be able to access this page, please contact site admins.')), + ); + $form['404'] = array( + '#type' => 'fieldset', + '#title' => t('File not found page (404)'), + '#description' => t('These settings apply when the requested document could not be found, i.e. a 404 error.'), + ); + $form['404']['site_404'] = array( '#type' => 'textfield', - '#title' => t('Default 404 (not found) page'), + '#title' => t('Page to display'), '#default_value' => variable_get('site_404', ''), - '#description' => t('This page is displayed when no other content matches the requested document. If you are not using clean URLs, specify the part after "?q=". If unsure, specify nothing.') + '#description' => t('This page is displayed when a 404 error occurs. If you are not using clean URLs, specify the part after "?q=". If unsure, leave blank.'), ); - - $form['error_level'] = array( + $form['404']['site_404_message_display'] = array( + '#type' => 'checkbox', + '#title' => t('Display error message'), + '#description' => t('Enabling this feature will display the message below when a 404 error occurs, even if "Page to display" is set.'), + '#default_value' => variable_get('site_404_message_display', TRUE), + ); + $form['404']['site_404_message'] = array( + '#type' => 'textarea', + '#title' => t('Message'), + '#default_value' => variable_get('site_404_message', t('We are sorry, the requested page was not found on this webserver. Either the URL does not exist or the page you were looking has been deleted.')), + ); + $form['error'] = array( + '#type' => 'fieldset', + '#title' => t('Other error handling'), + ); + $form['error']['error_level'] = array( '#type' => 'select', '#title' => t('Error reporting'), '#default_value' => variable_get('error_level', 1), '#options' => array(t('Write errors to the log'), t('Write errors to the log and to the screen')), - '#description' => t('Where Drupal, PHP and SQL errors are logged. On a production server it is recommended that errors are only written to the error log. On a test server it can be helpful to write logs to the screen.') + '#description' => t('Where Drupal, PHP and SQL errors are logged. On a production server it is recommended that errors are only written to the error log. On a test server it can be helpful to write logs to the screen.'), ); - $period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval'); $period['1000000000'] = t('Never'); - $form['watchdog_clear'] = array( + $form['error']['watchdog_clear'] = array( '#type' => 'select', '#title' => t('Discard log entries older than'), '#default_value' => variable_get('watchdog_clear', 604800), '#options' => $period, - '#description' => t('The time log entries should be kept. Older entries will be automatically discarded. Requires crontab.') + '#description' => t('The time log entries should be kept. Older entries will be automatically discarded. Requires crontab.'), ); return system_settings_form($form);