summaryrefslogtreecommitdiff
path: root/modules/node/node.module
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2008-12-29 22:29:44 +0000
committerDries Buytaert <dries@buytaert.net>2008-12-29 22:29:44 +0000
commit5339dccdaadbc347da17beb5da188c5f57281a48 (patch)
tree30ef56ebb1081f9cd965a1a94770e73b0827dd76 /modules/node/node.module
parent44c0672806bfe6e1535a4f1d3fddd8d4626af4ee (diff)
downloadbrdo-5339dccdaadbc347da17beb5da188c5f57281a48.tar.gz
brdo-5339dccdaadbc347da17beb5da188c5f57281a48.tar.bz2
- Patch #299176 by Moshe et al: replace db_rewrite_sql() with hook_query_alter().
Diffstat (limited to 'modules/node/node.module')
-rw-r--r--modules/node/node.module45
1 files changed, 22 insertions, 23 deletions
diff --git a/modules/node/node.module b/modules/node/node.module
index adb807437..a8fd56528 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -2341,35 +2341,34 @@ function node_db_rewrite_sql($query, $primary_table, $primary_field) {
}
}
-
/**
* Implementation of hook_query_alter().
- * @todo This doesn't quite work yet.
*/
-function DISABLED_node_query_alter(Query $query) {
- if ($query->hasTag('node_access')) {
- if (! user_access('administer nodes')) {
- $query->distinct();
- $access_alias = $query->join('node_access', 'na', 'na.nid = n.nid');
- dsm('hello');
- _node_query_alter_where($query, 'view', $access_alias);
+function node_query_alter(QueryAlterableInterface $query) {
+ if ($query->hasTag('node_access') && !node_access_view_all_nodes()) {
+ $query->distinct();
+ if (!$op = $query->getMetaData('op')) {
+ $op = 'view';
}
- }
-}
+ if (!user_access('bypass node access')) {
+ $access_alias = $query->join('node_access', 'na', 'na.nid = n.nid');
+ $or = db_or();
+ foreach (node_access_grants($op, $query->getMetaData('account')) as $realm => $gids) {
+ foreach ($gids as $gid) {
+ $or->condition(db_and()
+ ->condition("{$access_alias}.gid", $gid)
+ ->condition("{$access_alias}.realm", $realm)
+ );
+ }
+ }
-function _node_query_alter_where($query, $op = 'view', $node_access_alias = 'na', $account = NULL) {
- $or = db_or();
- foreach (node_access_grants($op, $account) as $realm => $gids) {
- foreach ($gids as $gid) {
- $or->condition("{$node_access_alias}.gid = :gid AND {$node_access_alias}.realm = :realm", array(':gid' => $gid, ':realm' => $realm));
+ if (count($or->conditions())) {
+ $query->condition($or);
+ }
+
+ $query->condition("{$access_alias}.grant_$op", 1, '>=');
}
- }
-
- if (count($or->conditions())) {
- $query->condition($or);
- }
-
- $query->condition("$node_access_alias.grant_$op", '>=', 1);
+ }
}
/**