Exemplo n.º 1
0
/**
 * A Standard Moodle function that moodle executes at the time the cron runs
 */
function turnitintooltwo_cron()
{
    global $DB, $CFG;
    // get assignment that needs updating and check whether it exists
    if ($assignment = $DB->get_record('turnitintooltwo', array("needs_updating" => 1), '*', IGNORE_MULTIPLE)) {
        $turnitintooltwoassignment = new turnitintooltwo_assignment($assignment->id);
        $cm = get_coursemodule_from_instance("turnitintooltwo", $turnitintooltwoassignment->turnitintooltwo->id, $turnitintooltwoassignment->turnitintooltwo->course);
        $users = $turnitintooltwoassignment->get_moodle_course_users($cm);
        foreach ($users as $user) {
            // Only add to gradebook if author has been unanonymised or assignment doesn't have anonymous marking
            $grades = new stdClass();
            if ($submissions = $DB->get_records('turnitintooltwo_submissions', array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id, 'userid' => $user->id, 'submission_unanon' => 1))) {
                $overallgrade = $turnitintooltwoassignment->get_overall_grade($submissions, $cm);
                if ($turnitintooltwoassignment->turnitintooltwo->grade < 0) {
                    // Using a scale.
                    $grades->rawgrade = $overallgrade == '--' ? null : $overallgrade;
                } else {
                    $grades->rawgrade = $overallgrade == '--' ? null : number_format($overallgrade, 2);
                }
            }
            $grades->userid = $user->id;
            $params['idnumber'] = $cm->idnumber;
            @(include_once $CFG->dirroot . "/lib/gradelib.php");
            grade_update('mod/turnitintooltwo', $turnitintooltwoassignment->turnitintooltwo->course, 'mod', 'turnitintooltwo', $turnitintooltwoassignment->turnitintooltwo->id, 0, $grades, $params);
        }
        // remove the "needs updating" flag
        $update_assignment = new stdClass();
        $update_assignment->id = $assignment->id;
        $update_assignment->needs_updating = 0;
        $DB->update_record("turnitintooltwo", $update_assignment);
    }
    // Refresh the submissions for migrated assignment parts if there are none stored locally
    // as the 1st time this is done can be quite a long job if there are a lot of submissions.
    $migratedemptyparts = $DB->get_records_select('turnitintooltwo_parts', " migrated = 1 AND " . " (SELECT COUNT(id) FROM {turnitintooltwo_submissions} " . " WHERE submission_part = {turnitintooltwo_parts}.id) = 0 ");
    if (count($migratedemptyparts) > 0) {
        $updatedassignments = array();
        foreach ($migratedemptyparts as $part) {
            if (!array_search($part->id, $updatedassignments)) {
                $turnitintooltwoassignment = new turnitintooltwo_assignment($part->turnitintooltwoid);
                $turnitintooltwoassignment->get_submission_ids_from_tii($part);
                $turnitintooltwoassignment->refresh_submissions($part);
                $updatedassignments[] = $part->id;
                turnitintooltwo_activitylog('Turnitintool submissions downloaded for assignment ' . $part->id, 'REQUEST');
            }
        }
        echo 'Turnitintool submissions downloaded for assignments: ' . implode(',', $updatedassignments) . ' ';
    }
}
/**
 * Update the gradebook for cron calls.
 *
 * @param type $assignment The assignment that we are going to update the grades for.
 * @param string $task The cron task we are performing the update from.
 */
function turnitintooltwo_cron_update_gradbook($assignment, $task)
{
    global $DB, $CFG;
    @(include_once $CFG->dirroot . "/lib/gradelib.php");
    $turnitintooltwoassignment = new turnitintooltwo_assignment($assignment->id);
    $cm = get_coursemodule_from_instance("turnitintooltwo", $turnitintooltwoassignment->turnitintooltwo->id, $turnitintooltwoassignment->turnitintooltwo->course);
    $users = $turnitintooltwoassignment->get_moodle_course_users($cm);
    foreach ($users as $user) {
        $fieldList = array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id, 'userid' => $user->id);
        // Set submission_unanon when needsupdating is used.
        if ($task == "needsupdating") {
            $fieldList['submission_unanon'] = 1;
        }
        $grades = new stdClass();
        if ($submissions = $DB->get_records('turnitintooltwo_submissions', $fieldList)) {
            $overallgrade = $turnitintooltwoassignment->get_overall_grade($submissions, $cm);
            if ($turnitintooltwoassignment->turnitintooltwo->grade < 0) {
                // Using a scale.
                $grades->rawgrade = $overallgrade == '--' ? null : $overallgrade;
            } else {
                $grades->rawgrade = $overallgrade == '--' ? null : number_format($overallgrade, 2);
            }
        }
        $grades->userid = $user->id;
        $params['idnumber'] = $cm->idnumber;
        grade_update('mod/turnitintooltwo', $turnitintooltwoassignment->turnitintooltwo->course, 'mod', 'turnitintooltwo', $turnitintooltwoassignment->turnitintooltwo->id, 0, $grades, $params);
    }
    // Remove the "anongradebook" flag
    $update_assignment = new stdClass();
    $update_assignment->id = $assignment->id;
    // Depending on the task we need to update a different column.
    switch ($task) {
        case "needsupdating":
            $update_assignment->needs_updating = 0;
            break;
        case "anongradebook":
            $update_assignment->anongradebook = 1;
            break;
    }
    $DB->update_record("turnitintooltwo", $update_assignment);
}