/** * A Standard Moodle function that moodle executes at the time the cron runs */ function turnitintool_cron() { global $CFG; @(include_once $CFG->dirroot . "/lib/gradelib.php"); if (function_exists('grade_update')) { // Get assignment that needs updating. if ($turnitintool = turnitintool_get_record('turnitintool', "needs_updating", 1, "", "", "", "", '*')) { $cm = get_coursemodule_from_instance("turnitintool", $turnitintool->id, $turnitintool->course); $users = turnitintool_get_records('turnitintool_submissions', 'turnitintoolid', $turnitintool->id); //Loop through every submission for this assignment and update the grades. foreach ($users as $user) { //Create a user ID object to be passed in. $userid = new stdClass(); $userid->id = $user->userid; $grades = turnitintool_buildgrades($turnitintool, $userid); $params['idnumber'] = $cm->idnumber; grade_update('mod/turnitintool', $turnitintool->course, 'mod', 'turnitintool', $turnitintool->id, 0, $grades, $params); } } } }
/** * Updates all originality report scores and grades from a turnitin FID10 call * * @param object $cm The moodle course module object for this instance * @param object $turnitintool The turnitintool object for this activity * @param int $trigger 0 = allow once per session, 1 = allow once every two minutes, 2 = allow immediately * @param object $loaderbar The loaderbar object passed by reference can be NULL if no loader bar is used */ function turnitintool_update_all_report_scores($cm, $turnitintool, $trigger, $loaderbar = null) { global $USER, $CFG, $notice; $param_type = optional_param('type', null, PARAM_CLEAN); $param_do = optional_param('do', null, PARAM_CLEAN); $param_ob = optional_param('ob', null, PARAM_CLEAN); $param_sh = optional_param('sh', null, PARAM_CLEAN); $param_fr = optional_param('fr', null, PARAM_CLEAN); // Check to see if the results for this user's session has been updated from // Turnitin in the last two minutes. If they have then we should skip this refresh // to avoid system load issues that can occur during busy submission periods // where many tutors will enter inbox screens to check progress if ($trigger < 2 and isset($_SESSION['updatedscores'][$turnitintool->id]) and $_SESSION['updatedscores'][$turnitintool->id] > strtotime('-2 minutes')) { return false; } // Update the score only when neccessary determined by a session variable // This ensures the scores are only updated once per session // or if the user requests update specifically [[[[ if ((isset($_SESSION['updatedscores'][$turnitintool->id]) and $_SESSION['updatedscores'][$turnitintool->id] > 0 or isset($param_type)) and $trigger < 1) { return false; } else { // Get Moodle user object [[[[ if (!($owner = turnitintool_get_owner($turnitintool->course))) { turnitintool_print_error('tutorgeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__); exit; } // ]]]] // get Moodle Course Object [[[[ if (!($course = turnitintool_get_record('course', 'id', $turnitintool->course))) { turnitintool_print_error('coursegeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__); exit; } // ]]]] // get Moodle Parts Object [[[[ if (!($parts = turnitintool_get_records_select('turnitintool_parts', "turnitintoolid=" . $turnitintool->id . " AND deleted=0"))) { turnitintool_print_error('partgeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__); exit; } // ]]]] if (has_capability('mod/turnitintool:grade', get_context_instance(CONTEXT_MODULE, $cm->id)) or $turnitintool->studentreports or $trigger > 0) { $total = count($parts); $loaderbar = is_null($loaderbar) ? new turnitintool_loaderbarclass(2) : $loaderbar; $loaderbar->total = $loaderbar->total + $total; $tii = new turnitintool_commclass(turnitintool_getUID($owner), $owner->firstname, $owner->lastname, $owner->email, 2, $loaderbar); $tii->startSession(); turnitintool_usersetup($owner, get_string('userprocess', 'turnitintool'), $tii, $loaderbar); if ($tii->getRerror()) { if ($tii->getAPIunavailable()) { turnitintool_print_error('apiunavailable', 'turnitintool', NULL, NULL, __FILE__, __LINE__); } else { turnitintool_print_error($tii->getRmessage(), NULL, NULL, NULL, __FILE__, __LINE__); } exit; } $post->cid = turnitintool_getCID($course->id); // Get the Turnitin Class ID for Course $post->tem = $owner->email; // Get the Turnitin Course Tutor Email $post->ctl = turnitintool_getCTL($course->id); foreach ($parts as $part) { $post->assignid = turnitintool_getAID($part->id); // Get the Assignment ID for this Assignment / Turnitintool instance $post->assign = $turnitintool->name . ' - ' . $part->partname . ' (Moodle ' . $post->assignid . ')'; $status->user = get_string('student', 'turnitintool'); $status->proc = isset($loaderbar->proc) ? $loaderbar->proc : null; $tii->listSubmissions($post, get_string('updatingscores', 'turnitintool', $status)); $resultArray = $tii->getSubmissionArray(); if ($tii->getRerror() and isset($param_do) and $param_do == 'allsubmissions') { $notice = $tii->getAPIunavailable() ? get_string('apiunavailable', 'turnitintool') : $tii->getRmessage(); } else { if ($tii->getRerror() and isset($param_do) and $param_do == 'submissions') { $notice['error'] = $tii->getAPIunavailable() ? get_string('apiunavailable', 'turnitintool') : $tii->getRmessage(); } } if ($tii->getRerror()) { $return = false; } else { // Create an array of submission IDs with the TII Paper ID as key to repatriate the feedback with submissions if (!($ids = turnitintool_get_records_select('turnitintool_submissions', 'turnitintoolid=' . $turnitintool->id . ' AND submission_objectid IS NOT NULL', '', 'submission_objectid,id,submission_grade,submission_status'))) { $ids = array(); } unset($inserts); $inserts = array(); foreach ($resultArray as $key => $value) { $insert = new object(); $insert->turnitintoolid = $turnitintool->id; $insert->submission_part = $part->id; $insert->submission_title = $value["title"]; $insert->submission_type = 1; $insert->submission_filename = str_replace(" ", "_", $value["title"]) . '.doc'; $insert->submission_objectid = $key; $insert->submission_score = $value["overlap"]; if (is_null($insert->submission_score)) { unset($insert->submission_score); } if ($CFG->turnitin_usegrademark and $turnitintool->usegrademark) { // If we are using TII GradeMark to grade TII gets priority otherwise give moodle grading priority $insert->submission_grade = turnitintool_processgrade($value["grademark"], $part, $owner, $post, $key, $tii, $loaderbar); } else { $insert->submission_grade = $ids[$key]->submission_grade; } $insert->submission_status = get_string('submissionuploadsuccess', 'turnitintool'); $insert->submission_queued = 0; $insert->submission_attempts = $value["student_view"] > 0 ? strtotime($value["student_view"]) : 0; $insert->submission_gmimaged = $value["grademarkstatus"] > 0 ? 1 : 0; $insert->submission_modified = strtotime($value["date_submitted"]); $insert->submission_parent = 0; $insert->submission_unanon = $value["anon"] == 1 ? 0 : 1; if ($userdata = turnitintool_get_record('turnitintool_users', 'turnitin_uid', $value["userid"]) and has_capability('mod/turnitintool:submit', get_context_instance(CONTEXT_MODULE, $cm->id), $userdata->userid)) { // If returned userid is already stored and the user is enrolled on the course // we can use real Moodle user to store against $insert->submission_nmuserid = 0; $insert->submission_nmfirstname = NULL; $insert->submission_nmlastname = NULL; $insert->userid = $userdata->userid; } else { // If userid is not already stored we can not use real user to store against, use (Non Moodle) Marker $insert->submission_nmuserid = $value["userid"] == "-1" ? md5($value["firstname"] . $value["lastname"]) : $value["userid"]; if (!empty($value["firstname"])) { $insert->submission_nmfirstname = $value["firstname"]; } else { $insert->submission_nmfirstname = 'Unnamed'; } if (!empty($value["lastname"])) { $insert->submission_nmlastname = $value["lastname"]; } else { $insert->submission_nmlastname = 'User'; } $insert->userid = 0; } $inserts[] = $insert; } // Purge old submissions listings and insert the new ones // turnitintool_delete_records_select('turnitintool_submissions','submission_objectid IS NOT NULL AND submission_part='.$part->id); // Now insert the new submissions and update existing submissions foreach ($inserts as $insert) { $key = $insert->submission_objectid; if (isset($ids[$key])) { $insert->id = $ids[$key]->id; $insertid = turnitintool_update_record('turnitintool_submissions', $insert); } else { $insertid = turnitintool_insert_record('turnitintool_submissions', $insert); } $submission = $insert; unset($insert); // Update gradebook grades in Moodle 1.9 and above @(include_once $CFG->dirroot . "/lib/gradelib.php"); if (function_exists('grade_update') and $submission->userid != 0) { $user = turnitintool_get_moodleuser($submission->userid, NULL, __FILE__, __LINE__); $cm = get_coursemodule_from_instance("turnitintool", $turnitintool->id, $turnitintool->course); $grades = turnitintool_buildgrades($turnitintool, $user); $grades->userid = $user->id; $params['idnumber'] = $cm->idnumber; grade_update('mod/turnitintool', $turnitintool->course, 'mod', 'turnitintool', $turnitintool->id, 0, $grades, $params); } // ]]]] } } } $tii->endSession(); $loaderbar->endloader(); if (isset($return)) { $_SESSION['updatedscores'][$turnitintool->id] = 0; } else { $_SESSION['updatedscores'][$turnitintool->id] = time(); } $redirectlink = $CFG->wwwroot . '/mod/turnitintool/view.php?id=' . $cm->id; $redirectlink .= !is_null($param_do) ? '&do=' . $param_do : '&do=intro'; $redirectlink .= !is_null($param_fr) ? '&fr=' . $param_fr : ''; $redirectlink .= !is_null($param_sh) ? '&sh=' . $param_sh : ''; $redirectlink .= !is_null($param_ob) ? '&ob=' . $param_ob : ''; turnitintool_redirect($redirectlink); } } }