You are here

function print_link_allowed in Printer, email and PDF versions 5.3

Same name and namespace in other branches
  1. 5.4 print.module \print_link_allowed()
  2. 6 print.module \print_link_allowed()
  3. 7.2 print.module \print_link_allowed()
  4. 7 print.module \print_link_allowed()
  5. 5.x print.module \print_link_allowed()

Determine a the link to the PF version is allowed depending on all possible settings

Parameters

$args: array containing the possible parameters: teaser, node, type, path

Return value

FALSE if not allowed PRINT_ALLOW_NORMAL_LINK if a normal link is allowed PRINT_ALLOW_BOOK_LINK if a link is allowed in a book node

2 calls to print_link_allowed()
print_insert_link in ./print.module
Auxiliary function to display a formatted Printer-friendly link
print_link in ./print.module
Implementation of hook_link().

File

./print.module, line 504
Displays Printer-friendly versions of Drupal pages.

Code

function print_link_allowed($args) {
  if (!empty($args['teaser']) || !user_access('access print')) {

    // If showing only the teaser or the user is not allowed or link is disabled
    return FALSE;
  }
  if (!empty($args['path'])) {
    $nid = preg_replace('!^node/!', '', drupal_get_normal_path($args['path']));
    if (is_numeric($nid)) {
      $args['node'] = node_load(array(
        'nid' => $nid,
      ));
    }
  }
  if (!empty($args['node'])) {
    static $node_type = FALSE;
    $node = $args['node'];
    if ($node_type === FALSE) {
      if (isset($node->type)) {
        $node_type = $node->type;
      }
      else {
        $node_type = '';
      }
    }

    // Node
    $print_html_node_link_visibility = variable_get('print_html_node_link_visibility', PRINT_HTML_NODE_LINK_VISIBILITY_DEFAULT);
    $print_html_node_link_pages = variable_get('print_html_node_link_pages', PRINT_HTML_NODE_LINK_PAGES_DEFAULT);
    if (!empty($node->printing) || !_print_page_match($print_html_node_link_visibility, $print_html_node_link_pages)) {

      // Page not in visibility list or we are working!
      return FALSE;
    }
    elseif (isset($args['type']) && $args['type'] == 'comment' && isset($node_type)) {

      // Link is for a comment, return the configured setting
      return variable_get('print_display_comment_' . $node_type, PRINT_TYPE_COMMENT_LINK_DEFAULT);
    }
    else {

      // Node link
      if (isset($node_type) && !variable_get('print_display_' . $node_type, PRINT_TYPE_SHOW_LINK_DEFAULT)) {

        // Link for this node type is disabled
        return FALSE;
      }
      elseif (isset($node->parent)) {

        // Node is a book;
        $print_html_book_link = variable_get('print_html_book_link', PRINT_HTML_BOOK_LINK_DEFAULT);
        if (!$print_html_book_link || !user_access('see printer-friendly version')) {

          // Book link is disabled
          return FALSE;
        }
        else {
          return PRINT_ALLOW_BOOK_LINK;
        }
      }
      else {
        return PRINT_ALLOW_NORMAL_LINK;
      }
    }
  }
  else {

    // 'System' page
    $print_html_sys_link_visibility = variable_get('print_html_sys_link_visibility', PRINT_HTML_SYS_LINK_VISIBILITY_DEFAULT);
    $print_html_sys_link_pages = variable_get('print_html_sys_link_pages', PRINT_HTML_SYS_LINK_PAGES_DEFAULT);
    return _print_page_match($print_html_sys_link_visibility, $print_html_sys_link_pages);
  }
}