Exemple #1
0
/**
 * Processes the grade entry if grades are updated via Moodle only
 *
 * @param object $cm The moodle course module object for this instance
 * @param object $turnitintool The turnitintool object for this activity
 * @param array $post The POST array supplied from the grade update form
 * @return string Returns $notice in the event of an error
 */
function turnitintool_update_form_grades($cm, $turnitintool, $post)
{
    global $CFG;
    $notice = '';
    $total = 0;
    $owner = turnitintool_get_owner($turnitintool->course);
    foreach ($post['grade'] as $id => $thisgrade) {
        if (!($submission = turnitintool_get_record('turnitintool_submissions', 'id', $id))) {
            turnitintool_print_error('submissiongeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
            exit;
        }
        if ($thisgrade != $submission->submission_grade) {
            $total++;
        }
    }
    $loaderbar = new turnitintool_loaderbarclass($total + 2);
    $tii = new turnitintool_commclass(turnitintool_getUID($owner), $owner->firstname, $owner->lastname, $owner->email, 2, $loaderbar);
    $tii->startSession();
    $proc = 0;
    foreach ($post['grade'] as $id => $thisgrade) {
        $thisgrade = round($thisgrade);
        // round the grade to an integer / Turnitin won't accept a null grade via the API
        if (!($submission = turnitintool_get_record('turnitintool_submissions', 'id', $id))) {
            turnitintool_print_error('submissiongeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
            exit;
        }
        if (!($part = turnitintool_get_record_select('turnitintool_parts', "id=" . $submission->submission_part . " AND deleted=0"))) {
            turnitintool_print_error('partgeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
            exit;
        }
        // work out if the grade has changed from what is stored
        if (empty($thisgrade) or $thisgrade != $submission->submission_grade) {
            $user = turnitintool_get_moodleuser($submission->userid, NULL, __FILE__, __LINE__);
            $update = new object();
            $update->id = $id;
            $update->submission_grade = $thisgrade;
            print_object($update);
            if ($thisgrade > $part->maxmarks) {
                $input = new stdClass();
                $input->fullname = $user->firstname . ' ' . $user->lastname;
                $input->part = turnitintool_partnamefromnum($submission->submission_part);
                $input->maximum = $part->maxmarks;
                $notice .= get_string('submissiongradetoohigh', 'turnitintool', $input);
            } else {
                if (!($result = turnitintool_update_record('turnitintool_submissions', $update))) {
                    $notice = get_string('submissionupdateerror', 'turnitintool');
                }
            }
            // now push the grade to Turnitin
            $post = new stdClass();
            $post->oid = $submission->submission_objectid;
            $post->score = $thisgrade;
            $post->cid = turnitintool_getCID($turnitintool->course);
            $proc++;
            $add = new stdClass();
            $add->num = $proc;
            $add->total = $total;
            $tii->setGradeMark($post, get_string('pushinggrade', 'turnitintool', $add));
            if ($tii->getRerror()) {
                if ($tii->getAPIunavailable()) {
                    turnitintool_print_error('apiunavailable', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
                } else {
                    turnitintool_print_error($tii->getRmessage() . ' CODE: ' . $tii->getRcode(), NULL, NULL, NULL, __FILE__, __LINE__);
                }
                exit;
            }
            @(include_once $CFG->dirroot . "/lib/gradelib.php");
            if (function_exists('grade_update')) {
                $grades = turnitintool_buildgrades($turnitintool, $user);
                $cm = get_coursemodule_from_instance("turnitintool", $turnitintool->id, $turnitintool->course);
                $params['idnumber'] = $cm->idnumber;
                grade_update('mod/turnitintool', $turnitintool->course, 'mod', 'turnitintool', $turnitintool->id, 0, $grades, $params);
            }
        }
    }
    $tii->endSession();
    $loaderbar->endloader();
    // Update gradebook grades in Moodle 1.9 and above
    turnitintool_redirect($CFG->wwwroot . "/mod/turnitintool/view.php?id=" . $cm->id . "&do=allsubmissions&update=1");
    return $notice;
}
 if (!has_capability('mod/turnitintool:grade', turnitintool_get_context('MODULE', $cm->id))) {
     turnitintool_print_error('permissiondeniederror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
     exit;
 }
 $owner = turnitintool_get_owner($course->id);
 $loaderbar = null;
 $tii = new turnitintool_commclass(turnitintool_getUID($owner), $owner->firstname, $owner->lastname, $owner->email, 2, $loaderbar);
 $post = new stdClass();
 $post->cid = turnitintool_getCID($course->id);
 $post->assignid = turnitintool_getAID($param_part);
 $post->ctl = turnitintool_getCTL($course->id);
 $post->assign = $turnitintool->name . ' - ' . turnitintool_partnamefromnum($param_part) . ' (Moodle ' . $post->assignid . ')';
 $post->fcmd = 4;
 $tii->listSubmissions($post, get_string('downloadingfile', 'turnitintool'));
 if ($tii->getRerror()) {
     if (!$tii->getAPIunavailable()) {
         $reason = $tii->getRcode() == TURNITINTOOL_DB_UNIQUEID_ERROR ? get_string('assignmentdoesnotexist', 'turnitintool') : $tii->getRmessage();
     } else {
         $reason = get_string('apiunavailable', 'turnitintool');
     }
     turnitintool_print_error('downloadingfileerror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
     exit;
 } else {
     $output = $tii->getFileData();
     if (function_exists('mb_strlen')) {
         $size = mb_strlen($output, '8bit');
     } else {
         $size = strlen($output);
     }
     header("Pragma: public");
     header("Expires: 0");