summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-04-05 12:26:12 +0000
committerDries Buytaert <dries@buytaert.net>2009-04-05 12:26:12 +0000
commit1067fbaa304196c137709518aceec0aa89d93538 (patch)
tree387fdf78e2d7628fc8ac978fb62a962450752e81 /modules
parent756784a62b12cc0ec724ca3c9f07bffa9aeb2795 (diff)
downloadbrdo-1067fbaa304196c137709518aceec0aa89d93538.tar.gz
brdo-1067fbaa304196c137709518aceec0aa89d93538.tar.bz2
- Patch #394582 by Damien Tournoud: convert tracker module to new DB abstraction layer.
Diffstat (limited to 'modules')
-rw-r--r--modules/tracker/tracker.pages.inc48
1 files changed, 32 insertions, 16 deletions
diff --git a/modules/tracker/tracker.pages.inc b/modules/tracker/tracker.pages.inc
index f5f702b75..d28c2a95a 100644
--- a/modules/tracker/tracker.pages.inc
+++ b/modules/tracker/tracker.pages.inc
@@ -14,6 +14,24 @@ function tracker_page($account = NULL, $set_title = FALSE) {
// Add CSS
drupal_add_css(drupal_get_path('module', 'tracker') . '/tracker.css', array('preprocess' => FALSE));
+ $header = array(
+ t('Type'),
+ t('Post'),
+ t('Author'),
+ t('Replies'),
+ t('Last updated')
+ );
+
+ // TODO: These queries are very expensive, see http://drupal.org/node/105639
+ $query = db_select('node', 'n', array('target' => 'slave'))
+ ->fields('n', array('nid', 'title', 'type', 'changed', 'uid'));
+ $query->join('users', 'u', 'n.uid = u.uid');
+ $query->addField('u', 'name');
+ $query->join('node_comment_statistics', 'l', 'n.nid = l.nid');
+ $query->addExpression('GREATEST(n.changed, l.last_comment_timestamp)', 'last_updated');
+ $query->addField('l', 'comment_count');
+ $query->orderBy('last_updated', 'DESC');
+
if ($account) {
if ($set_title) {
// When viewed from user/%user/track, display the name of the user
@@ -21,23 +39,23 @@ function tracker_page($account = NULL, $set_title = FALSE) {
// here and not in the menu definition.
drupal_set_title($account->name);
}
- // TODO: These queries are very expensive, see http://drupal.org/node/105639
- $sql = 'SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {users} u ON n.uid = u.uid LEFT JOIN {comment} c ON n.nid = c.nid AND (c.status = %d OR c.status IS NULL) WHERE n.status = 1 AND (n.uid = %d OR c.uid = %d) ORDER BY last_updated DESC';
- $sql = db_rewrite_sql($sql);
- $sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n LEFT JOIN {comment} c ON n.nid = c.nid AND (c.status = %d OR c.status IS NULL) WHERE n.status = 1 AND (n.uid = %d OR c.uid = %d)';
- $sql_count = db_rewrite_sql($sql_count);
- $result = pager_query($sql, 25, 0, $sql_count, COMMENT_PUBLISHED, $account->uid, $account->uid);
- }
- else {
- $sql = 'SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM {node} n INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 ORDER BY last_updated DESC';
- $sql = db_rewrite_sql($sql);
- $sql_count = 'SELECT COUNT(n.nid) FROM {node} n WHERE n.status = 1';
- $sql_count = db_rewrite_sql($sql_count);
- $result = pager_query($sql, 25, 0, $sql_count);
+ $query->leftJoin('comment', 'c', 'n.nid = c.nid AND (c.status = :status OR c.status IS NULL)', array(':status' => COMMENT_PUBLISHED));
+ $query->condition(db_or()
+ ->condition('n.uid', $account->uid)
+ ->condition('c.uid', $account->uid)
+ );
}
+ $query->condition('n.status', 1);
+ $query->distinct();
+ $query->extend('PagerDefault')->extend('TableSort')
+ ->limit(25, 0)
+ ->setHeader($header);
+
+ $result = $query->execute();
+
$rows = array();
- while ($node = db_fetch_object($result)) {
+ foreach ($result as $node) {
// Determine the number of comments:
$comments = 0;
if ($node->comment_count) {
@@ -62,8 +80,6 @@ function tracker_page($account = NULL, $set_title = FALSE) {
$rows[] = array(array('data' => t('No posts available.'), 'colspan' => '5'));
}
- $header = array(t('Type'), t('Post'), t('Author'), t('Replies'), t('Last updated'));
-
$output = '<div id="tracker">';
$output .= theme('table', $header, $rows);
$output .= theme('pager', NULL, 25, 0);