/** * Update assignment from Turnitin * * @global type $DB * @param array $assignmentids array of assignment ids, if 0 then array is created inside * @return object */ public function update_assignment_from_tii($assignmentids = 0) { global $DB; // Initialise Comms Object. $turnitincomms = new turnitintooltwo_comms(); $turnitincall = $turnitincomms->initialise_api(); if (!$assignmentids) { $parts = $this->get_parts(); $assignments = array(); foreach ($parts as $part) { $assignments[] = $part->tiiassignid; $partids[$part->tiiassignid] = $part->id; } } else { $assignments = $assignmentids; } $assignment = new TiiAssignment(); try { if (count($assignments) == 1) { $assignment->setAssignmentId(current($assignments)); $response = $turnitincall->readAssignment($assignment); $readassignments[0] = $response->getAssignment(); } else { $assignment->setAssignmentIds($assignments); $response = $turnitincall->readAssignments($assignment); $readassignments = $response->getAssignments(); } $assignmentdetails = ""; $newparts = array(); foreach ($readassignments as $readassignment) { $part = new stdClass(); $part->dtstart = strtotime($readassignment->getStartDate()); $part->dtdue = strtotime($readassignment->getDueDate()); $part->dtpost = strtotime($readassignment->getFeedbackReleaseDate()); $part->maxmarks = $readassignment->getMaxGrade(); $part->tiiassignid = $readassignment->getAssignmentId(); if ($assignmentids == 0) { $part->id = $partids[$readassignment->getAssignmentId()]; if (!($dbpart = $DB->update_record('turnitintooltwo_parts', $part))) { turnitintooltwo_activitylog(get_string('turnitintooltwoupdateerror', 'turnitintooltwo') . ' - ID: ' . $this->turnitintooltwo->id . ' - Part: ' . $part->id, 'API_ERROR'); } } else { $part->partname = $readassignment->getTitle(); $newparts[] = $part; } // Update main turnitintooltwo details but only once. if (empty($assignmentdetails)) { $assignmentdetails = new stdClass(); if ($assignmentids == 0) { $assignmentdetails->id = $this->turnitintooltwo->id; } else { $assignmentdetails->timecreated = time(); $assignmentdetails->dateformat = "d/m/Y"; $assignmentdetails->autoupdates = 1; $assignmentdetails->commentedittime = 1800; $assignmentdetails->commentmaxsize = 800; $assignmentdetails->autosubmission = 1; $assignmentdetails->timemodified = time(); $assignmentdetails->intro = $readassignment->getInstructions(); } $assignmentdetails->allowlate = $readassignment->getLateSubmissionsAllowed(); $assignmentdetails->reportgenspeed = $readassignment->getResubmissionRule(); $assignmentdetails->submitpapersto = $readassignment->getSubmitPapersTo(); $assignmentdetails->spapercheck = $readassignment->getSubmittedDocumentsCheck(); $assignmentdetails->internetcheck = $readassignment->getInternetCheck(); $assignmentdetails->journalcheck = $readassignment->getPublicationsCheck(); $assignmentdetails->studentreports = $readassignment->getAuthorOriginalityAccess(); $assignmentdetails->rubric = $readassignment->getRubricId(); $assignmentdetails->excludebiblio = $readassignment->getBibliographyExcluded(); $assignmentdetails->excludequoted = $readassignment->getQuotedExcluded(); $assignmentdetails->excludetype = $readassignment->getSmallMatchExclusionType(); $assignmentdetails->excludevalue = $readassignment->getSmallMatchExclusionThreshold(); $assignmentdetails->erater = $readassignment->getErater(); $assignmentdetails->erater_handbook = $readassignment->getEraterHandbook(); $assignmentdetails->erater_dictionary = $readassignment->getEraterSpellingDictionary(); $assignmentdetails->erater_spelling = (int) $readassignment->getEraterSpelling(); $assignmentdetails->erater_grammar = (int) $readassignment->getEraterGrammar(); $assignmentdetails->erater_usage = (int) $readassignment->getEraterUsage(); $assignmentdetails->erater_mechanics = (int) $readassignment->getEraterMechanics(); $assignmentdetails->erater_style = (int) $readassignment->getEraterStyle(); $assignmentdetails->transmatch = (int) $readassignment->getTranslatedMatching(); $assignmentdetails->allownonor = (int) $readassignment->getAllowNonOrSubmissions(); } // Get Peermark Assignments. $peermarkassignments = $readassignment->getPeermarkAssignments(); if (count($peermarkassignments)) { $peermarkids = array(); foreach ($peermarkassignments as $peermarkassignment) { $peermark = new stdClass(); $peermark->tiiassignid = $peermarkassignment->getAssignmentId(); $peermark->parent_tii_assign_id = $part->tiiassignid; $peermark->dtstart = strtotime($peermarkassignment->getStartDate()); $peermark->dtdue = strtotime($peermarkassignment->getDueDate()); $peermark->dtpost = strtotime($peermarkassignment->getFeedbackReleaseDate()); $peermark->maxmarks = (int) $peermarkassignment->getMaxGrade(); $peermark->title = $peermarkassignment->getTitle(); $peermark->instructions = $peermarkassignment->getInstructions(); $peermark->distributed_reviews = (int) $peermarkassignment->getDistributedReviews(); $peermark->selected_reviews = (int) $peermarkassignment->getSelectedReviews(); $peermark->self_review = (int) $peermarkassignment->getSelfReviewRequired(); $peermark->non_submitters_review = (int) $peermarkassignment->getNonSubmittersToReview(); $currentpeermark = $DB->get_record('turnitintooltwo_peermarks', array('tiiassignid' => $peermark->tiiassignid)); if ($currentpeermark) { $peermark->id = $currentpeermark->id; $DB->update_record('turnitintooltwo_peermarks', $peermark); } else { $peermark->id = $DB->insert_record('turnitintooltwo_peermarks', $peermark); } $peermarkids[] = $peermark->id; } list($notinsql, $notinparams) = $DB->get_in_or_equal($peermarkids, SQL_PARAMS_QM, 'param', false); $DB->delete_records_select('turnitintooltwo_peermarks', " parent_tii_assign_id = ? AND id " . $notinsql, array_merge(array($part->tiiassignid), $notinparams)); } else { $DB->delete_records('turnitintooltwo_peermarks', array('parent_tii_assign_id' => $part->tiiassignid)); } } if ($assignmentids == 0) { if (!($update = $DB->update_record('turnitintooltwo', $assignmentdetails))) { turnitintooltwo_activitylog(get_string('turnitintooltwoupdateerror', 'turnitintooltwo') . ' - ID: ' . $this->turnitintooltwo->id, 'API_ERROR'); } $_SESSION["assignment_updated"][$this->turnitintooltwo->id] = time(); } else { return array("turnitintooltwo" => $assignmentdetails, "parts" => $newparts); } } catch (Exception $e) { // We will use the locally stored assignment data if we can't connect to Turnitin. $turnitincomms->handle_exceptions($e, 'tiiassignmentgeterror', false); } }
/** * Get a class Id from Turnitin if you only have an assignment id. */ private function get_course_id_from_assignment_id($assignmentid) { // Initialise Comms Object. $turnitincomms = new turnitin_comms(); $turnitincall = $turnitincomms->initialise_api(); try { $assignment = new TiiAssignment(); $assignment->setAssignmentId($assignmentid); $response = $turnitincall->readAssignment($assignment); $readassignment = $response->getAssignment(); return $readassignment->getClassId(); } catch (Exception $e) { $turnitincomms->handle_exceptions($e, 'assigngeterror', false); } }
/** * Gets the assignments from a specified course from Turnitin * * @param int $courseid the id of the course/class in Turnitin * @param str $returnformat the format we are returning data in * @return array of data in a datatables readable format */ function turnitintooltwo_get_assignments_from_tii($courseid, $returnformat = "json") { global $DB; $return = array(); if ($returnformat == "json") { $return["aaData"] = array(); } $turnitincomms = new turnitintooltwo_comms(); $turnitincall = $turnitincomms->initialise_api(); $assignment = new TiiAssignment(); $assignment->setClassId($courseid); $assignmentids = array(); try { $response = $turnitincall->findAssignments($assignment); $findassignment = $response->getAssignment(); $assignmentids = $findassignment->getAssignmentIds(); } catch (Exception $e) { $turnitincomms->handle_exceptions($e, 'getassignmenterror', false); } $assignment = new TiiAssignment(); $assignment->setAssignmentIds($assignmentids); $currentassignments = array(); if (count($assignmentids) > 0) { list($insql, $inparams) = $DB->get_in_or_equal($assignmentids); $currentassignments['TT'] = $DB->get_records_select("turnitintooltwo_parts", " tiiassignid " . $insql, $inparams, '', 'tiiassignid'); $dbman = $DB->get_manager(); if ($dbman->table_exists('plagiarism_turnitin_config')) { $currentassignments['PP'] = $DB->get_records_select("plagiarism_turnitin_config", " name = 'turnitin_assignid' " . " AND value " . $insql, $inparams, '', 'value'); } else { $currentassignments['PP'] = array(); } } try { $response = $turnitincall->readAssignments($assignment); $readassignments = $response->getAssignments(); foreach ($readassignments as $readassignment) { if (empty($currentassignments['TT'][$readassignment->getAssignmentId()]) && empty($currentassignments['PP'][$readassignment->getAssignmentId()])) { $checkbox = html_writer::checkbox('assignmentids[]', $readassignment->getAssignmentId(), false, '', array("id" => "assignmentid_" . $readassignment->getAssignmentId(), "disabled" => "disabled", "class" => "assignmentids_check")); if ($returnformat == "json") { $return["aaData"][] = array($checkbox, $readassignment->getTitle(), $readassignment->getMaxGrade(), $readassignment->getAssignmentId()); } else { $return[$readassignment->getAssignmentId()] = array("tii_id" => $readassignment->getAssignmentId(), "tii_title" => $readassignment->getTitle()); } } else { // Double check that migration has completed for this assignment. // If not then there has been an error so we delete the previously migrated assignment attempt. if ($part = $DB->get_record('turnitintooltwo_parts', array('tiiassignid' => $readassignment->getAssignmentId(), 'migrated' => -1))) { $DB->delete_records('turnitintooltwo_parts', array('tiiassignid' => $readassignment->getAssignmentId(), 'migrated' => -1)); turnitintooltwo_activitylog("Deleted failed migration assignment part - id (" . $readassignment->getAssignmentId() . ")", "REQUEST"); // Remove the Turnitintool if it contains no other parts. if ($DB->count_records('turnitintooltwo_parts', array('turnitintooltwoid' => $part->turnitintooltwoid)) == 0) { $DB->delete_records("turnitintooltwo", array("id" => $part->turnitintooltwoid)); turnitintooltwo_activitylog("Deleted tool instance - id (" . $part->turnitintooltwoid . ")", "REQUEST"); } } } } } catch (Exception $e) { turnitintooltwo_activitylog(get_string('migrationassignmentgeterror', 'turnitintooltwo') . ' - Class: ' . $courseid, "REQUEST"); } return $return; }
public function findAssignments($assignment) { try { $soap = $this->readLineItemIdsForCourseSection(array('sectionSourcedId' => $assignment->getClassId())); $response = new Response($this); if ($response->getStatus() == 'error') { throw new TurnitinSDKException($response->getStatusCode(), $response->getDescription()); } else { $tiiAssignment = new TiiAssignment(); $assignmentids = array(); if (isset($soap->sourcedIdSet->sourcedId)) { if (!is_array($soap->sourcedIdSet->sourcedId)) { $soap->sourcedIdSet->sourcedId = array($soap->sourcedIdSet->sourcedId); } foreach ($soap->sourcedIdSet->sourcedId as $id) { $assignmentids[] = $id; } } $tiiAssignment->setAssignmentIds($assignmentids); $response->setAssignment($tiiAssignment); } return $response; } catch (SoapFault $e) { throw new TurnitinSDKException($e->faultcode, $e->faultstring, parent::getLogPath()); } }