summaryrefslogtreecommitdiff
path: root/modules/forum
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2011-04-23 17:03:13 -0400
committerDries Buytaert <dries@buytaert.net>2011-04-23 17:03:13 -0400
commitc6c21d2402819790276e9af6e5d1e0308f7fda08 (patch)
tree5f9de91316a7f716962fa7ed969ca754b337fe39 /modules/forum
parent9f9e9c382479405f36c37a5448a2a5d4a4fcc6c9 (diff)
downloadbrdo-c6c21d2402819790276e9af6e5d1e0308f7fda08.tar.gz
brdo-c6c21d2402819790276e9af6e5d1e0308f7fda08.tar.bz2
- Patch #1008410 by droplet: forum list header sorting broken.
Diffstat (limited to 'modules/forum')
-rw-r--r--modules/forum/forum.install10
-rw-r--r--modules/forum/forum.module33
2 files changed, 36 insertions, 7 deletions
diff --git a/modules/forum/forum.install b/modules/forum/forum.install
index fe3099557..1813567ae 100644
--- a/modules/forum/forum.install
+++ b/modules/forum/forum.install
@@ -215,7 +215,7 @@ function forum_schema() {
),
),
'indexes' => array(
- 'forum_topics' => array('tid', 'sticky', 'last_comment_timestamp'),
+ 'forum_topics' => array('nid', 'tid', 'sticky', 'last_comment_timestamp'),
),
'foreign keys' => array(
'tracked_node' => array(
@@ -330,3 +330,11 @@ function forum_update_7001() {
->from($select)
->execute();
}
+
+/**
+ * Add new index to forum_index table.
+ */
+function forum_update_7002() {
+ db_drop_index('forum_index', 'forum_topics');
+ db_add_index('forum_index', 'forum_topics', array('nid', 'tid', 'sticky', 'last_comment_timestamp'));
+}
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index b5e422609..273b3e7a0 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -879,7 +879,6 @@ function forum_get_topics($tid, $sortby, $forum_per_page) {
->addTag('node_access')
->orderBy('f.sticky', 'DESC')
->orderByHeader($forum_topic_list_header)
- ->orderBy('f.last_comment_timestamp', 'DESC')
->limit($forum_per_page);
$count_query = db_select('forum_index', 'f');
@@ -894,7 +893,29 @@ function forum_get_topics($tid, $sortby, $forum_per_page) {
$nids[] = $record->nid;
}
if ($nids) {
- $result = db_query("SELECT n.title, n.nid, n.type, n.sticky, n.created, n.uid, n.comment AS comment_mode, ncs.*, f.tid AS forum_tid, u.name, CASE ncs.last_comment_uid WHEN 0 THEN ncs.last_comment_name ELSE u2.name END AS last_comment_name FROM {node} n INNER JOIN {node_comment_statistics} ncs ON n.nid = ncs.nid INNER JOIN {forum} f ON n.vid = f.vid INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {users} u2 ON ncs.last_comment_uid = u2.uid WHERE n.nid IN (:nids)", array(':nids' => $nids));
+ $query = db_select('node', 'n')->extend('TableSort');
+ $query->fields('n', array('title', 'nid', 'type', 'sticky', 'created', 'uid'));
+ $query->addField('n', 'comment', 'comment_mode');
+
+ $query->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
+ $query->fields('ncs', array('cid', 'last_comment_uid', 'last_comment_timestamp', 'comment_count'));
+
+ $query->join('forum_index', 'f', 'f.nid = ncs.nid');
+ $query->addField('f', 'tid', 'forum_tid');
+
+ $query->join('users', 'u', 'n.uid = u.uid');
+ $query->addField('u', 'name');
+
+ $query->join('users', 'u2', 'ncs.last_comment_uid = u2.uid');
+
+ $query->addExpression('CASE ncs.last_comment_uid WHEN 0 THEN ncs.last_comment_name ELSE u2.name END', 'last_comment_name');
+
+ $query
+ ->orderBy('f.sticky', 'DESC')
+ ->orderByHeader($forum_topic_list_header)
+ ->condition('n.nid', $nids);
+
+ $result = $query->execute();
}
else {
$result = array();
@@ -1193,16 +1214,16 @@ function _forum_user_last_visit($nid) {
function _forum_get_topic_order($sortby) {
switch ($sortby) {
case 1:
- return array('field' => 'ncs.last_comment_timestamp', 'sort' => 'desc');
+ return array('field' => 'f.last_comment_timestamp', 'sort' => 'desc');
break;
case 2:
- return array('field' => 'ncs.last_comment_timestamp', 'sort' => 'asc');
+ return array('field' => 'f.last_comment_timestamp', 'sort' => 'asc');
break;
case 3:
- return array('field' => 'ncs.comment_count', 'sort' => 'desc');
+ return array('field' => 'f.comment_count', 'sort' => 'desc');
break;
case 4:
- return array('field' => 'ncs.comment_count', 'sort' => 'asc');
+ return array('field' => 'f.comment_count', 'sort' => 'asc');
break;
}
}