From bc8df46e71115b5acf5ebc7859219b5c9dc948ed Mon Sep 17 00:00:00 2001
From: Dave Reid <dave@davereid.net>
Date: Tue, 17 May 2011 21:36:55 -0500
Subject: [PATCH] Issue #1067126: Added entity_is_page() to replace node_is_page() and taxonomy_term_is_page().

---
 includes/common.inc              |   26 ++++++++++++++++++++++++++
 modules/blog/blog.module         |    2 +-
 modules/book/book.module         |    2 +-
 modules/comment/comment.module   |    2 +-
 modules/forum/forum.module       |    2 +-
 modules/node/node.api.php        |    2 +-
 modules/node/node.module         |   15 ++-------------
 modules/taxonomy/taxonomy.module |   13 +------------
 themes/bartik/template.php       |    2 +-
 9 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/includes/common.inc b/includes/common.inc
index 95e03e8..d990c4e 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -7606,6 +7606,32 @@ function entity_label($entity_type, $entity) {
 }
 
 /**
+ * Returns whether the current page is the page of the passed in entity.
+ *
+ * @param $type
+ *    The entity type; e.g. 'node' or 'user'.
+ * @param $entity
+ *    The entity object.
+ *
+ * @return
+ *   TRUE if the current page is the page of the specified entity, or FALSE
+ *   otherwise.
+ */
+function entity_is_page($entity_type, $entity) {
+  if ($uri = entity_uri($entity_type, $entity)) {
+    if (current_path() == $uri['path']) {
+      // The path node/1 matches node 1's URI exactly.
+      return TRUE;
+    }
+    elseif (strpos(current_path(), $uri['path'] . '/') === 0) {
+      // The path node/1/view also should match node 1's URI.
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+/**
  * Helper function for attaching field API validation to entity forms.
  */
 function entity_form_field_validate($entity_type, $form, &$form_state) {
diff --git a/modules/blog/blog.module b/modules/blog/blog.module
index 98ebe51..1c5ebbc 100644
--- a/modules/blog/blog.module
+++ b/modules/blog/blog.module
@@ -66,7 +66,7 @@ function blog_form($node, $form_state) {
  * Implements hook_view().
  */
 function blog_view($node, $view_mode) {
-  if ($view_mode == 'full' && node_is_page($node)) {
+  if ($view_mode == 'full' && entity_is_page('node', $node)) {
     // Breadcrumb navigation.
     drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Blogs'), 'blog'), l(t("!name's blog", array('!name' => format_username($node))), 'blog/' . $node->uid)));
   }
diff --git a/modules/book/book.module b/modules/book/book.module
index 82d38f7..49548d4 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -90,7 +90,7 @@ function book_node_view_link($node, $view_mode) {
   $links = array();
 
   if (isset($node->book['depth'])) {
-    if ($view_mode == 'full' && node_is_page($node)) {
+    if ($view_mode == 'full' && entity_is_page('node', $node)) {
       $child_type = variable_get('book_child_type', 'book');
       if ((user_access('add content to books') || user_access('administer book outlines')) && node_access('create', $child_type) && $node->status == 1 && $node->book['depth'] < MENU_MAX_DEPTH) {
         $links['book_add_child'] = array(
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index ec57dd4..0820a3b 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -700,7 +700,7 @@ function comment_node_view($node, $view_mode) {
     // page. We compare $node and $page_node to ensure that comments are not
     // appended to other nodes shown on the page, for example a node_reference
     // displayed in 'full' view mode within another node.
-    if ($node->comment && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
+    if ($node->comment && $view_mode == 'full' && entity_is_page('node', $node) && empty($node->in_preview)) {
       $node->content['comments'] = comment_node_page_additions($node);
     }
   }
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index c58b5c9..9c62a4b 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -264,7 +264,7 @@ function forum_node_view($node, $view_mode) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node)) {
-    if ($view_mode == 'full' && node_is_page($node)) {
+    if ($view_mode == 'full' && entity_is_page('node', $node)) {
       // Breadcrumb navigation
       $breadcrumb[] = l(t('Home'), NULL);
       $breadcrumb[] = l($vocabulary->name, 'forum');
diff --git a/modules/node/node.api.php b/modules/node/node.api.php
index 3e8029c..468c30e 100644
--- a/modules/node/node.api.php
+++ b/modules/node/node.api.php
@@ -1249,7 +1249,7 @@ function hook_validate($node, $form, &$form_state) {
  * @ingroup node_api_hooks
  */
 function hook_view($node, $view_mode) {
-  if ($view_mode == 'full' && node_is_page($node)) {
+  if ($view_mode == 'full' && entity_is_page('node', $node)) {
     $breadcrumb = array();
     $breadcrumb[] = l(t('Home'), NULL);
     $breadcrumb[] = l(t('Example'), 'example');
diff --git a/modules/node/node.module b/modules/node/node.module
index 524a57f..2080fbe 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1300,7 +1300,7 @@ function node_view($node, $view_mode = 'full', $langcode = NULL) {
   // displayed on its own page. Modules may alter this behavior (for example,
   // to restrict contextual links to certain view modes) by implementing
   // hook_node_view_alter().
-  if (!empty($node->nid) && !($view_mode == 'full' && node_is_page($node))) {
+  if (!empty($node->nid) && !($view_mode == 'full' && entity_is_page('node', $node))) {
     $build['#contextual_links']['node'] = array('node', array($node->nid));
   }
 
@@ -1412,17 +1412,6 @@ function node_show($node, $message = FALSE) {
 }
 
 /**
- * Returns whether the current page is the full page view of the passed-in node.
- *
- * @param $node
- *   A node object.
- */
-function node_is_page($node) {
-  $page_node = menu_get_object();
-  return (!empty($page_node) ? $page_node->nid == $node->nid : FALSE);
-}
-
-/**
  * Process variables for node.tpl.php
  *
  * Most themes utilize their own copy of node.tpl.php. The default is located
@@ -1449,7 +1438,7 @@ function template_preprocess_node(&$variables) {
   $uri = entity_uri('node', $node);
   $variables['node_url']  = url($uri['path'], $uri['options']);
   $variables['title']     = check_plain($node->title);
-  $variables['page']      = $variables['view_mode'] == 'full' && node_is_page($node);
+  $variables['page']      = $variables['view_mode'] == 'full' && entity_is_page('node', $node);
 
   // Flatten the node object's member fields.
   $variables = array_merge((array) $node, $variables);
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 50d2fd6..2373ebf 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -724,7 +724,7 @@ function template_preprocess_taxonomy_term(&$variables) {
   $uri = entity_uri('taxonomy_term', $term);
   $variables['term_url']  = url($uri['path'], $uri['options']);
   $variables['term_name'] = check_plain($term->name);
-  $variables['page']      = $variables['view_mode'] == 'full' && taxonomy_term_is_page($term);
+  $variables['page']      = $variables['view_mode'] == 'full' && entity_is_page('taxonomy_term', $term);
 
   // Flatten the term object's member fields.
   $variables = array_merge((array) $term, $variables);
@@ -750,17 +750,6 @@ function template_preprocess_taxonomy_term(&$variables) {
 }
 
 /**
- * Returns whether the current page is the page of the passed-in term.
- *
- * @param $term
- *   A term object.
- */
-function taxonomy_term_is_page($term) {
-  $page_term = menu_get_object('taxonomy_term', 2);
-  return (!empty($page_term) ? $page_term->tid == $term->tid : FALSE);
-}
-
-/**
  * Clear all static cache variables for terms..
  */
 function taxonomy_terms_static_reset() {
diff --git a/themes/bartik/template.php b/themes/bartik/template.php
index d523a0a..cedf76d 100644
--- a/themes/bartik/template.php
+++ b/themes/bartik/template.php
@@ -105,7 +105,7 @@ function bartik_process_maintenance_page(&$variables) {
  * Override or insert variables into the node template.
  */
 function bartik_preprocess_node(&$variables) {
-  if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
+  if ($variables['view_mode'] == 'full' && entity_is_page('node', $variables['node'])) {
     $variables['classes_array'][] = 'node-full';
   }
 }
-- 
1.7.3.1

