public function execute() { global $CFG, $DB; require_once $CFG->dirroot . "/mod/turnitintooltwo/lib.php"; require_once $CFG->dirroot . "/mod/turnitintooltwo/turnitintooltwo_view.class.php"; $data = (array) $this->get_custom_data(); // Make sure we are still wanted. $submission = $DB->get_record('turnitintooltwo_submissions', array('id' => $data['submissionid'])); if (!$submission) { return true; } cli_writeln("Processing Turnitintooltwo submission: " . $data['submissionid']); $user = $DB->get_record('user', array('id' => $data['userid'])); \core\session\manager::set_user($user); $turnitintooltwo = $DB->get_record('turnitintooltwo', array('id' => $data['tiiid'])); list($course, $cm) = get_course_and_cm_from_instance($turnitintooltwo, 'turnitintooltwo'); try { $turnitintooltwoassignment = new \turnitintooltwo_assignment($turnitintooltwo->id, $turnitintooltwo); $turnitintooltwosubmission = new \turnitintooltwo_submission($data['submissionid'], "moodle", $turnitintooltwoassignment); $parts = $turnitintooltwoassignment->get_parts(); $tiisubmission = $turnitintooltwosubmission->do_tii_submission($cm, $turnitintooltwoassignment); // Update submission. $DB->update_record('turnitintooltwo_submissions', array('id' => $data['submissionid'], 'submission_modified' => $data['subtime'])); } catch (\Exception $e) { $tiisubmission = array('success' => false, 'message' => $e->getMessage()); cli_writeln($e->getMessage()); } $digitalreceipt = $tiisubmission; $digitalreceipt['is_manual'] = 0; $digitalreceipt = json_encode($digitalreceipt); $this->update_sub_status($data['submissionid'], $tiisubmission['success'], $digitalreceipt); if ($tiisubmission['success'] === true) { $lockedassignment = new \stdClass(); $lockedassignment->id = $turnitintooltwoassignment->turnitintooltwo->id; $lockedassignment->submitted = 1; $DB->update_record('turnitintooltwo', $lockedassignment); $lockedpart = new \stdClass(); $lockedpart->id = $data['submissionpart']; $lockedpart->submitted = 1; // Disable anonymous marking if post date has passed. if ($parts[$data['submissionpart']]->dtpost <= time()) { $lockedpart->unanon = 1; } $DB->update_record('turnitintooltwo_parts', $lockedpart); cli_writeln("Finished processing successful submission: " . $data['submissionid']); } else { turnitintooltwo_add_to_log($course->id, "errored submission", 'view.php?id=' . $cm->id, "Failed to submit '" . $turnitintooltwosubmission->submission_title . "'", $cm->id, $user->id, array('submissionid' => $data['submissionid'])); cli_writeln("Finished processing unsuccessful submission: " . $data['submissionid']); } \core\session\manager::set_user(get_admin()); return $tiisubmission['success']; }
$user = new turnitintooltwo_user($USER->id, $userrole); $coursedata = $turnitintooltwoassignment->get_course_data($turnitintooltwoassignment->turnitintooltwo->course); $user->join_user_to_class($coursedata->turnitin_cid); $eulaaccepted = $user->user_agreement_accepted != 1 ? $user->get_accepted_user_agreement() : $user->user_agreement_accepted; // Check if the submitting user has accepted the EULA if ($eulaaccepted != 1) { // Moodle strips out form and script code for forum posts so we have to do the Eula Launch differently. $ula_link = html_writer::link($CFG->wwwroot . '/mod/turnitintooltwo/extras.php?cmid=' . $cm->id . '&cmd=useragreement&view_context=box_solid', html_writer::tag('i', '', array('class' => 'tiiicon icon-warn icon-2x turnitin_ula_warn')) . '</br></br>' . get_string('turnitinula', 'turnitintooltwo') . " " . get_string('turnitinula_btn', 'turnitintooltwo'), array("class" => "turnitin_eula_link")); $eulaignoredclass = $eulaaccepted == 0 ? ' turnitin_ula_ignored' : ''; $ula = html_writer::tag('div', $ula_link, array('class' => 'turnitin_ula js_required' . $eulaignoredclass, 'data-userid' => $user->id)); $noscriptula = html_writer::tag('noscript', turnitintooltwo_view::output_dv_launch_form("useragreement", 0, $user->tii_user_id, "Learner", get_string('turnitinula', 'turnitintooltwo'), false) . " " . get_string('noscriptula', 'turnitintooltwo'), array('class' => 'warning turnitin_ula_noscript')); echo $ula . $noscriptula; } } $listsubmissionsdesc = $istutor ? "listsubmissionsdesc" : "listsubmissionsdesc_student"; turnitintooltwo_add_to_log($turnitintooltwoassignment->turnitintooltwo->course, "list submissions", 'view.php?id=' . $cm->id, get_string($listsubmissionsdesc, 'turnitintooltwo') . ": {$course->id}", $cm->id); if (!$istutor && !has_capability('mod/turnitintooltwo:submit', context_module::instance($cm->id))) { turnitintooltwo_print_error('permissiondeniederror', 'turnitintooltwo'); exit; } $turnitintooltwouser = new turnitintooltwo_user($USER->id, $userrole); // Get course data. if ($istutor) { $course = $turnitintooltwoassignment->get_course_data($turnitintooltwoassignment->turnitintooltwo->course); } // Update Assignment from Turnitin on first visit. if (empty($_SESSION["assignment_updated"][$turnitintooltwoassignment->turnitintooltwo->id])) { $turnitintooltwoassignment->update_assignment_from_tii(); // Enrol the tutor on the class. if ($istutor) { $turnitintooltwouser->join_user_to_class($course->turnitin_cid);
/** * Make submission to Turnitin * * @global type $DB * @param object $cm the course module object * @return string $message to display to user */ public function do_tii_submission($cm, $turnitintooltwoassignment) { global $DB, $USER, $CFG; $config = turnitintooltwo_admin_config(); $notice = array("success" => false); $context = context_module::instance($cm->id); // Check if user is a member of class, if not then join them to it. $course = $turnitintooltwoassignment->get_course_data($turnitintooltwoassignment->turnitintooltwo->course); $user = new turnitintooltwo_user($this->userid, 'Learner'); $user->join_user_to_class($course->turnitin_cid); $user->edit_tii_user(); // Get the stored file and read it into a temp file for submitting to Turnitin. $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_turnitintooltwo', 'submissions', $this->id, "timecreated", false); $tempfile = ""; foreach ($files as $file) { $filename = array($this->submission_title, $cm->id); if (!$turnitintooltwoassignment->turnitintooltwo->anon && empty($config->enablepseudo)) { $user_details = array($this->userid, $user->firstname, $user->lastname); $filename = array_merge($user_details, $filename); } $suffix = $file->get_filename(); $tempfile = turnitintooltwo_tempfile($filename, $suffix); $fh = fopen($tempfile, "w"); fwrite($fh, $file->get_content()); fclose($fh); } if (!empty($tempfile)) { $part = $turnitintooltwoassignment->get_part_details($this->submission_part); // Initialise Comms Object. $turnitincomms = new turnitintooltwo_comms(); $turnitincall = $turnitincomms->initialise_api(); // Create Submission object to send to Turnitin. $newsubmission = new TiiSubmission(); $newsubmission->setAssignmentId($part->tiiassignid); if (!is_null($this->submission_objectid)) { $newsubmission->setSubmissionId($this->submission_objectid); $apimethod = "replaceSubmission"; } else { $apimethod = "createSubmission"; } $newsubmission->setTitle($this->submission_title); $newsubmission->setAuthorUserId($user->tii_user_id); if ($user->id == $USER->id) { $newsubmission->setSubmitterUserId($user->tii_user_id); $newsubmission->setRole('Learner'); } else { $instructor = new turnitintooltwo_user($USER->id, 'Instructor'); $instructor->edit_tii_user(); $newsubmission->setSubmitterUserId($instructor->tii_user_id); $newsubmission->setRole('Instructor'); } $newsubmission->setSubmissionDataPath($tempfile); try { $response = $turnitincall->{$apimethod}($newsubmission); $newsubmission = $response->getSubmission(); // Save the submission. $submission = new stdClass(); $submission->id = $this->id; $submission->userid = $this->userid; $submission->turnitintooltwoid = $this->turnitintooltwoid; $submission->submission_part = $this->submission_part; $submission->submission_title = $this->submission_title; $submission->submission_type = $this->submission_type; $submission->submission_filename = $this->submission_filename; $submission->submission_objectid = $newsubmission->getSubmissionId(); $submission->submission_score = $this->submission_score; $submission->submission_grade = $this->submission_grade; $submission->submission_gmimaged = $this->submission_gmimaged; $submission->submission_status = $this->submission_status; $submission->submission_queued = $this->submission_queued; $submission->submission_attempts = $this->submission_attempts; $submission->submission_modified = time(); $submission->submission_nmuserid = $this->submission_nmuserid; $submission->submission_nmfirstname = $this->submission_nmfirstname; $submission->submission_nmlastname = $this->submission_nmlastname; $submission->submission_unanon = $this->submission_unanon; $submission->submission_unanonreason = $this->submission_unanonreason; $submission->submission_transmatch = $this->submission_transmatch; $submission->submission_acceptnothing = 0; $DB->update_record('turnitintooltwo_submissions', $submission); // Delete the tempfile. if (!is_null($tempfile)) { unlink($tempfile); } $notice["success"] = true; $notice["message"] = get_string('submissionuploadsuccess', 'turnitintooltwo'); $notice["extract"] = $newsubmission->getTextExtract(); $notice["tii_submission_id"] = $submission->submission_objectid; //Send a message to the user's Moodle inbox with the digital receipt. $input = array('firstname' => $user->firstname, 'lastname' => $user->lastname, 'submission_title' => $this->submission_title, 'assignment_name' => $turnitintooltwoassignment->turnitintooltwo->name, 'assignment_part' => $partdetails = $turnitintooltwoassignment->get_part_details($this->submission_part)->partname, 'course_fullname' => $course->fullname, 'submission_date' => date('d-M-Y h:iA'), 'submission_id' => $submission->submission_objectid); // Student digital receipt $message = $this->receipt->build_message($input); $this->receipt->send_message($this->userid, $message); // Instructor digital receipt $this->submission_instructors = get_enrolled_users($context, 'mod/turnitintooltwo:grade', 0, 'u.id'); if (!empty($this->submission_instructors)) { $message = $this->instructor_receipt->build_instructor_message($input); $this->instructor_receipt->send_instructor_message($this->submission_instructors, $message); } // Create a log entry for submission going to Turnitin. $logstring = $apimethod == "replaceSubmission" ? 'addresubmissiontiidesc' : 'addsubmissiontiidesc'; turnitintooltwo_add_to_log($turnitintooltwoassignment->turnitintooltwo->course, "add submission", 'view.php?id=' . $cm->id, get_string($logstring, 'turnitintooltwo') . " '" . $this->submission_title . "'", $cm->id, $user->id); // Add to activity log. turnitintooltwo_activitylog("Action: Submission | Id: " . $this->turnitintooltwoid . " | Part: " . $submission->submission_part . " | User ID: " . $user->id . " (" . $user->tii_user_id . ") Submission title: " . $submission->submission_title, "REQUEST"); } catch (Exception $e) { $errorstring = !is_null($this->submission_objectid) ? "updatesubmissionerror" : "createsubmissionerror"; $error = $turnitincomms->handle_exceptions($e, $errorstring, false, true); $notice["message"] = $error; $notice["success"] = false; } } else { $notice["success"] = false; $notice["message"] = get_string('emptycreatedfile', 'turnitintooltwo'); } return $notice; }