Skip to content

Commit 8867848

Browse files
authored
Merge pull request #743 from turnitin/db-optimization
Optimising DB calls in cron
2 parents 9534d39 + 5076c8d commit 8867848

File tree

1 file changed

+46
-49
lines changed

1 file changed

+46
-49
lines changed

lib.php

+46-49
Original file line numberDiff line numberDiff line change
@@ -2015,63 +2015,62 @@ public function cron_update_scores() {
20152015
$submissionids = array();
20162016
$reportsexpected = array();
20172017
$assignmentids = array();
2018-
2019-
$submissions = $DB->get_records_select(
2020-
'plagiarism_turnitin_files',
2021-
'statuscode = ?
2022-
AND ( similarityscore IS NULL OR duedate_report_refresh = 1 )
2023-
AND ( orcapable = ? OR orcapable IS NULL ) ',
2024-
array('success', 1),
2025-
'externalid DESC'
2018+
2019+
$submissions = $DB->get_records_sql(
2020+
'SELECT PTF.*,
2021+
CM.instance AS instance,
2022+
M.name AS modname
2023+
FROM {plagiarism_turnitin_files} PTF
2024+
JOIN {course_modules} CM ON CM.id = PTF.cm
2025+
JOIN {modules} M ON M.id = CM.module
2026+
WHERE statuscode = ?
2027+
AND ( similarityscore IS NULL OR duedate_report_refresh = 1 )
2028+
AND ( orcapable = ? OR orcapable IS NULL )
2029+
ORDER BY externalid DESC',
2030+
['success', 1]
20262031
);
20272032

2028-
// Add submission ids to the request.
2033+
$modulesettings = [];
20292034
foreach ($submissions as $tiisubmission) {
2035+
if (!array_key_exists($tiisubmission->cm, $modulesettings)) {
2036+
$modulesettings[$tiisubmission->cm] = $this->get_settings($tiisubmission->cm);
2037+
}
2038+
}
20302039

2031-
// Only add the submission to the request if the module still exists.
2032-
if ($cm = get_coursemodule_from_id('', $tiisubmission->cm)) {
2033-
2034-
// Updates the db field 'duedate_report_refresh' if the due date has passed within the last twenty four hours.
2035-
$moduledata = $DB->get_record($cm->modname, array('id' => $cm->instance));
2036-
$now = strtotime('now');
2037-
$dtdue = (!empty($moduledata->duedate)) ? $moduledata->duedate : 0;
2038-
if ($now >= $dtdue && $now < strtotime('+1 day', $dtdue)) {
2039-
$this->set_duedate_report_refresh($tiisubmission->id, 1);
2040-
}
2040+
// Add submission ids to the request.
2041+
foreach ($submissions as $tiisubmission) {
2042+
// Updates the db field 'duedate_report_refresh' if the due date has passed within the last twenty four hours.
2043+
$moduledata = $DB->get_record($tiisubmission->modname, array('id' => $tiisubmission->instance));
2044+
$now = strtotime('now');
2045+
$dtdue = (!empty($moduledata->duedate)) ? $moduledata->duedate : 0;
2046+
if ($tiisubmission->duedate_report_refresh != 1 && $now >= $dtdue && $now < strtotime('+1 day', $dtdue)) {
2047+
$this->set_duedate_report_refresh($tiisubmission->id, 1);
2048+
}
20412049

2042-
if (!isset($reportsexpected[$cm->id])) {
2043-
$plagiarismsettings = $this->get_settings($cm->id);
2044-
$reportsexpected[$cm->id] = 1;
2050+
if (!isset($reportsexpected[$tiisubmission->cm])) {
20452051

2046-
if (!isset($plagiarismsettings['plagiarism_compare_institution'])) {
2047-
$plagiarismsettings['plagiarism_compare_institution'] = 0;
2048-
}
2052+
$reportsexpected[$tiisubmission->cm] = 1;
20492053

2050-
// Don't add the submission to the request if module settings mean we will not get a report back.
2051-
if (array_key_exists('plagiarism_compare_student_papers', $plagiarismsettings) &&
2052-
$plagiarismsettings['plagiarism_compare_student_papers'] == 0 &&
2053-
$plagiarismsettings['plagiarism_compare_internet'] == 0 &&
2054-
$plagiarismsettings['plagiarism_compare_journals'] == 0 &&
2055-
$plagiarismsettings['plagiarism_compare_institution'] == 0) {
2056-
$reportsexpected[$cm->id] = 0;
2057-
}
2054+
if (!isset($modulesettings[$tiisubmission->cm]['plagiarism_compare_institution'])) {
2055+
$modulesettings[$tiisubmission->cm]['plagiarism_compare_institution'] = 0;
20582056
}
20592057

2060-
// Only add the submission to the request if we are expecting an originality report.
2061-
if ($reportsexpected[$cm->id] == 1) {
2062-
$submissionids[] = $tiisubmission->externalid;
2058+
// Don't add the submission to the request if module settings mean we will not get a report back.
2059+
if (array_key_exists('plagiarism_compare_student_papers', $modulesettings[$tiisubmission->cm]) &&
2060+
$modulesettings[$tiisubmission->cm]['plagiarism_compare_student_papers'] == 0 &&
2061+
$modulesettings[$tiisubmission->cm]['plagiarism_compare_internet'] == 0 &&
2062+
$modulesettings[$tiisubmission->cm]['plagiarism_compare_journals'] == 0 &&
2063+
$modulesettings[$tiisubmission->cm]['plagiarism_compare_institution'] == 0) {
2064+
$reportsexpected[$tiisubmission->cm] = 0;
2065+
}
2066+
}
20632067

2064-
// If submission is added to the request, add the corresponding assign id in the assignids array.
2065-
$moduleturnitinconfig = $DB->get_record('plagiarism_turnitin_config',
2066-
array(
2067-
'cm' => $cm->id,
2068-
'name' => 'turnitin_assignid'
2069-
)
2070-
);
2068+
// Only add the submission to the request if we are expecting an originality report.
2069+
if ($reportsexpected[$tiisubmission->cm] == 1) {
2070+
$submissionids[] = $tiisubmission->externalid;
20712071

2072-
if (!isset(array_flip($assignmentids)[$moduleturnitinconfig->value])) {
2073-
$assignmentids[] = $moduleturnitinconfig->value;
2074-
}
2072+
if (!isset(array_flip($assignmentids)[$modulesettings[$tiisubmission->cm]->turnitin_assignid])) {
2073+
$assignmentids[] = $modulesettings[$tiisubmission->cm]->turnitin_assignid;
20752074
}
20762075
}
20772076
}
@@ -2157,9 +2156,7 @@ public function cron_update_scores() {
21572156

21582157
// Sets the duedate_report_refresh flag for each processed submission to 2 to prevent them being processed again in the next cron run.
21592158
foreach ($submissions as $tiisubmission) {
2160-
if ($cm = get_coursemodule_from_id('', $tiisubmission->cm)) {
2161-
$this->set_duedate_report_refresh($tiisubmission->id, 2);
2162-
}
2159+
$this->set_duedate_report_refresh($tiisubmission->id, 2);
21632160
}
21642161

21652162
return true;

0 commit comments

Comments
 (0)