- Patch #46743 by m3avrck: clean up forum topic navigation. Bring it in line with book.module.

4.7.x
Dries Buytaert 2006-02-10 05:05:44 +00:00
parent 1819de963f
commit 91152ba7af
2 changed files with 94 additions and 90 deletions

View File

@ -400,50 +400,6 @@ function forum_block($op = 'list', $delta = 0, $edit = array()) {
}
}
/**
* Implementation of hook_link().
*/
function forum_link($type, $node = 0, $main = 0) {
global $user;
$links = array();
if (!$main && $type == 'node' && $node->type == 'forum') {
// get previous and next topic
$sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1));
$sql = db_rewrite_sql($sql);
$result = db_query($sql, $node->tid);
while ($topic = db_fetch_object($result)) {
if ($stop == 1) {
$next = new StdClass();
$next->nid = $topic->nid;
$next->title = $topic->title;
break;
}
if ($topic->nid == $node->nid) {
$stop = 1;
}
else {
$prev = new StdClass();
$prev->nid = $topic->nid;
$prev->title = $topic->title;
}
}
if ($prev) {
$links[] = l(t('previous forum topic'), "node/$prev->nid", array('title' => check_plain($prev->title)));
}
if ($next) {
$links[] = l(t('next forum topic'), "node/$next->nid", array('title' => check_plain($next->title)));
}
}
return $links;
}
function forum_term_path($term) {
return 'forum/'. $term->tid;
}
@ -497,7 +453,6 @@ function forum_menu($may_cache) {
* Implementation of hook_view().
*/
function forum_view(&$node, $teaser = FALSE, $page = FALSE) {
if ($page) {
$vocabulary = taxonomy_get_vocabulary(variable_get('forum_nav_vocabulary', ''));
// Breadcrumb navigation
@ -514,6 +469,8 @@ function forum_view(&$node, $teaser = FALSE, $page = FALSE) {
}
$node = node_prepare($node, $teaser);
$node->body .= theme('forum_topic_navigation', $node);
}
/**
@ -1007,6 +964,51 @@ function theme_forum_icon($new_posts, $num_posts = 0, $comment_mode = 0, $sticky
return $output;
}
/**
* Format the next/previous forum topic navigation links.
*
* @ingroup themeable
*/
function theme_forum_topic_navigation($node) {
$output = '';
// get previous and next topic
$sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1));
$result = db_query(db_rewrite_sql($sql), $node->tid);
while ($topic = db_fetch_object($result)) {
if ($stop == 1) {
$next = new StdClass();
$next->nid = $topic->nid;
$next->title = $topic->title;
break;
}
if ($topic->nid == $node->nid) {
$stop = 1;
}
else {
$prev = new StdClass();
$prev->nid = $topic->nid;
$prev->title = $topic->title;
}
}
if ($prev || $next) {
$output .= '<div class="forum-topic-navigation">';
if ($prev) {
$output .= l(t(' ') . check_plain($prev->title), 'node/'. $prev->nid, array('class' => 'topic-previous', 'title' => t('Go to previous forum topic')));
}
if ($next) {
$output .= l(check_plain($next->title) . t(' '), 'node/'. $next->nid, array('class' => 'topic-next', 'title' => t('Go to next forum topic')));
}
$output .= '</div>';
}
return $output;
}
function _forum_user_last_visit($nid) {
global $user;
static $history = array();

View File

@ -400,50 +400,6 @@ function forum_block($op = 'list', $delta = 0, $edit = array()) {
}
}
/**
* Implementation of hook_link().
*/
function forum_link($type, $node = 0, $main = 0) {
global $user;
$links = array();
if (!$main && $type == 'node' && $node->type == 'forum') {
// get previous and next topic
$sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1));
$sql = db_rewrite_sql($sql);
$result = db_query($sql, $node->tid);
while ($topic = db_fetch_object($result)) {
if ($stop == 1) {
$next = new StdClass();
$next->nid = $topic->nid;
$next->title = $topic->title;
break;
}
if ($topic->nid == $node->nid) {
$stop = 1;
}
else {
$prev = new StdClass();
$prev->nid = $topic->nid;
$prev->title = $topic->title;
}
}
if ($prev) {
$links[] = l(t('previous forum topic'), "node/$prev->nid", array('title' => check_plain($prev->title)));
}
if ($next) {
$links[] = l(t('next forum topic'), "node/$next->nid", array('title' => check_plain($next->title)));
}
}
return $links;
}
function forum_term_path($term) {
return 'forum/'. $term->tid;
}
@ -497,7 +453,6 @@ function forum_menu($may_cache) {
* Implementation of hook_view().
*/
function forum_view(&$node, $teaser = FALSE, $page = FALSE) {
if ($page) {
$vocabulary = taxonomy_get_vocabulary(variable_get('forum_nav_vocabulary', ''));
// Breadcrumb navigation
@ -514,6 +469,8 @@ function forum_view(&$node, $teaser = FALSE, $page = FALSE) {
}
$node = node_prepare($node, $teaser);
$node->body .= theme('forum_topic_navigation', $node);
}
/**
@ -1007,6 +964,51 @@ function theme_forum_icon($new_posts, $num_posts = 0, $comment_mode = 0, $sticky
return $output;
}
/**
* Format the next/previous forum topic navigation links.
*
* @ingroup themeable
*/
function theme_forum_topic_navigation($node) {
$output = '';
// get previous and next topic
$sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1));
$result = db_query(db_rewrite_sql($sql), $node->tid);
while ($topic = db_fetch_object($result)) {
if ($stop == 1) {
$next = new StdClass();
$next->nid = $topic->nid;
$next->title = $topic->title;
break;
}
if ($topic->nid == $node->nid) {
$stop = 1;
}
else {
$prev = new StdClass();
$prev->nid = $topic->nid;
$prev->title = $topic->title;
}
}
if ($prev || $next) {
$output .= '<div class="forum-topic-navigation">';
if ($prev) {
$output .= l(t(' ') . check_plain($prev->title), 'node/'. $prev->nid, array('class' => 'topic-previous', 'title' => t('Go to previous forum topic')));
}
if ($next) {
$output .= l(check_plain($next->title) . t(' '), 'node/'. $next->nid, array('class' => 'topic-next', 'title' => t('Go to next forum topic')));
}
$output .= '</div>';
}
return $output;
}
function _forum_user_last_visit($nid) {
global $user;
static $history = array();