From eaf21849a1643087fa014d3cdf528cc17cccb252 Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Sun, 2 Aug 2009 11:25:18 +0000
Subject: [PATCH] - Accidentically committed two patches at once. Rolled back
 one of them.  Sorry.

---
 modules/comment/comment.module | 123 ++++++++++++++++++++-------------
 modules/system/system.api.php  |  19 +++++
 2 files changed, 94 insertions(+), 48 deletions(-)

diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 7725ea6aed6b..526525601368 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -822,56 +822,9 @@ function comment_build_content($comment, $build_mode = 'full') {
   $comment->content += field_attach_view('comment', $comment, $build_mode);
 
   if (empty($comment->in_preview)) {
-    $links = array();
-    $node = node_load($comment->nid);
-    if ($node->comment == COMMENT_NODE_OPEN) {
-      if (user_access('administer comments') && user_access('post comments')) {
-        $links['comment_delete'] = array(
-          'title' => t('delete'),
-          'href' => "comment/delete/$comment->cid",
-          'html' => TRUE,
-        );
-        $links['comment_edit'] = array(
-          'title' => t('edit'),
-          'href' => "comment/edit/$comment->cid",
-          'html' => TRUE,
-        );
-        $links['comment_reply'] = array(
-          'title' => t('reply'),
-          'href' => "comment/reply/$comment->nid/$comment->cid",
-          'html' => TRUE,
-        );
-        if ($comment->status == COMMENT_NOT_PUBLISHED) {
-          $links['comment_approve'] = array(
-            'title' => t('approve'),
-            'href' => "comment/approve/$comment->cid",
-            'html' => TRUE,
-          );
-        }
-      }
-      elseif (user_access('post comments')) {
-        if (comment_access('edit', $comment)) {
-          $links['comment_edit'] = array(
-            'title' => t('edit'),
-            'href' => "comment/edit/$comment->cid",
-            'html' => TRUE,
-          );
-        }
-        $links['comment_reply'] = array(
-          'title' => t('reply'),
-          'href' => "comment/reply/$comment->nid/$comment->cid",
-          'html' => TRUE,
-        );
-      }
-      else {
-        $links['comment_forbidden']['title'] = theme('comment_post_forbidden', $node);
-        $links['comment_forbidden']['html'] = TRUE;
-      }
-    }
-
     $comment->content['links']['comment'] = array(
       '#theme' => 'links',
-      '#links' => $links,
+      '#links' => comment_links($comment),
       '#attributes' => array('class' => 'links inline'),
     );
   }
@@ -1370,6 +1323,80 @@ function comment_delete_multiple($cids) {
   }
 }
 
+/**
+ * Implement hook_link().
+ */
+function comment_link($type, $object, $build_mode) {
+  if ($type == 'comment') {
+    $links = comment_links($object, FALSE);
+    return $links;
+  }
+}
+
+/**
+ * Build command links for a comment (e.g.\ edit, reply, delete) with respect to the current user's access permissions.
+ *
+ * @param $comment
+ *   The comment to which the links will be related.
+ * @return
+ *   An associative array containing the links.
+ */
+function comment_links(&$comment) {
+  global $user;
+  $links = array();
+
+  $node = node_load($comment->nid);
+  if ($node->comment == COMMENT_NODE_OPEN) {
+    if (user_access('administer comments') && user_access('post comments')) {
+      $links['comment_delete'] = array(
+        'title' => t('delete'),
+        'href' => "comment/delete/$comment->cid",
+        'html' => TRUE,
+      );
+      $links['comment_edit'] = array(
+        'title' => t('edit'),
+        'href' => "comment/edit/$comment->cid",
+        'html' => TRUE,
+      );
+      $links['comment_reply'] = array(
+        'title' => t('reply'),
+        'href' => "comment/reply/$comment->nid/$comment->cid",
+        'html' => TRUE,
+      );
+      if ($comment->status == COMMENT_NOT_PUBLISHED) {
+        $links['comment_approve'] = array(
+          'title' => t('approve'),
+          'href' => "comment/approve/$comment->cid",
+          'html' => TRUE,
+        );
+      }
+    }
+    elseif (user_access('post comments')) {
+      if (comment_access('edit', $comment)) {
+        $links['comment_edit'] = array(
+          'title' => t('edit'),
+          'href' => "comment/edit/$comment->cid",
+          'html' => TRUE,
+        );
+      }
+      $links['comment_reply'] = array(
+        'title' => t('reply'),
+        'href' => "comment/reply/$comment->nid/$comment->cid",
+        'html' => TRUE,
+      );
+    }
+    else {
+      $node = node_load($comment->nid);
+      $links['comment_forbidden']['title'] = theme('comment_post_forbidden', $node);
+      $links['comment_forbidden']['html'] = TRUE;
+    }
+  }
+
+
+
+  return $links;
+}
+
 /**
  * Comment operations. Offer different update operations depending on
  * which comment administration page is being viewed.
diff --git a/modules/system/system.api.php b/modules/system/system.api.php
index 550d43431073..9c543527551c 100644
--- a/modules/system/system.api.php
+++ b/modules/system/system.api.php
@@ -557,6 +557,25 @@ function hook_link($type, $object, $build_mode) {
   return $links;
 }
 
+/**
+ * Perform alterations before links on a comment are rendered. One popular use of
+ * this hook is to modify/remove links from other modules. If you want to add a link
+ * to the links section of a node, use hook_link instead.
+ *
+ * @param $links
+ *   Nested array of links for the node keyed by providing module.
+ * @param $node
+ *   A node object that contains the links.
+ */
+function hook_link_alter(array &$links, $node) {
+  foreach ($links as $module => $link) {
+    if (strpos($module, 'taxonomy_term') !== FALSE) {
+      // Link back to the forum and not the taxonomy term page
+      $links[$module]['href'] = str_replace('taxonomy/term', 'forum', $link['href']);
+    }
+  }
+}
+
 /**
  * Perform alterations profile items before they are rendered. You may omit/add/re-sort/re-categorize, etc.
  *
-- 
GitLab