コード例 #1
0
ファイル: lib.php プロジェクト: aolley/MoodleDirectV2
/**
 * 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) . ' ';
    }
}
 /**
  * Save updated submission data from Turnitin to the database
  *
  * @global type $DB
  * @param type $tiisubmissiondata
  * @param type $bulk
  * @param type $save - save in db regardless of changes
  * @return type
  */
 public function save_updated_submission_data($tiisubmissiondata, $bulk = false, $save = false)
 {
     global $DB, $CFG;
     static $part;
     static $tiiassignid;
     if ($tiiassignid != $tiisubmissiondata->getAssignmentId() || empty($part)) {
         $part = $DB->get_record("turnitintooltwo_parts", array("tiiassignid" => $tiisubmissiondata->getAssignmentId()));
     }
     $turnitintooltwoassignment = new turnitintooltwo_assignment($part->turnitintooltwoid);
     $sub = new stdClass();
     $sub->submission_title = $tiisubmissiondata->getTitle();
     $sub->submission_part = $part->id;
     $sub->submission_objectid = $tiisubmissiondata->getSubmissionId();
     $sub->turnitintooltwoid = $turnitintooltwoassignment->turnitintooltwo->id;
     $sub->submission_score = is_numeric($tiisubmissiondata->getOverallSimilarity()) ? $tiisubmissiondata->getOverallSimilarity() : null;
     $sub->submission_transmatch = 0;
     if ($turnitintooltwoassignment->turnitintooltwo->transmatch == 1 && is_int($tiisubmissiondata->getTranslatedOverallSimilarity())) {
         if ($tiisubmissiondata->getTranslatedOverallSimilarity() > $tiisubmissiondata->getOverallSimilarity()) {
             $sub->submission_score = $tiisubmissiondata->getTranslatedOverallSimilarity();
             $sub->submission_transmatch = 1;
         }
     }
     $sub->submission_grade = $tiisubmissiondata->getGrade() == '' ? null : $tiisubmissiondata->getGrade();
     $sub->submission_gmimaged = $tiisubmissiondata->getFeedbackExists();
     $sub->submission_unanon = $tiisubmissiondata->getAnonymous() == 1 ? 0 : 1;
     $sub->submission_orcapable = $tiisubmissiondata->getOriginalityReportCapable() == 1 ? 1 : 0;
     $sub->submission_acceptnothing = $tiisubmissiondata->getAcceptNothingSubmission() == 1 ? 1 : 0;
     $sub->submission_unanonreason = $sub->submission_unanon == 1 ? urldecode($tiisubmissiondata->getAnonymousRevealReason()) : null;
     $sub->submission_modified = strtotime($tiisubmissiondata->getDate());
     $sub->translated_overall_similarity = $tiisubmissiondata->getTranslatedOverallSimilarity();
     $sub->submission_attempts = $tiisubmissiondata->getAuthorLastViewedFeedback() > 0 ? strtotime($tiisubmissiondata->getAuthorLastViewedFeedback()) : 0;
     // If save not passed in then only update if certain items have changed to save on database load.
     if ($this->submission_grade != $sub->submission_grade || $this->submission_score != $sub->submission_score || $this->submission_modified != $sub->submission_modified || $this->submission_attempts != $sub->submission_attempts || $this->submission_unanon != $sub->submission_unanon || $this->submission_part != $sub->submission_part) {
         $save = true;
     }
     $cm = get_coursemodule_from_instance("turnitintooltwo", $turnitintooltwoassignment->turnitintooltwo->id, $turnitintooltwoassignment->turnitintooltwo->course);
     if ($save) {
         // If the user is not a moodle user then get their name from Tii - only do this on initial save.
         $sub->userid = turnitintooltwo_user::get_moodle_user_id($tiisubmissiondata->getAuthorUserId());
         // If we have no user ID get it from the Moodle database by using their Turnitin e-mail address.
         if ($sub->userid == 0) {
             $tmpuser = new turnitintooltwo_user(0);
             $tmpuser->tii_user_id = $tiisubmissiondata->getAuthorUserId();
             $tiiuser = $tmpuser->set_user_values_from_tii();
             if ($userrecord = $DB->get_record('user', array('email' => $tiiuser["email"]))) {
                 $sub->userid = $userrecord->id;
             }
         }
         // Check if the user is enrolled.
         if ($sub->userid != 0) {
             $context = context_module::instance($cm->id);
             if (!is_enrolled($context, $sub->userid)) {
                 // Enroll the user as a student.
                 $enrol = enrol_get_plugin('manual');
                 $instance = $DB->get_record("enrol", array('courseid' => $cm->course, 'enrol' => 'manual'));
                 $enrol->enrol_user($instance, $sub->userid, 5);
             }
         }
         if ($sub->userid == 0 && empty($this->id)) {
             if ($tiisubmissiondata->getAuthorUserId() > 0) {
                 $sub->submission_nmuserid = $tiisubmissiondata->getAuthorUserId();
                 $tmpuser = new turnitintooltwo_user(0);
                 $tmpuser->tii_user_id = $tiisubmissiondata->getAuthorUserId();
                 $tiiuser = $tmpuser->set_user_values_from_tii();
                 $sub->submission_nmfirstname = $tiiuser["firstname"];
                 $sub->submission_nmlastname = $tiiuser["lastname"];
             } else {
                 $sub->submission_nmuserid = "nm-" . $tiisubmissiondata->getAuthorUserId();
                 $sub->submission_nmfirstname = '';
                 $sub->submission_nmlastname = get_string('nonmoodleuser', 'turnitintooltwo');
             }
         }
         if (!empty($this->id)) {
             $sub->id = $this->id;
             $DB->update_record("turnitintooltwo_submissions", $sub, $bulk);
         } else {
             $sub->id = $DB->insert_record("turnitintooltwo_submissions", $sub, true, $bulk);
         }
         // Update gradebook.
         @(include_once $CFG->libdir . "/gradelib.php");
         if ($sub->userid > 0 && $sub->submission_unanon) {
             $user = new turnitintooltwo_user($sub->userid, "Learner");
             $grades = new stdClass();
             // Only add to gradebook if author has been unanonymised or assignment doesn't have anonymous marking
             if ($submissions = $DB->get_records('turnitintooltwo_submissions', array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id, 'userid' => $user->id, 'submission_unanon' => 1))) {
                 $overallgrade = $turnitintooltwoassignment->get_overall_grade($submissions);
                 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);
         }
     }
 }
コード例 #3
0
/**
 * 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);
}