Skip to content

Commit e321855

Browse files
committed
MDL-86493 mod_quiz: Integration review changes
1 parent 7707d01 commit e321855

6 files changed

Lines changed: 35 additions & 35 deletions

File tree

public/mod/quiz/classes/cache/quiz_overrides_cache.php

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,21 @@ class quiz_overrides_cache implements data_source_interface {
3434
/** @var ?quiz_overrides_cache Singleton instance. */
3535
private static $instance = null;
3636

37-
/**
38-
* {@inheritdoc}
39-
*
40-
* @param definition $definition
41-
* @return object
42-
*/
37+
#[\Override]
4338
public static function get_instance_for_cache(definition $definition): quiz_overrides_cache {
4439
return self::$instance ??= new quiz_overrides_cache();
4540
}
4641

47-
/**
48-
* {@inheritdoc}
49-
*
50-
* @param string|int $key The key to load in the format "{quizid}_{userid}".
51-
* @return mixed An array of override records (empty array when none) or false for invalidation.
52-
*/
42+
#[\Override]
5343
public function load_for_cache($key) {
5444
global $DB;
5545

46+
// Core cache invalidation asks datasources for this internal key.
5647
if ($key === 'lastinvalidation') {
5748
return false;
5849
}
5950

51+
// All regular keys use the "{quizid}_{userid}" format.
6052
[$quizid, $userid] = self::split_cache_key((string) $key);
6153

6254
$subquery = "SELECT g.id
@@ -69,22 +61,15 @@ public function load_for_cache($key) {
6961
FROM {quiz_overrides}
7062
WHERE quiz = :quizid AND (userid = :userid OR groupid IN ($subquery))";
7163

72-
$records = $DB->get_records_sql($sql, [
64+
return $DB->get_records_sql($sql, [
7365
'quizid' => $quizid,
7466
'userid' => $userid,
7567
'subqueryquizid' => $quizid,
7668
'subqueryuserid' => $userid,
7769
]);
78-
79-
return $records ?: [];
8070
}
8171

82-
/**
83-
* {@inheritdoc}
84-
*
85-
* @param array $keys An array of keys each of which will be string|int.
86-
* @return array An array of matching data items.
87-
*/
72+
#[\Override]
8873
public function load_many_for_cache(array $keys) {
8974
$results = [];
9075
foreach ($keys as $key) {

public/mod/quiz/classes/local/override_manager.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ private function clear_unused_values(array $formdata): array {
616616
* @param int $userid The user ID.
617617
* @return array Array with optional keys 'timeopen' and 'timeclose'.
618618
*/
619-
public static function get_time_overrides(int $quizid, int $userid): array {
619+
public static function get_effective_open_close_times(int $quizid, int $userid): array {
620620
$overrides = quiz_overrides_cache_manager::get_overrides($quizid, $userid);
621621

622622
if (empty($overrides)) {

public/mod/quiz/classes/local/quiz_overrides_cache_manager.php

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
/**
2222
* Manages cache operations for quiz overrides.
23+
*
2324
* Please do not use this class directly. Instead, use methods from \mod_quiz\local\override_manager.
2425
*
2526
* @package mod_quiz
@@ -94,9 +95,9 @@ public static function purge_for_groups(int $quizid, array $groupids): void {
9495
$sql = "SELECT DISTINCT userid
9596
FROM {groups_members}
9697
WHERE groupid {$insql}";
97-
$userids = $DB->get_records_sql($sql, $params);
98+
$userids = $DB->get_fieldset_sql($sql, $params);
9899
if (!empty($userids)) {
99-
self::purge_for_users($quizid, array_keys($userids));
100+
self::purge_for_users($quizid, $userids);
100101
}
101102
}
102103

@@ -109,9 +110,16 @@ public static function purge_for_groups(int $quizid, array $groupids): void {
109110
public static function purge_for_group_members(int $groupid, array $userids): void {
110111
global $DB;
111112

112-
$records = $DB->get_records('quiz_overrides', ['groupid' => $groupid], '', 'id,quiz');
113-
foreach (array_unique(array_column($records, 'quiz')) as $quizid) {
114-
self::purge_for_users($quizid, $userids);
113+
if (empty($userids)) {
114+
return;
115+
}
116+
117+
$sql = "SELECT DISTINCT quiz
118+
FROM {quiz_overrides}
119+
WHERE groupid = :groupid";
120+
$quizids = $DB->get_fieldset_sql($sql, ['groupid' => $groupid]);
121+
foreach ($quizids as $quizid) {
122+
self::purge_for_users((int) $quizid, $userids);
115123
}
116124
}
117125

@@ -135,11 +143,11 @@ public static function purge_for_overrides(array $overrides): void {
135143
}
136144

137145
foreach ($useridsbyquiz as $quizid => $userids) {
138-
self::purge_for_users($quizid, array_values(array_unique($userids)));
146+
self::purge_for_users($quizid, array_unique($userids));
139147
}
140148

141149
foreach ($groupidsbyquiz as $quizid => $groupids) {
142-
self::purge_for_groups($quizid, array_values(array_unique($groupids)));
150+
self::purge_for_groups($quizid, array_unique($groupids));
143151
}
144152
}
145153

public/mod/quiz/lang/en/deprecated.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ randomcoursewithsubcat,mod_quiz
77
randomsystemwithsubcat,mod_quiz
88
selectquestionbank,mod_quiz
99
gobacktoquiz,mod_quiz
10+
cachedef_overrides,mod_quiz

public/mod/quiz/lang/en/quiz.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,3 +1169,4 @@
11691169
// Deprecated since Moodle 5.2.
11701170
$string['gobacktoquiz'] = 'Go back';
11711171
$string['selectquestionbank'] = 'Select question bank';
1172+
$string['cachedef_overrides'] = 'User and group override information';

public/mod/quiz/lib.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,12 +1150,17 @@ function quiz_after_add_or_update($quiz) {
11501150
$feedback->mingrade = $quiz->feedbackboundaries[$i];
11511151
$feedback->maxgrade = $quiz->feedbackboundaries[$i - 1];
11521152
$feedback->id = $DB->insert_record('quiz_feedback', $feedback);
1153-
$feedbacktext = file_save_draft_area_files((int)$quiz->feedbacktext[$i]['itemid'],
1154-
$context->id, 'mod_quiz', 'feedback', $feedback->id,
1155-
['subdirs' => false, 'maxfiles' => -1, 'maxbytes' => 0],
1156-
$quiz->feedbacktext[$i]['text']);
1153+
$feedbacktext = file_save_draft_area_files(
1154+
(int) $quiz->feedbacktext[$i]['itemid'],
1155+
$context->id,
1156+
'mod_quiz',
1157+
'feedback',
1158+
$feedback->id,
1159+
['subdirs' => false, 'maxfiles' => -1, 'maxbytes' => 0],
1160+
$quiz->feedbacktext[$i]['text']
1161+
);
11571162
$DB->set_field('quiz_feedback', 'feedbacktext', $feedbacktext,
1158-
['id' => $feedback->id]);
1163+
['id' => $feedback->id]);
11591164
}
11601165

11611166
// Store any settings belonging to the access rules.
@@ -2219,7 +2224,7 @@ function quiz_get_coursemodule_info($coursemodule) {
22192224
*/
22202225
function mod_quiz_cm_info_dynamic(cm_info $cm) {
22212226
global $USER;
2222-
foreach (override_manager::get_time_overrides($cm->instance, $USER->id) as $key => $value) {
2227+
foreach (override_manager::get_effective_open_close_times($cm->instance, $USER->id) as $key => $value) {
22232228
$cm->override_customdata($key, $value);
22242229
}
22252230
}

0 commit comments

Comments
 (0)