/** * Show Tutors/Students enrolled on a particular course with Turnitin * * @global type $CFG * @global type $OUTPUT * @global type $DB * @param type $cm course module data * @param type $turnitintooltwoassignment the assignment object * @param array $members of the course in Turnitin * @return array $memberdata in a format to be shown as rows in a datatable */ public function get_tii_members_by_role($cm, $turnitintooltwoassignment, $members, $role = "Learner") { global $CFG, $DB, $OUTPUT; switch ($role) { case "Learner": $removestr = get_string('turnitinstudentsremove', 'turnitintooltwo'); $removeaction = "removestudent"; $do = "students"; break; case "Instructor": $removestr = get_string('turnitintutorsremove', 'turnitintooltwo'); $removeaction = "removetutor"; $do = "tutors"; break; } $memberdata = array(); foreach ($members as $k => $v) { $membermoodleid = turnitintooltwo_user::get_moodle_user_id($k); if ($membermoodleid > 0) { $user = $DB->get_record('user', array('id' => $membermoodleid)); $deleteurl = new moodle_url($CFG->wwwroot . "/mod/turnitintooltwo/view.php", array('id' => $cm->id, 'do' => $do, 'sesskey' => sesskey(), 'action' => $removeaction, 'membership_id' => $v['membership_id'])); $attributes["onclick"] = 'return confirm(\'' . $removestr . '\');'; $link = html_writer::link($deleteurl, html_writer::tag('i', '', array('class' => 'fa fa-trash-o fa-lg')), $attributes); $userdetails = html_writer::link($CFG->wwwroot . '/user/view.php?id=' . $membermoodleid . '&course=' . $turnitintooltwoassignment->turnitintooltwo->course, format_string($v['lastname']) . ', ' . format_string($v['firstname'])) . ' (' . $user->username . ')'; $memberdata[] = array($link, $userdetails); } } return $memberdata; }
/** * Enrol All students on a course, checks to see if all the Moodle students * are already enrolled and then enrols the students who aren't * * @param object $cm the course module * @return boolean */ public function enrol_all_students($cm) { // Get Moodle Course Object. $course = $this->get_course_data($this->turnitintooltwo->course); // Get local course members. $moodleclassmembers = $this->get_moodle_course_users($cm); // Get the user ids of who is already enrolled and remove them // from the local course members array. $tiiclassmemberships = $this->get_class_memberships($course->turnitin_cid); $turnitincomms = new turnitintooltwo_comms(); $turnitincall = $turnitincomms->initialise_api(); $membership = new TiiMembership(); $membership->setMembershipIds($tiiclassmemberships); try { $response = $turnitincall->readMemberships($membership); $readmemberships = $response->getMemberships(); foreach ($readmemberships as $readmembership) { if ($readmembership->getRole() == "Learner") { $moodleuserid = turnitintooltwo_user::get_moodle_user_id($readmembership->getUserId()); unset($moodleclassmembers[$moodleuserid]); } } } catch (Exception $e) { $turnitincomms->handle_exceptions($e, 'membercheckerror'); } // Enrol remaining unenrolled users to the course. $members = array_keys($moodleclassmembers); foreach ($members as $member) { $user = new turnitintooltwo_user($member, "Learner"); $user->join_user_to_class($course->turnitin_cid); } return true; }
/** * Save updated submission data from Turnitin to the database * * @global type $DB * @param type $tiisubmissiondata * @param type $bulk * @param type $save - save in db regardless of changes * @return type */ public function save_updated_submission_data($tiisubmissiondata, $bulk = false, $save = false) { global $DB, $CFG; static $part; static $tiiassignid; if ($tiiassignid != $tiisubmissiondata->getAssignmentId() || empty($part)) { $part = $DB->get_record("turnitintooltwo_parts", array("tiiassignid" => $tiisubmissiondata->getAssignmentId())); } $turnitintooltwoassignment = new turnitintooltwo_assignment($part->turnitintooltwoid); $sub = new stdClass(); $sub->submission_title = $tiisubmissiondata->getTitle(); $sub->submission_part = $part->id; $sub->submission_objectid = $tiisubmissiondata->getSubmissionId(); $sub->turnitintooltwoid = $turnitintooltwoassignment->turnitintooltwo->id; $sub->submission_score = is_numeric($tiisubmissiondata->getOverallSimilarity()) ? $tiisubmissiondata->getOverallSimilarity() : null; $sub->submission_transmatch = 0; if ($turnitintooltwoassignment->turnitintooltwo->transmatch == 1 && is_int($tiisubmissiondata->getTranslatedOverallSimilarity())) { if ($tiisubmissiondata->getTranslatedOverallSimilarity() > $tiisubmissiondata->getOverallSimilarity()) { $sub->submission_score = $tiisubmissiondata->getTranslatedOverallSimilarity(); $sub->submission_transmatch = 1; } } $sub->submission_grade = $tiisubmissiondata->getGrade() == '' ? null : $tiisubmissiondata->getGrade(); $sub->submission_gmimaged = $tiisubmissiondata->getFeedbackExists(); $sub->submission_unanon = $tiisubmissiondata->getAnonymous() == 1 ? 0 : 1; $sub->submission_orcapable = $tiisubmissiondata->getOriginalityReportCapable() == 1 ? 1 : 0; $sub->submission_acceptnothing = $tiisubmissiondata->getAcceptNothingSubmission() == 1 ? 1 : 0; $sub->submission_unanonreason = $sub->submission_unanon == 1 ? urldecode($tiisubmissiondata->getAnonymousRevealReason()) : null; $sub->submission_modified = strtotime($tiisubmissiondata->getDate()); $sub->translated_overall_similarity = $tiisubmissiondata->getTranslatedOverallSimilarity(); $sub->submission_attempts = $tiisubmissiondata->getAuthorLastViewedFeedback() > 0 ? strtotime($tiisubmissiondata->getAuthorLastViewedFeedback()) : 0; // If save not passed in then only update if certain items have changed to save on database load. if ($this->submission_grade != $sub->submission_grade || $this->submission_score != $sub->submission_score || $this->submission_modified != $sub->submission_modified || $this->submission_attempts != $sub->submission_attempts || $this->submission_unanon != $sub->submission_unanon || $this->submission_part != $sub->submission_part) { $save = true; } $cm = get_coursemodule_from_instance("turnitintooltwo", $turnitintooltwoassignment->turnitintooltwo->id, $turnitintooltwoassignment->turnitintooltwo->course); if ($save) { // If the user is not a moodle user then get their name from Tii - only do this on initial save. $sub->userid = turnitintooltwo_user::get_moodle_user_id($tiisubmissiondata->getAuthorUserId()); // If we have no user ID get it from the Moodle database by using their Turnitin e-mail address. if ($sub->userid == 0) { $tmpuser = new turnitintooltwo_user(0); $tmpuser->tii_user_id = $tiisubmissiondata->getAuthorUserId(); $tiiuser = $tmpuser->set_user_values_from_tii(); if ($userrecord = $DB->get_record('user', array('email' => $tiiuser["email"]))) { $sub->userid = $userrecord->id; } } // Check if the user is enrolled. if ($sub->userid != 0) { $context = context_module::instance($cm->id); if (!is_enrolled($context, $sub->userid)) { // Enroll the user as a student. $enrol = enrol_get_plugin('manual'); $instance = $DB->get_record("enrol", array('courseid' => $cm->course, 'enrol' => 'manual')); $enrol->enrol_user($instance, $sub->userid, 5); } } if ($sub->userid == 0 && empty($this->id)) { if ($tiisubmissiondata->getAuthorUserId() > 0) { $sub->submission_nmuserid = $tiisubmissiondata->getAuthorUserId(); $tmpuser = new turnitintooltwo_user(0); $tmpuser->tii_user_id = $tiisubmissiondata->getAuthorUserId(); $tiiuser = $tmpuser->set_user_values_from_tii(); $sub->submission_nmfirstname = $tiiuser["firstname"]; $sub->submission_nmlastname = $tiiuser["lastname"]; } else { $sub->submission_nmuserid = "nm-" . $tiisubmissiondata->getAuthorUserId(); $sub->submission_nmfirstname = ''; $sub->submission_nmlastname = get_string('nonmoodleuser', 'turnitintooltwo'); } } if (!empty($this->id)) { $sub->id = $this->id; $DB->update_record("turnitintooltwo_submissions", $sub, $bulk); } else { $sub->id = $DB->insert_record("turnitintooltwo_submissions", $sub, true, $bulk); } // Update gradebook. @(include_once $CFG->libdir . "/gradelib.php"); if ($sub->userid > 0 && $sub->submission_unanon) { $user = new turnitintooltwo_user($sub->userid, "Learner"); $grades = new stdClass(); // Only add to gradebook if author has been unanonymised or assignment doesn't have anonymous marking if ($submissions = $DB->get_records('turnitintooltwo_submissions', array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id, 'userid' => $user->id, 'submission_unanon' => 1))) { $overallgrade = $turnitintooltwoassignment->get_overall_grade($submissions); if ($turnitintooltwoassignment->turnitintooltwo->grade < 0) { // Using a scale. $grades->rawgrade = $overallgrade == '--' ? null : $overallgrade; } else { $grades->rawgrade = $overallgrade == '--' ? null : number_format($overallgrade, 2); } } $grades->userid = $user->id; $params['idnumber'] = $cm->idnumber; grade_update('mod/turnitintooltwo', $turnitintooltwoassignment->turnitintooltwo->course, 'mod', 'turnitintooltwo', $turnitintooltwoassignment->turnitintooltwo->id, 0, $grades, $params); } } }