Ejemplo n.º 1
0
/**
 * Given an object containing all the necessary data,
 * (defined by the form in mod_form.php) this function
 * will update an existing instance with new data.
 *
 * @global object
 * @global object
 * @param object $turnitintool update turnitintool instance
 * @return bool success
 */
function turnitintool_update_instance($turnitintool)
{
    global $USER, $CFG, $DB;
    $turnitintool->timemodified = time();
    $turnitintool->id = $turnitintool->instance;
    // Set the checkbox settings for updates
    $turnitintool->erater_spelling = isset($turnitintool->erater_spelling) ? $turnitintool->erater_spelling : 0;
    $turnitintool->erater_grammar = isset($turnitintool->erater_grammar) ? $turnitintool->erater_grammar : 0;
    $turnitintool->erater_usage = isset($turnitintool->erater_usage) ? $turnitintool->erater_usage : 0;
    $turnitintool->erater_mechanics = isset($turnitintool->erater_mechanics) ? $turnitintool->erater_mechanics : 0;
    $turnitintool->erater_style = isset($turnitintool->erater_style) ? $turnitintool->erater_style : 0;
    $turnitintool->transmatch = isset($turnitintool->transmatch) ? $turnitintool->transmatch : 0;
    // Get Moodle Course Object [[[[
    if (!($course = turnitintool_get_record("course", "id", $turnitintool->course))) {
        turnitintool_print_error('coursegeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
        exit;
    }
    // ]]]]
    // Get Current Moodle Turnitin Tool Object (Assignment) [[[
    if (!($turnitintoolnow = turnitintool_get_record("turnitintool", "id", $turnitintool->id))) {
        turnitintool_print_error('turnitintoolgeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
        exit;
    }
    // ]]]]
    // Get Current Moodle Turnitin Tool Parts Object [[[
    if (is_callable(array($DB, 'sql_compare_text'))) {
        $part_select_query = $DB->sql_compare_text('turnitintoolid') . ' = :turnitintoolid
        AND ' . $DB->sql_compare_text('deleted') . ' = :deleted';
        if (!($parts = turnitintool_get_records_select("turnitintool_parts", $part_select_query, array('turnitintoolid' => $turnitintool->id, 'deleted' => 0), 'id DESC'))) {
            turnitintool_print_error('partgeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
            exit;
        }
    } else {
        $part_select_query = "turnitintoolid='" . $turnitintool->id . "' AND deleted=0";
        if (!($parts = turnitintool_get_records_select("turnitintool_parts", $part_select_query, 'id DESC'))) {
            turnitintool_print_error('partgeterror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
            exit;
        }
    }
    // ]]]]
    $partids = array_keys($parts);
    $proc = 0;
    $total = $turnitintool->numparts + 2;
    if (count($partids) > $turnitintool->numparts) {
        // Add the number of deletes needed
        $total += count($partids) - $turnitintool->numparts;
    }
    if ($turnitintoolnow->numparts < $turnitintool->numparts) {
        // Add the number of Insert Individualising required
        $total += $turnitintool->numparts - count($partids);
    }
    if (turnitintool_is_owner($course->id)) {
        $owner = $USER;
    } else {
        $owner = turnitintool_get_owner($course->id);
    }
    $loaderbar = null;
    $tii = new turnitintool_commclass(turnitintool_getUID($owner), $owner->firstname, $owner->lastname, $owner->email, 2, $loaderbar);
    $tii->startSession();
    if ($turnitintool->numparts < count($partids) and turnitintool_count_records('turnitintool_submissions', 'turnitintoolid', $turnitintool->id) > 0) {
        turnitintool_print_error('reducepartserror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
        exit;
    } else {
        if ($turnitintool->numparts < count($partids)) {
            // REDUCE THE NUMBER OF PARTS BY CHOPPING THE PARTS OFF THE END
            for ($i = 0; $i < count($partids); $i++) {
                $n = $i + 1;
                if ($n > $turnitintool->numparts) {
                    $proc++;
                    // Get the Turnitin UIDs [[[[
                    $tiipost = new stdClass();
                    $tiipost->cid = turnitintool_getCID($course->id);
                    $tiipost->assignid = turnitintool_getAID($partids[$i]);
                    // ]]]]
                    // Do the turnitin assignment set call to the API [[[[
                    $tiipost->courseid = $course->id;
                    $tiipost->ctl = turnitintool_getCTL($course->id);
                    $tiipost->dtstart = time();
                    $tiipost->dtdue = strtotime('+1 week');
                    $tiipost->dtpost = strtotime('+1 week');
                    $tiipost->name = $turnitintool->name . ' - ' . turnitintool_partnamefromnum($partids[$i]) . ' (Moodle ' . $tiipost->assignid . ')';
                    $tii->deleteAssignment($tiipost, get_string('assignmentdeleteprocess', 'turnitintool', $n));
                    if ($tii->getRerror() and $tii->getRcode() != TURNITINTOOL_ASSIGNMENT_UPDATE_ERROR and $tii->getRcode() != TURNITINTOOL_ASSIGNMENT_NOTEXIST_ERROR) {
                        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('<strong>' . get_string('deleteerror', 'turnitintool') . '</strong><br />' . $reason);
                        exit;
                    } else {
                        if (!($submissions = turnitintool_delete_records('turnitintool_submissions', 'turnitintoolid', $turnitintool->id, 'submission_part', $partids[$i]))) {
                            turnitintool_print_error('submissiondeleteerror', 'turnitintool', NULL, NULL, __FILE__, __LINE__);
                            exit;
                        }
                    }
                    $part = new stdClass();
                    $part->id = $partids[$i];
                    $part->partname = turnitintool_partnamefromnum($part->id);
                    $part->deleted = 1;
                    if (!($delete = turnitintool_update_record('turnitintool_parts', $part, false))) {
                        turnitintool_print_error('partdberror', 'turnitintool', NULL, $i, __FILE__, __LINE__);
                    }
                    if (is_callable(array($DB, 'sql_compare_text'))) {
                        $event_delete_query = $DB->sql_compare_text('modulename') . '=:turnitintool
                    AND ' . $DB->sql_compare_text('instance') . '=:instance
                    AND ' . $DB->sql_compare_text('name') . '=:name';
                    } else {
                        $event_delete_query = 'modulename=:turnitintool
                    AND instance=:instance
                    AND name=:name';
                    }
                    turnitintool_delete_records_select('event', $event_delete_query, array('turnitintool' => 'turnitintool', 'instance' => $turnitintool->id, 'name' => $turnitintool->name . " - " . $part->partname));
                    // ]]]]
                }
            }
        }
    }
    unset($tiipost);
    for ($i = 0; $i < $turnitintool->numparts; $i++) {
        $n = $i + 1;
        $proc++;
        // Update Turnitin Assignment via the API [[[[
        $tiipost = new stdClass();
        $tiipost->courseid = $course->id;
        $tiipost->ctl = turnitintool_getCTL($course->id);
        $thisid = isset($partids[$i]) ? $partids[$i] : null;
        if ($i >= count($partids)) {
            $tiipost->dtstart = time();
            // Now
            $tiipost->dtdue = strtotime('+1 week');
            // 7 days time
            $tiipost->dtpost = strtotime('+1 week');
            // 7 days time
        } else {
            $tiipost->dtstart = $parts[$thisid]->dtstart;
            $tiipost->dtdue = $parts[$thisid]->dtdue;
            $tiipost->dtpost = $parts[$thisid]->dtpost;
        }
        $tiipost->s_view_report = $turnitintool->studentreports;
        $tiipost->anon = $turnitintool->anon;
        $tiipost->report_gen_speed = $turnitintool->reportgenspeed;
        $tiipost->late_accept_flag = $turnitintool->allowlate;
        $tiipost->submit_papers_to = $turnitintool->submitpapersto;
        $tiipost->s_paper_check = $turnitintool->spapercheck;
        $tiipost->internet_check = $turnitintool->internetcheck;
        $tiipost->journal_check = $turnitintool->journalcheck;
        // Add in Exclude small matches, biblio, quoted etc 20102009
        $tiipost->exclude_biblio = $turnitintool->excludebiblio;
        $tiipost->exclude_quoted = $turnitintool->excludequoted;
        $tiipost->exclude_value = $turnitintool->excludevalue;
        $tiipost->exclude_type = $turnitintool->excludetype;
        // Add erater settings
        $tiipost->erater = isset($turnitintool->erater) ? $turnitintool->erater : 0;
        $tiipost->erater_handbook = isset($turnitintool->erater_handbook) ? $turnitintool->erater_handbook : 0;
        $tiipost->erater_dictionary = isset($turnitintool->erater_dictionary) ? $turnitintool->erater_dictionary : 'en_US';
        $tiipost->erater_spelling = isset($turnitintool->erater_spelling) ? $turnitintool->erater_spelling : 0;
        $tiipost->erater_grammar = isset($turnitintool->erater_grammar) ? $turnitintool->erater_grammar : 0;
        $tiipost->erater_usage = isset($turnitintool->erater_usage) ? $turnitintool->erater_usage : 0;
        $tiipost->erater_mechanics = isset($turnitintool->erater_mechanics) ? $turnitintool->erater_mechanics : 0;
        $tiipost->erater_style = isset($turnitintool->erater_style) ? $turnitintool->erater_style : 0;
        $tiipost->transmatch = isset($turnitintool->transmatch) ? $turnitintool->transmatch : 0;
        if (turnitintool_is_owner($course->id)) {
            $owner = $USER;
        } else {
            $owner = turnitintool_get_owner($course->id);
        }
        if ($i < count($partids)) {
            $individualise = false;
            $partname = turnitintool_partnamefromnum($partids[$i]);
            $tiipost->cid = turnitintool_getCID($course->id);
            $tiipost->assignid = turnitintool_getAID($partids[$i]);
            $tiipost->name = $turnitintool->name . ' - ' . $partname . ' (Moodle ' . $tiipost->assignid . ')';
            $tiipost->currentassign = $turnitintoolnow->name . ' - ' . turnitintool_partnamefromnum($partids[$i]) . ' (Moodle ' . $tiipost->assignid . ')';
            $tii->createAssignment($tiipost, 'UPDATE', get_string('assignmentupdate', 'turnitintool', $n));
        } else {
            $individualise = true;
            $tiipost->cid = '';
            $tiipost->assignid = '';
            $tiipost->dtstart = strtotime("now");
            // Set time to now and change to the correct date later to allow dates in the past
            $tiipost->dtdue = strtotime("+1 day");
            // Set time to now +1 day and change to the correct date later to allow dates in the past
            $tiipost->dtpost = strtotime("+1 day");
            // Set time to now +1 day and change to the correct date later to allow dates in the past
            $partname = get_string('turnitinpart', 'turnitintool', $n);
            $tiipost->name = $turnitintool->name . ' - ' . $partname;
            $tii->createAssignment($tiipost, 'INSERT', get_string('assignmentprocess', 'turnitintool', $n));
        }
        if ($tii->getRerror()) {
            if ($tii->getAPIunavailable()) {
                $reason = get_string('apiunavailable', 'turnitintool');
            } else {
                $reason = $tii->getRcode() == TURNITINTOOL_DB_UNIQUEID_ERROR ? get_string('assignmentdoesnotexist', 'turnitintool') : $tii->getRmessage();
            }
            turnitintool_print_error('<strong>' . get_string('updateerror', 'turnitintool') . '</strong><br />' . $reason);
            exit;
        }
        $part = new stdClass();
        $part->tiiassignid = $tii->getAssignid();
        if ($individualise) {
            $tiipost->cid = turnitintool_getCID($course->id);
            $tiipost->assignid = $part->tiiassignid;
            $tiipost->currentassign = $tiipost->name;
            $tiipost->name .= ' (Moodle ' . $part->tiiassignid . ')';
            $tiipost->max_points = $turnitintool->grade < 0 ? 100 : $turnitintool->grade;
            // Now individualise the Assignment Name and allow to set the date to any date even dates in the past for new assignment part
            $proc++;
            $tii->createAssignment($tiipost, 'UPDATE', get_string('assignmentindividualise', 'turnitintool', $n));
            // PROC 3+
            if ($tii->getRerror()) {
                $reason = $tii->getAPIunavailable() ? get_string('apiunavailable', 'turnitintool') : $tii->getRmessage();
                turnitintool_print_error('<strong>' . get_string('inserterror', 'turnitintool') . '</strong><br />' . $reason);
                exit;
            }
        }
        $part->turnitintoolid = $turnitintool->id;
        $part->partname = $partname;
        $part->deleted = 0;
        if ($i >= count($partids)) {
            $part->dtstart = time();
            $part->dtdue = strtotime('+1 week');
            $part->dtpost = strtotime('+1 week');
        } else {
            $part->dtdue = $parts[$thisid]->dtdue;
            $part->dtpost = $parts[$thisid]->dtpost;
        }
        $part->dtstart = $tiipost->dtstart;
        $part->dtdue = $tiipost->dtdue;
        $part->dtpost = $tiipost->dtpost;
        $event = new stdClass();
        $event->name = $turnitintool->name . ' - ' . $part->partname;
        $event->description = $turnitintool->intro;
        $event->courseid = $turnitintool->course;
        $event->groupid = 0;
        $event->userid = 0;
        $event->modulename = 'turnitintool';
        $event->instance = $turnitintool->id;
        $event->eventtype = 'due';
        $event->timestart = $part->dtdue;
        $event->timeduration = 0;
        if ($i < count($partids)) {
            $part->id = $partids[$i];
            if (!($dbpart = turnitintool_update_record('turnitintool_parts', $part, false))) {
                turnitintool_print_error('partdberror', 'turnitintool', NULL, $i, __FILE__, __LINE__);
                exit;
            }
        } else {
            $part->maxmarks = $turnitintool->grade < 0 ? 100 : $turnitintool->grade;
            if (!($dbpart = turnitintool_insert_record('turnitintool_parts', $part, false))) {
                turnitintool_print_error('partdberror', 'turnitintool', NULL, $i, __FILE__, __LINE__);
                exit;
            }
        }
        // Delete existing events for this assignment / part
        $name = $turnitintoolnow->name . ' - ' . $part->partname;
        // $DB is not available for Moodle 1.9
        if (is_callable(array($DB, 'sql_compare_text'))) {
            $deletewhere = 'modulename = :modulename
            AND ' . $DB->sql_compare_text('instance') . ' = :id
            AND ' . $DB->sql_compare_text('name') . ' = :name';
        } else {
            $deletewhere = 'modulename = \'turnitintool\'
            AND instance = \'' . $turnitintool->id . '\'
            AND name = \'' . $name . '\'';
        }
        turnitintool_delete_records_select('event', $deletewhere, array('modulename' => 'turnitintool', 'id' => $turnitintool->id, 'name' => $name));
        if (method_exists('calendar_event', 'create')) {
            calendar_event::create($event);
        } else {
            add_event($event);
        }
        unset($tiipost);
    }
    // ]]]]
    $turnitintool->timemodified = time();
    $update = turnitintool_update_record("turnitintool", $turnitintool);
    // Define grade settings in Moodle 1.9 and above
    turnitintool_grade_item_update($turnitintool);
    $cm = get_coursemodule_from_instance("turnitintool", $turnitintool->id, $turnitintool->course);
    turnitintool_add_to_log($turnitintool->course, "update turnitintool", 'view.php?id=' . $cm->id, "Assignment updated '{$turnitintool->name}'", $cm->id);
    $tii->endSession();
    return $update;
}
Ejemplo n.º 2
0
        turnitintool_print_error('permissiondeniederror', 'turnitintool');
        exit;
    }
}
echo '<br />';
turnitintool_draw_menu($cm, $do);
if ($do == 'intro') {
    if (isset($notice['error'])) {
        turnitintool_box_start('generalbox boxwidthwide boxaligncenter error', 'errorbox');
        echo $notice['message'];
        turnitintool_box_end();
    } else {
        $notice = NULL;
    }
    // Update the GradeBook to make sure the grade stays 'hidden' until and wasn't revealed by modedit
    turnitintool_grade_item_update($turnitintool);
    echo turnitintool_duplicatewarning($cm, $turnitintool);
    echo turnitintool_introduction($cm, $turnitintool, $notice);
}
if ($do == 'submissions') {
    if (!has_capability('mod/turnitintool:grade', turnitintool_get_context('MODULE', $cm->id)) and !has_capability('mod/turnitintool:submit', turnitintool_get_context('MODULE', $cm->id))) {
        turnitintool_print_error('permissiondeniederror', 'turnitintool');
        exit;
    } else {
        echo turnitintool_view_student_submissions($cm, $turnitintool);
        if (isset($notice["error"]) && $CFG->branch < 29) {
            turnitintool_box_start('generalbox boxwidthwide boxaligncenter error', 'errorbox');
            echo $notice["error"];
            turnitintool_box_end();
        }
        echo turnitintool_view_submission_form($cm, $turnitintool);