/**
  * 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);
     }
 }
Exemplo n.º 3
0
/**
 * 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());
     }
 }