You are here

function pagepreview_build_preview in Page Preview 7

Replacement function for node_preview().

Instead of calling theme('node_preview') to get the node output, we call node_view directly.

See also

theme_node_preview()

1 call to pagepreview_build_preview()
pagepreview_deliver_page in ./pagepreview.module
Menu callback for "pagepreview/%".

File

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

Code

function pagepreview_build_preview($node) {
  if (node_access('create', $node) || node_access('update', $node)) {
    _field_invoke_multiple('load', 'node', array(
      $node->nid => $node,
    ));

    // Load the user's name when needed.
    if (isset($node->name)) {

      // The use of isset() is mandatory in the context of user IDs, because
      // user ID 0 denotes the anonymous user.
      if ($user = user_load_by_name($node->name)) {
        $node->uid = $user->uid;
        $node->picture = $user->picture;
      }
      else {
        $node->uid = 0;

        // anonymous user
      }
    }
    elseif ($node->uid) {
      $user = user_load($node->uid);
      $node->name = $user->name;
      $node->picture = $user->picture;
    }
    $node->changed = REQUEST_TIME;
    $nodes = array(
      $node->nid => $node,
    );
    field_attach_prepare_view('node', $nodes, 'full');

    // Display a preview of the node.
    if (!form_get_errors()) {
      $node->in_preview = TRUE;

      // If enabled, allow page_manager.module to handle node rendering.
      if (module_exists('page_manager')) {

        // Load my task plugin
        $task = page_manager_get_task('node_view');

        // Load the node into a context.
        ctools_include('context');
        ctools_include('context-task-handler');
        $contexts = ctools_context_handler_get_task_contexts($task, '', array(
          $node,
        ));
        $output = ctools_context_handler_render($task, '', $contexts, array(
          $node->nid,
        ));

        // Page manager is not handeling node_view
        if ($output === FALSE) {
          $output = node_view($node, 'full');
        }
      }
      else {
        $output = node_view($node, 'full');
      }
      unset($node->in_preview);

      // Rather than the default t('Preview') allow user to see more acurate rendering
      drupal_set_title($node->title);
    }
    return $output;
  }
}