コード例 #1
0
 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'];
 }
コード例 #2
0
if (in_array($do, $forbiddenmsgscreens)) {
    $PAGE->set_popup_notification_allowed(false);
}
// Configure URL correctly.
$urlparams = array('id' => $id, 'a' => $a, 'part' => $part, 'user' => $user, 'do' => $do, 'action' => $action, 'view_context' => $viewcontext);
$url = new moodle_url('/mod/turnitintooltwo/view.php', $urlparams);
// Load Javascript and CSS.
$turnitintooltwoview->load_page_components();
$turnitintooltwoassignment = new turnitintooltwo_assignment($turnitintooltwo->id, $turnitintooltwo);
// Define file upload options.
$maxbytessite = $CFG->maxbytes == 0 || $CFG->maxbytes > TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE ? TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE : $CFG->maxbytes;
$maxbytescourse = $COURSE->maxbytes == 0 || $COURSE->maxbytes > TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE ? TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE : $COURSE->maxbytes;
$maxfilesize = get_user_max_upload_file_size(context_module::instance($cm->id), $maxbytessite, $maxbytescourse, $turnitintooltwoassignment->turnitintooltwo->maxfilesize);
$maxfilesize = $maxfilesize <= 0 ? TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE : $maxfilesize;
$turnitintooltwofileuploadoptions = array('maxbytes' => $maxfilesize, 'subdirs' => false, 'maxfiles' => 1, 'accepted_types' => '*');
if (!($parts = $turnitintooltwoassignment->get_parts())) {
    turnitintooltwo_print_error('partgeterror', 'turnitintooltwo', null, null, __FILE__, __LINE__);
}
// Get whether user is a tutor/student.
$istutor = has_capability('mod/turnitintooltwo:grade', context_module::instance($cm->id));
$userrole = $istutor ? 'Instructor' : 'Learner';
// Deal with actions here.
if (!empty($action)) {
    turnitintooltwo_activitylog("Action: " . $action . " | Id: " . $turnitintooltwo->id . " | Part: " . $part, "REQUEST");
    switch ($action) {
        case "delpart":
            if (!confirm_sesskey()) {
                throw new moodle_exception('invalidsesskey', 'error');
            }
            if ($turnitintooltwoassignment->delete_moodle_assignment_part($turnitintooltwoassignment->turnitintooltwo->id, $part)) {
                $_SESSION["notice"]['message'] = get_string('partdeleted', 'turnitintooltwo');
コード例 #3
0
 /**
  * Return a table containing all the assignments in the relevant course
  *
  * @global type $CFG
  * @global type $OUTPUT
  * @param obj $course the moodle course data
  * @return output
  */
 public function show_assignments($course)
 {
     global $CFG, $OUTPUT, $USER;
     $turnitintooltwos = turnitintooltwo_assignment::get_all_assignments_in_course($course);
     $table = new html_table();
     $table->id = "dataTable";
     $rows = array();
     // Do the table headers.
     $cells = array();
     if ($course->format == "weeks") {
         $cells["weeks"] = new html_table_cell(get_string("week"));
     } else {
         if ($course->format == "topics") {
             $cells["topics"] = new html_table_cell(get_string("topic"));
         }
     }
     $cells["name"] = new html_table_cell(get_string("name"));
     $cells["start_date"] = new html_table_cell(get_string("dtstart", "turnitintooltwo"));
     $cells["number_of_parts"] = new html_table_cell(get_string("numberofparts", "turnitintooltwo"));
     $cells["submissions"] = new html_table_cell(get_string("submissions", "turnitintooltwo"));
     $table->head = $cells;
     $i = 1;
     foreach ($turnitintooltwos as $turnitintooltwo) {
         $cm = get_coursemodule_from_id('turnitintooltwo', $turnitintooltwo->coursemodule, $course->id);
         $turnitintooltwoassignment = new turnitintooltwo_assignment($turnitintooltwo->id, $turnitintooltwo);
         if ($course->format == "weeks" || $course->format == "topics") {
             $cells[$course->format] = new html_table_cell($turnitintooltwoassignment->turnitintooltwo->section);
             $cells[$course->format]->attributes["class"] = "centered_cell";
         }
         // Show links dimmed if the mod is hidden.
         $attributes["class"] = !$turnitintooltwo->visible ? 'dimmed' : '';
         $linkurl = $CFG->wwwroot . '/mod/turnitintooltwo/view.php?id=' . $turnitintooltwoassignment->turnitintooltwo->coursemodule . '&do=submissions';
         $cells["name"] = new html_table_cell(html_writer::link($linkurl, $turnitintooltwo->name, $attributes));
         $cells["start_date"] = new html_table_cell(userdate($turnitintooltwoassignment->get_start_date(), get_string('strftimedatetimeshort', 'langconfig')));
         $cells["start_date"]->attributes["class"] = "centered_cell";
         $cells["number_of_parts"] = new html_table_cell(count($turnitintooltwoassignment->get_parts()));
         $cells["number_of_parts"]->attributes["class"] = "centered_cell";
         if (has_capability('mod/turnitintooltwo:grade', context_module::instance($cm->id))) {
             $noofsubmissions = $turnitintooltwoassignment->count_submissions($cm, 0);
         } else {
             $noofsubmissions = count($turnitintooltwoassignment->get_user_submissions($USER->id, $turnitintooltwoassignment->turnitintooltwo->id));
         }
         $cells["submissions"] = new html_table_cell(html_writer::link($linkurl, $noofsubmissions, $attributes));
         $cells["submissions"]->attributes["class"] = "centered_cell";
         $rows[$i] = new html_table_row($cells);
         $i++;
     }
     $table->data = $rows;
     return $OUTPUT->box(html_writer::table($table), 'generalbox boxaligncenter');
 }
 /**
  * Get full submission details and work out overall grade
  *
  * @global type $DB
  * @param type $turnitintooltwoassignment
  * @param type $submission_id
  * @param type $id_type
  * @return type
  */
 private function get_submission_details($idtype = "moodle", $turnitintooltwoassignment = "")
 {
     global $DB;
     if ($idtype == "moodle") {
         $condition = array("id" => $this->id);
     } else {
         $condition = array("submission_objectid" => $this->submission_objectid);
     }
     if ($submission = $DB->get_record('turnitintooltwo_submissions', $condition, '*', IGNORE_MULTIPLE)) {
         if (empty($turnitintooltwoassignment)) {
             $turnitintooltwoassignment = new turnitintooltwo_assignment($submission->turnitintooltwoid);
             $this->turnitintooltwoid = $turnitintooltwoassignment->turnitintooltwo->id;
         }
         if (count($turnitintooltwoassignment->get_parts() > 1)) {
             if ($submission->userid != 0) {
                 $usersubmissions = $turnitintooltwoassignment->get_user_submissions($submission->userid, $submission->turnitintooltwoid);
                 $useroverallgrade = $turnitintooltwoassignment->get_overall_grade($usersubmissions);
                 if ($turnitintooltwoassignment->turnitintooltwo->grade == 0 or $useroverallgrade === '--') {
                     $this->overall_grade = '--';
                 } else {
                     if ($turnitintooltwoassignment->turnitintooltwo->grade < 0) {
                         // Scale.
                         $scale = $DB->get_record('scale', array('id' => $turnitintooltwoassignment->turnitintooltwo->grade * -1));
                         $scalearray = explode(",", $scale->scale);
                         // Array is zero indexed, Scale positions are from 1 upward.
                         $index = $useroverallgrade - 1;
                         $this->overall_grade = $scalearray[$index];
                     } else {
                         $this->overall_grade = round($useroverallgrade / $turnitintooltwoassignment->turnitintooltwo->grade * 100, 1) . '%';
                     }
                 }
             } else {
                 $this->overall_grade = '--';
             }
         }
         foreach ($submission as $field => $value) {
             $this->{$field} = $value;
         }
         if ($submission->userid > 0) {
             $user = $DB->get_record('user', array('id' => $submission->userid), 'firstname, lastname');
             $this->firstname = $user->firstname;
             $this->lastname = $user->lastname;
             $this->fullname = fullname($user);
             $this->nmoodle = 0;
         } else {
             $this->firstname = $submission->submission_nmfirstname;
             $this->lastname = $submission->submission_nmlastname;
             $tmpuser = new stdClass();
             $tmpuser->firstname = $submission->submission_nmfirstname;
             $tmpuser->lastname = $submission->submission_nmlastname;
             $this->fullname = fullname($tmpuser);
             $this->nmoodle = 1;
         }
     } else {
         if ($idtype == "moodle") {
             turnitintooltwo_print_error('submissiongeterror', 'turnitintooltwo', null, null, __FILE__, __LINE__);
         }
     }
 }
コード例 #5
0
ファイル: lib.php プロジェクト: aolley/MoodleDirectV2
/**
 * This is a standard Moodle module that prints out a summary of all activities of this kind in the My Moodle page for a user
 *
 * @param object $courses
 * @param object $htmlarray
 * @global type $USER
 * @global type $CFG
 * @global type $DB
 * @global type $OUTPUT
 * @return bool success
 */
function turnitintooltwo_print_overview($courses, &$htmlarray)
{
    global $USER, $CFG, $DB, $OUTPUT;
    if (empty($courses) || !is_array($courses) || count($courses) == 0) {
        return array();
    }
    if (!($turnitintooltwos = get_all_instances_in_courses('turnitintooltwo', $courses))) {
        return;
    }
    $submissioncount = array();
    foreach ($turnitintooltwos as $key => $turnitintooltwo) {
        $turnitintooltwoassignment = new turnitintooltwo_assignment($turnitintooltwo->id, $turnitintooltwo);
        $parts = $turnitintooltwoassignment->get_parts(false);
        $cm = get_coursemodule_from_id('turnitintooltwo', $turnitintooltwo->coursemodule);
        $context = context_module::instance($cm->id);
        $partsarray = array();
        $grader = has_capability('mod/turnitintooltwo:grade', $context);
        if ($grader) {
            $allusers = get_users_by_capability($context, 'mod/turnitintooltwo:submit', 'u.id', '', '', '', 0, '', false);
            $submissionsquery = $DB->get_records_select('turnitintooltwo_submissions', 'turnitintooltwoid = ? GROUP BY id, submission_part, submission_grade, submission_gmimaged', array($turnitintooltwo->id), '', 'id, submission_part, submission_grade, submission_gmimaged');
            foreach ($submissionsquery as $submission) {
                if (!isset($submissioncount[$submission->submission_part])) {
                    $submissioncount[$submission->submission_part] = array('graded' => 0, 'submitted' => 0);
                }
                if ($submission->submission_grade != 'NULL' and $submission->submission_gmimaged == 1) {
                    $submissioncount[$submission->submission_part]['graded']++;
                }
                $submissioncount[$submission->submission_part]['submitted']++;
            }
        }
        foreach ($parts as $part) {
            if (!isset($submissioncount[$part->id])) {
                $submissioncount[$part->id] = array('graded' => 0, 'submitted' => 0);
            }
            $partsarray[$part->id]['name'] = $part->partname;
            $partsarray[$part->id]['dtdue'] = $part->dtdue;
            if ($grader) {
                // If user is a grader.
                $numsubmissions = $submissioncount[$part->id]['submitted'];
                $graded = $submissioncount[$part->id]['graded'];
                $input = new stdClass();
                $input->submitted = $numsubmissions;
                $input->graded = $graded;
                $input->total = count($allusers);
                $input->gplural = $graded != 1 ? 's' : '';
                $partsarray[$part->id]['status'] = get_string('tutorstatus', 'turnitintooltwo', $input);
            } else {
                // If user is a student.
                $submission = $turnitintooltwoassignment->get_submissions($cm, $part->id, $USER->id, 1);
                if (!empty($submission[$part->id][$USER->id])) {
                    $input = new stdClass();
                    $input->modified = userdate($submission[$part->id][$USER->id]->submission_modified, get_string('strftimedatetimeshort', 'langconfig'));
                    $input->objectid = $submission[$part->id][$USER->id]->submission_objectid;
                    $partsarray[$part->id]['status'] = get_string('studentstatus', 'turnitintooltwo', $input);
                } else {
                    $partsarray[$part->id]['status'] = get_string('nosubmissions', 'turnitintooltwo');
                }
            }
        }
        $attributes["class"] = $turnitintooltwo->visible ? "" : "dimmed";
        $attributes["title"] = get_string('modulename', 'turnitintooltwo');
        $assignmentlink = html_writer::link($CFG->wwwroot . "/mod/turnitintooltwo/view.php?id=" . $turnitintooltwo->coursemodule, $turnitintooltwo->name, $attributes);
        $partsblock = "";
        foreach ($partsarray as $thispart) {
            $partstr = $thispart['name'] . ' - ' . get_string('dtdue', 'turnitintooltwo') . ': ' . userdate($thispart['dtdue'], get_string('strftimedatetimeshort', 'langconfig'), $USER->timezone);
            $partsblock .= $OUTPUT->box($OUTPUT->box($partstr, 'bold') . $OUTPUT->box($thispart['status'], 'italic'), 'info');
        }
        $str = html_writer::tag('div', html_writer::tag('div', get_string('modulename', 'turnitintooltwo') . ": " . $assignmentlink . $partsblock, array('class' => 'name')), array('class' => 'turnitintooltwo overview'));
        if (empty($htmlarray[$turnitintooltwo->course]['turnitintooltwo'])) {
            $htmlarray[$turnitintooltwo->course]['turnitintooltwo'] = $str;
        } else {
            $htmlarray[$turnitintooltwo->course]['turnitintooltwo'] .= $str;
        }
    }
}
コード例 #6
0
 public function show_form($instructorrubrics, $modulestring = '', $tiicourseid)
 {
     global $CFG, $OUTPUT, $COURSE, $PAGE;
     $PAGE->requires->string_for_js('changerubricwarning', 'turnitintooltwo');
     $PAGE->requires->string_for_js('closebutton', 'turnitintooltwo');
     $config = turnitintooltwo_admin_config();
     $mform =& $this->_form;
     $script = '';
     // Add in custom Javascript and CSS.
     if ($CFG->branch <= 25) {
         $script .= html_writer::tag('script', '', array("type" => "text/javascript", "src" => $CFG->wwwroot . "/mod/turnitintooltwo/jquery/jquery-1.8.2.min.js"));
         $script .= html_writer::tag('script', '', array("id" => "plugin_turnitin_script", "type" => "text/javascript", "src" => $CFG->wwwroot . "/mod/turnitintooltwo/jquery/turnitintooltwo.min.js"));
         $script .= html_writer::tag('script', '', array("type" => "text/javascript", "src" => $CFG->wwwroot . "/mod/turnitintooltwo/jquery/jquery-ui-1.10.4.custom.min.js"));
         $script .= html_writer::tag('script', '', array("type" => "text/javascript", "src" => $CFG->wwwroot . "/mod/turnitintooltwo/jquery/jquery.colorbox.js"));
         $script .= html_writer::tag('script', '', array("type" => "text/javascript", "src" => $CFG->wwwroot . "/mod/turnitintooltwo/jquery/jquery.colorbox.js"));
         $script .= html_writer::tag('script', '', array("type" => "text/javascript", "src" => $CFG->wwwroot . "/mod/turnitintooltwo/jquery/moment.js"));
     } else {
         $PAGE->requires->jquery();
         $PAGE->requires->jquery_plugin('ui');
         $PAGE->requires->jquery_plugin('turnitintooltwo-turnitintooltwo', 'mod_turnitintooltwo');
         $PAGE->requires->jquery_plugin('turnitintooltwo-colorbox', 'mod_turnitintooltwo');
         $PAGE->requires->jquery_plugin('turnitintooltwo-moment', 'mod_turnitintooltwo');
     }
     $PAGE->requires->string_for_js('anonalert', 'turnitintooltwo');
     $script .= html_writer::tag('link', '', array("rel" => "stylesheet", "type" => "text/css", "href" => $CFG->wwwroot . "/mod/turnitintooltwo/styles.css"));
     $script .= html_writer::tag('link', '', array("rel" => "stylesheet", "type" => "text/css", "href" => $CFG->wwwroot . "/mod/turnitintooltwo/css/colorbox.css"));
     $script .= html_writer::tag('link', '', array("rel" => "stylesheet", "type" => "text/css", "href" => $CFG->wwwroot . "/mod/turnitintooltwo/css/tii-icon-webfont.css"));
     $mform->addElement('html', $script);
     $config_warning = '';
     if (empty($config->accountid) || empty($config->secretkey) || empty($config->apiurl)) {
         $config_warning = html_writer::tag('div', get_string('configureerror', 'turnitintooltwo'), array('class' => 'library_not_present_warning'));
     }
     if ($config_warning != '') {
         $mform->addElement('html', $config_warning);
     }
     $noscript = html_writer::tag('noscript', get_string('noscript', 'turnitintooltwo'), array("class" => "warning"));
     $mform->addElement('html', $noscript);
     if (isset($_SESSION["notice"])) {
         $notice = $_SESSION["notice"];
         if (empty($_SESSION["notice"]["type"])) {
             $notice["type"] = "general";
         }
         unset($_SESSION["notice"]);
     } else {
         $notice = null;
     }
     if (!is_null($notice)) {
         $mform->addElement('html', $OUTPUT->box($notice["message"], 'generalbox', $notice["type"]));
     }
     $mform->addElement('header', 'general', get_string('general', 'form'));
     $mform->addElement('text', 'name', get_string('turnitintooltwoname', 'turnitintooltwo'), array('size' => '64'));
     $mform->setType('name', PARAM_RAW);
     $mform->addRule('name', null, 'required', null, 'client');
     $input = new stdClass();
     $input->length = 40;
     $input->field = get_string('turnitintooltwoname', 'turnitintooltwo');
     $mform->addRule('name', get_string('maxlength', 'turnitintooltwo', $input), 'maxlength', 40, 'client');
     $mform->addRule('name', get_string('maxlength', 'turnitintooltwo', $input), 'maxlength', 40, 'server');
     if ($CFG->branch >= 29) {
         $this->standard_intro_elements(get_string('turnitintooltwointro', 'turnitintooltwo'));
     } else {
         $this->add_intro_editor(true, get_string('turnitintooltwointro', 'turnitintooltwo'));
     }
     $typeoptions = turnitintooltwo_filetype_array(true);
     $mform->addElement('select', 'type', get_string('type', 'turnitintooltwo'), $typeoptions);
     $mform->addHelpButton('type', 'types', 'turnitintooltwo');
     $mform->addRule('type', get_string('required'), 'required', null, 'client');
     $mform->setDefault('type', $config->default_type);
     $options = array();
     if ($this->updating) {
         $j = $this->current->numparts;
     } else {
         $j = 1;
     }
     for ($i = $j; $i <= 5; $i++) {
         $options[$i] = $i;
     }
     $mform->addElement('select', 'numparts', get_string('numberofparts', 'turnitintooltwo'), $options);
     $mform->addHelpButton('numparts', 'numberofparts', 'turnitintooltwo');
     $mform->setDefault('numparts', $config->default_numparts);
     $mform->addElement('hidden', 'portfolio', 0);
     $mform->setType('portfolio', PARAM_INT);
     $maxbytessite = $CFG->maxbytes == 0 || $CFG->maxbytes > TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE ? TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE : $CFG->maxbytes;
     $maxbytescourse = $COURSE->maxbytes == 0 || $COURSE->maxbytes > TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE ? TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE : $COURSE->maxbytes;
     $options = get_max_upload_sizes($maxbytessite, $maxbytescourse, TURNITINTOOLTWO_MAX_FILE_UPLOAD_SIZE);
     $mform->addElement('select', 'maxfilesize', get_string('maxfilesize', 'turnitintooltwo'), $options);
     $mform->addHelpButton('maxfilesize', 'maxfilesize', 'turnitintooltwo');
     unset($options);
     for ($i = 0; $i <= 100; $i++) {
         $options[$i] = $i;
     }
     $ynoptions = array(0 => get_string('no'), 1 => get_string('yes'));
     if ($this->updating and $config->useanon and isset($this->turnitintooltwo->anon) and $this->turnitintooltwo->submitted == 1) {
         $staticout = (isset($this->turnitintooltwo->anon) and $this->turnitintooltwo->anon) ? get_string('yes') : get_string('no');
         $mform->addElement('static', 'static', get_string('turnitinanon', 'turnitintooltwo'), $staticout);
         $mform->addElement('hidden', 'anon', $this->turnitintooltwo->anon);
         $mform->addHelpButton('anon', 'turnitinanon', 'turnitintooltwo');
     } else {
         if ($config->useanon) {
             $mform->addElement('select', 'anon', get_string('turnitinanon', 'turnitintooltwo'), $ynoptions);
             $mform->addHelpButton('anon', 'turnitinanon', 'turnitintooltwo');
             $anondefault = isset($config->default_anon) ? $config->default_anon : 0;
             $mform->setDefault('anon', $anondefault);
         } else {
             $mform->addElement('hidden', 'anon', 0);
         }
     }
     $mform->setType('anon', PARAM_INT);
     $mform->addElement('select', 'allownonor', get_string('allownonor', 'turnitintooltwo'), $ynoptions);
     $mform->addHelpButton('allownonor', 'allownonor', 'turnitintooltwo');
     $mform->setDefault('allownonor', $config->default_allownonor);
     $mform->addElement('select', 'studentreports', get_string('studentreports', 'turnitintooltwo'), $ynoptions);
     $mform->addHelpButton('studentreports', 'studentreports', 'turnitintooltwo');
     $mform->setDefault('studentreports', $config->default_studentreports);
     $gradedisplayoptions = array(1 => get_string('displaygradesaspercent', 'turnitintooltwo'), 2 => get_string('displaygradesasfraction', 'turnitintooltwo'));
     $mform->addElement('select', 'gradedisplay', get_string('displaygradesas', 'turnitintooltwo'), $gradedisplayoptions);
     $mform->addHelpButton('gradedisplay', 'displaygradesas', 'turnitintooltwo');
     $mform->setDefault('gradedisplay', $config->default_gradedisplay);
     $refreshoptions = array(1 => get_string('yesgrades', 'turnitintooltwo'), 0 => get_string('nogrades', 'turnitintooltwo'));
     $mform->addElement('select', 'autoupdates', get_string('autorefreshgrades', 'turnitintooltwo'), $refreshoptions);
     $mform->addHelpButton('autoupdates', 'autorefreshgrades', 'turnitintooltwo');
     $mform->setDefault('autoupdates', 1);
     $mform->addElement('checkbox', 'set_instructor_defaults', '', " " . get_string('setinstructordefaults', 'turnitintooltwo'));
     $mform->setDefault('set_instructor_defaults', false);
     $mform->addHelpButton('set_instructor_defaults', 'setinstructordefaults', 'turnitintooltwo');
     $dateoptions = array('startyear' => date('Y', strtotime('-6 years')), 'stopyear' => date('Y', strtotime('+6 years')), 'timezone' => 99, 'applydst' => true, 'step' => 1, 'optional' => false);
     $this->standard_grading_coursemodule_elements();
     if (isset($this->_cm->id)) {
         $turnitintooltwoassignment = new turnitintooltwo_assignment($this->_cm->instance);
         $parts = $turnitintooltwoassignment->get_parts();
         $partsArray = array();
         foreach ($parts as $key => $value) {
             $partsArray[] = $value;
         }
     }
     for ($i = 1; $i <= 5; $i++) {
         $mform->addElement('header', 'partdates' . $i, get_string('partname', 'turnitintooltwo') . " " . $i);
         if (isset($this->_cm->id) && isset($partsArray[$i - 1])) {
             $partdetails = $turnitintooltwoassignment->get_part_details($partsArray[$i - 1]->id);
             $mform->addElement('html', '<div class="assignment-part-' . $i . '" data-anon="' . $turnitintooltwoassignment->turnitintooltwo->anon . '" data-unanon="' . $partdetails->unanon . '" data-submitted="' . $partdetails->submitted . '" data-part-id="' . $i . '">');
         }
         // Delete part link.
         if ($this->updating && $this->current->numparts > 1 && $i <= $this->current->numparts) {
             $attributes = array('class' => 'delete_link');
             $numsubsattribute = "numsubs" . $i;
             if ($this->current->{$numsubsattribute} > 0) {
                 $fnd = array("\n", "\r");
                 $rep = array('\\n', '\\r');
                 $string = str_replace($fnd, $rep, get_string('partdeletewarning', 'turnitintooltwo'));
                 $attributes["onclick"] = "return confirm('" . $string . "');";
             }
             $partidattribute = "id" . $i;
             $url = new moodle_url($CFG->wwwroot . "/mod/turnitintooltwo/view.php", array('id' => $this->_cm->id, 'action' => 'delpart', 'part' => $this->current->{$partidattribute}, 'sesskey' => sesskey()));
             $deletelink = html_writer::link($url, get_string('deletepart', 'turnitintooltwo') . " " . $OUTPUT->pix_icon('delete', get_string('delete'), 'mod_turnitintooltwo'), $attributes);
             $mform->addElement('html', $deletelink);
         }
         $mform->addElement('text', 'partname' . $i, get_string('name'));
         $mform->setType('partname' . $i, PARAM_RAW);
         $mform->setDefault('partname' . $i, get_string('turnitinpart', 'turnitintooltwo', $i));
         $mform->addRule('partname' . $i, null, 'required', null, 'client');
         $input = new stdClass();
         $input->length = 40;
         $input->field = get_string('partname', 'turnitintooltwo') . " " . get_string('name');
         $mform->addRule('partname' . $i, get_string('maxlength', 'turnitintooltwo', $input), 'maxlength', 40, 'client');
         $mform->addRule('partname' . $i, get_string('maxlength', 'turnitintooltwo', $input), 'maxlength', 40, 'server');
         $mform->addElement('date_time_selector', 'dtstart' . $i, get_string('dtstart', 'turnitintooltwo'), $dateoptions);
         $mform->setDefault('dtstart' . $i, time());
         $mform->addElement('date_time_selector', 'dtdue' . $i, get_string('dtdue', 'turnitintooltwo'), $dateoptions);
         $mform->setDefault('dtdue' . $i, strtotime('+7 days'));
         $mform->addElement('date_time_selector', 'dtpost' . $i, get_string('dtpost', 'turnitintooltwo'), $dateoptions);
         $mform->setDefault('dtpost' . $i, strtotime('+7 days'));
         $mform->addElement('text', 'maxmarks' . $i, get_string('maxmarks', 'turnitintooltwo'));
         $mform->setType('maxmarks' . $i, PARAM_INT);
         $mform->setDefault('maxmarks' . $i, '100');
         $mform->addRule('maxmarks' . $i, null, 'numeric', null, 'client');
     }
     $mform->addElement('header', 'advanced', get_string('turnitinoroptions', 'turnitintooltwo'));
     $mform->addElement('select', 'allowlate', get_string('allowlate', 'turnitintooltwo'), $ynoptions);
     $mform->setDefault('allowlate', $config->default_allowlate);
     $genoptions = array(0 => get_string('genimmediately1', 'turnitintooltwo'), 1 => get_string('genimmediately2', 'turnitintooltwo'), 2 => get_string('genduedate', 'turnitintooltwo'));
     $mform->addElement('select', 'reportgenspeed', get_string('reportgenspeed', 'turnitintooltwo'), $genoptions);
     $mform->addHelpButton('reportgenspeed', 'reportgenspeed', 'turnitintooltwo');
     $mform->setDefault('reportgenspeed', $config->default_reportgenspeed);
     $mform->addElement('html', html_writer::tag('div', get_string('genspeednote', 'turnitintooltwo'), array('class' => 'tii_genspeednote')));
     $suboptions = array(0 => get_string('norepository', 'turnitintooltwo'), 1 => get_string('standardrepository', 'turnitintooltwo'));
     switch ($config->repositoryoption) {
         case 0:
             // Standard options
             $mform->addElement('select', 'submitpapersto', get_string('submitpapersto', 'turnitintooltwo'), $suboptions);
             $mform->addHelpButton('submitpapersto', 'submitpapersto', 'turnitintooltwo');
             $mform->setDefault('submitpapersto', $config->default_submitpapersto);
             break;
         case 1:
             // Standard options + Allow Instituional Repository
             $suboptions[2] = get_string('institutionalrepository', 'turnitintooltwo');
             $mform->addElement('select', 'submitpapersto', get_string('submitpapersto', 'turnitintooltwo'), $suboptions);
             $mform->addHelpButton('submitpapersto', 'submitpapersto', 'turnitintooltwo');
             $mform->setDefault('submitpapersto', $config->default_submitpapersto);
             break;
         case 2:
             // Force Standard Repository
             $mform->addElement('hidden', 'submitpapersto', 1);
             $mform->setType('submitpapersto', PARAM_RAW);
             break;
         case 3:
             // Force No Repository
             $mform->addElement('hidden', 'submitpapersto', 0);
             $mform->setType('submitpapersto', PARAM_RAW);
             break;
     }
     $mform->addElement('html', html_writer::tag('div', get_string('checkagainstnote', 'turnitintooltwo'), array('class' => 'tii_checkagainstnote')));
     $mform->addElement('select', 'spapercheck', get_string('spapercheck', 'turnitintooltwo'), $ynoptions);
     $mform->addHelpButton('spapercheck', 'spapercheck', 'turnitintooltwo');
     $mform->setDefault('spapercheck', $config->default_spapercheck);
     $mform->addElement('select', 'internetcheck', get_string('internetcheck', 'turnitintooltwo'), $ynoptions);
     $mform->addHelpButton('internetcheck', 'internetcheck', 'turnitintooltwo');
     $mform->setDefault('internetcheck', $config->default_internetcheck);
     $mform->addElement('select', 'journalcheck', get_string('journalcheck', 'turnitintooltwo'), $ynoptions);
     $mform->addHelpButton('journalcheck', 'journalcheck', 'turnitintooltwo');
     $mform->setDefault('journalcheck', $config->default_journalcheck);
     if ($config->repositoryoption == "1") {
         $mform->addElement('select', 'institution_check', get_string('institutionalcheck', 'turnitintooltwo'), $ynoptions);
         $mform->setDefault('institution_check', $config->default_institutioncheck);
     }
     if ($this->numsubs > 0) {
         $staticout = (isset($this->turnitintooltwo->excludebiblio) and $this->turnitintooltwo->excludebiblio) ? get_string('yes') : get_string('no');
         $mform->addElement('static', 'static', get_string('excludebiblio', 'turnitintooltwo'), $staticout);
         $mform->addElement('hidden', 'excludebiblio', $this->turnitintooltwo->excludebiblio);
         $staticout = (isset($this->turnitintooltwo->excludequoted) and $this->turnitintooltwo->excludequoted) ? get_string('yes') : get_string('no');
         $mform->addElement('static', 'static', get_string('excludequoted', 'turnitintooltwo'), $staticout);
         $mform->addElement('hidden', 'excludequoted', $this->turnitintooltwo->excludequoted);
         $staticout = (isset($this->turnitintooltwo->excludetype) and $this->turnitintooltwo->excludetype == 1) ? get_string('excludewords', 'turnitintooltwo') : get_string('excludepercent', 'turnitintooltwo');
         $staticval = (isset($this->turnitintooltwo->excludevalue) and empty($this->turnitintooltwo->excludevalue)) ? get_string('nolimit', 'turnitintooltwo') : $this->turnitintooltwo->excludevalue . ' ' . $staticout;
         $mform->addElement('static', 'static', get_string('excludevalue', 'turnitintooltwo'), $staticval);
         $mform->addElement('hidden', 'excludevalue', $this->turnitintooltwo->excludevalue);
         $mform->addElement('hidden', 'excludetype', $this->turnitintooltwo->excludetype);
     } else {
         $mform->addElement('select', 'excludebiblio', get_string('excludebiblio', 'turnitintooltwo'), $ynoptions);
         $mform->addHelpButton('excludebiblio', 'excludebiblio', 'turnitintooltwo');
         $mform->setDefault('excludebiblio', $config->default_excludebiblio);
         $mform->addElement('select', 'excludequoted', get_string('excludequoted', 'turnitintooltwo'), $ynoptions);
         $mform->addHelpButton('excludequoted', 'excludequoted', 'turnitintooltwo');
         $mform->setDefault('excludequoted', $config->default_excludequoted);
         $mform->addElement('text', 'excludevalue', get_string('excludevalue', 'turnitintooltwo'), array('size' => '12'));
         $mform->addHelpButton('excludevalue', 'excludevalue', 'turnitintooltwo');
         $input = new stdClass();
         $input->length = 9;
         $input->field = get_string('excludevalue', 'turnitintooltwo');
         $mform->addRule('excludevalue', get_string('maxlength', 'turnitintooltwo', $input), 'maxlength', 9, 'client');
         $mform->addRule('excludevalue', get_string('maxlength', 'turnitintooltwo', $input), 'maxlength', 9, 'server');
         $mform->addRule('excludevalue', null, 'numeric', null, 'client');
         $mform->addRule('excludevalue', null, 'numeric', null, 'server');
         $typeoptions = array(1 => get_string('excludewords', 'turnitintooltwo'), 2 => get_string('excludepercent', 'turnitintooltwo'));
         $mform->addElement('select', 'excludetype', '', $typeoptions);
         $mform->setDefault('excludetype', 1);
     }
     $mform->setType('excludebiblio', PARAM_RAW);
     $mform->setType('excludequoted', PARAM_RAW);
     $mform->setType('excludevalue', PARAM_RAW);
     $mform->setType('excludetype', PARAM_RAW);
     if (isset($config->transmatch) && $config->transmatch == '1') {
         $mform->addElement('select', 'transmatch', get_string('transmatch', 'turnitintooltwo'), $ynoptions);
         $mform->setDefault('transmatch', $config->default_transmatch);
     }
     // Populate Rubric options.
     if (!empty($config->usegrademark)) {
         $mform->addElement('header', 'advanced', get_string('turnitingmoptions', 'turnitintooltwo'));
         $rubricoptions = array('' => get_string('norubric', 'turnitintooltwo')) + $instructorrubrics;
         if (!empty($this->turnitintooltwo->rubric)) {
             $rubricoptions[$this->turnitintooltwo->rubric] = isset($rubricoptions[$this->turnitintooltwo->rubric]) ? $rubricoptions[$this->turnitintooltwo->rubric] : get_string('otherrubric', 'turnitintooltwo');
         }
         $rubricline = array();
         $rubricline[] = $mform->createElement('select', 'rubric', '', $rubricoptions);
         $rubricline[] = $mform->createElement('static', 'rubric_link', '', html_writer::link($CFG->wwwroot . '/mod/turnitintooltwo/extras.php?' . 'cmd=rubricmanager&tiicourseid=' . $tiicourseid . '&view_context=box', html_writer::tag('i', '', array('class' => 'tiiicon icon-rubric icon-lg icon_margin')) . get_string('launchrubricmanager', 'turnitintooltwo'), array('class' => 'rubric_manager_launch', 'title' => get_string('launchrubricmanager', 'turnitintooltwo'))) . html_writer::tag('span', '', array('class' => 'launch_form', 'id' => 'rubric_manager_form')));
         $mform->setDefault('rubric', '');
         $mform->addGroup($rubricline, 'rubricline', get_string('attachrubric', 'turnitintooltwo'), array(' '), false);
         $mform->addElement('hidden', 'rubric_warning_seen', '');
         $mform->setType('rubric_warning_seen', PARAM_RAW);
         $mform->addElement('static', 'rubric_note', '', get_string('attachrubricnote', 'turnitintooltwo'));
     } else {
         $mform->addElement('hidden', 'rubric', '');
         $mform->setType('rubric', PARAM_RAW);
     }
     if (!empty($config->usegrademark) && !empty($config->useerater)) {
         $handbookoptions = array(1 => get_string('erater_handbook_advanced', 'turnitintooltwo'), 2 => get_string('erater_handbook_highschool', 'turnitintooltwo'), 3 => get_string('erater_handbook_middleschool', 'turnitintooltwo'), 4 => get_string('erater_handbook_elementary', 'turnitintooltwo'), 5 => get_string('erater_handbook_learners', 'turnitintooltwo'));
         $dictionaryoptions = array('en_US' => get_string('erater_dictionary_enus', 'turnitintooltwo'), 'en_GB' => get_string('erater_dictionary_engb', 'turnitintooltwo'), 'en' => get_string('erater_dictionary_en', 'turnitintooltwo'));
         $mform->addElement('select', 'erater', get_string('erater', 'turnitintooltwo'), $ynoptions);
         $mform->setDefault('erater', $config->default_erater);
         $mform->addElement('select', 'erater_handbook', get_string('erater_handbook', 'turnitintooltwo'), $handbookoptions);
         $mform->setDefault('erater_handbook', $config->default_erater_handbook);
         $mform->disabledIf('erater_handbook', 'erater', 'eq', 0);
         $mform->addElement('select', 'erater_dictionary', get_string('erater_dictionary', 'turnitintooltwo'), $dictionaryoptions);
         $mform->setDefault('erater_dictionary', $config->default_erater_dictionary);
         $mform->disabledIf('erater_dictionary', 'erater', 'eq', 0);
         $mform->addElement('checkbox', 'erater_spelling', get_string('erater_categories', 'turnitintooltwo'), " " . get_string('erater_spelling', 'turnitintooltwo'));
         $mform->setDefault('erater_spelling', $config->default_erater_spelling);
         $mform->disabledIf('erater_spelling', 'erater', 'eq', 0);
         $mform->addElement('checkbox', 'erater_grammar', '', " " . get_string('erater_grammar', 'turnitintooltwo'));
         $mform->setDefault('erater_grammar', $config->default_erater_grammar);
         $mform->disabledIf('erater_grammar', 'erater', 'eq', 0);
         $mform->addElement('checkbox', 'erater_usage', '', " " . get_string('erater_usage', 'turnitintooltwo'));
         $mform->setDefault('erater_usage', $config->default_erater_usage);
         $mform->disabledIf('erater_usage', 'erater', 'eq', 0);
         $mform->addElement('checkbox', 'erater_mechanics', '', " " . get_string('erater_mechanics', 'turnitintooltwo'));
         $mform->setDefault('erater_mechanics', $config->default_erater_mechanics);
         $mform->disabledIf('erater_mechanics', 'erater', 'eq', 0);
         $mform->addElement('checkbox', 'erater_style', '', " " . get_string('erater_style', 'turnitintooltwo'));
         $mform->setDefault('erater_style', $config->default_erater_style);
         $mform->disabledIf('erater_style', 'erater', 'eq', 0);
     }
     $mform->addElement('hidden', 'ownerid', null);
     $mform->setType('ownerid', PARAM_RAW);
     $mform->addElement('html', $modulestring);
     $features = new stdClass();
     $features->groups = true;
     $features->groupings = true;
     $features->groupmembersonly = true;
     $this->standard_coursemodule_elements($features);
     $this->add_action_buttons();
 }