function comment_new_page_count in Drupal 7
Same name and namespace in other branches
- 6 modules/comment/comment.module \comment_new_page_count()
Calculate page number for first new comment.
Parameters
$num_comments: Number of comments.
$new_replies: Number of new replies.
$node: The first new comment node.
Return value
"page=X" if the page number is greater than zero; empty string otherwise.
3 calls to comment_new_page_count()
- CommentPagerTest::testCommentNewPageIndicator in modules/
comment/ comment.test - Test comment_new_page_count().
- comment_node_view in modules/
comment/ comment.module - Implements hook_node_view().
- template_preprocess_forum_topic_list in modules/
forum/ forum.module - Preprocesses variables for forum-topic-list.tpl.php.
File
- modules/
comment/ comment.module, line 537 - Enables users to comment on published content.
Code
function comment_new_page_count($num_comments, $new_replies, $node) {
$mode = variable_get('comment_default_mode_' . $node->type, COMMENT_MODE_THREADED);
$comments_per_page = variable_get('comment_default_per_page_' . $node->type, 50);
$pagenum = NULL;
$flat = $mode == COMMENT_MODE_FLAT ? TRUE : FALSE;
if ($num_comments <= $comments_per_page) {
// Only one page of comments.
$pageno = 0;
}
elseif ($flat) {
// Flat comments.
$count = $num_comments - $new_replies;
$pageno = $count / $comments_per_page;
}
else {
// Threaded comments: we build a query with a subquery to find the first
// thread with a new comment.
// 1. Find all the threads with a new comment.
$unread_threads_query = db_select('comment')
->fields('comment', array(
'thread',
))
->condition('nid', $node->nid)
->condition('status', COMMENT_PUBLISHED)
->orderBy('created', 'DESC')
->orderBy('cid', 'DESC')
->range(0, $new_replies);
// 2. Find the first thread.
$first_thread = db_select($unread_threads_query, 'thread')
->fields('thread', array(
'thread',
))
->orderBy('SUBSTRING(thread, 1, (LENGTH(thread) - 1))')
->range(0, 1)
->execute()
->fetchField();
// Remove the final '/'.
$first_thread = substr($first_thread, 0, -1);
// Find the number of the first comment of the first unread thread.
$count = db_query('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND status = :status AND SUBSTRING(thread, 1, (LENGTH(thread) - 1)) < :thread', array(
':status' => COMMENT_PUBLISHED,
':nid' => $node->nid,
':thread' => $first_thread,
))
->fetchField();
$pageno = $count / $comments_per_page;
}
if ($pageno >= 1) {
$pagenum = array(
'page' => intval($pageno),
);
}
return $pagenum;
}