You are here

function pagepreview_deliver_page in Page Preview 7

Menu callback for "pagepreview/%".

Directly prints a rendered page based on the cached temporary node.

Parameters

string $preview_id: The cache key for the object to be retrieved.

1 string reference to 'pagepreview_deliver_page'
pagepreview_menu in ./pagepreview.module
Implements hook_menu().

File

./pagepreview.module, line 70
An alternative node previewing system for the node add/edit form.

Code

function pagepreview_deliver_page($preview_id) {

  // Get the cached temporary node.
  $node = pagepreview_cache_get($preview_id);

  // If we don't have a valid node for whatever reason, quit here.
  if (!$node) {
    drupal_exit();
  }

  // Change the preview's page title.
  drupal_set_title($node->title);

  // Overrides $_GET['q'] so that other elements on the page can react to the
  // proper path context.
  if ($node->nid) {
    $_GET['q'] = 'node/' . $node->nid;
  }
  elseif (!empty($node->path['alias'])) {
    $_GET['q'] = trim($node->path['alias'], '/');
  }

  // Allow other modules to alter the node or execute code before building the
  // preview.
  drupal_alter('pagepreview_node', $node);
  $preview = pagepreview_build_preview($node);

  // Switch to the anonymous user for page rendering.
  // TODO: make this configurable.
  global $user;
  drupal_save_session(FALSE);
  $user = user_load(0);

  // Suppress fancy stuff like admin and admin_menu.module for the preview.
  module_invoke_all('suppress');

  // Add JS within the preview to prevent clicking through to links.
  drupal_add_js(drupal_get_path('module', 'pagepreview') . '/pagepreview.preview.js');

  // Deliver the page output.
  drupal_deliver_page($preview);

  // Remove the cached preview.
  cache_clear_all($preview_id, 'cache_pagepreview');
}