--- includes/module.inc.1 2005-01-06 22:37:26.000000000 +0100
+++ includes/module.inc 2005-01-06 22:51:35.000000000 +0100
@@ -137,6 +137,30 @@ function module_hook($module, $hook) {
}
/**
+ * Determine which modules are implementing a hook.
+ *
+ * @param $hook
+ * The name of the hook (e.g. "help" or "menu").
+ * @return
+ * An array with the names of the modules which are implementing this hook.
+ */
+function module_implements($hook) {
+ static $implementations;
+
+ if (!isset($hooks[$hook])) {
+ $implementations[$hook] = array();
+ $list = module_list();
+ foreach ($list as $module) {
+ if (module_hook($module, $hook)) {
+ $implementations[$hook][] = $module;
+ }
+ }
+ }
+
+ return $implementations[$hook];
+}
+
+/**
* Invoke a hook in a particular module.
*
* @param $module
--- includes/database.inc.1 2005-01-09 22:35:30.000000000 +0100
+++ includes/database.inc 2005-01-09 22:34:54.000000000 +0100
@@ -36,7 +36,7 @@
* }
* @endcode
* Curly braces are used around "node" to provide table prefixing via
- * db_prefix_tables(). The explicit use of a user ID is pulled out into an
+ * db_rewrite_query(). The explicit use of a user ID is pulled out into an
* argument passed to db_query() so that SQL injection attacks from user input
* can be caught and nullified. The LIMIT syntax varies between database servers,
* so that is abstracted into db_query_range() arguments. Finally, note the
@@ -56,9 +56,12 @@
* @return
* The properly-prefixed string.
*/
-function db_prefix_tables($sql) {
+function db_rewrite_query($sql) {
global $db_prefix;
+ if (strpos($query, '{node}')) {
+ $query = node_rewrite_query($query);
+ }
if (is_array($db_prefix)) {
$prefix = $db_prefix['default'];
foreach ($db_prefix as $key => $val) {
@@ -137,7 +140,7 @@ function db_set_active($name = 'default'
*/
function db_query($query) {
$args = func_get_args();
- $query = db_prefix_tables($query);
+ $query = db_rewrite_query($query);
if (count($args) > 1) {
if (is_array($args[1])) {
$args = array_merge(array($query), $args[1]);
@@ -156,7 +159,7 @@ function db_query($query) {
*/
function db_queryd($query) {
$args = func_get_args();
- $query = db_prefix_tables($query);
+ $query = db_rewrite_query($query);
if (count($args) > 1) {
if (is_array($args[1])) {
$args = array_merge(array($query), $args[1]);
--- modules/node.module.1 2005-01-04 07:38:17.000000000 +0100
+++ modules/node.module 2005-01-09 22:20:30.000000000 +0100
@@ -578,7 +578,7 @@ function node_search($op = 'search', $ke
variable_del('node_cron_last');
return;
case 'search':
- $find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid', 'n.status = 1 AND '. node_access_where_sql());
+ $find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid INNER JOIN {users} u ON n.uid = u.uid', 'n.status = 1');
$results = array();
foreach ($find as $item) {
$node = node_load(array('nid' => $item));
@@ -1012,7 +1012,7 @@ function node_feed($nodes = 0, $channel
global $base_url, $locale;
if (!$nodes) {
- $nodes = db_query_range('SELECT n.nid FROM {node} n '. node_access_join_sql() .' WHERE '. node_access_where_sql() .' AND n.promote = 1 AND n.status = 1 ORDER BY n.created DESC', 0, 15);
+ $nodes = db_query_range('SELECT n.nid FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.created DESC', 0, 15);
}
while ($node = db_fetch_object($nodes)) {
@@ -1463,7 +1463,7 @@ function node_delete($edit) {
* Generate a listing of promoted nodes.
*/
function node_page_default() {
- $result = pager_query('SELECT DISTINCT(n.nid), n.sticky, n.created FROM {node} n '. node_access_join_sql() .' WHERE n.promote = 1 AND n.status = 1 AND '. node_access_where_sql() .' ORDER BY n.sticky DESC, n.created DESC', variable_get('default_nodes_main', 10));
+ $result = pager_query('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
if (db_num_rows($result)) {
drupal_set_html_head('');
@@ -1719,7 +1719,7 @@ function node_access($op, $node = NULL,
* An SQL join clause.
*/
function node_access_join_sql($node_alias = 'n', $node_access_alias = 'na') {
- if (user_access('administer nodes')) {
+ if (module_implements('access_grants')==array('node') || user_access('administer nodes')) {
return '';
}
@@ -1740,7 +1740,7 @@ function node_access_join_sql($node_alia
* An SQL where clause.
*/
function node_access_where_sql($op = 'view', $node_access_alias = 'na', $uid = NULL) {
- if (user_access('administer nodes')) {
+ if (module_implements('access_grants')==array('node') || user_access('administer nodes')) {
// This number is being used in a SQL query as a boolean.
// It is "'1'" instead of "1" for database compatibility, as both
// PostgreSQL and MySQL treat it as boolean in this case.
@@ -1790,4 +1790,107 @@ function node_access_grants($op, $uid =
* @} End of "defgroup node_access".
*/
+/**
+ * Implementation of hook_node_rewrite_sql
+ */
+function node_node_rewrite_sql () {
+ $return['join'] = node_access_join_sql();
+ $return['where'] = node_access_where_sql();
+ $return['distinct'] = !empty($return['join']);
+ return $return;
+}
+
+/*
+ * Helper function for node_rewrite_sql.
+ *
+ * Collects JOIN and WHERE statements via hook_sql.
+ * Decides whether to select nid or DISTINCT(nid)
+ *
+ * @param $hint
+ * An array of hint strings about the query, passed on to hook_sql handlers.
+ * @param $node_alias
+ * If the node table has been given an SQL alias other than the default
+ * "n", that must be passed here.
+ * @param $args
+ * array of additional args
+ * @return
+ * An associative array: join => join statements, where => where statements, nid_to_select => nid or DISTINCT(nid)
+ */
+function _node_rewrite_sql($query, $node_alias = 'n', $args = NULL) {
+
+ $where = array();
+ $join = array();
+ $distinct = FALSE;
+ foreach (module_implements('node_rewrite_sql') as $module) {
+ $result = module_invoke($module, 'node_rewrite_sql', $query, $node_alias, $args);
+ if (is_array($result)) {
+ if (isset($result['where'])) {
+ $where[] .= $result['where'];
+ }
+ if (isset($result['join'])) {
+ $join[] .= $result['join'];
+ }
+ if (isset($result['distinct']) && $result['distinct']) {
+ $distinct = TRUE;
+ }
+ }
+ elseif (isset($result)) {
+ $where[] .= $result;
+ }
+ }
+
+ $swhere = empty($where) ? '' : '('. implode(') AND (',$where).')';
+ $sjoin = empty($join) ? '' : implode(' ',$join);
+
+ return array($sjoin, $swhere, $distinct ? 'DISTINCT('.$node_alias.'.nid)' : $node_alias.'.nid');
+}
+
+/*
+ * Rewrites node queries.
+ *
+ * @param $query
+ * query to be rewritten
+ * @param $hint
+ * An array of hint strings about the query, passed on to hook_sql handlers.
+ * @param $node_alias
+ * If the node table has been given an SQL alias other than the default
+ * "n", that must be passed here.
+ * @param ...
+ * an arbitrary number of arguments, passed as an array to the implementations of hook_node_rewrite_sql
+ * @return
+ * The original query with JOIN and WHERE statements inserted from hook_node_rewrite_sql implementations. nid is rewritten if needed.
+ */
+function node_rewrite_sql($query, $node_alias = 'n') {
+
+ $args = func_get_args();
+ $args = array_slice($args, 2);
+ list($join, $where,$nid_to_select) = _node_rewrite_sql($query, $node_alias, $args);
+
+ $query = preg_replace('/(SELECT.*)('.$node_alias.'\.)?nid(.*FROM)/AUs', '\1'. $nid_to_select .'\3', $query);
+
+ $query = preg_replace('|FROM[^[:upper:]/,]+|','\0 '.$join.' ', $query);
+ if (strpos($query, 'WHERE')) {
+ $replace = 'WHERE';
+ $add = 'AND';
+ }
+ elseif (strpos($query, 'GROUP')) {
+ $replace = 'GROUP';
+ $add = 'GROUP';
+ }
+ elseif (strpos($query, 'ORDER')) {
+ $replace = 'ORDER';
+ $add = 'ORDER';
+ }
+ elseif (strpos($query, 'LIMIT')) {
+ $replace = 'LIMIT';
+ $add = 'LIMIT';
+ }
+ else
+ $query .= 'WHERE '. $where;
+ if (isset($replace)) {
+ $query = str_replace($replace, 'WHERE '.$where.' '.$add, $query);
+ }
+ return $query;
+}
+
?>
--- modules/archive.module.1 2005-01-08 12:54:11.000000000 +0100
+++ modules/archive.module 2005-01-09 22:18:50.000000000 +0100
@@ -72,7 +72,7 @@ function archive_calendar($original = 0)
$nextmonth = mktime(23, 59, 59, $month + 1, 1, $year);
$next = mktime(23, 59, 59, $month + 1, min(date('t', $nextmonth), $day), $year);
- $result = db_query('SELECT DISTINCT(n.nid), n.created FROM {node} n '. node_access_join_sql() .' WHERE n.status = 1 AND n.created > %d AND n.created < %d AND '. node_access_where_sql() .' ORDER BY n.created', $start_of_month, $end_of_month);
+ $result = db_query('SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created', $start_of_month, $end_of_month);
$days_with_posts = array();
while ($day_with_post = db_fetch_object($result)) {
@@ -239,7 +239,7 @@ function archive_page($year = 0, $month
if ($year && $month && $day) {
// Fetch nodes for the selected date, if one was specified.
- $result = db_query_range('SELECT DISTINCT(n.nid), n.created FROM {node} n '. node_access_join_sql() .' WHERE n.status = 1 AND n.created > %d AND n.created < %d AND '. node_access_where_sql() .' ORDER BY n.created', $date, $date_end, 0, 20);
+ $result = db_query_range('SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created', $date, $date_end, 0, 20);
while ($nid = db_fetch_object($result)) {
$output .= node_view(node_load(array('nid' => $nid->nid)), 1);
--- modules/comment.module.1 2004-12-03 09:50:55.000000000 +0100
+++ modules/comment.module 2005-01-09 22:19:25.000000000 +0100
@@ -157,7 +157,7 @@ function comment_block($op = 'list', $de
return $blocks;
}
else if ($op == 'view' && user_access('access comments')) {
- $result = db_query_range('SELECT * FROM {comments} WHERE status = 0 ORDER BY timestamp DESC', 0, 10);
+ $result = db_query_range(node_rewrite_sql('SELECT c.nid,c.* FROM {comments} c WHERE status = 0 ORDER BY timestamp DESC', 'c'), 0, 10);
$items = array();
while ($comment = db_fetch_object($result)) {
$items[] = l($comment->subject, 'node/'. $comment->nid, NULL, NULL, 'comment-'. $comment->cid) .' '. t('%time ago', array('%time' => format_interval(time() - $comment->timestamp)));
@@ -1267,7 +1267,6 @@ function comment_save_settings() {
global $user;
$edit = $_POST['edit'];
-
// this functions perform doubletime: it either saves the
// user's comment viewing options, or it handles comment
// moderation. let's figure out which one we're using, eh?
@@ -1283,7 +1282,6 @@ function comment_save_settings() {
$_SESSION['comment_threshold'] = $threshold;
$_SESSION['comment_comments_per_page'] = $comments_per_page;
}
-
drupal_goto('node/'. $edit['nid'] .'#comment');
}
--- modules/forum.module.1 2005-01-06 22:44:31.000000000 +0100
+++ modules/forum.module 2005-01-09 22:26:52.000000000 +0100
@@ -135,9 +135,9 @@ function forum_block($op = 'list', $delt
case 'view':
if (user_access('access content')) {
- $content = node_title_list(db_query_range("SELECT DISTINCT(n.nid), n.title, l.last_comment_timestamp, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid ". node_access_join_sql() ." WHERE n.status = 1 AND n.type='forum' AND ". node_access_where_sql() ." ORDER BY l.last_comment_timestamp DESC", 0, variable_get('forum_block_num', '5')), t('Active forum topics:'));
+ $content = node_title_list(db_query_range("SELECT n.nid, n.title, l.last_comment_timestamp, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND n.type='forum' ORDER BY l.last_comment_timestamp DESC", 0, variable_get('forum_block_num', '5')), t('Active forum topics:'));
- $content .= node_title_list(db_query_range("SELECT DISTINCT(n.nid), n.title, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid ". node_access_join_sql() ." WHERE n.type = 'forum' AND n.status = 1 AND ". node_access_where_sql() ." ORDER BY n.nid DESC", 0, variable_get('forum_block_num', '5')), t('New forum topics:'));
+ $content .= node_title_list(db_query_range("SELECT n.nid, n.title, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.type = 'forum' AND n.status = 1 ORDER BY n.nid DESC", 0, variable_get('forum_block_num', '5')), t('New forum topics:'));
if ($content) {
$content .= '
'. l(t('more'), 'forum', array('title' => t('Read the latest forum topics.'))) .'
';
@@ -162,7 +162,7 @@ function forum_link($type, $node = 0, $m
if (!$main && $type == 'node' && $node->type == 'forum') {
// get previous and next topic
- $result = db_query("SELECT DISTINCT(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 " . node_access_join_sql() . " INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type='forum' AND " . node_access_where_sql() . ' ORDER BY n.sticky DESC, '. _forum_get_topic_order_sql(variable_get('forum_order', 1)), $node->tid);
+ $result = db_query("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)), $node->tid);
while ($topic = db_fetch_object($result)) {
if ($stop == 1) {
@@ -356,7 +356,7 @@ function forum_get_forums($tid = 0) {
$counts = array();
- $_counts = db_query("SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid " . node_access_join_sql() . " WHERE n.status = 1 AND n.type = 'forum' AND " . node_access_where_sql() . " GROUP BY r.tid", $forum->tid);
+ $_counts = db_query("SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid WHERE n.status = 1 AND n.type = 'forum' GROUP BY r.tid", $forum->tid);
while ($count = db_fetch_object($_counts)) {
$counts[$count->tid] = $count;
}
@@ -379,7 +379,7 @@ function forum_get_forums($tid = 0) {
// This query does not use full ANSI syntax since MySQL 3.x does not support
// table1 INNER JOIN table2 INNER JOIN table3 ON table2_criteria ON table3_criteria
// used to join node_comment_statistics to users.
- $topic = db_fetch_object(db_query_range('SELECT DISTINCT(n.nid), l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid FROM {node} n ' . node_access_join_sql() . ", {node_comment_statistics} l /*! USE INDEX (node_comment_timestamp) */, {users} cu, {term_node} r WHERE n.nid = r.nid AND r.tid = %d AND n.status = 1 AND n.type = 'forum' AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND " . node_access_where_sql() . ' ORDER BY l.last_comment_timestamp DESC', $forum->tid, 0, 1));
+ $topic = db_fetch_object(db_query_range("SELECT n.nid, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid FROM {node} n, {node_comment_statistics} l /*! USE INDEX (node_comment_timestamp) */, {users} cu, {term_node} r WHERE n.nid = r.nid AND r.tid = %d AND n.status = 1 AND n.type = 'forum' AND l.last_comment_uid = cu.uid AND n.nid = l.nid ORDER BY l.last_comment_timestamp DESC", $forum->tid, 0, 1));
$last_post = new StdClass();
$last_post->timestamp = $topic->last_comment_timestamp;
@@ -397,8 +397,8 @@ function _forum_topics_read($term, $uid)
// Calculate the number of topics the user has read. Assume all entries older
// than NODE_NEW_LIMIT are read, and include the recent posts that user has
// read.
- $ancient = db_result(db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d ". node_access_join_sql() ." WHERE n.created <= %d AND n.status = 1 AND n.type = 'forum' AND ". node_access_where_sql(), $term, NODE_NEW_LIMIT));
- $recent = db_result(db_query("SELECT COUNT(n.nid) FROM {node} n ". node_access_join_sql() ." INNER JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND n.created > %d AND ". node_access_where_sql(), $uid, $term, NODE_NEW_LIMIT));
+ $ancient = db_result(db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.created <= %d AND n.status = 1 AND n.type = 'forum'", $term, NODE_NEW_LIMIT));
+ $recent = db_result(db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND n.created > %d", $uid, $term, NODE_NEW_LIMIT));
return $ancient + $recent;
}
@@ -424,10 +424,10 @@ function forum_get_topics($tid, $sortby,
$term = taxonomy_get_term($tid);
$check_tid = $tid ? "'". db_escape_string($tid) ."'" : 'NULL';
- $sql = "SELECT DISTINCT(n.nid), f.tid, n.title, n.sticky, u.name, u.uid, n.created AS timestamp, n.comment AS comment_mode, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid, l.comment_count AS num_comments FROM {node} n ". node_access_join_sql() .", {node_comment_statistics} l, {users} cu, {term_node} r, {users} u, {forum} f WHERE n.status = 1 AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND n.nid = r.nid AND r.tid = $check_tid AND n.uid = u.uid AND n.nid = f.nid AND ". node_access_where_sql();
+ $sql = "SELECT n.nid, f.tid, n.title, n.sticky, u.name, u.uid, n.created AS timestamp, n.comment AS comment_mode, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid, l.comment_count AS num_comments FROM {node} n, {node_comment_statistics} l, {users} cu, {term_node} r, {users} u, {forum} f WHERE n.status = 1 AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND n.nid = r.nid AND r.tid = $check_tid AND n.uid = u.uid AND n.nid = f.nid";
$sql .= tablesort_sql($forum_topic_list_header, 'n.sticky DESC,');
- $sql_count = "SELECT COUNT(DISTINCT(n.nid)) FROM {node} n ". node_access_join_sql() ." INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = $check_tid WHERE n.status = 1 AND n.type = 'forum' AND ". node_access_where_sql();
+ $sql_count = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = $check_tid WHERE n.status = 1 AND n.type = 'forum'";
$result = pager_query($sql, $forum_per_page, 0, $sql_count);
@@ -468,7 +468,7 @@ function forum_get_topics($tid, $sortby,
function _forum_new($tid) {
global $user;
- $nid = db_result(db_query_range("SELECT DISTINCT(n.nid) FROM {node} n LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d " . node_access_join_sql() . " WHERE n.status = 1 AND n.type = 'forum' AND h.nid IS NULL AND n.created > %d AND " . node_access_where_sql() . " ORDER BY created", $user->uid, $tid, NODE_NEW_LIMIT, 0, 1));
+ $nid = db_result(db_query_range("SELECT n.nid FROM {node} n LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND h.nid IS NULL AND n.created > %d ORDER BY created", $user->uid, $tid, NODE_NEW_LIMIT, 0, 1));
return $nid ? $nid : 0;
}
--- modules/poll.module.1 2005-01-08 12:59:21.000000000 +0100
+++ modules/poll.module 2005-01-09 22:27:32.000000000 +0100
@@ -51,7 +51,7 @@ function poll_block($op = 'list', $delta
}
else if ($op == 'view') {
// Retrieve the latest poll.
- $timestamp = db_result(db_query('SELECT MAX(n.created) FROM {node} n '. node_access_join_sql() ." WHERE n.type = 'poll' AND n.status = 1 AND ". node_access_where_sql() .' AND n.moderate = 0'));
+ $timestamp = db_result(db_query("SELECT MAX(n.created) FROM {node} n WHERE n.type = 'poll' AND n.status = 1 AND n.moderate = 0"));
if ($timestamp) {
$poll = node_load(array('type' => 'poll', 'created' => $timestamp, 'moderate' => 0, 'status' => 1));
@@ -264,7 +264,7 @@ function poll_node_name($node) {
function poll_page() {
// List all polls
- $result = pager_query("SELECT DISTINCT(n.nid), n.title, p.active, n.created, SUM(c.chvotes) AS votes FROM {node} n ". node_access_join_sql() ." INNER JOIN {poll} p ON n.nid=p.nid INNER JOIN {poll_choices} c ON n.nid=c.nid WHERE type = 'poll' AND status = 1 AND ". node_access_where_sql() ." AND moderate = 0 GROUP BY n.nid, n.title, p.active, n.created ORDER BY n.created DESC", 15);
+ $result = pager_query("SELECT n.nid, n.title, p.active, n.created, SUM(c.chvotes) AS votes FROM {node} n INNER JOIN {poll} p ON n.nid=p.nid INNER JOIN {poll_choices} c ON n.nid=c.nid WHERE type = 'poll' AND status = 1 AND moderate = 0 GROUP BY n.nid, n.title, p.active, n.created ORDER BY n.created DESC", 15);
$output = '
';
while ($node = db_fetch_object($result)) {
$output .= '
';
--- modules/queue.module.1 2005-01-08 13:10:05.000000000 +0100
+++ modules/queue.module 2005-01-09 22:28:09.000000000 +0100
@@ -123,7 +123,9 @@ function queue_overview() {
$header = array(array('data' => t('Subject')), array('data' => t('Author')), array('data' => t('Type')), array('data' => t('Score')));
- $sresult = pager_query('SELECT DISTINCT(n.nid), n.title, n.type, u.name, u.uid, SUM(IF(q.uid = %d, 1, 0)) AS voted, SUM(q.vote) AS score FROM {node} n '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {queue} q ON n.nid = q.nid WHERE n.moderate = 1 AND '. node_access_where_sql() .' GROUP BY n.nid, n.title, n.type, u.name, u.uid, q.uid, q.vote', 10, 0, 'SELECT DISTINCT(n.nid) FROM {node} n '. node_access_join_sql() .' INNER JOIN {queue} q ON n.nid = q.nid WHERE n.moderate = 1 AND '. node_access_where_sql(), $user->uid);
+ $sql = 'SELECT n.nid, n.title, n.type, u.name, u.uid, SUM(IF(q.uid = %d, 1, 0)) AS voted, SUM(q.vote) AS score FROM {node} n INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {queue} q ON n.nid = q.nid WHERE n.moderate = 1 GROUP BY n.nid, n.title, n.type, u.name, u.uid, q.uid, q.vote';
+ $sql_count = 'SELECT COUNT(n.nid) FROM {node} n INNER JOIN {queue} q ON n.nid = q.nid WHERE n.moderate = 1';
+ $sresult = pager_query($sql, 10, 0,$sql_count , $user->uid);
while ($node = db_fetch_object($sresult)) {
if ($user->uid == $node->uid || $node->voted) {
--- modules/taxonomy.module.1 2005-01-08 12:57:59.000000000 +0100
+++ modules/taxonomy.module 2005-01-09 22:28:55.000000000 +0100
@@ -646,10 +646,10 @@ function taxonomy_term_count_nodes($tid,
if (!isset($count[$type])) {
// $type == 0 always evaluates true is $type is a string
if (is_numeric($type)) {
- $result = db_query('SELECT t.tid, COUNT(DISTINCT(n.nid)) AS c FROM {term_node} t '. node_access_join_sql() .'INNER JOIN {node} n ON t.nid = n.nid WHERE n.status = 1 AND '. node_access_where_sql() .'GROUP BY t.tid');
+ $result = db_query('SELECT t.tid, COUNT(n.nid) AS c FROM {term_node} t INNER JOIN {node} n ON t.nid = n.nid WHERE n.status = 1 GROUP BY t.tid');
}
else {
- $result = db_query("SELECT t.tid, COUNT(DISTINCT(n.nid)) AS c FROM {term_node} t, {node} n ". node_access_join_sql() ." WHERE t.nid = n.nid AND n.status = 1 AND n.type = '%s' AND ". node_access_where_sql() ." GROUP BY t.tid", $type);
+ $result = db_query("SELECT t.tid, COUNT((n.nid) AS c FROM {term_node} t, {node} n WHERE t.nid = n.nid AND n.status = 1 AND n.type = '%s' GROUP BY t.tid", $type);
}
while ($term = db_fetch_object($result)) {
$count[$type][$term->tid] = $term->c;
@@ -823,8 +823,8 @@ function taxonomy_select_nodes($tids = a
if ($operator == 'or') {
$str_tids = implode(',', call_user_func_array('array_merge', $descendant_tids));
- $sql = 'SELECT DISTINCT(n.nid), n.sticky, n.created FROM {node} n '. node_access_join_sql() .' INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $str_tids .') AND n.status = 1 AND '. node_access_where_sql() .' ORDER BY n.sticky DESC, n.created DESC';
- $sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n '. node_access_join_sql() .' INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $str_tids .') AND n.status = 1 AND '. node_access_where_sql();
+ $sql = 'SELECT n.nid, n.sticky, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $str_tids .') AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC';
+ $sql_count = 'SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $str_tids .') AND n.status = 1';
}
else {
$joins = '';
@@ -833,10 +833,9 @@ function taxonomy_select_nodes($tids = a
$joins .= ' INNER JOIN {term_node} tn'. $index .' ON n.nid = tn'. $index .'.nid';
$wheres .= ' AND tn'. $index .'.tid IN ('. implode(',', $tids) .')';
}
- $sql = 'SELECT DISTINCT(n.nid), n.sticky, n.created FROM {node} n '. node_access_join_sql() . $joins .' WHERE n.status = 1 AND '. node_access_where_sql() . $wheres .' ORDER BY n.sticky DESC, n.created DESC';
- $sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n '. node_access_join_sql() . $joins .' WHERE n.status = 1 AND '. node_access_where_sql() . $wheres;
+ $sql = 'SELECT n.nid, n.sticky, n.created FROM {node} n '. $joins .' WHERE n.status = 1 '. $wheres .' ORDER BY n.sticky DESC, n.created DESC';
+ $sql_count = 'SELECT COUNT(n.nid) FROM {node} n ' . $joins .' WHERE n.status = 1 ' . $wheres;
}
-
if ($pager) {
$result = pager_query($sql, variable_get('default_nodes_main', 10) , 0, $sql_count);
}
--- modules/tracker.module.1 2005-01-08 13:11:56.000000000 +0100
+++ modules/tracker.module 2005-01-09 22:29:11.000000000 +0100
@@ -73,10 +73,14 @@ function tracker_page($uid = 0) {
$output .= '';
if ($uid) {
- $result = pager_query('SELECT DISTINCT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, l.comment_count FROM {node} n '. node_access_join_sql() .' INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {users} u ON n.uid = u.uid LEFT JOIN {comments} c ON n.nid = c.nid AND c.status = 0 WHERE n.status = 1 AND '. node_access_where_sql() .' AND (n.uid = %d OR c.uid = %d) ORDER BY last_post DESC', 25, 0, 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n '. node_access_join_sql() .' LEFT JOIN {comments} c ON n.nid = c.nid AND c.status = 0 WHERE n.status = 1 AND '. node_access_where_sql() .' AND (n.uid = %d OR c.uid = %d)', $uid, $uid);
+ $sql = 'SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, 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 {comments} c ON n.nid = c.nid AND c.status = 0 WHERE n.status = 1 AND (n.uid = %d OR c.uid = %d) ORDER BY last_post DESC';
+ $sql_count = 'SELECT DISTINCT(n.nid) FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid AND c.status = 0 WHERE n.status = 1 AND (n.uid = %d OR c.uid = %d)';
+ $result = pager_query($sql, 25, 0,$sql_count , $uid, $uid);
}
else {
- $result = pager_query('SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, l.comment_count FROM {node} n '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND '. node_access_where_sql() .' ORDER BY last_post DESC', 25, 0, 'SELECT COUNT(n.nid) FROM {node} n '. node_access_join_sql() .' WHERE n.status = 1 AND '. node_access_where_sql());
+ $sql = 'SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, 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_post DESC';
+ $sql_count = 'SELECT COUNT(n.nid) FROM {node} n WHERE n.status = 1';
+ $result = pager_query($sql, 25, 0,$sql_count);
}
while ($node = db_fetch_object($result)) {