diff --git a/sites/all/modules/unl/unl.install b/sites/all/modules/unl/unl.install index 0b49be96461330096ea3f3f995bf42bdd9de6bc8..a1774011456cc5fb1a6993b7a8c07f5e04af22b4 100644 --- a/sites/all/modules/unl/unl.install +++ b/sites/all/modules/unl/unl.install @@ -40,3 +40,12 @@ function unl_update_7112() { ); variable_set('unl_module_whitelist', $modules); } + +/** + * If site does not have custom 404 set, set it to the central UNL page. + */ +function unl_update_7113() { + if (!variable_get('site_404')) { + variable_set('site_404', 'unl-404'); + } +} diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module index ce293145f876043477916afff99326290e7a66e9..dd559792d10d027e28193cbcac0a53d3d8de7847 100644 --- a/sites/all/modules/unl/unl.module +++ b/sites/all/modules/unl/unl.module @@ -255,6 +255,17 @@ function unl_permission() { ); } +/** + * Implements hook_preprocess_node(). + */ +function unl_preprocess_node(&$vars) { + // Full page representation wanted for 404 page + $status = drupal_get_http_header('status'); + if ($status == '404 Not Found') { + $vars['page'] = TRUE; + } +} + /** * Implements hook_preprocess_page(). */ @@ -278,11 +289,19 @@ function unl_preprocess_page(&$vars) { } /** - * Implementation of hook_menu(). + * Implements hook_menu(). */ function unl_menu() { $items = array(); + // 404 page pulled from default site. + $items['unl-404'] = array( + 'title' => 'Page not found', + 'access callback' => TRUE, + 'page callback' => 'unl_404_page', + 'type' => MENU_CALLBACK, + ); + // Output html snippets for regions. $items['sharedcode/%'] = array( 'title' => 'sharedcode files', @@ -377,7 +396,7 @@ function unl_menu() { } /** - * Implementation of hook_menu_alter(). + * Implements hook_menu_alter(). */ function unl_menu_alter(&$items) { // This duplicates the form at admin/appearance/settings/unl_wdn for roles that can't 'administer themes' but have 'unl theme settings' permission. @@ -405,6 +424,29 @@ function unl_menu_alter(&$items) { $items['admin/modules/uninstall']['access callback'] = 'unl_user_is_administrator'; } +/** + * Custom page callback. + */ +function unl_404_page() { + $database = $GLOBALS['databases']['default']['default']; + $database['prefix'] = unl_get_shared_db_prefix(); + Database::addConnectionInfo('default_site', 'default', $database); + // Switch database connection to default site. + db_set_active('default_site'); + + $default_404 = unl_shared_variable_get('site_404'); + // @TODO: $default_404 should look like "node/182" but is there a safer way to retrieve nid? + $node = node_load(substr($default_404, 5)); + drupal_set_title($node->title); + $build = node_view($node, 'full'); + $build['links']['#access'] = FALSE; + $build['#contextual_links'] = NULL; + + // Restore database connection. + db_set_active(); + return drupal_render($build); +} + /** * Custom function that creates html snippet output at sharedcode/% paths to * mimic files that once existed on static UNL templated sites.