public function readAssignments($assignment) { try { $soap = $this->readLineItems(array('sourcedIdSet' => array('sourcedId' => $assignment->getAssignmentIds()))); $response = new Response($this); if ($response->getStatus() == 'error') { throw new TurnitinSDKException($response->getStatusCode(), $response->getDescription()); } else { $assignments = array(); if (isset($soap->lineItemRecordSet->lineItemRecord)) { if (!is_array($soap->lineItemRecordSet->lineItemRecord)) { $soap->lineItemRecordSet->lineItemRecord = array($soap->lineItemRecordSet->lineItemRecord); } foreach ($soap->lineItemRecordSet->lineItemRecord as $lineitem) { $tiiAssignment = new TiiAssignment(); $tiiAssignment->setAssignmentId($lineitem->sourcedGUID->sourcedId); $tiiAssignment->setTitle($lineitem->lineItem->label); $tiiAssignment->setClassId($lineitem->lineItem->context->contextIdentifier); foreach ($lineitem->lineItem->extension->extensionField as $field) { $name = $field->fieldName; $method = 'set' . $name; $value = $name == 'PeermarkAssignments' ? $this->peermarkJSONToObject($field->fieldValue) : $field->fieldValue; if (is_callable(array($tiiAssignment, $method))) { $tiiAssignment->{$method}($value); } } $assignments[] = $tiiAssignment; } } $response->setAssignments($assignments); } return $response; } catch (SoapFault $e) { throw new TurnitinSDKException($e->faultcode, $e->faultstring, parent::getLogPath()); } }
/** * 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); } }