From 39da8c1a350de2672094e59079ad0534591780b3 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Wed, 16 May 2018 13:47:33 +0800 Subject: [PATCH] MDL-62463 mod_glossary: Fix SQL query The query was doing: WHERE c.id ... AND ... OR ... OR ... Which equates to: WHERE (c.id ... AND ...) OR ... OR ... Adding parens to: WHERE (c.id ... AND (... OR ... OR ...)) --- mod/glossary/classes/privacy/provider.php | 31 +++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/mod/glossary/classes/privacy/provider.php b/mod/glossary/classes/privacy/provider.php index c610a41c583..dcf1ecc663c 100644 --- a/mod/glossary/classes/privacy/provider.php +++ b/mod/glossary/classes/privacy/provider.php @@ -130,18 +130,33 @@ class provider implements FROM {glossary_entries} ge JOIN {glossary} g ON ge.glossaryid = g.id JOIN {course_modules} cm ON g.id = cm.instance - JOIN {context} c ON cm.id = c.instanceid + JOIN {modules} m ON cm.module = m.id AND m.name = :modulename + JOIN {context} c ON cm.id = c.instanceid AND c.contextlevel = :contextlevel WHERE c.id {$contextsql} - AND ge.userid = :userid - OR EXISTS (SELECT 1 FROM {comments} com WHERE com.commentarea = :commentarea AND com.itemid = ge.id - AND com.userid = :commentuserid) - OR EXISTS (SELECT 1 FROM {rating} r WHERE r.contextid = c.id AND r.itemid = ge.id - AND r.component = :ratingcomponent - AND r.ratingarea = :ratingarea - AND r.userid = :ratinguserid) + AND ( + ge.userid = :userid + OR + EXISTS ( + SELECT 1 + FROM {comments} com + WHERE com.commentarea = :commentarea AND com.itemid = ge.id AND com.userid = :commentuserid + ) + OR + EXISTS ( + SELECT 1 + FROM {rating} r + WHERE r.contextid = c.id + AND r.itemid = ge.id + AND r.component = :ratingcomponent + AND r.ratingarea = :ratingarea + AND r.userid = :ratinguserid + ) + ) ORDER BY ge.id, cm.id"; $params = [ 'userid' => $user->id, + 'modulename' => 'glossary', + 'contextlevel' => CONTEXT_MODULE, 'commentarea' => 'glossary_entry', 'commentuserid' => $user->id, 'ratingcomponent' => 'mod_glossary',