diff options
Diffstat (limited to 'modules/comment.module')
-rw-r--r-- | modules/comment.module | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/modules/comment.module b/modules/comment.module index a31558972..dc58b5a57 100644 --- a/modules/comment.module +++ b/modules/comment.module @@ -12,6 +12,47 @@ function comment_settings($mode, $order, $threshold) { } } +function comment_num_all($nid) { + $comment = db_fetch_object(db_query("SELECT COUNT(c.nid) AS number FROM node n LEFT JOIN comments c ON n.nid = c.nid WHERE n.nid = '$nid' GROUP BY n.nid")); + return $comment->number ? $comment->number : 0; +} + +function comment_num_new($nid) { + global $user; + + if ($user->uid) { + + /* + ** Retrieve the timestamp at which the current user last viewed + ** the specified node and use this timestamp to find the number + ** of new comments. + */ + + $history = db_fetch_object(db_query("SELECT timestamp FROM history WHERE uid = '$user->uid' AND nid = '$nid'")); + $comment = db_fetch_object(db_query("SELECT COUNT(c.nid) AS number FROM node n LEFT JOIN comments c ON n.nid = c.nid WHERE n.nid = '$nid' AND timestamp > '". ($history->timestamp ? $history->timestamp : 0) ."' GROUP BY n.nid")); + + return $comment->number ? $comment->number : 0; + } + else { + return 0; + } + +} + +function comment_tag_new($nid) { + global $user; + + if ($user->uid) { + $result = db_query("SELECT timestamp FROM history WHERE uid = '$user->uid' AND nid = '$nid'"); + if (db_fetch_object($result)) { + db_query("UPDATE history SET timestamp = '". time() ."' WHERE uid = '$user->uid' AND nid = '$nid'"); + } + else { + db_query("INSERT INTO history (uid, nid, timestamp) VALUES ('$user->uid', '$nid', '". time() ."')"); + } + } +} + function comment_access($op, $comment) { global $user; @@ -460,6 +501,7 @@ function comment_perm() { } function comment_link($type, $node = 0, $main = 0) { + if ($type == "admin" && user_access("administer comments")) { $links[] = "<a href=\"admin.php?mod=comment\">comments</a>"; } @@ -473,11 +515,20 @@ function comment_link($type, $node = 0, $main = 0) { */ if (user_access("access comments")) { - $links[] = "<a href=\"node.php?id=$node->nid#comment\">". format_plural(node_get_comments($node->nid), "comment", "comments") ."</a>"; + $all = comment_num_all($node->nid); + $new = comment_num_new($node->nid); + + $links[] = "<a href=\"node.php?id=$node->nid#comment\">". format_plural($all, "comment", "comments") . ($new ? ", $new ". t("new") : "") ."</a>"; } } else { /* + ** Tag the node's comments as read: + */ + + comment_tag_new($node->nid); + + /* ** Node page: add a "post comment" link if the user is allowed to ** post comments. */ @@ -493,7 +544,7 @@ function comment_link($type, $node = 0, $main = 0) { function comment_node_link($node) { - if (user_access("administer comments") && node_get_comments($node->nid)) { + if (user_access("administer comments") && comments_all($node->nid)) { /* ** Edit comments: |