@@ -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