Skip to content

Commit

Permalink
Merge branch 'MDL-65044-master' of git://github.com/lameze/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
stronk7 committed Mar 27, 2019
2 parents 18f460e + a5f691e commit 199d0b0
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 56 deletions.
4 changes: 4 additions & 0 deletions grade/upgrade.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
This file describes API changes in /grade/* ;
Information provided here is intended especially for developers.

=== 3.7 ===

* The grade_cron() function has been removed. Please use grade_history_cleanup_task and grade_cron_task scheduled tasks instead.

=== 3.6 ===

* The grade_plugin_return constructor now uses parameters from the
Expand Down
1 change: 1 addition & 0 deletions lang/en/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -1234,6 +1234,7 @@
$string['taskglobalsearchindex'] = 'Global search indexing';
$string['taskglobalsearchoptimize'] = 'Global search index optimization';
$string['taskgradecron'] = 'Background processing for gradebook';
$string['taskgradehistorycleanup'] = 'Background processing for clean grade history tables';
$string['tasklegacycron'] = 'Legacy cron processing for plugins';
$string['tasklogcleanup'] = 'Cleanup of task logs';
$string['tasklogs'] = 'Task logs';
Expand Down
45 changes: 42 additions & 3 deletions lib/classes/task/grade_cron_task.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,49 @@ public function get_name() {
* Throw exceptions on errors (the job will be retried).
*/
public function execute() {
global $CFG;
global $CFG, $DB;

require_once($CFG->libdir.'/gradelib.php');
grade_cron();
$now = time();
$sql = "SELECT i.*
FROM {grade_items} i
WHERE i.locked = 0
AND i.locktime > 0
AND i.locktime < ?
AND EXISTS (SELECT 'x'
FROM {grade_items} c
WHERE c.itemtype='course'
AND c.needsupdate=0
AND c.courseid=i.courseid)";
// Go through all courses that have proper final grades and lock them if needed.
$rs = $DB->get_recordset_sql($sql, array($now));
foreach ($rs as $item) {
$gradeitem = new \grade_item($item, false);
$gradeitem->locked = $now;
$gradeitem->update('locktime');
}
$rs->close();

$gradeinst = new \grade_grade();
$fields = 'g.' . implode(',g.', $gradeinst->required_fields);
$sql = "SELECT $fields
FROM {grade_grades} g, {grade_items} i
WHERE g.locked = 0
AND g.locktime > 0
AND g.locktime < ?
AND g.itemid = i.id
AND EXISTS (SELECT 'x'
FROM {grade_items} c
WHERE c.itemtype = 'course'
AND c.needsupdate = 0
AND c.courseid = i.courseid)";
// Go through all courses that have proper final grades and lock them if needed.
$rs = $DB->get_recordset_sql($sql, array($now));
foreach ($rs as $grade) {
$gradegrade = new \grade_grade($grade, false);
$gradegrade->locked = $now;
$gradegrade->update('locktime');
}
$rs->close();
}

}
67 changes: 67 additions & 0 deletions lib/classes/task/grade_history_cleanup_task.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* A scheduled task.
*
* @package core
* @copyright 2019 Simey Lameze <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\task;
defined('MOODLE_INTERNAL') || die();

/**
* Simple task to clean grade history tables.
*
* @copyright 2019 Simey Lameze <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class grade_history_cleanup_task extends scheduled_task {

/**
* Get a descriptive name for this task (shown to admins).
*
* @return string
*/
public function get_name() {
return get_string('taskgradehistorycleanup', 'admin');
}

/**
* Cleanup history tables.
*/
public function execute() {
global $CFG, $DB;

if (!empty($CFG->gradehistorylifetime)) {
$now = time();
$histlifetime = $now - ($CFG->gradehistorylifetime * DAYSECS);
$tables = [
'grade_outcomes_history',
'grade_categories_history',
'grade_items_history',
'grade_grades_history',
'scale_history'
];
foreach ($tables as $table) {
if ($DB->delete_records_select($table, "timemodified < ?", [$histlifetime])) {
mtrace(" Deleted old grade history records from '$table'");
}
}
}
}
}
9 changes: 9 additions & 0 deletions lib/db/tasks.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,15 @@
'dayofweek' => '*',
'month' => '*'
),
array(
'classname' => 'core\task\grade_history_cleanup_task',
'blocking' => 0,
'minute' => '*',
'hour' => '0',
'day' => '*',
'dayofweek' => '*',
'month' => '*'
),
array(
'classname' => 'core\task\completion_regular_task',
'blocking' => 0,
Expand Down
52 changes: 0 additions & 52 deletions lib/gradelib.php
Original file line number Diff line number Diff line change
Expand Up @@ -1552,58 +1552,6 @@ function grade_user_unenrol($courseid, $userid) {
}
}

/**
* Grading cron job. Performs background clean up on the gradebook
*/
function grade_cron() {
global $CFG, $DB;

$now = time();

$sql = "SELECT i.*
FROM {grade_items} i
WHERE i.locked = 0 AND i.locktime > 0 AND i.locktime < ? AND EXISTS (
SELECT 'x' FROM {grade_items} c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)";

// go through all courses that have proper final grades and lock them if needed
$rs = $DB->get_recordset_sql($sql, array($now));
foreach ($rs as $item) {
$grade_item = new grade_item($item, false);
$grade_item->locked = $now;
$grade_item->update('locktime');
}
$rs->close();

$grade_inst = new grade_grade();
$fields = 'g.'.implode(',g.', $grade_inst->required_fields);

$sql = "SELECT $fields
FROM {grade_grades} g, {grade_items} i
WHERE g.locked = 0 AND g.locktime > 0 AND g.locktime < ? AND g.itemid=i.id AND EXISTS (
SELECT 'x' FROM {grade_items} c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)";

// go through all courses that have proper final grades and lock them if needed
$rs = $DB->get_recordset_sql($sql, array($now));
foreach ($rs as $grade) {
$grade_grade = new grade_grade($grade, false);
$grade_grade->locked = $now;
$grade_grade->update('locktime');
}
$rs->close();

//TODO: do not run this cleanup every cron invocation
// cleanup history tables
if (!empty($CFG->gradehistorylifetime)) { // value in days
$histlifetime = $now - ($CFG->gradehistorylifetime * 3600 * 24);
$tables = array('grade_outcomes_history', 'grade_categories_history', 'grade_items_history', 'grade_grades_history', 'scale_history');
foreach ($tables as $table) {
if ($DB->delete_records_select($table, "timemodified < ?", array($histlifetime))) {
mtrace(" Deleted old grade history records from '$table'");
}
}
}
}

/**
* Reset all course grades, refetch from the activities and recalculate
*
Expand Down
2 changes: 1 addition & 1 deletion version.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

defined('MOODLE_INTERNAL') || die();

$version = 2019032200.00; // YYYYMMDD = weekly release date of this DEV branch.
$version = 2019032200.01; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.

Expand Down

0 comments on commit 199d0b0

Please sign in to comment.