Better bracketing for event-selecting SQL (see bug 2804)

This commit is contained in:
defacer 2005-04-11 23:21:29 +00:00
parent 55d9c93a11
commit 6e957c415c

View file

@ -446,21 +446,20 @@ function calendar_sql_where($tstart, $tend, $users, $groups, $courses, $withdura
if(is_array($users) && !empty($users)) { if(is_array($users) && !empty($users)) {
// Events from a number of users // Events from a number of users
if(!empty($whereclause)) $whereclause .= ' OR'; if(!empty($whereclause)) $whereclause .= ' OR';
$whereclause .= ' userid IN ('.implode(',', $users).') AND courseid = 0 AND groupid = 0'; $whereclause .= ' (userid IN ('.implode(',', $users).') AND courseid = 0 AND groupid = 0)';
} }
else if(is_numeric($users)) { else if(is_numeric($users)) {
// Events from one user // Events from one user
if(!empty($whereclause)) $whereclause .= ' OR'; if(!empty($whereclause)) $whereclause .= ' OR';
$whereclause .= ' userid = '.$users.' AND courseid = 0 AND groupid = 0'; $whereclause .= ' (userid = '.$users.' AND courseid = 0 AND groupid = 0)';
} }
else if($users === true) { else if($users === true) {
// Events from ALL users // Events from ALL users
if(!empty($whereclause)) $whereclause .= ' OR'; if(!empty($whereclause)) $whereclause .= ' OR';
$whereclause .= ' userid != 0 AND courseid = 0 AND groupid = 0'; $whereclause .= ' (userid != 0 AND courseid = 0 AND groupid = 0)';
} }
else if($users === false) { else if($users === false) {
// No user at all // No user at all, do nothing
// No need to do anything
} }
if(is_array($groups) && !empty($groups)) { if(is_array($groups) && !empty($groups)) {
@ -486,7 +485,7 @@ function calendar_sql_where($tstart, $tend, $users, $groups, $courses, $withdura
if(!empty($whereclause)) { if(!empty($whereclause)) {
$whereclause .= ' OR'; $whereclause .= ' OR';
} }
$whereclause .= ' groupid = 0 AND courseid IN ('.implode(',', $courses).')'; $whereclause .= ' (groupid = 0 AND courseid IN ('.implode(',', $courses).'))';
} }
else { else {
// This means NO courses, not that we don't care! // This means NO courses, not that we don't care!
@ -496,12 +495,12 @@ function calendar_sql_where($tstart, $tend, $users, $groups, $courses, $withdura
else if(is_numeric($courses)) { else if(is_numeric($courses)) {
// One course // One course
if(!empty($whereclause)) $whereclause .= ' OR'; if(!empty($whereclause)) $whereclause .= ' OR';
$whereclause .= ' groupid = 0 AND courseid = '.$courses; $whereclause .= ' (groupid = 0 AND courseid = '.$courses.')';
} }
else if($courses === true) { else if($courses === true) {
// Events from ALL courses // Events from ALL courses
if(!empty($whereclause)) $whereclause .= ' OR'; if(!empty($whereclause)) $whereclause .= ' OR';
$whereclause .= ' groupid = 0 AND courseid != 0'; $whereclause .= ' (groupid = 0 AND courseid != 0)';
} }
// Security check: if, by now, we have NOTHING in $whereclause, then it means // Security check: if, by now, we have NOTHING in $whereclause, then it means