/** * 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; }