Skip to content

Commit 2b9a065

Browse files
author
Lars Thoms
committed
Fixes #75
Split query into two parts due to a never ending database request
1 parent 125cc5a commit 2b9a065

File tree

1 file changed

+51
-37
lines changed

1 file changed

+51
-37
lines changed

classes/privacy/provider.php

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -137,48 +137,62 @@ public static function get_metadata(collection $collection) : collection {
137137
*/
138138
public static function get_contexts_for_userid(int $userid) : contextlist {
139139
// Fetch all Moodleoverflow discussions, moodleoverflow posts, ratings, tracking settings and subscriptions.
140-
$sql = "SELECT c.id
141-
FROM {context} c
142-
INNER JOIN {course_modules} cm ON cm.id = c.instanceid AND c.contextlevel = :contextlevel
143-
INNER JOIN {modules} m ON m.id = cm.module AND m.name = :modname
144-
INNER JOIN {moodleoverflow} mof ON mof.id = cm.instance
145-
LEFT JOIN {moodleoverflow_discussions} d ON d.moodleoverflow = mof.id
146-
LEFT JOIN {moodleoverflow_posts} p ON p.discussion = d.id
147-
LEFT JOIN {moodleoverflow_read} r ON r.moodleoverflowid = mof.id
148-
LEFT JOIN {moodleoverflow_subscriptions} s ON s.moodleoverflow = mof.id
149-
LEFT JOIN {moodleoverflow_discuss_subs} ds ON ds.moodleoverflow = mof.id
150-
LEFT JOIN {moodleoverflow_ratings} ra ON ra.moodleoverflowid = mof.id
151-
LEFT JOIN {moodleoverflow_tracking} track ON track.moodleoverflowid = mof.id
152-
LEFT JOIN {moodleoverflow_grades} g ON g.moodleoverflowid = mof.id
153-
WHERE (
154-
d.userid = :duserid OR
155-
d.usermodified = :dmuserid OR
156-
p.userid = :puserid OR
157-
r.userid = :ruserid OR
158-
s.userid = :suserid OR
159-
ds.userid = :dsuserid OR
160-
ra.userid = :rauserid OR
161-
track.userid = :userid OR
162-
g.userid = :guserid
163-
)
164-
";
140+
// FIX: split query into two parts due to a never ending database request.
141+
$sql1 = "SELECT c.id
142+
FROM {context} c
143+
INNER JOIN {course_modules} cm ON cm.id = c.instanceid AND c.contextlevel = :contextlevel
144+
INNER JOIN {modules} m ON m.id = cm.module AND m.name = :modname
145+
INNER JOIN {moodleoverflow} mof ON mof.id = cm.instance
146+
LEFT JOIN {moodleoverflow_discussions} d ON d.moodleoverflow = mof.id
147+
LEFT JOIN {moodleoverflow_posts} p ON p.discussion = d.id
148+
LEFT JOIN {moodleoverflow_read} r ON r.moodleoverflowid = mof.id
149+
LEFT JOIN {moodleoverflow_subscriptions} s ON s.moodleoverflow = mof.id
150+
WHERE (
151+
d.userid = :duserid OR
152+
d.usermodified = :dmuserid OR
153+
p.userid = :puserid OR
154+
r.userid = :ruserid OR
155+
s.userid = :suserid
156+
) GROUP BY c.id";
157+
158+
$sql2 = "SELECT c.id
159+
FROM {context} c
160+
INNER JOIN {course_modules} cm ON cm.id = c.instanceid AND c.contextlevel = :contextlevel
161+
INNER JOIN {modules} m ON m.id = cm.module AND m.name = :modname
162+
INNER JOIN {moodleoverflow} mof ON mof.id = cm.instance
163+
LEFT JOIN {moodleoverflow_discuss_subs} ds ON ds.moodleoverflow = mof.id
164+
LEFT JOIN {moodleoverflow_ratings} ra ON ra.moodleoverflowid = mof.id
165+
LEFT JOIN {moodleoverflow_tracking} track ON track.moodleoverflowid = mof.id
166+
LEFT JOIN {moodleoverflow_grades} g ON g.moodleoverflowid = mof.id
167+
WHERE (
168+
ds.userid = :dsuserid OR
169+
ra.userid = :rauserid OR
170+
track.userid = :userid OR
171+
g.userid = :guserid
172+
) GROUP BY c.id";
173+
174+
$params1 = [
175+
'modname' => 'moodleoverflow',
176+
'contextlevel' => CONTEXT_MODULE,
177+
'duserid' => $userid,
178+
'dmuserid' => $userid,
179+
'puserid' => $userid,
180+
'ruserid' => $userid,
181+
'suserid' => $userid
182+
];
165183

166-
$params = [
167-
'modname' => 'moodleoverflow',
184+
$params2 = [
185+
'modname' => 'moodleoverflow',
168186
'contextlevel' => CONTEXT_MODULE,
169-
'duserid' => $userid,
170-
'dmuserid' => $userid,
171-
'puserid' => $userid,
172-
'ruserid' => $userid,
173-
'suserid' => $userid,
174-
'dsuserid' => $userid,
175-
'rauserid' => $userid,
176-
'userid' => $userid,
177-
'guserid' => $userid
187+
'dsuserid' => $userid,
188+
'rauserid' => $userid,
189+
'userid' => $userid,
190+
'guserid' => $userid
178191
];
179192

180193
$contextlist = new \core_privacy\local\request\contextlist();
181-
$contextlist->add_from_sql($sql, $params);
194+
$contextlist->add_from_sql($sql1, $params1);
195+
$contextlist->add_from_sql($sql2, $params2);
182196

183197
return $contextlist;
184198
}

0 commit comments

Comments
 (0)