You are here

function print_pdf_link_allowed in Printer, email and PDF versions 6

Same name and namespace in other branches
  1. 5.4 print_pdf/print_pdf.module \print_pdf_link_allowed()
  2. 5.3 print_pdf/print_pdf.module \print_pdf_link_allowed()
  3. 7.2 print_pdf/print_pdf.module \print_pdf_link_allowed()
  4. 7 print_pdf/print_pdf.module \print_pdf_link_allowed()
  5. 5.x print_pdf/print_pdf.module \print_pdf_link_allowed()

Check if the link to the PDF version is allowed depending on the 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_pdf_link_allowed()
print_pdf_insert_link in print_pdf/print_pdf.module
Auxiliary function to display a formatted PDF version link
print_pdf_link in print_pdf/print_pdf.module
Implementation of hook_link().

File

print_pdf/print_pdf.module, line 566
Displays Printer-friendly versions of Drupal pages.

Code

function print_pdf_link_allowed($args) {
  $print_pdf_pdf_tool = variable_get('print_pdf_pdf_tool', PRINT_PDF_PDF_TOOL_DEFAULT);
  if (!empty($args['teaser']) && !variable_get('print_pdf_link_teaser', PRINT_PDF_LINK_TEASER_DEFAULT) || !user_access('access PDF version') || empty($print_pdf_pdf_tool)) {

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

    // Node
    $print_pdf_node_link_visibility = variable_get('print_pdf_node_link_visibility', PRINT_PDF_NODE_LINK_VISIBILITY_DEFAULT);
    $print_pdf_node_link_pages = variable_get('print_pdf_node_link_pages', PRINT_PDF_NODE_LINK_PAGES_DEFAULT);
    if (!_print_page_match($print_pdf_node_link_visibility, "node/" . $node->nid, $print_pdf_node_link_pages)) {

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

      // Link is for a comment, return the configured setting
      // Cache this statically to avoid duplicate queries for every comment.
      static $res = array();
      if (!isset($res[$node->nid])) {
        $res[$node->nid] = db_fetch_object(db_query("SELECT comments FROM {print_pdf_node_conf} WHERE nid = %d", $node->nid));
      }
      $print_display_comment = $res && $res[$node->nid] !== FALSE ? intval($res[$node->nid]->comments) : variable_get('print_pdf_display_comment_' . $node_type, PRINT_TYPE_COMMENT_LINK_DEFAULT);
      if ($print_display_comment) {
        return PRINT_ALLOW_NORMAL_LINK;
      }
    }
    else {

      // Node link
      if (isset($node->print_pdf_display) && !$node->print_pdf_display) {

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

        // Node is a book;
        $print_pdf_book_link = variable_get('print_pdf_book_link', PRINT_PDF_BOOK_LINK_DEFAULT);
        switch ($print_pdf_book_link) {
          case 1:
            if (user_access('access printer-friendly version')) {
              return PRINT_ALLOW_BOOK_LINK;
            }
            break;
          case 2:
            return PRINT_ALLOW_NORMAL_LINK;
        }
      }
      else {
        return PRINT_ALLOW_NORMAL_LINK;
      }
    }
  }
  else {

    // 'System' page
    $print_pdf_sys_link_visibility = variable_get('print_pdf_sys_link_visibility', PRINT_PDF_SYS_LINK_VISIBILITY_DEFAULT);
    $print_pdf_sys_link_pages = variable_get('print_pdf_sys_link_pages', PRINT_PDF_SYS_LINK_PAGES_DEFAULT);
    return _print_page_match($print_pdf_sys_link_visibility, $_GET['q'], $print_pdf_sys_link_pages);
  }
  return FALSE;
}