/**
  * Due to moodle's internal plugin hooks we can not use our bespoke form class for Turnitin
  * settings. This form shows in settings > defaults as well as the activity creation screen.
  *
  * @global type $CFG
  * @param type $plugin_defaults
  * @return type
  */
 public function add_elements_to_settings_form($mform, $course, $location = "activity", $cmid = 0, $currentrubric = 0)
 {
     global $CFG, $OUTPUT, $PAGE, $USER, $DB;
     // Include JS strings (closebutton is needed from both plugins).
     $PAGE->requires->string_for_js('changerubricwarning', 'plagiarism_turnitin');
     $PAGE->requires->string_for_js('closebutton', 'turnitintooltwo');
     $PAGE->requires->string_for_js('closebutton', 'plagiarism_turnitin');
     $config = turnitintooltwo_admin_config();
     $config_warning = '';
     $rubrics = array();
     if ($location == "activity") {
         $instructor = new turnitintooltwo_user($USER->id, 'Instructor');
         $instructor->join_user_to_class($course->turnitin_cid);
         $rubrics = $instructor->get_instructor_rubrics();
         // Get rubrics that are shared on the account.
         $turnitinclass = new turnitin_class($course->id);
         $turnitinclass->sharedrubrics = array();
         $turnitinclass->read_class_from_tii();
         // Merge the arrays, prioitising instructor owned arrays.
         $rubrics = $rubrics + $turnitinclass->sharedrubrics;
     }
     $options = array(0 => get_string('no'), 1 => get_string('yes'));
     $genoptions = array(0 => get_string('genimmediately1', 'plagiarism_turnitin'), 1 => get_string('genimmediately2', 'plagiarism_turnitin'), 2 => get_string('genduedate', 'plagiarism_turnitin'));
     $excludetypeoptions = array(0 => get_string('no'), 1 => get_string('excludewords', 'plagiarism_turnitin'), 2 => get_string('excludepercent', 'plagiarism_turnitin'));
     if ($location == "defaults") {
         $mform->addElement('header', 'plugin_header', get_string('turnitindefaults', 'plagiarism_turnitin'));
         $mform->addElement('html', get_string("defaultsdesc", "turnitintooltwo"));
     }
     if ($location != "defaults") {
         $mform->addElement('header', 'plugin_header', get_string('turnitinpluginsettings', 'plagiarism_turnitin'));
         // Add in custom Javascript and CSS.
         $PAGE->requires->jquery();
         $PAGE->requires->jquery_plugin('ui');
         $PAGE->requires->jquery_plugin('turnitintooltwo-turnitintooltwo', 'mod_turnitintooltwo');
         $PAGE->requires->jquery_plugin('plagiarism-turnitin_module', 'plagiarism_turnitin');
         $PAGE->requires->jquery_plugin('turnitintooltwo-colorbox', 'mod_turnitintooltwo');
         $cssurl = new moodle_url('/mod/turnitintooltwo/css/colorbox.css');
         $PAGE->requires->css($cssurl);
         // Refresh Grades
         $refreshgrades = '';
         if ($cmid != 0) {
             // If assignment has submissions then show a refresh grades button
             $numsubs = $DB->count_records('plagiarism_turnitin_files', array('cm' => $cmid));
             if ($numsubs > 0) {
                 $refreshgrades = html_writer::tag('div', $OUTPUT->pix_icon('refresh', get_string('turnitinrefreshsubmissions', 'plagiarism_turnitin'), 'plagiarism_turnitin') . html_writer::tag('span', get_string('turnitinrefreshsubmissions', 'plagiarism_turnitin')), array('class' => 'plagiarism_turnitin_refresh_grades'));
                 $refreshgrades .= html_writer::tag('div', $OUTPUT->pix_icon('loading', get_string('turnitinrefreshingsubmissions', 'plagiarism_turnitin'), 'plagiarism_turnitin') . html_writer::tag('span', get_string('turnitinrefreshingsubmissions', 'plagiarism_turnitin')), array('class' => 'plagiarism_turnitin_refreshing_grades'));
             }
         }
         // Quickmark Manager.
         $quickmarkmanagerlink = '';
         if ($config->usegrademark) {
             $quickmarkmanagerlink .= $OUTPUT->box_start('row_quickmark_manager', '');
             $quickmarkmanagerlink .= html_writer::link($CFG->wwwroot . '/mod/turnitintooltwo/extras.php?cmd=quickmarkmanager&view_context=box', get_string('launchquickmarkmanager', 'plagiarism_turnitin'), array('class' => 'plagiarism_turnitin_quickmark_manager_launch', 'title' => get_string('launchquickmarkmanager', 'plagiarism_turnitin')));
             $quickmarkmanagerlink .= html_writer::tag('span', '', array('class' => 'launch_form', 'id' => 'quickmark_manager_form'));
             $quickmarkmanagerlink .= $OUTPUT->box_end(true);
         }
         $use_turnitin = $DB->get_record('plagiarism_turnitin_config', array('cm' => $cmid, 'name' => 'use_turnitin'));
         // Peermark Manager.
         $peermarkmanagerlink = '';
         if (!empty($config->enablepeermark) && !empty($use_turnitin->value)) {
             if ($cmid != 0) {
                 $peermarkmanagerlink .= $OUTPUT->box_start('row_peermark_manager', '');
                 $peermarkmanagerlink .= html_writer::link($CFG->wwwroot . '/plagiarism/turnitin/ajax.php?cmid=' . $cmid . '&action=peermarkmanager&view_context=box', get_string('launchpeermarkmanager', 'plagiarism_turnitin'), array('class' => 'peermark_manager_launch', 'id' => 'peermark_manager_' . $cmid, 'title' => get_string('launchpeermarkmanager', 'plagiarism_turnitin')));
                 $peermarkmanagerlink .= html_writer::tag('span', '', array('class' => 'launch_form', 'id' => 'peermark_manager_form'));
                 $peermarkmanagerlink .= $OUTPUT->box_end(true);
             }
         }
         if (!empty($quickmarkmanagerlink) || !empty($peermarkmanagerlink) || !empty($refreshgrades)) {
             $mform->addElement('static', 'static', '', $refreshgrades . $quickmarkmanagerlink . $peermarkmanagerlink);
         }
     }
     $locks = $DB->get_records_sql("SELECT name, value FROM {plagiarism_turnitin_config} WHERE cm IS NULL");
     if (empty($config_warning)) {
         $mform->addElement('select', 'use_turnitin', get_string("useturnitin", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addElement('select', 'plagiarism_show_student_report', get_string("studentreports", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addHelpButton('plagiarism_show_student_report', 'studentreports', 'plagiarism_turnitin');
         if ($mform->elementExists('submissiondrafts') || $location == 'defaults') {
             $tiidraftoptions = array(0 => get_string("submitondraft", "turnitintooltwo"), 1 => get_string("submitonfinal", "turnitintooltwo"));
             $mform->addElement('select', 'plagiarism_draft_submit', get_string("draftsubmit", "turnitintooltwo"), $tiidraftoptions);
             $this->lock($mform, $location, $locks);
             $mform->disabledIf('plagiarism_draft_submit', 'submissiondrafts', 'eq', 0);
         }
         $mform->addElement('select', 'plagiarism_allow_non_or_submissions', get_string("allownonor", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addHelpButton('plagiarism_allow_non_or_submissions', 'allownonor', 'plagiarism_turnitin');
         $suboptions = array(0 => get_string('norepository', 'plagiarism_turnitin'), 1 => get_string('standardrepository', 'plagiarism_turnitin'));
         switch ($config->repositoryoption) {
             case 0:
                 // Standard options
                 $mform->addElement('select', 'plagiarism_submitpapersto', get_string('submitpapersto', 'plagiarism_turnitin'), $suboptions);
                 $this->lock($mform, $location, $locks);
                 break;
             case 1:
                 // Standard options + Allow Instituional Repository
                 $suboptions[2] = get_string('institutionalrepository', 'plagiarism_turnitin');
                 $mform->addElement('select', 'plagiarism_submitpapersto', get_string('submitpapersto', 'plagiarism_turnitin'), $suboptions);
                 $this->lock($mform, $location, $locks);
                 break;
             case 2:
                 // Force Standard Repository
                 $mform->addElement('hidden', 'plagiarism_submitpapersto', 1);
                 $mform->setType('plagiarism_submitpapersto', PARAM_RAW);
                 break;
             case 3:
                 // Force No Repository
                 $mform->addElement('hidden', 'plagiarism_submitpapersto', 0);
                 $mform->setType('plagiarism_submitpapersto', PARAM_RAW);
                 break;
         }
         $mform->addElement('html', html_writer::tag('div', get_string('checkagainstnote', 'plagiarism_turnitin'), array('class' => 'tii_checkagainstnote')));
         $mform->addElement('select', 'plagiarism_compare_student_papers', get_string("spapercheck", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addElement('select', 'plagiarism_compare_internet', get_string("internetcheck", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addElement('select', 'plagiarism_compare_journals', get_string("journalcheck", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         if ($config->repositoryoption == 1) {
             $mform->addElement('select', 'plagiarism_compare_institution', get_string('compareinstitution', 'plagiarism_turnitin'), $options);
             $this->lock($mform, $location, $locks);
         }
         $mform->addElement('select', 'plagiarism_report_gen', get_string("reportgenspeed", "turnitintooltwo"), $genoptions);
         $this->lock($mform, $location, $locks);
         $mform->addElement('html', html_writer::tag('div', get_string('genspeednote', 'plagiarism_turnitin'), array('class' => 'tii_genspeednote')));
         $mform->addElement('select', 'plagiarism_exclude_biblio', get_string("excludebiblio", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addElement('select', 'plagiarism_exclude_quoted', get_string("excludequoted", "turnitintooltwo"), $options);
         $this->lock($mform, $location, $locks);
         $mform->addElement('select', 'plagiarism_exclude_matches', get_string("excludevalue", "turnitintooltwo"), $excludetypeoptions);
         $this->lock($mform, $location, $locks);
         $mform->addElement('text', 'plagiarism_exclude_matches_value', '');
         $mform->setType('plagiarism_exclude_matches_value', PARAM_INT);
         $mform->addRule('plagiarism_exclude_matches_value', null, 'numeric', null, 'client');
         $mform->disabledIf('plagiarism_exclude_matches_value', 'plagiarism_exclude_matches', 'eq', 0);
         if ($location == 'defaults') {
             $mform->addElement('text', 'plagiarism_locked_message', get_string("locked_message", "plagiarism_turnitin"), 'maxlength="50" size="50"');
             $mform->setType('plagiarism_locked_message', PARAM_TEXT);
             $mform->setDefault('plagiarism_locked_message', get_string("locked_message_default", "plagiarism_turnitin"));
             $mform->addHelpButton('plagiarism_locked_message', 'locked_message', 'plagiarism_turnitin');
         }
         if ($location == "activity" && $config->usegrademark) {
             // Populate Rubric options.
             $rubricoptions = array('' => get_string('norubric', 'plagiarism_turnitin')) + $rubrics;
             if (!empty($currentrubric)) {
                 $rubricoptions[$currentrubric] = isset($rubricoptions[$currentrubric]) ? $rubricoptions[$currentrubric] : get_string('otherrubric', 'plagiarism_turnitin');
             }
             $mform->addElement('select', 'plagiarism_rubric', get_string('attachrubric', 'plagiarism_turnitin'), $rubricoptions);
             $mform->addElement('static', 'rubric_link', '', html_writer::link($CFG->wwwroot . '/mod/turnitintooltwo/extras.php?cmd=rubricmanager&view_context=box', get_string('launchrubricmanager', 'plagiarism_turnitin'), array('class' => 'rubric_manager_launch', 'title' => get_string('launchrubricmanager', 'plagiarism_turnitin'))) . html_writer::tag('span', '', array('class' => 'launch_form', 'id' => 'rubric_manager_form')));
             $mform->setDefault('plagiarism_rubric', '');
             $mform->addElement('hidden', 'rubric_warning_seen', '');
             $mform->setType('rubric_warning_seen', PARAM_RAW);
             $mform->addElement('static', 'rubric_note', '', get_string('attachrubricnote', 'plagiarism_turnitin'));
         } else {
             $mform->addElement('hidden', 'plagiarism_rubric', '');
             $mform->setType('plagiarism_rubric', PARAM_RAW);
         }
         if (!empty($config->useerater)) {
             $handbookoptions = array(1 => get_string('erater_handbook_advanced', 'plagiarism_turnitin'), 2 => get_string('erater_handbook_highschool', 'plagiarism_turnitin'), 3 => get_string('erater_handbook_middleschool', 'plagiarism_turnitin'), 4 => get_string('erater_handbook_elementary', 'plagiarism_turnitin'), 5 => get_string('erater_handbook_learners', 'plagiarism_turnitin'));
             $dictionaryoptions = array('en_US' => get_string('erater_dictionary_enus', 'plagiarism_turnitin'), 'en_GB' => get_string('erater_dictionary_engb', 'plagiarism_turnitin'), 'en' => get_string('erater_dictionary_en', 'plagiarism_turnitin'));
             $mform->addElement('select', 'plagiarism_erater', get_string('erater', 'plagiarism_turnitin'), $options);
             $mform->setDefault('plagiarism_erater', 0);
             $mform->addElement('select', 'plagiarism_erater_handbook', get_string('erater_handbook', 'plagiarism_turnitin'), $handbookoptions);
             $mform->setDefault('plagiarism_erater_handbook', 2);
             $mform->disabledIf('plagiarism_erater_handbook', 'plagiarism_erater', 'eq', 0);
             $mform->addElement('select', 'plagiarism_erater_dictionary', get_string('erater_dictionary', 'plagiarism_turnitin'), $dictionaryoptions);
             $mform->setDefault('plagiarism_erater_dictionary', 'en_US');
             $mform->disabledIf('plagiarism_erater_dictionary', 'plagiarism_erater', 'eq', 0);
             $mform->addElement('checkbox', 'plagiarism_erater_spelling', get_string('erater_categories', 'plagiarism_turnitin'), " " . get_string('erater_spelling', 'plagiarism_turnitin'));
             $mform->disabledIf('plagiarism_erater_spelling', 'plagiarism_erater', 'eq', 0);
             $mform->addElement('checkbox', 'plagiarism_erater_grammar', '', " " . get_string('erater_grammar', 'plagiarism_turnitin'));
             $mform->disabledIf('plagiarism_erater_grammar', 'plagiarism_erater', 'eq', 0);
             $mform->addElement('checkbox', 'plagiarism_erater_usage', '', " " . get_string('erater_usage', 'plagiarism_turnitin'));
             $mform->disabledIf('plagiarism_erater_usage', 'plagiarism_erater', 'eq', 0);
             $mform->addElement('checkbox', 'plagiarism_erater_mechanics', '', " " . get_string('erater_mechanics', 'plagiarism_turnitin'));
             $mform->disabledIf('plagiarism_erater_mechanics', 'plagiarism_erater', 'eq', 0);
             $mform->addElement('checkbox', 'plagiarism_erater_style', '', " " . get_string('erater_style', 'plagiarism_turnitin'));
             $mform->disabledIf('plagiarism_erater_style', 'plagiarism_erater', 'eq', 0);
         }
         $mform->addElement('html', html_writer::tag('div', get_string('anonblindmarkingnote', 'plagiarism_turnitin'), array('class' => 'tii_anonblindmarkingnote')));
         if ($config->transmatch) {
             $mform->addElement('select', 'plagiarism_transmatch', get_string("transmatch", "turnitintooltwo"), $options);
         } else {
             $mform->addElement('hidden', 'plagiarism_transmatch', 0);
         }
         $mform->setType('plagiarism_transmatch', PARAM_INT);
         $mform->addElement('hidden', 'action', "defaults");
         $mform->setType('action', PARAM_RAW);
     } else {
         $mform->addElement('hidden', 'use_turnitin', 0);
         $mform->setType('use_turnitin', PARAM_INT);
     }
     // Disable the form change checker - added in 2.3.2.
     if (is_callable(array($mform, 'disable_form_change_checker'))) {
         $mform->disable_form_change_checker();
     }
 }
 $courseid = required_param('course', PARAM_INT);
 $assignmentid = required_param('assignment', PARAM_INT);
 $modulename = required_param('modulename', PARAM_ALPHA);
 $PAGE->set_context(context_course::instance($courseid));
 if (has_capability('moodle/course:update', context_course::instance($courseid))) {
     // Set Rubric options to instructor rubrics.
     $instructor = new turnitintooltwo_user($USER->id, 'Instructor');
     $instructor->set_user_values_from_tii();
     $instructorrubrics = $instructor->get_instructor_rubrics();
     $options = array('' => get_string('norubric', 'turnitintooltwo')) + $instructorrubrics;
     // Get rubrics that are shared on the Turnitin account.
     if ($modulename == "turnitintooltwo") {
         $turnitinclass = new turnitintooltwo_class($courseid);
     } else {
         require_once $CFG->dirroot . '/plagiarism/turnitin/lib.php';
         $turnitinclass = new turnitin_class($courseid);
     }
     $turnitinclass->read_class_from_tii();
     $options = $options + $turnitinclass->sharedrubrics;
     // Get assignment details.
     if (!empty($assignmentid)) {
         if ($modulename == "turnitintooltwo") {
             $turnitintooltwoassignment = new turnitintooltwo_assignment($assignmentid);
         } else {
             $pluginturnitin = new plagiarism_plugin_turnitin();
             $cm = get_coursemodule_from_instance($modulename, $assignmentid);
             $plagiarismsettings = $pluginturnitin->get_settings($cm->id);
         }
     }
     // Add in selected rubric if it belongs to another instructor.
     if (!empty($assignmentid)) {