示例#1
0
/**
 * 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);
            }
        }
    }
}
示例#2
0
/**
 * 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);
        }
    }
}