diff --git a/CHANGELOG.md b/CHANGELOG.md index f84a273d..f8562423 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,96 @@ +### Date: 2018-May-23 +### Release: v2018052301 + +#### :zap: What's new + +--- + +#### We now support Moodle 3.5 + +You can find out more about Moodle 3.5 via Moodle's [release notes](https://docs.moodle.org/dev/Moodle_3.5_release_notes). + +#### Turnitin's Moodle V2 plugin is GDPR compliant! + +To support upcoming changes to European data protection law, we’ve focused our efforts on refreshing our processes around how we use your data. + +##### Repository settings are more transparent + +We've made the Moodle V2 repository settings much clearer, by providing easy-to-understand, transparent language behind the Store student papers help icon. During assignment setup, administrators and instructors can now be completely sure that they're selecting the correct storage options for student papers. + +##### We're reporting on the data we store about our users + +Moodle has released two plugins with privacy features to assist with GDPR compliance. While we've successfully implemented [Moodle's new privacy features](https://docs.moodle.org/dev/Privacy_API), Moodle's update is only available to those using Moodle 3.3.5+, 3.4.2+, or 3.5. Therefore, if you're using an earlier version, you must upgrade to have access to these new features. + +To inform you about the data we store in relation to our users, we now provide a detailed list via the Moodle Privacy and Policies page. Learn more about the data we're reporting on via our [Moodle Plugins and GDPR](https://guides.turnitin.com/03_Integrations/Turnitin_Partner_Integrations/Moodle/Moodle_Plugins_and_GDPR) page. + +#### Students can request to download their data + +Students have the ability to request an export of their data stored in Moodle. This request can be accepted or declined by their Moodle administrator. If accepted, the student will be able to download all the data held about them, which includes data from Turnitin. + +#### Students can request to remove their data + +Students can also request their data to be removed from Moodle. This requested can be accepted or declined by their Moodle administrator. If accepted, the administrator will remove the student data from Moodle. However, administrators must contact support@turnitin.com to request that student data be removed from Turnitin itself. + +> If you're a Moodle administrator, and using version 3.3.5+, 3.4.2+, or 3.5, follow the steps on the [Moodle Plugins and GDPR](https://guides.turnitin.com/03_Integrations/Turnitin_Partner_Integrations/Moodle/Moodle_Plugins_and_GDPR) page to view the data we store in Moodle. + + +#### You can now send all papers to your institutional repository by default! + +We're aligning Turnitin repository options with our Moodle V2 plugin. If an institutional repository is enabled on their Turnitin account, administrators can now opt to **Submit all papers to the institutional repository**. This submission storage option sends all student submissions to the institutional repository without instructor intervention. For this repository option to work successfully, it must firstly be enabled in Turnitin, before it can be configured in Moodle. + +If you're a Moodle administrator, follow the steps below to enable this repository setting in Turnitin: + +1. Log into Turnitin.com or TurnitinUK.com. +2. Under **Edit**, select the cog icon. +3. Select **Edit account settings**. +4. Scroll to **Paper repository options** and select **Submit all papers to the institution repository**. +6. Select the **Submit** button at the bottom of the page. + +Now, it's time to move to Moodle! + +1. From the Moodle left-hand side panel, select **Site administration**. +2. Select **Plugins**. +3. Select **Activity Modules**. +4. Then **Manage Activities**. +5. Scroll to **Turnitin Assignment 2** and select **Settings**. +6. Scroll to **Paper Repository Assignments** and select **Submit all papers to the institutional repository**. + +### :wrench: Fixes and enhancements + +#### Assignment titles are now visible in the grade book + +This was a bit of an odd one! If an instructor created an assignment with Turnitin GradeMark disabled, the assignment title displayed in the Moodle grade book as the word 'Grade'. We're sure that you'd much rather see the assignment name to be able to distinguish one assignment from the other? Now, you can! Sorry about that! + +#### You can now exit lightboxes using the 'Close' button + +We received a report that the Close button in the Plagiarism Plugin's lightboxes wasn't performing correctly, in that it wasn't actually closing anything! Instead, users saw the following error: 'Uncaught TypeError: Cannot read property 'close' of undefined at HTMLAnchorElement.onclick'. Thanks for the heads up, @Haietza! We've fixed this issue. + +> **Lightboxes** display content by filling the screen and dimming out the rest of the web page. They can be closed to find the website contents still available. Items such as the QuickMark manager and the rubric manager are contained inside a lightbox. + +--- + +### 2018-March-12 +### v2018031201 + +#### Fixes and enhancements + +--- + +#### Manual adjustments to grades now stick during V1 to V2 migration + +>Following the migration of a Moodle Direct V1 assignment to V2, grades that had been manually adjusted in the Moodle grade book would be overwritten to match the grade originally set in Turnitin Feedback Studio. With this overwrite being completely unintentional, we've made several backend changes to ensure that future manual adjustments within the grade book always remain fixed during migration. + +#### V1 assignments are now removed automatically after migration + +>If an administrator failed to delete a Moodle Direct V1 assignment after its migration to V2, the grade of the V1 assignment would remain in the Moodle grade book, causing grades to effectively double. We've now adjusted the behavior of the Moodle Migration Tool to resolve this. So that you no longer need to worry about incorrect grades in the grade book, Moodle V1 assignments are now automatically deleted after migration. +> +>There may be instances where you'll still be required to remove V1 assignments manually (for example, the migration has been successful but there are conflicting grades in the grade book). + +#### Deleting V1 assignments that were migrated in prior versions + +> You can manually delete your previously migrated assignments from the usual spot in the Moodle Migration Tool; we encourage you to delete these as soon as possible in order to resolve any current issues in the grade book. Any V1 assignments migrated after this update will be automatically deleted. + + ### :snowflake: Date: 2018-January-16 ### :snowflake: Release: v2018011601 diff --git a/classes/nonsubmitters/nonsubmitters_message.php b/classes/nonsubmitters/nonsubmitters_message.php index bce951c8..b9a2d8a3 100644 --- a/classes/nonsubmitters/nonsubmitters_message.php +++ b/classes/nonsubmitters/nonsubmitters_message.php @@ -24,7 +24,7 @@ class nonsubmitters_message { * @param string $message * @return void */ - public function send_message($userid, $subject, $message) { + public function send_message($userid, $subject, $message, $courseid) { global $CFG; // Pre 2.9 does not have \core\message\message() @@ -45,6 +45,10 @@ public function send_message($userid, $subject, $message) { $eventdata->smallmessage = ''; $eventdata->notification = 1; // This is only set to 0 for personal messages between users. + if ($CFG->branch >= 32) { + $eventdata->courseid = $courseid; + } + message_send($eventdata); } } diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php new file mode 100644 index 00000000..5d926e44 --- /dev/null +++ b/classes/privacy/provider.php @@ -0,0 +1,245 @@ +. + +/** + * Privacy Subsystem implementation for mod_turnitintooltwo. + * + * @package mod_turnitintooltwo + * @copyright 2018 John McGettrick + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_turnitintooltwo\privacy; + +defined('MOODLE_INTERNAL') || die(); + +use core_privacy\local\metadata\collection; +use core_privacy\local\request\contextlist; +use core_privacy\local\request\approved_contextlist; +use core_privacy\local\request\helper; +use core_privacy\local\request\writer; + +class provider implements + // This plugin does store personal user data. + \core_privacy\local\metadata\provider, + + // This plugin is a core_user_data_provider. + \core_privacy\local\request\plugin\provider { + + // This is the trait to be included to actually benefit from the polyfill. + use \core_privacy\local\legacy_polyfill; + + /** + * Return the fields which contain personal data. + * + * @param $collection items a reference to the collection to use to store the metadata. + * @return $collection the updated collection of metadata items. + */ + public static function _get_metadata(collection $collection) { + + $collection->link_subsystem( + 'core_files', + 'privacy:metadata:core_files' + ); + + $collection->add_database_table( + 'turnitintooltwo_users', + [ + 'userid' => 'privacy:metadata:turnitintooltwo_users:userid', + 'turnitin_uid' => 'privacy:metadata:turnitintooltwo_users:turnitin_uid', + 'instructor_defaults' => 'privacy:metadata:turnitintooltwo_users:instructor_defaults', + 'instructor_rubrics' => 'privacy:metadata:turnitintooltwo_users:instructor_rubrics', + 'user_agreement_accepted' => 'privacy:metadata:turnitintooltwo_users:user_agreement_accepted', + ], + 'privacy:metadata:turnitintooltwo_users' + ); + + $collection->add_database_table( + 'turnitintooltwo_submissions', + [ + 'userid' => 'privacy:metadata:turnitintooltwo_submissions:userid', + 'submission_title' => 'privacy:metadata:turnitintooltwo_submissions:submission_title', + 'submission_filename' => 'privacy:metadata:turnitintooltwo_submissions:submission_filename', + 'submission_objectid' => 'privacy:metadata:turnitintooltwo_submissions:submission_objectid', + 'submission_score' => 'privacy:metadata:turnitintooltwo_submissions:submission_score', + 'submission_grade' => 'privacy:metadata:turnitintooltwo_submissions:submission_grade', + 'submission_attempts' => 'privacy:metadata:turnitintooltwo_submissions:submission_attempts', + 'submission_modified' => 'privacy:metadata:turnitintooltwo_submissions:submission_modified', + 'submission_unanon' => 'privacy:metadata:turnitintooltwo_submissions:submission_unanon', + 'submission_unanonreason' => 'privacy:metadata:turnitintooltwo_submissions:submission_unanonreason', + 'submission_transmatch' => 'privacy:metadata:turnitintooltwo_submissions:submission_transmatch', + 'submission_orcapable' => 'privacy:metadata:turnitintooltwo_submissions:submission_orcapable', + 'submission_hash' => 'privacy:metadata:turnitintooltwo_submissions:submission_hash', + ], + 'privacy:metadata:turnitintooltwo_submissions' + ); + + $collection->link_external_location('turnitintooltwo_client', [ + 'email' => 'privacy:metadata:turnitintooltwo_client:email', + 'firstname' => 'privacy:metadata:turnitintooltwo_client:firstname', + 'lastname' => 'privacy:metadata:turnitintooltwo_client:lastname', + 'submission_title' => 'privacy:metadata:turnitintooltwo_client:submission_title', + 'submission_filename' => 'privacy:metadata:turnitintooltwo_client:submission_filename', + ], 'privacy:metadata:turnitintooltwo_client'); + + return $collection; + } + + /** + * Get the list of contexts that contain user information for the specified user. + * + * @param int $userid the userid. + * @return contextlist the list of contexts containing user info for the user. + */ + public static function _get_contexts_for_userid($userid) { + + // Fetch all contexts where the user has a submission. + $sql = "SELECT c.id + FROM {context} c + INNER JOIN {course_modules} cm ON cm.id = c.instanceid AND c.contextlevel = :contextlevel + INNER JOIN {modules} m ON m.id = cm.module AND m.name = :modname + INNER JOIN {turnitintooltwo} t ON t.id = cm.instance + LEFT JOIN {turnitintooltwo_submissions} ts ON ts.turnitintooltwoid = t.id + "; + + $params = [ + 'contextlevel' => CONTEXT_MODULE, + 'modname' => 'turnitintooltwo', + 'userid' => $userid, + ]; + + $contextlist = new contextlist(); + $contextlist->add_from_sql($sql, $params); + + return $contextlist; + } + + /** + * Export personal data for the given approved_contextlist. User and context information is contained within the contextlist. + * + * @param approved_contextlist $contextlist a list of contexts approved for export. + */ + public static function _export_user_data(approved_contextlist $contextlist) { + global $DB; + + if (empty($contextlist->count())) { + return; + } + + $user = $contextlist->get_user(); + + list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED); + + $sql = "SELECT cm.id AS cmid, + ts.submission_title, + ts.submission_filename, + ts.submission_objectid, + ts.submission_score, + ts.submission_grade, + ts.submission_attempts, + ts.submission_modified, + ts.submission_unanon, + ts.submission_unanonreason, + ts.submission_transmatch, + ts.submission_orcapable, + ts.submission_hash, + tu.turnitin_uid, + tu.instructor_defaults, + tu.instructor_rubrics, + tu.user_agreement_accepted + FROM {context} c + INNER JOIN {course_modules} cm ON cm.id = c.instanceid + INNER JOIN {turnitintooltwo} t ON t.id = cm.instance + LEFT JOIN {turnitintooltwo_submissions} ts ON ts.turnitintooltwoid = t.id + LEFT JOIN {turnitintooltwo_users} tu ON ts.userid = tu.userid + WHERE c.id {$contextsql} + AND ts.userid = :userid + ORDER BY cm.id"; + + $params = ['userid' => $user->id] + $contextparams; + + $submissions = $DB->get_records_sql($sql, $params); + foreach ($submissions as $submission) { + $context = \context_module::instance($submission->cmid); + self::_export_turnitintooltwo_data_for_user((array)$submission, $context, $user); + } + } + + /** + * Export the supplied personal data for a single activity, along with any generic data or area files. + * + * @param array $submissiondata the personal data to export. + * @param \context_module $context the module context. + * @param \stdClass $user the user record + */ + protected static function _export_turnitintooltwo_data_for_user(array $submissiondata, \context_module $context, \stdClass $user) { + // Fetch the generic module data. + $contextdata = helper::get_context_data($context, $user); + + // Merge with module data and write it. + $contextdata = (object)array_merge((array)$contextdata, $submissiondata); + writer::with_context($context)->export_data([], $contextdata); + + // Write generic module intro files. + helper::export_context_files($context, $user); + } + + /** + * Delete all data for all users in the specified context. + * + * @param \context $context the context to delete in. + */ + public static function _delete_data_for_all_users_in_context(\context $context) { + global $DB; + + if (empty($context)) { + return; + } + + if (!$context instanceof \context_module) { + return; + } + + $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); + $DB->delete_records('turnitintooltwo_submissions', ['turnitintooltwoid' => $instanceid]); + } + + /** + * Delete all user data for the specified user, in the specified contexts. + * + * @param approved_contextlist $contextlist a list of contexts approved for deletion. + */ + public static function _delete_data_for_user(approved_contextlist $contextlist) { + global $DB; + + if (empty($contextlist->count())) { + return; + } + + // Delete records. + foreach ($contextlist->get_contexts() as $context) { + + if (!$context instanceof \context_module) { + return; + } + $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); + $DB->delete_records( + 'turnitintooltwo_submissions', + ['turnitintooltwoid' => $instanceid, 'userid' => $contextlist->get_user()->id] + ); + } + } +} \ No newline at end of file diff --git a/classes/v1migration/v1migration.php b/classes/v1migration/v1migration.php index cfe8098b..ecc31d40 100644 --- a/classes/v1migration/v1migration.php +++ b/classes/v1migration/v1migration.php @@ -16,6 +16,9 @@ defined('MOODLE_INTERNAL') || die(); +global $CFG; +require_once($CFG->libdir . "/gradelib.php"); + define('MIGRATION_SUBMISSIONS_SITE_CUTOFF', 200); define('MIGRATION_MAX_SLEEP', 5); @@ -214,7 +217,7 @@ public function migrate() { $oldersubmission = $DB->get_record('turnitintooltwo_submissions', array('submission_hash' => $v1partsubmission->submission_hash)); if ($oldersubmission) { $v1partsubmission->id = $oldersubmission->id; - $turnitintooltwosubmissionid = $DB->update_record("turnitintooltwo_submissions", $v1partsubmission); + $DB->update_record("turnitintooltwo_submissions", $v1partsubmission); } } } @@ -227,11 +230,13 @@ public function migrate() { $this->log_success_migration_event($turnitintooltwoid, $this->courseid, $this->cm); // Update gradebook for submissions. - $gradeupdates = $this->migrate_gradebook($turnitintooltwoid); + $gradeupdates = $this->migrate_gradebook($turnitintooltwoid, $this->getV1assignment()->id, $this->getCourseid()); - // Only change the titles if we have updated the grades. + // Once grades have been updated we can run the post migration task. if ($gradeupdates == "migrated") { - $this->update_titles_post_migration($turnitintooltwoid); + $_SESSION["migrationtool"]["status"] = $this->post_migration($turnitintooltwoid); + } elseif ($gradeupdates == "cron") { + $_SESSION["migrationtool"]["status"] = "cron"; } // Link the v2 id to the v1 id in the session. @@ -393,10 +398,12 @@ public function migrate_course($v1course) { /** * Update the gradebook for a given assignment. * @param int $turnitintooltwoid The turnitintooltwoid of the assignment. + * @param int $turnitintoolid The turnitintoolid of the assignment. + * @param int courseid The course id of the assignment. * @param string $workflow Whether the function is called from the site or the cron. * @return string Whether we have migrated the assignment or need to use the cron. */ - public static function migrate_gradebook($turnitintooltwoid, $workflow = "site") { + public static function migrate_gradebook($turnitintooltwoid, $turnitintoolid, $courseid, $workflow = "site") { global $CFG, $DB; // Create new Turnitintooltwo object. @@ -415,6 +422,9 @@ public static function migrate_gradebook($turnitintooltwoid, $workflow = "site") sleep(round(max(MIGRATION_MAX_SLEEP - (count($submissions)/$migrationspersleepsecond), 0))); } + // Get the grades for the V1 assignment from the gradebook rather than the module. + $v1_grades = self::get_grades_array("turnitintool", $turnitintoolid, $courseid); + /** * Grade migrations are slow, roughly 27 submissions per second. * As such we only migrate these during the assignment migration if there are not a lot of them. If there are a lot, we use the cron. @@ -424,8 +434,18 @@ public static function migrate_gradebook($turnitintooltwoid, $workflow = "site") return "cron"; } else { foreach ($submissions as $submission) { + // Update the grade from the gradebook. + $submission->submission_grade = (isset($v1_grades[$submission->userid])) ? $v1_grades[$submission->userid] : null; + $submissionclass->update_gradebook($submission, $assignmentclass); + // Handle overridden grades if necessary. + $grading_info = grade_get_grades($courseid, 'mod', 'turnitintool', $turnitintoolid, $submission->userid); + + if (!empty($grading_info->items[0]->grades[$submission->userid]->overridden)) { + self::handle_overridden_grade($v1_grades[$submission->userid], $submission->userid, $turnitintooltwoid, $courseid); + } + // Update the migrate_gradebook field for this submission. $updatesubmission = new stdClass(); $updatesubmission->id = $submission->id; @@ -439,36 +459,87 @@ public static function migrate_gradebook($turnitintooltwoid, $workflow = "site") } /** - * Update module titles after migration has completed. - * @param int $v2assignmentid V2 Module id + * Handle the situation where a user has overridden the grade in the gradebook. + * + * @param int $v1grade The grade from the V1 assignment. + * @param int $userid The userid the grade belongs to. + * @param int $turnitintooltwoid The turnitintooltwoid of the assignment. + * @param int $courseid The course id of the assignment. */ - public function update_titles_post_migration($v2assignmentid) { - global $CFG, $DB; + public static function handle_overridden_grade($v1grade, $userid, $turnitintooltwoid, $courseid) { + $grading_info = grade_get_grades($courseid, 'mod', 'turnitintooltwo', $turnitintooltwoid, $userid); - // Remove the migration in progress text. - $this->v1assignment->name = str_replace(" (" . get_string('migrationinprogress', 'turnitintooltwo') . "...)", "", $this->v1assignment->name); + $grades = new stdClass(); + $grades->userid = $userid; + $grades->finalgrade = $v1grade; - // Update the assignment title with new status. - $updatetitle = new stdClass(); - $updatetitle->id = $this->v1assignment->id; - $updatetitle->name = $this->v1assignment->name . ' ('. get_string('migrated', 'turnitintooltwo') . ')'; + $grade_item = grade_item::fetch(array('id' => $grading_info->items[0]->id, 'courseid' => $courseid)); + $grade_item->update_final_grade($grades->userid, $grades->finalgrade, 'editgrade'); - $DB->update_record('turnitintool', $updatetitle); + $grade_grade = new grade_grade(array('userid' => $userid, 'itemid' => $grade_item->id), true); + $grade_grade->grade_item =& $grade_item; // no db fetching - // Temporarily set the assignment to visible so that the cron can rebuild the course cache for this assignment, - set_coursemodule_visible($this->cm->id, 1); - rebuild_course_cache($this->cm->id); - set_coursemodule_visible($this->cm->id, 0); - - // Update the V1 assignment title in the gradebook. - @include_once($CFG->dirroot."/lib/gradelib.php"); - $params = array(); - $params['itemname'] = $updatetitle->name; - grade_update('mod/turnitintool', $this->courseid, 'mod', 'turnitintool', $this->v1assignment->id, 0, NULL, $params); + $grade_grade->set_overridden(true); + } + /** + * Update module titles after migration has completed. + * @param int $v2assignmentid V2 Module id + * + * @return String Whether the post migration task was successful or had a gradebook update error. + */ + public function post_migration($v2assignmentid) { // Update the V2 assignment title in the gradebook. + $params = array(); $params['itemname'] = $this->v1assignment->name; grade_update('mod/turnitintooltwo', $this->courseid, 'mod', 'turnitintooltwo', $v2assignmentid, 0, NULL, $params); + + // Perform a grade check to double check the grades are in the gradebook. + $v1_grades = $this->get_grades_array("turnitintool", $this->v1assignment->id, $this->courseid); + $v2_grades = $this->get_grades_array("turnitintooltwo", $v2assignmentid, $this->courseid); + + // We only want to delete the V1 assignment if all grades are in the gradebook. + if ($v1_grades === $v2_grades) { + $this->delete_migrated_assignment($this->v1assignment->id); + + return "success"; + } else { + return "gradebookerror"; + } + } + + /** + * @param String $module turnitintool or turnitintooltwo + * @param int $assignmentid The turnitintoolid or turnitintooltwoid for the assignment. + * @param int $courseid The course ID for this assignment. + * @return array An array of grades for this assignment. + */ + public static function get_grades_array($module, $assignmentid, $courseid) { + $cm = get_coursemodule_from_instance($module, $assignmentid); + + if (!isset($cm->id)) { + return array(); + } + + $context = context_module::instance($cm->id); + + $enrolled_students = get_enrolled_users($context, 'mod/'.$module.':submit', 0, 'u.id'); + + $userids = array(); + foreach ($enrolled_students as $student) { + $userids[] = $student->id; + } + + $grades = grade_get_grades($courseid, 'mod', $module, $assignmentid, $userids); + + $response = array(); + if (isset($grades->items[0]->grades)) { + foreach ($grades->items[0]->grades as $student => $grade_item) { + $response[$student] = $grade_item->grade; + } + } + + return $response; } /** @@ -505,8 +576,6 @@ private function log_success_migration_event($turnitintooltwoid, $course_id, $v1 public static function turnitintooltwo_getassignments() { global $DB; - $config = get_config('turnitintooltwo'); - $return = array(); $idisplaystart = optional_param('iDisplayStart', 0, PARAM_INT); $idisplaylength = optional_param('iDisplayLength', 10, PARAM_INT); @@ -560,6 +629,7 @@ public static function turnitintooltwo_getassignments() { } $query = "SELECT id, name, migrated FROM {turnitintool}".$querywhere.$queryorder; $assignments = $DB->get_records_sql($query, $queryparams, $idisplaystart, $idisplaylength); + $totalassignments = count($DB->get_records_sql($query, $queryparams)); $return["aaData"] = array(); foreach ($assignments as $assignment) { @@ -569,7 +639,6 @@ public static function turnitintooltwo_getassignments() { $assignment->migrated = html_writer::tag('span', $sronly, array('class' => 'fa fa-check')); $assignmenttitle = format_string($assignment->name); - } else { $checkbox = ""; $sronly = html_writer::tag('span', get_string('no', 'turnitintooltwo'), array('class' => 'sr-only')); @@ -587,31 +656,28 @@ public static function turnitintooltwo_getassignments() { } /** - * Delete a list of assignments. + * Delete an assignment. * - * @param array $assignmentids The assignment IDs to delete. + * @param int $assignmentid The assignment ID to delete. */ - public static function turnitintooltwo_delete_assignments($assignmentids) { + public static function delete_migrated_assignment($assignmentid) { global $CFG, $DB; require_once($CFG->dirroot . "/mod/turnitintool/lib.php"); - foreach ($assignmentids as $assignmentid) { - $cm = get_coursemodule_from_instance('turnitintool', $assignmentid); + $cm = get_coursemodule_from_instance('turnitintool', $assignmentid); - // We have found that backups aren't reliable on MSSQL so rather than use Moodle's - // function which uses the recycle tool and the backup procedure. We handle the deletion directly. - if ($CFG->dbtype == 'mssql' || $CFG->dbtype == 'sqlsrv') { - turnitintool_delete_instance($assignmentid); + // We have found that backups aren't reliable on MSSQL so rather than use Moodle's + // function which uses the recycle tool and the backup procedure. We handle the deletion directly. + if ($CFG->dbtype == 'mssql' || $CFG->dbtype == 'sqlsrv') { + turnitintool_delete_instance($assignmentid); - // Delete course module. - $DB->delete_records('course_modules', array('id' => $cm->id)); + // Delete course module. + $DB->delete_records('course_modules', array('id' => $cm->id)); - rebuild_course_cache($cm->course); - } else { - course_delete_module($cm->id); - } - + rebuild_course_cache($cm->course); + } else { + course_delete_module($cm->id); } } @@ -684,7 +750,7 @@ public static function output_settings_form($enablesetting = true) { $PAGE->requires->string_for_js('confirmv1deletetitle', 'turnitintooltwo'); $PAGE->requires->string_for_js('confirmv1deletetext', 'turnitintooltwo'); $PAGE->requires->string_for_js('confirmv1deletewarning', 'turnitintooltwo'); - + $migrationform = new turnitintooltwo_form($CFG->wwwroot.'/mod/turnitintooltwo/settings_extras.php?cmd=v1migration', $customdata); @@ -695,43 +761,17 @@ public static function output_settings_form($enablesetting = true) { return $output; } - /** - * activate_migration - * Updates the database to flag that the user has enabled the migration tool. - * @return object $activation - db record of the migration activation row inserted into config_plugins. - */ - public static function activate_migration() { - global $DB; - $migration_enabled_params = array( - 'plugin' => 'turnitintooltwo', - 'name' => 'migration_enabled' - ); - $migration_enabled = $DB->get_record('config_plugins', $migration_enabled_params); - - $activation_properties = new stdClass; - $activation_properties->plugin = 'turnitintooltwo'; - $activation_properties->name = 'migration_enabled'; - $activation_properties->value = 1; - - if (empty($migration_enabled)) { - $activation = $DB->insert_record('config_plugins', $activation_properties); - } else { - $id = $migration_enabled->id; - $activation = $DB->update_record('config_plugins', array('id' => $id, 'value' => 1)); - } - - return $activation; - } - - public static function check_account($accountid) { + public static function check_account($accountid, $error = false) { global $CFG; $config = turnitintooltwo_admin_config(); $tiiapiurl = (substr($config->apiurl, -1) == '/') ? substr($config->apiurl, 0, -1) : $config->apiurl; + $errorType = ($error) ? "&error=gradebook" : ""; + $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $tiiapiurl."/api/rest/check?lang=en_us&operation=mdl-migration&account=".$accountid); + curl_setopt($ch, CURLOPT_URL, $tiiapiurl."/api/rest/check?lang=en_us&operation=mdl-migration&account=".$accountid.$errorType); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (isset($CFG->proxyhost) AND !empty($CFG->proxyhost)) { @@ -745,4 +785,18 @@ public static function check_account($accountid) { curl_exec($ch); curl_close($ch); } + + /** + * @return mixed + */ + public function getCourseid() { + return $this->courseid; + } + + /** + * @return mixed + */ + public function getV1assignment() { + return $this->v1assignment; + } } diff --git a/jquery/turnitintooltwo.js b/jquery/turnitintooltwo.js index e0f0fda6..a201d375 100755 --- a/jquery/turnitintooltwo.js +++ b/jquery/turnitintooltwo.js @@ -1195,7 +1195,7 @@ } function lightBoxCloseButton() { - $('body').append('
' + M.str.turnitintooltwo.closebutton + '
'); + $('body').append('
' + M.str.turnitintooltwo.closebutton + '
'); } function initialiseDigitalReceipt() { diff --git a/jquery/turnitintooltwo.min.js b/jquery/turnitintooltwo.min.js index 83e3176b..99a3294e 100755 --- a/jquery/turnitintooltwo.min.js +++ b/jquery/turnitintooltwo.min.js @@ -1,3 +1,3 @@ -!function($){$(window).on("load",function(){function enableEditingText(i){$("#tabs-"+i+" .editable_date, #tabs-"+i+" .editable_text").editable("enable")}function disableEditingText(i){$("#tabs-"+i+" .editable_date, #tabs-"+i+" .editable_text").editable("disable")}function getLoadingGif(){var i='
';$("#cboxOverlay").after(i);var e=$(window).scrollTop()+$(window).height()/2;$(".loading_gif").css("top",e+"px")}function hideLoadingGif(){$(".loading_gif").remove()}function getSubmissions(table,assignment_id,part_id,start,refresh_requested,total){$.ajax({dataType:"json",type:"POST",url:"ajax.php",async:!0,data:{action:"get_submissions",assignment:assignment_id,part:part_id,start:start,refresh_requested:refresh_requested[part_id],sesskey:M.cfg.sesskey,total:total},success:function(result){if(eval(result),start=result.end,result.aaData.length>0&&table.fnAddData(result.aaData),result.end0&&$(".nonsubmitters_link").attr("style","display: block")}},error:function(i,e){$("#"+part_id+"_processing").attr("style","visibility: hidden"),$(".dataTables_empty").html(M.str.turnitintooltwo.tiisubmissionsgeterror)}})}function submitVisibility(){1==$(".upload_box").data("user-type")||1==$(".upload_box").data("eula")?$(".upload_box").show():$(".upload_box").hide()}function refreshRubricSelect(){var i=$("#id_rubric").length?"#id_rubric":"#id_plagiarism_rubric",e=$(i).val();$.ajax({dataType:"json",type:"POST",url:"../mod/turnitintooltwo/ajax.php",data:{action:"refresh_rubric_select",assignment:$('input[name="instance"]').val(),modulename:$('input[name="modulename"]').val(),course:$('input[name="course"]').val()},success:function(t){$($(i)).empty();var s=t;$.each(s,function(e,t){if($.isNumeric(e)||""===e)$($(i)).append($("");s.attr("label",e),$.each(t,function(i,e){var t=$("");t.val(i),t.text(e),s.append(t)}),$(i).append(s)}}),$(i+' option[value="'+e+'"]').attr("selected","selected")}})}function refreshUserMessages(){$(".messages_loading").show(),$(".messages_amount").html(""),$.ajax({dataType:"html",type:"POST",url:"ajax.php",data:{action:"refresh_user_messages",assignment:$("#assignment_id").html()},success:function(i){$(".messages_loading").hide(),$(".messages_amount").html(i)}})}function resetPeermarkSection(i){$("#tabs-"+i+" .toggle_peermarks").hide(),$("#tabs-"+i+" .peermark_count").html(""),$("#tabs-"+i+" .peermark-loading").show(),$("#tabs-"+i+" .peermark_assignments_container").hide()}function refreshPeermarkAssignments(part_id,refresh_requested){var user_role=$(".tii_peermark_manager_launch").length>0?"Instructor":"Learner";$("#tabs-"+part_id+" .peermark_assignments_container").length>0&&(resetPeermarkSection(part_id),$.ajax({dataType:"json",type:"POST",url:"ajax.php",data:{action:"refresh_peermark_assignments",assignment:$("#assignment_id").html(),part:part_id,refresh_requested:refresh_requested,sesskey:M.cfg.sesskey},success:function(data){eval(data),$("#tabs-"+part_id+" .peermark_assignments_container").html(data.peermark_table),$("#tabs-"+part_id+" .peermark-loading").hide(),$("#tabs-"+part_id+" .peermark_count").html(data.no_of_peermarks),data.no_of_peermarks>0?$("#tabs-"+part_id+" .toggle_peermarks").show():$("#tabs-"+part_id+" .toggle_peermarks").hide(),(data.no_of_peermarks>0&&"Instructor"==user_role||data.peermarks_active&&"Learner"==user_role)&&$("#tabs-"+part_id+" .row_peermark_reviews").show(),"true"==$.cookie("show_peermarks_"+$("#assignment_id").html())&&data.no_of_peermarks>0?($(".show_peermarks_"+$("#assignment_id").html()).hide(),$(".hide_peermarks_"+$("#assignment_id").html()).show(),$(".peermark_assignments_container").slideDown()):($(".show_peermarks_"+$("#assignment_id").html()).show(),$(".hide_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideUp())}}))}function initialiseUnanoymiseForm(scope,assignment_id,submission_id){var identifier="a.unanonymise";"row"==scope&&(identifier="#submission_"+submission_id),$(identifier).colorbox({inline:!0,width:"50%",top:"100px",height:"260px",opacity:"0.7",className:"tii_unanonymise_reveal_form",onComplete:function(){var idStr=$(this).attr("id").split("_");if(0==submission_id||void 0==submission_id)var submission_id=idStr[1];0==assignment_id&&(assignment_id=$("#assignment_id").html()),$("#submission_id").html(submission_id),$("#cboxLoadedContent .unanonymise_form").show(),$("#id_reveal").unbind("click"),$("#id_reveal").click(function(){$.ajax({dataType:"json",type:"POST",url:"ajax.php",data:{action:"reveal_submission_name",assignment:assignment_id,submission_id:submission_id,reason:encodeURIComponent($("#id_anonymous_reveal_reason").val()),sesskey:M.cfg.sesskey},success:function(data){if(eval(data),"success"==data.status)$.colorbox.close(),$("#submission_"+submission_id).attr("href",M.cfg.wwwroot+"/user/view.php?id="+data.userid+"&course="+data.courseid),$("#submission_"+submission_id).html(data.name),$("#submission_"+submission_id).removeClass("unanonymise cboxElement");else{var current_msg=$("#unanonymise_desc").html;$("#unanonymise_desc").html(current_msg+" "+data.msg)}}})})},onCleanup:function(){$(".unanonymise_form").hide()}})}function initialiseUploadBox(i,e,t,s){var a=".upload_box";"row"==i&&(a="#upload_"+e+"_"+t+"_"+s);var n="80%",o="80%";$(a).colorbox({onLoad:function(){getLoadingGif(),lightBoxCloseButton(),$(this).hide()},onClosed:function(){hideLoadingGif()},onCleanup:function(){hideLoadingGif();var i=$(this).attr("id").split("_");refreshInboxRow("upload",i[1],i[2],i[3]),$("#tii_close_bar").remove()},iframe:!0,width:n,height:o,opacity:"0.7",className:"upload",transition:"none"})}function initialiseZipDownloads(i){$("#tabs-"+i+" .orig_zip_open, #tabs-"+i+" .pdf_zip_open, #tabs-"+i+" .xls_inbox_open").unbind("click"),$("#tabs-"+i+" .orig_zip_open, #tabs-"+i+" .pdf_zip_open, #tabs-"+i+" .xls_inbox_open").click(function(){var i=$(this).attr("id").split("_");downloadZipFile(i[0]+"_"+i[1],i[2])}),$("#tabs-"+i+" .downloadpdf_box").colorbox({iframe:!0,width:"40%",height:"60%",opacity:"0.7",className:"downloadpdf_window",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()},onClosed:function(){refreshUserMessages()}}),$(document).on("click","#tabs-"+i+" .gmpdfzip_box",function(e){return $(this).colorbox({open:!0,iframe:!0,width:"786px",height:"300px",opacity:"0.7",className:"gmpdfzip_window",transition:"none",href:function(){var e="";return $("#tabs-"+i+" .inbox_checkbox:checked").each(function(i){e+="&submission_id"+i+"="+$(this).val(),i++}),$(this).attr("href")+e},onLoad:function(){getLoadingGif()},onCleanup:function(){hideLoadingGif()},onClosed:function(){refreshUserMessages()}}),!1})}function lightBoxCloseButton(){$("body").append('")}function initialiseDigitalReceipt(){$(".tii_digital_receipt").length>0&&$(".tii_digital_receipt").colorbox({iframe:!0,width:"832px",height:"482px",opacity:"0.7",className:"rubric_view",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}})}function initialiseHiddenZipDownloads(i){$("#tabs-"+i+" .origchecked_zip_open").unbind("click"),$("#tabs-"+i+" .origchecked_zip_open").click(function(){var e=$(this).attr("id").split("_");return downloadZipFile(e[0]+"_"+e[1],i),!1})}function initialiseRefreshRow(i,e,t,s){var a=".refresh_row .fa-refresh";"row"==i&&(a="#refreshrow_"+e+"_"+t+"_"+s+" .fa-refresh"),$(a).unbind("click"),$(a).click(function(){$(this).hide(),$(this).siblings(".fa-spinner").css("display","inline-block").addClass("fa-lg");var i=$(this).parent().attr("id").split("_");refreshInboxRow(i[0],i[1],i[2],i[3])})}function initialiseDVLaunchers(i,e,t,s){var a="#"+t+" .download_original_open";"row"==i&&(a="#downloadoriginal_"+e+"_"+t+"_"+s),$(a).unbind("click"),$(a).click(function(){var i=$(this).attr("id").split("_");$(this).children(".score_colour").hasClass("score_colour_")||downloadOriginalFile(i[0],i[1],i[2],i[3])})}function downloadZipFile(i,e){var t=[];"origchecked_zip"!=i&&"gmpdf_zip"!=i||$("#tabs-"+e+" .inbox_checkbox:checked").each(function(i){t[i]=$(this).val()}),$.ajax({type:"POST",url:"ajax.php",dataType:"html",data:{action:i,assignment:$("#assignment_id").html(),part:e,submission_ids:t},success:function(t){$("#"+i+"_form_"+e).html(t),$("#"+i+"_form_"+e).children("form").submit(),$("#"+i+"_form_"+e).html("")}})}function downloadOriginalFile(i,e,t,s){$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"html",data:{action:i,submission:e,assignment:$("#assignment_id").html()},success:function(t){$("#"+i+"_form_"+e).html(t),$("#"+i+"_form_"+e).children("form").submit(),$("#"+i+"_form_"+e).html("")}})}function checkDVClosed(i){window.dvWindow.closed?$("#refresh_"+i).click():setTimeout(function(){checkDVClosed(i)},500)}function submitNothing(user_id,part_id){$("#submitnothing_0_"+part_id+"_"+user_id+" i").attr("class","fa fa-spin fa-spinner fa-lg"),$.ajax({type:"POST",url:"ajax.php",dataType:"json",data:{action:"submit_nothing",assignment:$("#assignment_id").html(),part:part_id,user:user_id,sesskey:M.cfg.sesskey},success:function(data){eval(data),$.cookie("submitnothingaccept",!0,{expires:365}),$("table#"+part_id+" .select_all_checkbox").attr("checked",!1)},error:function(i){$("#submitnothing_0_"+part_id+"_"+user_id+" i").attr("class","fa fa-pencil fa-lg"),$("#submitnothing_0_"+part_id+"_"+user_id).removeClass("disabled"),alert(i.responseText)},complete:function(){refreshInboxRow("submitnothing",0,part_id,user_id)}})}function refreshInboxRow(link,submission_id,part_id,user_id){$.ajax({type:"POST",url:"ajax.php",dataType:"json",data:{action:"refresh_submission_row",assignment:$("#assignment_id").html(),part:part_id,user:user_id,sesskey:M.cfg.sesskey},success:function(data){$("table#"+part_id+" .select_all_checkbox").attr("checked",!1),eval(data);var i=0;0==submission_id?(link+="_0",submission_id=data.submission_id):link=null==data.submission_id&&0!=submission_id?link+"_"+submission_id:link+"_"+data.submission_id,0!=submission_id&&$("#export_links").removeClass("hidden_class"),oTable=$("table#"+part_id).dataTable();var tr=$("#"+link+"_"+part_id+"_"+user_id).parent().parent(),rowindex=tr.index();oTable.fnDeleteRow(tr),oTable.fnAddData(data.row),submitVisibility(),initialiseUploadBox("row",data.submission_id,part_id,user_id),initialiseDVLaunchers("row",data.submission_id,part_id,user_id),initialiseRefreshRow("row",data.submission_id,part_id,user_id),initialiseCheckboxes(data.submission_id,part_id),initialiseUnanoymiseForm("row",$("#assignment_id").html(),data.submission_id)}})}function initialiseCheckboxes(i,e){var t="#tabs-"+e+" .inbox_checkbox";0!=i&&(t="check_"+i),$("#tabs-"+e+" .inbox_checkbox").click(function(){$("table#"+e+" .select_all_checkbox").attr("checked",!1)}),$(document).on("click",t+", .select_all_checkbox",function(){$("#tabs-"+e+" .inbox_checkbox:checked").length>0?($("#tabs-"+e+" .zip_downloads").slideDown(),initialiseHiddenZipDownloads(e)):($("#tabs-"+e+" .origchecked_zip_open").unbind("click"),$("#tabs-"+e+" .zip_downloads").slideUp())})}function showPartDatesBoxes(){for(var i=0;i<=5;i++)i<=$("#id_numparts").val()?$('fieldset[id$="partdates'+i+'"]').slideDown():$('fieldset[id$="partdates'+i+'"]').slideUp()}if($(".js_required").show(),$(".js_hide").hide(),1==$("#id_submissiontype").val()&&$("#id_submissiontext").parent().parent().hide(),2==$("#id_submissiontype").val()&&$("#id_submissionfile").parent().parent().hide(),$("#id_submissionagreement").length&&$("#id_submitbutton").attr("disabled","disabled"),$("#id_submissionagreement").on("click",function(){$(this).is(":checked")?$("#id_submissionagreement").each(function(){$("#id_submitbutton").removeAttr("disabled")}):$("#id_submissionagreement").each(function(){$("#id_submitbutton").attr("disabled","disabled")})}),$(document).on("click",".delete_paper",function(){var i=$(this).data("confirm"),e=M.str.turnitintooltwo[i].replace(/\\n/g,"\n"),t=confirm(e);t&&$.ajax({type:"POST",url:"ajax.php",dataType:"html",data:{action:"deletesubmission",sesskey:M.cfg.sesskey,paper:$(this).data("paper"),part:$(this).data("part"),assignment:$(this).data("assignment")},success:function(){window.location.href=window.location.href}})}),$(document).on("click",".submit_nothing",function(){if(!$(this).hasClass("disabled")){$(this).addClass("disabled");var i=$(this).prop("id").split("_")[2],e=$(this).prop("id").split("_")[3],t=M.str.turnitintooltwo.submitnothingwarning.replace(/
/g,"\n").replace(/'/g,"'"),s=$.cookie("submitnothingaccept");s||confirm(t)?submitNothing(e,i):$(this).removeClass("disabled")}}),$(document).on("change","#id_submissiontype",function(){1==$("#id_submissiontype").val()&&($("#id_submissiontext").parent().parent().hide(),$("#id_submissionfile").parent().parent().show()),2==$("#id_submissiontype").val()&&($("#id_submissionfile").parent().parent().hide(),$("#id_submissiontext").parent().parent().show())}),$(document).on("submit",".submission_form_container form",function(){return $("#id_submissiontitle").val().length>0&&($("#general").slideUp("slow"),$(".mod_turnitintooltwo .noticebox").slideUp("slow"),$(".submission_form_container form").slideUp("slow"),$("#submitting_loader").slideDown("slow"),!0)}),$(".toggle_summary").length>0&&($.cookie("show_summary_"+$("#assignment_id").html())||$.cookie("show_summary_"+$("#assignment_id").html(),!0,{expires:30}),"true"==$.cookie("show_summary_"+$("#assignment_id").html())?($(".hide_summary_"+$("#assignment_id").html()).show(),$(".show_summary_"+$("#assignment_id").html()).hide(),$(".introduction").slideDown()):($(".show_summary_"+$("#assignment_id").html()).show(),$(".hide_summary_"+$("#assignment_id").html()).hide(),$(".introduction").slideUp()),$(".toggle_summary i").click(function(){$(this).hasClass("show_summary_"+$("#assignment_id").html())?($.cookie("show_summary_"+$("#assignment_id").html(),!0,{expires:30}),$(".show_summary_"+$("#assignment_id").html()).hide(),$(".hide_summary_"+$("#assignment_id").html()).show(),$(".introduction").slideDown()):($.cookie("show_summary_"+$("#assignment_id").html(),!1,{expires:30}),$(".show_summary_"+$("#assignment_id").html()).show(),$(".hide_summary_"+$("#assignment_id").html()).hide(),$(".introduction").slideUp())})),$(".toggle_peermarks").length>0&&($.cookie("show_peermarks_"+$("#assignment_id").html())||$.cookie("show_peermarks_"+$("#assignment_id").html(),!0,{expires:30}),"true"==$.cookie("show_peermarks_"+$("#assignment_id").html())?($(".hide_peermarks_"+$("#assignment_id").html()).show(),$(".show_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideDown()):($(".show_peermarks_"+$("#assignment_id").html()).show(),$(".hide_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideUp()),$(".toggle_peermarks i").click(function(){$(this).hasClass("show_peermarks_"+$("#assignment_id").html())?($.cookie("show_peermarks_"+$("#assignment_id").html(),!0,{expires:30}),$(".show_peermarks_"+$("#assignment_id").html()).hide(),$(".hide_peermarks_"+$("#assignment_id").html()).show(),$(".peermark_assignments_container").slideDown()):($.cookie("show_peermarks_"+$("#assignment_id").html(),!1,{expires:30}),$(".show_peermarks_"+$("#assignment_id").html()).show(),$(".hide_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideUp())})),$(document).on("click",".show_peermark_instructions, .hide_peermark_instructions",function(){var i=$(this).attr("id").split("_");"show"==i[0]?($("#show_peermark_instructions_"+i[3]).hide(),$("#hide_peermark_instructions_"+i[3]).show(),$("#peermark_instructions_"+i[3]).slideDown()):($("#show_peermark_instructions_"+i[3]).show(),$("#hide_peermark_instructions_"+i[3]).hide(),$("#peermark_instructions_"+i[3]).slideUp())}),showPartDatesBoxes(),$(document).on("change","#id_numparts",function(){showPartDatesBoxes()}),$(document).on("click",".splitter-lastname, .splitter-firstname",function(i){var e=$(i.target),t=e.hasClass("sorting_asc"),s="asc",a="desc",n=e.attr("data-col");t||(s="desc",a="asc"),e.closest(".submissionsDataTable").DataTable().order([n,a]).draw(),e.addClass("sorting_"+a).removeClass("sorting sorting_"+s),e.parent().removeClass("sorting sorting_asc sorting_desc"),e.siblings().removeClass("sorting_asc sorting_desc").addClass("sorting")}),$("#dataTable").length>0&&$("#dataTable").dataTable(),"undefined"!=typeof M.str.turnitintooltwo)var dataTablesLang={sProcessing:''+M.str.turnitintooltwo.sprocessing+"",sZeroRecords:M.str.turnitintooltwo.szerorecords,sInfo:M.str.turnitintooltwo.sinfo,sSearch:M.str.turnitintooltwo.ssearch,sLengthMenu:M.str.turnitintooltwo.slengthmenu,oPaginate:{sNext:M.str.turnitintooltwo.snext,sPrevious:M.str.turnitintooltwo.sprevious}};if($("#tabs").length>0){var activeTab=0;$("#tab_position").length>0&&(activeTab=$("#tab_position").text()),$("#tabs").tabs({active:activeTab,show:function(){var i=$.fn.dataTable.fnTables(!0);i.length>0&&$(i).dataTable().fnAdjustColumnSizing()}})}$(".enrolledMembers").length>0&&$(".enrolledMembers").dataTable({bProcessing:!0,sAjaxSource:"ajax.php",aoColumnDefs:[{bSortable:!1,sClass:"centered_cell",aTargets:[0]},{sClass:"left",aTargets:[1]}],oLanguage:dataTablesLang,fnServerData:function(i,e,t){$.ajax({dataType:"json",type:"POST",url:i,data:{action:"get_members",assignment:$("#assignment_id").html(),role:$("#user_role").html()},success:function(i){t(i)},error:function(i,e){$(".dataTables_processing").attr("style","visibility: hidden"),$(".dataTables_empty").html(M.str.turnitintooltwo.membercheckerror)}})}});var submissionsDataTableColumns=[],visibleCols=[],noOfColumns=$("table.submissionsDataTable th").length/$("table.submissionsDataTable").length,notStudentView=$("table.submissionsDataTable th.sorting_name").length>0,showOrigReport=$("table.submissionsDataTable th.creport").length>0,useGradeMark=$("table.submissionsDataTable th.cgrade").length>0,multipleParts=$("table.submissionsDataTable th.coverallgrade").length>0;if(notStudentView)for(var i=0;i=9&&!showOrigReport&&!useGradeMark||i>=11&&(!showOrigReport&&useGradeMark||showOrigReport&&!useGradeMark)||i>=13&&showOrigReport&&useGradeMark?(submissionsDataTableColumns.push({sClass:"center",bSortable:!1}),visibleCols.push(!0)):(0==i||4==i||7==i||9==i&&showOrigReport||9==i&&!showOrigReport||11==i&&useGradeMark)&&(submissionsDataTableColumns.push({bVisible:!1}),visibleCols.push(!1));else for(var i=0;i=8&&!showOrigReport&&!useGradeMark||i>=10&&(!showOrigReport&&useGradeMark||showOrigReport&&!useGradeMark)||i>=12&&showOrigReport&&useGradeMark?(submissionsDataTableColumns.push({sClass:"center",bSortable:!1}),visibleCols.push(!0)):(0==i||3==i||6==i||8==i&&showOrigReport||8==i&&!showOrigReport||10==i&&useGradeMark)&&(submissionsDataTableColumns.push({bVisible:!1}),visibleCols.push(!1));var partTables=[],refreshRequested=[];$("table.submissionsDataTable").each(function(){var i=$(this).attr("id");refreshRequested[i]=0,partTables[i]=$("table#"+i).dataTable({bProcessing:!0,aoColumns:submissionsDataTableColumns,aLengthMenu:[[10,25,50,100,-1],[10,25,50,100,"All"]],aaSorting:[[2,"asc"],[4,"asc"]],sAjaxSource:"ajax.php",oLanguage:dataTablesLang,sDom:'r<"listbar-container"<"top listbar clearfix"lf>><"dt_pagination clearfix"pi>t<"bottom"><"dt_pagination clearfix"pi>',fnServerData:function(e,t,s){$.ajax({dataType:"json",type:"POST",url:e,data:{action:"initialise_redraw"},success:function(e){disableEditingText(i),s(e),$("#"+i+"_processing").attr("style","visibility: visible"),getSubmissions(partTables[i],$("#assignment_id").html(),i,0,refreshRequested,0)}})},bStateSave:!0,fnStateSave:function(e,t){try{localStorage.setItem(i+"DataTables",JSON.stringify(t))}catch(s){}},fnStateSaveParams:function(i,e){e.abVisCols=visibleCols},fnStateLoad:function(e){try{return JSON.parse(localStorage.getItem(i+"DataTables"))}catch(t){}},fnStateLoadParams:function(i,e){e.abVisCols=visibleCols},fnDrawCallback:function(e){initialiseDigitalReceipt(),initialiseDVLaunchers("all",0,i,0),initialiseRefreshRow("all",0,i,0),initialiseUploadBox("all",0,0,0),initialiseZipDownloads(i),initialiseCheckboxes(0,i),initialiseUnanoymiseForm("all",0,0)}})}),$("table.submissionsDataTable").each(function(){var i=$(this).attr("id");refreshPeermarkAssignments(i,0)}),$(".messages_amount").length>0&&refreshUserMessages(),$(".tii_table_functions").each(function(){var i=$(this).attr("id").split("tii_table_functions_")[1],e=$("#tii_table_functions_"+i).html();$("#tii_table_functions_"+i).remove(),$("#"+i+"_length").after(e),$(".messages_inbox").show(),$("#refresh_"+i).show(),$("#refreshing_"+i).hide()});var zip_downloads=$(".zip_downloads");if($.each(zip_downloads,function(){var i=$(this).attr("id").split("_")[1];$(this).remove(),$("#"+i+"_length").after($(this))}),"Learner"==$("#user_role").html()&&$(".dataTables_length, .dataTables_filter, .dt_pagination").hide(),$(".refresh_link").click(function(){return $(this).is(":visible")&&($(".refresh_link").hide(),$(".refreshing_link").show(),$("table.submissionsDataTable").each(function(){refreshRequested[$(this).attr("id")]=1,partTables[$(this).attr("id")].fnReloadAjax(),partTables[$(this).attr("id")].fnStandingRedraw()})),!1}),$("#turnitin_sync_all_grades").length>0&&$(".turnitin_sync_grades").click(function(){$(".turnitin_sync_grades").hide(),$(".turnitin_syncing_grades").show(),$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:"sync_all_submissions",assignment:$("#turnitin_sync_all_grades").data("turnitintooltwoid"),sesskey:M.cfg.sesskey},success:function(i){$(".turnitin_sync_grades").show(),$(".turnitin_syncing_grades").hide()}})}),$(".submission_failure_msg").length>0&&window.parent.$(".upload_box").colorbox.resize({width:"800px",height:"240px"}),$(".enrol_link").click(function(){$("#enrolling_error").hide(),$(".enrol_link").hide(),$(".enrolling_container").show(),$.ajax({type:"POST",url:"ajax.php",dataType:"html",data:{action:"enrol_all_students",assignment:$("#assignment_id").html(),sesskey:M.cfg.sesskey},success:function(i){window.location.href=window.location.href},error:function(i,e){$(".enrol_link").show(),$(".enrolling_container").hide(),$("#enrolling_error").show()}})}),$(".rubric_manager_launch").length>0&&$(".rubric_manager_launch").colorbox({iframe:!0,width:"832px",height:"682px",opacity:"0.7",className:"rubric_manager",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){hideLoadingGif(),"rubric_manager_inbox_launch"!=$(this).attr("id")&&refreshRubricSelect(),$("#tii_close_bar").remove()}}),$(".rubric_view_launch").length>0&&$(".rubric_view_launch").colorbox({iframe:!0,width:"832px",height:"682px",opacity:"0.7",className:"rubric_view",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$("#id_rubric, #id_plagiarism_rubric").mousedown(function(){""!=$('input[name="instance"]').val()&&"Y"!=$('input[name="rubric_warning_seen"]').val()&&confirm(M.str.turnitintooltwo.changerubricwarning)&&$('input[name="rubric_warning_seen"]').val("Y")}),($(".quickmark_manager_launch").length>0||$(".plagiarism_turnitin_quickmark_manager_launch").length>0)&&$(".quickmark_manager_launch, .plagiarism_turnitin_quickmark_manager_launch").colorbox({iframe:!0,width:"770px",height:"600px",opacity:"0.7",className:"quickmark_manager",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".tii_peermark_manager_launch").length>0&&$(".tii_peermark_manager_launch").colorbox({iframe:!0,width:"802px",height:"772px",opacity:"0.7",className:"peermark_manager",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()},onClosed:function(){var i=$(this).attr("id").split("_");refreshPeermarkAssignments(i[2],1)}}),$(".tii_peermark_reviews_launch").length>0&&$(".tii_peermark_reviews_launch").colorbox({iframe:!0,width:"802px",height:"772px",opacity:"0.7",className:"peermark_reviews",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".messages_inbox").length>0&&$(".messages_inbox").colorbox({iframe:!0,width:"772px",height:"772px",opacity:"0.7",className:"messages",transition:"none",closeButton:!1,onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".nonsubmitters_link").length>0&&$(".nonsubmitters_link").colorbox({iframe:!0,width:"740px",height:"540px",opacity:"0.7",className:"nonsubmitters",transition:"none",closeButton:!1,onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".nonsubmittersformsuccessmsg").length>0&&(hideLoadingGif(),window.parent.$(".nonsubmitters").colorbox.resize({width:"740px",height:"120px"})),$(".rubric_view_launch").length>0&&$(".rubric_view_launch").colorbox({iframe:!0,width:"832px",height:"682px",opacity:"0.7",className:"rubric_view",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(document).on("click",".default_open, .origreport_open, .grademark_open",function(){var i=!0,e=$(this).attr("id").split("_"),t=$("#date_due_"+e[2]).html(),s=moment(t).unix(),a=e[0],n=e[1],o=e[2];if(s>moment().unix()&&$(this).hasClass("graded_warning")&&(confirm(M.str.turnitintooltwo.resubmissiongradewarn)||(i=!1)),i){dvWindow=window.open("","_blank");var r='
';r+='',r+='

'+M.str.turnitintooltwo.loadingdv+"

",r+="
",$(dvWindow.document.body).html(r),$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:a,submission:n,assignment:$("#assignment_id").html()},success:function(i){$(dvWindow.document.body).html(r+i),dvWindow.document.forms[0].submit(),dvWindow.document.close(),checkDVClosed(o)}})}}),$("#id_rubric, #id_plagiarism_rubric").length>0&&refreshRubricSelect(),self!=top&&"box"==$("#view_context").html()?$("html").css("background","none"):self!=top&&"box_solid"==$("#view_context").html()&&$("html").css("background","#FFF"),$(".editable_postdue").on("click",function(){1==$(this).data("anon")&&alert(M.str.turnitintooltwo.postdate_warning)}),$(".editable_text").length>0){$.fn.editable.defaults.mode="inline",$.fn.editable.defaults.url="ajax.php",$.fn.editable.defaults.onblur="submit",$.fn.editable.defaults.showbuttons=!1,$.fn.editable.defaults.ajaxOptions={dataType:"json"},$(".editable_text").editable({validate:function(i){if($(this).attr("id").indexOf("marks_")>=0&&(Math.floor(i)!=i||!$.isNumeric(i)||i.indexOf(".")!=-1))return M.str.turnitintooltwo.maxmarkserror},success:function(i,e){if(!i.success)return i.msg;if("maxmarks"==i.field)$("#refresh_"+i.partid).click(),$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:"sync_all_submissions",assignment:$("#assignment_id").html(),sesskey:M.cfg.sesskey}});else if("partname"==i.field){var t=$(this).parentsUntil(".ui-tabs-panel").parent().attr("aria-labelledby");$("#"+t).text(e)}}}),$("#export_options").hasClass("tii_export_options_hide")&&($("#export_options").hide(),$(".export_data").html('--')),$(".editable_postdue").on("click",function(){var i=$(this);$.ajax({type:"POST",url:"ajax.php",dataType:"json",data:{action:"check_anon",part:i.data("pk"),assignment:$("#assignment_id").html()},success:function(e){i.data("anon",e.anon),i.data("unanon",e.unanon),i.data("submitted",e.submitted)}})});var theDate=new Date;$(".editable_date").editable({type:"combodate",format:"YYYY-MM-DD HH:mm",viewformat:"D MMM YYYY, HH:mm",template:"D MMM YYYY HH:mm",combodate:{minuteStep:1,minYear:2e3,maxYear:theDate.getFullYear()+2,smartDays:!0},validate:function(i){if(i.format("X")--')):($(".empty-dash").remove(),$("#export_options").show()))):i.msg}}),$(".editable_date").click(function(){if($(this).hasClass("editable-disabled"))return!1}),$(".editable_date, .editable_text").on("shown",function(i,e){var t=$(this).prop("id");$(".editable_date, .editable_text").not("#"+t).editable("disable"),$(".submit_nothing").addClass("disabled")}),$(".editable_date, .editable_text").on("hidden",function(){var i=$(this).prop("id");$(".editable_date, .editable_text").not("#"+i).editable("enable"),$(".submit_nothing").removeClass("disabled")})}$("#inbox_form form, .launch_form form").submit(),$(".turnitin_eula_link").length>0&&$(".turnitin_eula_link").colorbox({iframe:!0,width:"766px",height:"596px",opacity:"0.7",className:"eula_view",scrolling:"false",onLoad:function(){getLoadingGif()},onComplete:function(){$(window).on("message",function(i){var e="undefined"==typeof i.data?i.originalEvent.data:i.data;$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:"acceptuseragreement",message:e,sesskey:M.cfg.sesskey},success:function(i){window.location.reload()},error:function(i){window.location.reload()}})})},onCleanup:function(){hideLoadingGif()}}),$("#tii_receipt_print").click(function(){window.print()}),$(".select_all_checkbox").on("click",function(){var i=$(this).parent().parent().parent().parent().attr("id");$(this).is(":checked")?($("#"+i+" .inbox_checkbox").length&&$("#tabs-"+i+" .zip_downloads").slideDown(), +!function($){$(window).on("load",function(){function enableEditingText(i){$("#tabs-"+i+" .editable_date, #tabs-"+i+" .editable_text").editable("enable")}function disableEditingText(i){$("#tabs-"+i+" .editable_date, #tabs-"+i+" .editable_text").editable("disable")}function getLoadingGif(){var i='
';$("#cboxOverlay").after(i);var e=$(window).scrollTop()+$(window).height()/2;$(".loading_gif").css("top",e+"px")}function hideLoadingGif(){$(".loading_gif").remove()}function getSubmissions(table,assignment_id,part_id,start,refresh_requested,total){$.ajax({dataType:"json",type:"POST",url:"ajax.php",async:!0,data:{action:"get_submissions",assignment:assignment_id,part:part_id,start:start,refresh_requested:refresh_requested[part_id],sesskey:M.cfg.sesskey,total:total},success:function(result){if(eval(result),start=result.end,result.aaData.length>0&&table.fnAddData(result.aaData),result.end0&&$(".nonsubmitters_link").attr("style","display: block")}},error:function(i,e){$("#"+part_id+"_processing").attr("style","visibility: hidden"),$(".dataTables_empty").html(M.str.turnitintooltwo.tiisubmissionsgeterror)}})}function submitVisibility(){1==$(".upload_box").data("user-type")||1==$(".upload_box").data("eula")?$(".upload_box").show():$(".upload_box").hide()}function refreshRubricSelect(){var i=$("#id_rubric").length?"#id_rubric":"#id_plagiarism_rubric",e=$(i).val();$.ajax({dataType:"json",type:"POST",url:"../mod/turnitintooltwo/ajax.php",data:{action:"refresh_rubric_select",assignment:$('input[name="instance"]').val(),modulename:$('input[name="modulename"]').val(),course:$('input[name="course"]').val()},success:function(t){$($(i)).empty();var s=t;$.each(s,function(e,t){if($.isNumeric(e)||""===e)$($(i)).append($("");s.attr("label",e),$.each(t,function(i,e){var t=$("");t.val(i),t.text(e),s.append(t)}),$(i).append(s)}}),$(i+' option[value="'+e+'"]').attr("selected","selected")}})}function refreshUserMessages(){$(".messages_loading").show(),$(".messages_amount").html(""),$.ajax({dataType:"html",type:"POST",url:"ajax.php",data:{action:"refresh_user_messages",assignment:$("#assignment_id").html()},success:function(i){$(".messages_loading").hide(),$(".messages_amount").html(i)}})}function resetPeermarkSection(i){$("#tabs-"+i+" .toggle_peermarks").hide(),$("#tabs-"+i+" .peermark_count").html(""),$("#tabs-"+i+" .peermark-loading").show(),$("#tabs-"+i+" .peermark_assignments_container").hide()}function refreshPeermarkAssignments(part_id,refresh_requested){var user_role=$(".tii_peermark_manager_launch").length>0?"Instructor":"Learner";$("#tabs-"+part_id+" .peermark_assignments_container").length>0&&(resetPeermarkSection(part_id),$.ajax({dataType:"json",type:"POST",url:"ajax.php",data:{action:"refresh_peermark_assignments",assignment:$("#assignment_id").html(),part:part_id,refresh_requested:refresh_requested,sesskey:M.cfg.sesskey},success:function(data){eval(data),$("#tabs-"+part_id+" .peermark_assignments_container").html(data.peermark_table),$("#tabs-"+part_id+" .peermark-loading").hide(),$("#tabs-"+part_id+" .peermark_count").html(data.no_of_peermarks),data.no_of_peermarks>0?$("#tabs-"+part_id+" .toggle_peermarks").show():$("#tabs-"+part_id+" .toggle_peermarks").hide(),(data.no_of_peermarks>0&&"Instructor"==user_role||data.peermarks_active&&"Learner"==user_role)&&$("#tabs-"+part_id+" .row_peermark_reviews").show(),"true"==$.cookie("show_peermarks_"+$("#assignment_id").html())&&data.no_of_peermarks>0?($(".show_peermarks_"+$("#assignment_id").html()).hide(),$(".hide_peermarks_"+$("#assignment_id").html()).show(),$(".peermark_assignments_container").slideDown()):($(".show_peermarks_"+$("#assignment_id").html()).show(),$(".hide_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideUp())}}))}function initialiseUnanoymiseForm(scope,assignment_id,submission_id){var identifier="a.unanonymise";"row"==scope&&(identifier="#submission_"+submission_id),$(identifier).colorbox({inline:!0,width:"50%",top:"100px",height:"260px",opacity:"0.7",className:"tii_unanonymise_reveal_form",onComplete:function(){var idStr=$(this).attr("id").split("_");if(0==submission_id||void 0==submission_id)var submission_id=idStr[1];0==assignment_id&&(assignment_id=$("#assignment_id").html()),$("#submission_id").html(submission_id),$("#cboxLoadedContent .unanonymise_form").show(),$("#id_reveal").unbind("click"),$("#id_reveal").click(function(){$.ajax({dataType:"json",type:"POST",url:"ajax.php",data:{action:"reveal_submission_name",assignment:assignment_id,submission_id:submission_id,reason:encodeURIComponent($("#id_anonymous_reveal_reason").val()),sesskey:M.cfg.sesskey},success:function(data){if(eval(data),"success"==data.status)$.colorbox.close(),$("#submission_"+submission_id).attr("href",M.cfg.wwwroot+"/user/view.php?id="+data.userid+"&course="+data.courseid),$("#submission_"+submission_id).html(data.name),$("#submission_"+submission_id).removeClass("unanonymise cboxElement");else{var current_msg=$("#unanonymise_desc").html;$("#unanonymise_desc").html(current_msg+" "+data.msg)}}})})},onCleanup:function(){$(".unanonymise_form").hide()}})}function initialiseUploadBox(i,e,t,s){var a=".upload_box";"row"==i&&(a="#upload_"+e+"_"+t+"_"+s);var n="80%",o="80%";$(a).colorbox({onLoad:function(){getLoadingGif(),lightBoxCloseButton(),$(this).hide()},onClosed:function(){hideLoadingGif()},onCleanup:function(){hideLoadingGif();var i=$(this).attr("id").split("_");refreshInboxRow("upload",i[1],i[2],i[3]),$("#tii_close_bar").remove()},iframe:!0,width:n,height:o,opacity:"0.7",className:"upload",transition:"none"})}function initialiseZipDownloads(i){$("#tabs-"+i+" .orig_zip_open, #tabs-"+i+" .pdf_zip_open, #tabs-"+i+" .xls_inbox_open").unbind("click"),$("#tabs-"+i+" .orig_zip_open, #tabs-"+i+" .pdf_zip_open, #tabs-"+i+" .xls_inbox_open").click(function(){var i=$(this).attr("id").split("_");downloadZipFile(i[0]+"_"+i[1],i[2])}),$("#tabs-"+i+" .downloadpdf_box").colorbox({iframe:!0,width:"40%",height:"60%",opacity:"0.7",className:"downloadpdf_window",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()},onClosed:function(){refreshUserMessages()}}),$(document).on("click","#tabs-"+i+" .gmpdfzip_box",function(e){return $(this).colorbox({open:!0,iframe:!0,width:"786px",height:"300px",opacity:"0.7",className:"gmpdfzip_window",transition:"none",href:function(){var e="";return $("#tabs-"+i+" .inbox_checkbox:checked").each(function(i){e+="&submission_id"+i+"="+$(this).val(),i++}),$(this).attr("href")+e},onLoad:function(){getLoadingGif()},onCleanup:function(){hideLoadingGif()},onClosed:function(){refreshUserMessages()}}),!1})}function lightBoxCloseButton(){$("body").append('")}function initialiseDigitalReceipt(){$(".tii_digital_receipt").length>0&&$(".tii_digital_receipt").colorbox({iframe:!0,width:"832px",height:"482px",opacity:"0.7",className:"rubric_view",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}})}function initialiseHiddenZipDownloads(i){$("#tabs-"+i+" .origchecked_zip_open").unbind("click"),$("#tabs-"+i+" .origchecked_zip_open").click(function(){var e=$(this).attr("id").split("_");return downloadZipFile(e[0]+"_"+e[1],i),!1})}function initialiseRefreshRow(i,e,t,s){var a=".refresh_row .fa-refresh";"row"==i&&(a="#refreshrow_"+e+"_"+t+"_"+s+" .fa-refresh"),$(a).unbind("click"),$(a).click(function(){$(this).hide(),$(this).siblings(".fa-spinner").css("display","inline-block").addClass("fa-lg");var i=$(this).parent().attr("id").split("_");refreshInboxRow(i[0],i[1],i[2],i[3])})}function initialiseDVLaunchers(i,e,t,s){var a="#"+t+" .download_original_open";"row"==i&&(a="#downloadoriginal_"+e+"_"+t+"_"+s),$(a).unbind("click"),$(a).click(function(){var i=$(this).attr("id").split("_");$(this).children(".score_colour").hasClass("score_colour_")||downloadOriginalFile(i[0],i[1],i[2],i[3])})}function downloadZipFile(i,e){var t=[];"origchecked_zip"!=i&&"gmpdf_zip"!=i||$("#tabs-"+e+" .inbox_checkbox:checked").each(function(i){t[i]=$(this).val()}),$.ajax({type:"POST",url:"ajax.php",dataType:"html",data:{action:i,assignment:$("#assignment_id").html(),part:e,submission_ids:t},success:function(t){$("#"+i+"_form_"+e).html(t),$("#"+i+"_form_"+e).children("form").submit(),$("#"+i+"_form_"+e).html("")}})}function downloadOriginalFile(i,e,t,s){$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"html",data:{action:i,submission:e,assignment:$("#assignment_id").html()},success:function(t){$("#"+i+"_form_"+e).html(t),$("#"+i+"_form_"+e).children("form").submit(),$("#"+i+"_form_"+e).html("")}})}function checkDVClosed(i){window.dvWindow.closed?$("#refresh_"+i).click():setTimeout(function(){checkDVClosed(i)},500)}function submitNothing(user_id,part_id){$("#submitnothing_0_"+part_id+"_"+user_id+" i").attr("class","fa fa-spin fa-spinner fa-lg"),$.ajax({type:"POST",url:"ajax.php",dataType:"json",data:{action:"submit_nothing",assignment:$("#assignment_id").html(),part:part_id,user:user_id,sesskey:M.cfg.sesskey},success:function(data){eval(data),$.cookie("submitnothingaccept",!0,{expires:365}),$("table#"+part_id+" .select_all_checkbox").attr("checked",!1)},error:function(i){$("#submitnothing_0_"+part_id+"_"+user_id+" i").attr("class","fa fa-pencil fa-lg"),$("#submitnothing_0_"+part_id+"_"+user_id).removeClass("disabled"),alert(i.responseText)},complete:function(){refreshInboxRow("submitnothing",0,part_id,user_id)}})}function refreshInboxRow(link,submission_id,part_id,user_id){$.ajax({type:"POST",url:"ajax.php",dataType:"json",data:{action:"refresh_submission_row",assignment:$("#assignment_id").html(),part:part_id,user:user_id,sesskey:M.cfg.sesskey},success:function(data){$("table#"+part_id+" .select_all_checkbox").attr("checked",!1),eval(data);var i=0;0==submission_id?(link+="_0",submission_id=data.submission_id):link=null==data.submission_id&&0!=submission_id?link+"_"+submission_id:link+"_"+data.submission_id,0!=submission_id&&$("#export_links").removeClass("hidden_class"),oTable=$("table#"+part_id).dataTable();var tr=$("#"+link+"_"+part_id+"_"+user_id).parent().parent(),rowindex=tr.index();oTable.fnDeleteRow(tr),oTable.fnAddData(data.row),submitVisibility(),initialiseUploadBox("row",data.submission_id,part_id,user_id),initialiseDVLaunchers("row",data.submission_id,part_id,user_id),initialiseRefreshRow("row",data.submission_id,part_id,user_id),initialiseCheckboxes(data.submission_id,part_id),initialiseUnanoymiseForm("row",$("#assignment_id").html(),data.submission_id)}})}function initialiseCheckboxes(i,e){var t="#tabs-"+e+" .inbox_checkbox";0!=i&&(t="check_"+i),$("#tabs-"+e+" .inbox_checkbox").click(function(){$("table#"+e+" .select_all_checkbox").attr("checked",!1)}),$(document).on("click",t+", .select_all_checkbox",function(){$("#tabs-"+e+" .inbox_checkbox:checked").length>0?($("#tabs-"+e+" .zip_downloads").slideDown(),initialiseHiddenZipDownloads(e)):($("#tabs-"+e+" .origchecked_zip_open").unbind("click"),$("#tabs-"+e+" .zip_downloads").slideUp())})}function showPartDatesBoxes(){for(var i=0;i<=5;i++)i<=$("#id_numparts").val()?$('fieldset[id$="partdates'+i+'"]').slideDown():$('fieldset[id$="partdates'+i+'"]').slideUp()}if($(".js_required").show(),$(".js_hide").hide(),1==$("#id_submissiontype").val()&&$("#id_submissiontext").parent().parent().hide(),2==$("#id_submissiontype").val()&&$("#id_submissionfile").parent().parent().hide(),$("#id_submissionagreement").length&&$("#id_submitbutton").attr("disabled","disabled"),$("#id_submissionagreement").on("click",function(){$(this).is(":checked")?$("#id_submissionagreement").each(function(){$("#id_submitbutton").removeAttr("disabled")}):$("#id_submissionagreement").each(function(){$("#id_submitbutton").attr("disabled","disabled")})}),$(document).on("click",".delete_paper",function(){var i=$(this).data("confirm"),e=M.str.turnitintooltwo[i].replace(/\\n/g,"\n"),t=confirm(e);t&&$.ajax({type:"POST",url:"ajax.php",dataType:"html",data:{action:"deletesubmission",sesskey:M.cfg.sesskey,paper:$(this).data("paper"),part:$(this).data("part"),assignment:$(this).data("assignment")},success:function(){window.location.href=window.location.href}})}),$(document).on("click",".submit_nothing",function(){if(!$(this).hasClass("disabled")){$(this).addClass("disabled");var i=$(this).prop("id").split("_")[2],e=$(this).prop("id").split("_")[3],t=M.str.turnitintooltwo.submitnothingwarning.replace(/
/g,"\n").replace(/'/g,"'"),s=$.cookie("submitnothingaccept");s||confirm(t)?submitNothing(e,i):$(this).removeClass("disabled")}}),$(document).on("change","#id_submissiontype",function(){1==$("#id_submissiontype").val()&&($("#id_submissiontext").parent().parent().hide(),$("#id_submissionfile").parent().parent().show()),2==$("#id_submissiontype").val()&&($("#id_submissionfile").parent().parent().hide(),$("#id_submissiontext").parent().parent().show())}),$(document).on("submit",".submission_form_container form",function(){return $("#id_submissiontitle").val().length>0&&($("#general").slideUp("slow"),$(".mod_turnitintooltwo .noticebox").slideUp("slow"),$(".submission_form_container form").slideUp("slow"),$("#submitting_loader").slideDown("slow"),!0)}),$(".toggle_summary").length>0&&($.cookie("show_summary_"+$("#assignment_id").html())||$.cookie("show_summary_"+$("#assignment_id").html(),!0,{expires:30}),"true"==$.cookie("show_summary_"+$("#assignment_id").html())?($(".hide_summary_"+$("#assignment_id").html()).show(),$(".show_summary_"+$("#assignment_id").html()).hide(),$(".introduction").slideDown()):($(".show_summary_"+$("#assignment_id").html()).show(),$(".hide_summary_"+$("#assignment_id").html()).hide(),$(".introduction").slideUp()),$(".toggle_summary i").click(function(){$(this).hasClass("show_summary_"+$("#assignment_id").html())?($.cookie("show_summary_"+$("#assignment_id").html(),!0,{expires:30}),$(".show_summary_"+$("#assignment_id").html()).hide(),$(".hide_summary_"+$("#assignment_id").html()).show(),$(".introduction").slideDown()):($.cookie("show_summary_"+$("#assignment_id").html(),!1,{expires:30}),$(".show_summary_"+$("#assignment_id").html()).show(),$(".hide_summary_"+$("#assignment_id").html()).hide(),$(".introduction").slideUp())})),$(".toggle_peermarks").length>0&&($.cookie("show_peermarks_"+$("#assignment_id").html())||$.cookie("show_peermarks_"+$("#assignment_id").html(),!0,{expires:30}),"true"==$.cookie("show_peermarks_"+$("#assignment_id").html())?($(".hide_peermarks_"+$("#assignment_id").html()).show(),$(".show_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideDown()):($(".show_peermarks_"+$("#assignment_id").html()).show(),$(".hide_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideUp()),$(".toggle_peermarks i").click(function(){$(this).hasClass("show_peermarks_"+$("#assignment_id").html())?($.cookie("show_peermarks_"+$("#assignment_id").html(),!0,{expires:30}),$(".show_peermarks_"+$("#assignment_id").html()).hide(),$(".hide_peermarks_"+$("#assignment_id").html()).show(),$(".peermark_assignments_container").slideDown()):($.cookie("show_peermarks_"+$("#assignment_id").html(),!1,{expires:30}),$(".show_peermarks_"+$("#assignment_id").html()).show(),$(".hide_peermarks_"+$("#assignment_id").html()).hide(),$(".peermark_assignments_container").slideUp())})),$(document).on("click",".show_peermark_instructions, .hide_peermark_instructions",function(){var i=$(this).attr("id").split("_");"show"==i[0]?($("#show_peermark_instructions_"+i[3]).hide(),$("#hide_peermark_instructions_"+i[3]).show(),$("#peermark_instructions_"+i[3]).slideDown()):($("#show_peermark_instructions_"+i[3]).show(),$("#hide_peermark_instructions_"+i[3]).hide(),$("#peermark_instructions_"+i[3]).slideUp())}),showPartDatesBoxes(),$(document).on("change","#id_numparts",function(){showPartDatesBoxes()}),$(document).on("click",".splitter-lastname, .splitter-firstname",function(i){var e=$(i.target),t=e.hasClass("sorting_asc"),s="asc",a="desc",n=e.attr("data-col");t||(s="desc",a="asc"),e.closest(".submissionsDataTable").DataTable().order([n,a]).draw(),e.addClass("sorting_"+a).removeClass("sorting sorting_"+s),e.parent().removeClass("sorting sorting_asc sorting_desc"),e.siblings().removeClass("sorting_asc sorting_desc").addClass("sorting")}),$("#dataTable").length>0&&$("#dataTable").dataTable(),"undefined"!=typeof M.str.turnitintooltwo)var dataTablesLang={sProcessing:''+M.str.turnitintooltwo.sprocessing+"",sZeroRecords:M.str.turnitintooltwo.szerorecords,sInfo:M.str.turnitintooltwo.sinfo,sSearch:M.str.turnitintooltwo.ssearch,sLengthMenu:M.str.turnitintooltwo.slengthmenu,oPaginate:{sNext:M.str.turnitintooltwo.snext,sPrevious:M.str.turnitintooltwo.sprevious}};if($("#tabs").length>0){var activeTab=0;$("#tab_position").length>0&&(activeTab=$("#tab_position").text()),$("#tabs").tabs({active:activeTab,show:function(){var i=$.fn.dataTable.fnTables(!0);i.length>0&&$(i).dataTable().fnAdjustColumnSizing()}})}$(".enrolledMembers").length>0&&$(".enrolledMembers").dataTable({bProcessing:!0,sAjaxSource:"ajax.php",aoColumnDefs:[{bSortable:!1,sClass:"centered_cell",aTargets:[0]},{sClass:"left",aTargets:[1]}],oLanguage:dataTablesLang,fnServerData:function(i,e,t){$.ajax({dataType:"json",type:"POST",url:i,data:{action:"get_members",assignment:$("#assignment_id").html(),role:$("#user_role").html()},success:function(i){t(i)},error:function(i,e){$(".dataTables_processing").attr("style","visibility: hidden"),$(".dataTables_empty").html(M.str.turnitintooltwo.membercheckerror)}})}});var submissionsDataTableColumns=[],visibleCols=[],noOfColumns=$("table.submissionsDataTable th").length/$("table.submissionsDataTable").length,notStudentView=$("table.submissionsDataTable th.sorting_name").length>0,showOrigReport=$("table.submissionsDataTable th.creport").length>0,useGradeMark=$("table.submissionsDataTable th.cgrade").length>0,multipleParts=$("table.submissionsDataTable th.coverallgrade").length>0;if(notStudentView)for(var i=0;i=9&&!showOrigReport&&!useGradeMark||i>=11&&(!showOrigReport&&useGradeMark||showOrigReport&&!useGradeMark)||i>=13&&showOrigReport&&useGradeMark?(submissionsDataTableColumns.push({sClass:"center",bSortable:!1}),visibleCols.push(!0)):(0==i||4==i||7==i||9==i&&showOrigReport||9==i&&!showOrigReport||11==i&&useGradeMark)&&(submissionsDataTableColumns.push({bVisible:!1}),visibleCols.push(!1));else for(var i=0;i=8&&!showOrigReport&&!useGradeMark||i>=10&&(!showOrigReport&&useGradeMark||showOrigReport&&!useGradeMark)||i>=12&&showOrigReport&&useGradeMark?(submissionsDataTableColumns.push({sClass:"center",bSortable:!1}),visibleCols.push(!0)):(0==i||3==i||6==i||8==i&&showOrigReport||8==i&&!showOrigReport||10==i&&useGradeMark)&&(submissionsDataTableColumns.push({bVisible:!1}),visibleCols.push(!1));var partTables=[],refreshRequested=[];$("table.submissionsDataTable").each(function(){var i=$(this).attr("id");refreshRequested[i]=0,partTables[i]=$("table#"+i).dataTable({bProcessing:!0,aoColumns:submissionsDataTableColumns,aLengthMenu:[[10,25,50,100,-1],[10,25,50,100,"All"]],aaSorting:[[2,"asc"],[4,"asc"]],sAjaxSource:"ajax.php",oLanguage:dataTablesLang,sDom:'r<"listbar-container"<"top listbar clearfix"lf>><"dt_pagination clearfix"pi>t<"bottom"><"dt_pagination clearfix"pi>',fnServerData:function(e,t,s){$.ajax({dataType:"json",type:"POST",url:e,data:{action:"initialise_redraw"},success:function(e){disableEditingText(i),s(e),$("#"+i+"_processing").attr("style","visibility: visible"),getSubmissions(partTables[i],$("#assignment_id").html(),i,0,refreshRequested,0)}})},bStateSave:!0,fnStateSave:function(e,t){try{localStorage.setItem(i+"DataTables",JSON.stringify(t))}catch(s){}},fnStateSaveParams:function(i,e){e.abVisCols=visibleCols},fnStateLoad:function(e){try{return JSON.parse(localStorage.getItem(i+"DataTables"))}catch(t){}},fnStateLoadParams:function(i,e){e.abVisCols=visibleCols},fnDrawCallback:function(e){initialiseDigitalReceipt(),initialiseDVLaunchers("all",0,i,0),initialiseRefreshRow("all",0,i,0),initialiseUploadBox("all",0,0,0),initialiseZipDownloads(i),initialiseCheckboxes(0,i),initialiseUnanoymiseForm("all",0,0)}})}),$("table.submissionsDataTable").each(function(){var i=$(this).attr("id");refreshPeermarkAssignments(i,0)}),$(".messages_amount").length>0&&refreshUserMessages(),$(".tii_table_functions").each(function(){var i=$(this).attr("id").split("tii_table_functions_")[1],e=$("#tii_table_functions_"+i).html();$("#tii_table_functions_"+i).remove(),$("#"+i+"_length").after(e),$(".messages_inbox").show(),$("#refresh_"+i).show(),$("#refreshing_"+i).hide()});var zip_downloads=$(".zip_downloads");if($.each(zip_downloads,function(){var i=$(this).attr("id").split("_")[1];$(this).remove(),$("#"+i+"_length").after($(this))}),"Learner"==$("#user_role").html()&&$(".dataTables_length, .dataTables_filter, .dt_pagination").hide(),$(".refresh_link").click(function(){return $(this).is(":visible")&&($(".refresh_link").hide(),$(".refreshing_link").show(),$("table.submissionsDataTable").each(function(){refreshRequested[$(this).attr("id")]=1,partTables[$(this).attr("id")].fnReloadAjax(),partTables[$(this).attr("id")].fnStandingRedraw()})),!1}),$("#turnitin_sync_all_grades").length>0&&$(".turnitin_sync_grades").click(function(){$(".turnitin_sync_grades").hide(),$(".turnitin_syncing_grades").show(),$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:"sync_all_submissions",assignment:$("#turnitin_sync_all_grades").data("turnitintooltwoid"),sesskey:M.cfg.sesskey},success:function(i){$(".turnitin_sync_grades").show(),$(".turnitin_syncing_grades").hide()}})}),$(".submission_failure_msg").length>0&&window.parent.$(".upload_box").colorbox.resize({width:"800px",height:"240px"}),$(".enrol_link").click(function(){$("#enrolling_error").hide(),$(".enrol_link").hide(),$(".enrolling_container").show(),$.ajax({type:"POST",url:"ajax.php",dataType:"html",data:{action:"enrol_all_students",assignment:$("#assignment_id").html(),sesskey:M.cfg.sesskey},success:function(i){window.location.href=window.location.href},error:function(i,e){$(".enrol_link").show(),$(".enrolling_container").hide(),$("#enrolling_error").show()}})}),$(".rubric_manager_launch").length>0&&$(".rubric_manager_launch").colorbox({iframe:!0,width:"832px",height:"682px",opacity:"0.7",className:"rubric_manager",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){hideLoadingGif(),"rubric_manager_inbox_launch"!=$(this).attr("id")&&refreshRubricSelect(),$("#tii_close_bar").remove()}}),$(".rubric_view_launch").length>0&&$(".rubric_view_launch").colorbox({iframe:!0,width:"832px",height:"682px",opacity:"0.7",className:"rubric_view",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$("#id_rubric, #id_plagiarism_rubric").mousedown(function(){""!=$('input[name="instance"]').val()&&"Y"!=$('input[name="rubric_warning_seen"]').val()&&confirm(M.str.turnitintooltwo.changerubricwarning)&&$('input[name="rubric_warning_seen"]').val("Y")}),($(".quickmark_manager_launch").length>0||$(".plagiarism_turnitin_quickmark_manager_launch").length>0)&&$(".quickmark_manager_launch, .plagiarism_turnitin_quickmark_manager_launch").colorbox({iframe:!0,width:"770px",height:"600px",opacity:"0.7",className:"quickmark_manager",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".tii_peermark_manager_launch").length>0&&$(".tii_peermark_manager_launch").colorbox({iframe:!0,width:"802px",height:"772px",opacity:"0.7",className:"peermark_manager",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()},onClosed:function(){var i=$(this).attr("id").split("_");refreshPeermarkAssignments(i[2],1)}}),$(".tii_peermark_reviews_launch").length>0&&$(".tii_peermark_reviews_launch").colorbox({iframe:!0,width:"802px",height:"772px",opacity:"0.7",className:"peermark_reviews",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".messages_inbox").length>0&&$(".messages_inbox").colorbox({iframe:!0,width:"772px",height:"772px",opacity:"0.7",className:"messages",transition:"none",closeButton:!1,onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".nonsubmitters_link").length>0&&$(".nonsubmitters_link").colorbox({iframe:!0,width:"740px",height:"540px",opacity:"0.7",className:"nonsubmitters",transition:"none",closeButton:!1,onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(".nonsubmittersformsuccessmsg").length>0&&(hideLoadingGif(),window.parent.$(".nonsubmitters").colorbox.resize({width:"740px",height:"120px"})),$(".rubric_view_launch").length>0&&$(".rubric_view_launch").colorbox({iframe:!0,width:"832px",height:"682px",opacity:"0.7",className:"rubric_view",transition:"none",onLoad:function(){lightBoxCloseButton(),getLoadingGif()},onCleanup:function(){$("#tii_close_bar").remove(),hideLoadingGif()}}),$(document).on("click",".default_open, .origreport_open, .grademark_open",function(){var i=!0,e=$(this).attr("id").split("_"),t=$("#date_due_"+e[2]).html(),s=moment(t).unix(),a=e[0],n=e[1],o=e[2];if(s>moment().unix()&&$(this).hasClass("graded_warning")&&(confirm(M.str.turnitintooltwo.resubmissiongradewarn)||(i=!1)),i){dvWindow=window.open("","_blank");var r='
';r+='',r+='

'+M.str.turnitintooltwo.loadingdv+"

",r+="
",$(dvWindow.document.body).html(r),$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:a,submission:n,assignment:$("#assignment_id").html()},success:function(i){$(dvWindow.document.body).html(r+i),dvWindow.document.forms[0].submit(),dvWindow.document.close(),checkDVClosed(o)}})}}),$("#id_rubric, #id_plagiarism_rubric").length>0&&refreshRubricSelect(),self!=top&&"box"==$("#view_context").html()?$("html").css("background","none"):self!=top&&"box_solid"==$("#view_context").html()&&$("html").css("background","#FFF"),$(".editable_postdue").on("click",function(){1==$(this).data("anon")&&alert(M.str.turnitintooltwo.postdate_warning)}),$(".editable_text").length>0){$.fn.editable.defaults.mode="inline",$.fn.editable.defaults.url="ajax.php",$.fn.editable.defaults.onblur="submit",$.fn.editable.defaults.showbuttons=!1,$.fn.editable.defaults.ajaxOptions={dataType:"json"},$(".editable_text").editable({validate:function(i){if($(this).attr("id").indexOf("marks_")>=0&&(Math.floor(i)!=i||!$.isNumeric(i)||i.indexOf(".")!=-1))return M.str.turnitintooltwo.maxmarkserror},success:function(i,e){if(!i.success)return i.msg;if("maxmarks"==i.field)$("#refresh_"+i.partid).click(),$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:"sync_all_submissions",assignment:$("#assignment_id").html(),sesskey:M.cfg.sesskey}});else if("partname"==i.field){var t=$(this).parentsUntil(".ui-tabs-panel").parent().attr("aria-labelledby");$("#"+t).text(e)}}}),$("#export_options").hasClass("tii_export_options_hide")&&($("#export_options").hide(),$(".export_data").html('--')),$(".editable_postdue").on("click",function(){var i=$(this);$.ajax({type:"POST",url:"ajax.php",dataType:"json",data:{action:"check_anon",part:i.data("pk"),assignment:$("#assignment_id").html()},success:function(e){i.data("anon",e.anon),i.data("unanon",e.unanon),i.data("submitted",e.submitted)}})});var theDate=new Date;$(".editable_date").editable({type:"combodate",format:"YYYY-MM-DD HH:mm",viewformat:"D MMM YYYY, HH:mm",template:"D MMM YYYY HH:mm",combodate:{minuteStep:1,minYear:2e3,maxYear:theDate.getFullYear()+2,smartDays:!0},validate:function(i){if(i.format("X")--')):($(".empty-dash").remove(),$("#export_options").show()))):i.msg}}),$(".editable_date").click(function(){if($(this).hasClass("editable-disabled"))return!1}),$(".editable_date, .editable_text").on("shown",function(i,e){var t=$(this).prop("id");$(".editable_date, .editable_text").not("#"+t).editable("disable"),$(".submit_nothing").addClass("disabled")}),$(".editable_date, .editable_text").on("hidden",function(){var i=$(this).prop("id");$(".editable_date, .editable_text").not("#"+i).editable("enable"),$(".submit_nothing").removeClass("disabled")})}$("#inbox_form form, .launch_form form").submit(),$(".turnitin_eula_link").length>0&&$(".turnitin_eula_link").colorbox({iframe:!0,width:"766px",height:"596px",opacity:"0.7",className:"eula_view",scrolling:"false",onLoad:function(){getLoadingGif()},onComplete:function(){$(window).on("message",function(i){var e="undefined"==typeof i.data?i.originalEvent.data:i.data;$.ajax({type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",dataType:"json",data:{action:"acceptuseragreement",message:e,sesskey:M.cfg.sesskey},success:function(i){window.location.reload()},error:function(i){window.location.reload()}})})},onCleanup:function(){hideLoadingGif()}}),$("#tii_receipt_print").click(function(){window.print()}),$(".select_all_checkbox").on("click",function(){var i=$(this).parent().parent().parent().parent().attr("id");$(this).is(":checked")?($("#"+i+" .inbox_checkbox").length&&$("#tabs-"+i+" .zip_downloads").slideDown(), $("#"+i+" .inbox_checkbox").each(function(){$(this).prop("checked",!0)})):($("#"+i+" .inbox_checkbox").each(function(){$(this).prop("checked",!1)}),$("#"+i+" .inbox_checkbox").length&&$("#tabs-"+i+" .zip_downloads").slideUp())}),$("[id^=fitem_id_dtpost] select").change(function(){var i=$(this).parent().parent().parent(),e=buildUnixDate("#fitem_id_dtpost",i.data("partId"));e'+M.str.turnitintooltwo.closebutton+"")}function initialiseCourseRecreation(){var e=$(window).width(),t="80%";e<1e3&&(t="860px");var a=$(window).width(),s="80%";a<700&&(s="600px"),$("a.course_recreate").colorbox({iframe:!0,width:t,height:s,top:"100px",className:"migration",opacity:"0.7",onLoad:function(){lightBoxCloseButton()},onCleanup:function(){$("#tii_close_bar").remove()}}),$(".browser_checkbox").click(function(){$(".browser_checkbox:checked").length>0?$(".create_checkboxes").slideDown():$(".create_checkboxes").slideUp()})}function initialiseCourseBrowserButtons(e){$("#id_create_course").click(function(){$.ajax({dataType:"html",type:"POST",url:"ajax.php",data:{action:"create_course",tii_course_id:$("#tii_course_id").html(),tii_course_name:encodeURIComponent($("#tii_course_name").html()),course_name:encodeURIComponent($("#id_coursename").val()),course_category:$("#id_coursecategory").val(),sesskey:M.cfg.sesskey},success:function(t){var a=jQuery.parseJSON(t);hideCourseCreationOptions(a,e)}})}),$("#id_update_course").click(function(){$.ajax({dataType:"html",type:"POST",url:"ajax.php",data:{action:"link_course",tii_course_id:$("#tii_course_id").html(),tii_course_name:$("#tii_course_name").html(),course_to_link:$("#id_coursetolink").val(),sesskey:M.cfg.sesskey},success:function(t){var a=jQuery.parseJSON(t);hideCourseCreationOptions(a,e)}})})}function hideCourseCreationOptions(e,t){if(0!=e){$("#course_id").html(e.courseid);var a='input[name="check_'+$("#tii_course_id").html()+'"]';parent.$(a).hide();var s="#tick_"+$("#tii_course_id").html();parent.$(s).show(),$('fieldset[id$="create_course_fieldset"]').parent().slideToggle(),$('fieldset[id$="update_course_fieldset"]').parent().slideToggle(),$("#or_container").hide(),$("#existing_course_title_span").html(e.coursename),$(".existing_course_title_h3").removeClass("hidden_class"),$(".assignmentids_check").length>0&&($(".assignmentids_check").removeAttr("disabled"),$("#id_assignmentname").removeAttr("disabled"),$("#id_create_assignment").removeAttr("disabled")),$(".assignmentids_check").change(function(){$(".assignmentids_check").filter(":checked").length>=5?$(".assignmentids_check").not(":checked").attr("disabled","disabled"):$(".assignmentids_check").removeAttr("disabled")}),initialiseCreateAssignmentButton(t)}}function initialiseCreateAssignmentButton(e){$("#id_create_assignment").unbind("click"),$("#id_create_assignment").click(function(){var t="";$(".assignmentids_check:checked").each(function(e){t+=$(this).val()+","}),","==t.charAt(t.length-1)&&t.substring(0,t.length-1),$("#id_create_assignment").attr("disabled","disabled"),$.ajax({dataType:"html",type:"POST",url:"ajax.php",data:{action:"create_assignment",course_id:$("#course_id").html(),assignment_name:$("#id_assignmentname").val(),parts:t,sesskey:M.cfg.sesskey},success:function(t){e.fnReloadAjax(),e.fnStandingRedraw(),$("#id_assignmentname").removeAttr("disabled"),$("#id_create_assignment").removeAttr("disabled"),$(".assignmentids_check").removeAttr("disabled")}})})}$(".submissionsDataTable thead tr, #courseBrowserTable thead tr").toggleClass("header");var dataTablesLang={nointegration:M.str.turnitintooltwo.nointegration,sProcessing:M.str.turnitintooltwo.sprocessing,sZeroRecords:M.str.turnitintooltwo.szerorecords,sInfo:M.str.turnitintooltwo.sinfo,sSearch:M.str.turnitintooltwo.ssearch,sLengthMenu:M.str.turnitintooltwo.slengthmenu,sInfoEmpty:M.str.turnitintooltwo.semptytable,oPaginate:{sNext:M.str.turnitintooltwo.snext,sPrevious:M.str.turnitintooltwo.sprevious}},dataTablesLangMigration={nointegration:M.str.turnitintooltwo.nointegration,sProcessing:M.str.turnitintooltwo.sprocessing,sZeroRecords:M.str.turnitintooltwo.szerorecords,sInfo:M.str.turnitintooltwo.sinfo,sSearch:"",sLengthMenu:M.str.turnitintooltwo.slengthmigrationmenu,sInfoEmpty:M.str.turnitintooltwo.semptytable,oPaginate:{sNext:M.str.turnitintooltwo.snext,sPrevious:M.str.turnitintooltwo.sprevious}};$("#unlinkUserTable").dataTable({bDestroy:!0,bProcessing:!0,bServerSide:!0,oLanguage:dataTablesLang,aaSorting:[[2,"asc"]],aLengthMenu:[[10,25,50,100,-1],[10,25,50,100,"All"]],sAjaxSource:"ajax.php?action=get_users",aoColumns:[{bSortable:!1,fnCreatedCell:function(e,t,a,s,i){$(e).addClass("centered_cell")}},null,{aDataSort:[2,3]},{aDataSort:[3,2]},null],fnDrawCallback:function(){$('input[name="selectallcb"]').attr("checked",!1)}}),"0"==$("#sametiiaccount").data("sametiiaccount")&&($('select[name="enablemigrationtool"]').attr("disabled","disabled"),$('select[name="enablemigrationtool"]').closest("form").find('input[name="submitbutton"]').attr("disabled","disabled")),$('input[name="selectallcb"]').closest("form").find('input[name="submitbutton"]').attr("disabled","disabled"),$(document).on("click",'#migrationTable input[name="selectallcb"], #migrationTable .browser_checkbox',function(){$("#migrationTable .browser_checkbox:checked").length>0?$("#migrationTable .browser_checkbox").closest("form").find('input[name="submitbutton"]').removeAttr("disabled"):$("#migrationTable .browser_checkbox").closest("form").find('input[name="submitbutton"]').attr("disabled","disabled")});var submitbutton=$("#migrationTable").closest("form").find('input[name="submitbutton"]');submitbutton.click(function(e){e.preventDefault();var t=M.str.turnitintooltwo.confirmv1deletetitle+"\n\n";t+=M.util.get_string("confirmv1deletetext","turnitintooltwo",$("#migrationTable .browser_checkbox:checked").length)+"\n\n",t+=M.str.turnitintooltwo.confirmv1deletewarning,confirm(t)&&$("#migrationTable").closest("form").submit()}),$("#migrationTable").dataTable({bDestroy:!0,bProcessing:!0,bServerSide:!0,oLanguage:dataTablesLangMigration,aaSorting:[[2,"asc"]],aLengthMenu:[[10,25,50,100,-1],[10,25,50,100,"All"]],sAjaxSource:"ajax.php?action=get_assignments",sDom:'<"top"lf>rt<"bottom"irp><"clear">',aoColumns:[{bSortable:!1,bSearchable:!1,fnCreatedCell:function(e,t,a,s,i){$(e).addClass("centered_cell")}},{bSortable:!0,sClass:"centered_cell",bSearchable:!1},{bSortable:!0,bSearchable:!0},{bSortable:!0,sClass:"centered_cell",bSearchable:!1}],fnDrawCallback:function(){$('input[name="selectallcb"]').attr("checked",!1)}}),$("#migrationTable_filter input").attr("placeholder","Search"),$("#filesTable").dataTable({bDestroy:!0,bProcessing:!0,bServerSide:!0,oLanguage:dataTablesLang,sAjaxSource:"ajax.php?action=get_files",aoColumns:[null,null,null,{sClass:"filename c0",sWidth:"40%"},null,{sClass:"fullname c1",sWidth:"35%"},null,{sClass:"created c2",sWidth:"22%"},{sClass:"remove c3",sWidth:"3%"}],aoColumnDefs:[{bSearchable:!0,bVisible:!1,aTargets:[0]},{bSearchable:!0,bVisible:!1,aTargets:[1]},{bSearchable:!0,bVisible:!1,aTargets:[2]},{bSearchable:!0,bVisible:!0,aTargets:[3]},{bSearchable:!0,bVisible:!1,aTargets:[4]},{bSearchable:!0,bVisible:!0,aTargets:[5]},{bSearchable:!0,bVisible:!1,aTargets:[6]},{bSearchable:!0,bVisible:!0,aTargets:[7]},{bSearchable:!0,bVisible:!0,aTargets:[8]}],fnDrawCallback:function(e){if(0!=e.aiDisplay.length)for(var t=$("#filesTable tbody tr"),a=t[0].getElementsByTagName("td").length,s="",i=0;iip'}),$.datepicker.regional[""].dateFormat="d M yy",$.datepicker.setDefaults($.datepicker.regional[""]);var courseBrowserTable=$("#courseBrowserTable").dataTable({bProcessing:!0,oLanguage:dataTablesLang,aaSorting:[[6,"asc"]],sAjaxSource:"ajax.php",aoColumnDefs:[{bSearchable:!1,bSortable:!1,sWidth:"5%",bVisible:!0,aTargets:[0],fnCreatedCell:function(e){$(e).addClass("center")}},{bSearchable:!0,bVisible:!0,sWidth:"45%",iDataSort:6,aTargets:[1]},{bSearchable:!0,bVisible:!0,sWidth:"10%",aTargets:[2]},{bSearchable:!0,bVisible:!0,sWidth:"20%",iDataSort:7,aTargets:[3],fnCreatedCell:function(e){$(e).addClass("right")}},{bSearchable:!1,bVisible:!0,sWidth:"10%",aTargets:[4],fnCreatedCell:function(e){$(e).addClass("right")}},{bSearchable:!0,bVisible:!0,sWidth:"10%",aTargets:[5],fnCreatedCell:function(e){$(e).addClass("center")}},{bSearchable:!0,bVisible:!1,aTargets:[6]},{bSearchable:!0,bVisible:!1,aTargets:[7]}],fnServerData:function(e,t,a){$.ajax({dataType:"json",type:"POST",url:e,data:{action:"search_classes",course_title:$("#search_course_title").val(),course_integration:$("#search_course_integration").val(),course_end_date:$("#search_course_end_date").val(),sesskey:M.cfg.sesskey},success:function(e){a(e)}})},bStateSave:!0,fnStateSave:function(e,t){try{localStorage.setItem(uid+"DataTables",JSON.stringify(t))}catch(a){}},fnStateLoad:function(e){try{return JSON.parse(localStorage.getItem(uid+"DataTables"))}catch(t){}},fnDrawCallback:function(){$('input[name="selectallcb"]').attr("checked",!1),initialiseCourseRecreation(),initialiseEditEndDate(),$("#search_courses_button").removeAttr("disabled")}});$("#search_courses_button").click(function(){return $(this).attr("disabled","disabled"),courseBrowserTable.fnReloadAjax(),courseBrowserTable.fnStandingRedraw(),!1}),$("#search_course_end_date").datepicker();var oTable=$("#assignmentBrowserTable").dataTable({bProcessing:!0,oLanguage:dataTablesLang,sAjaxSource:"ajax.php",fnServerData:function(sSource,aoData,fnCallback){$("#id_create_course").attr("disabled","disabled"),$("#id_update_course").attr("disabled","disabled"),$("#assignmentBrowserTable").length>0&&$(".side-pre-only #page-content #region-main").css({"margin-left":"0px"}),$("#id_assignmentname").attr("disabled","disabled"),$("#id_create_assignment").attr("disabled","disabled"),$.ajax({dataType:"json",type:"POST",url:sSource,data:{action:"get_assignments",tii_course_id:$("#tii_course_id").html(),sesskey:M.cfg.sesskey},success:function(result){eval(result),initialiseCourseBrowserButtons(oTable),fnCallback(result),"0"!=$("#course_id").html()&&result.number_of_assignments>0?($("#id_assignmentname").removeAttr("disabled"),$("#id_create_assignment").removeAttr("disabled"),$(".assignmentids_check").removeAttr("disabled"),initialiseCreateAssignmentButton(oTable)):($("#id_assignmentname").attr("disabled","disabled"),$("#id_create_assignment").attr("disabled","disabled"),$(".assignmentids_check").attr("disabled","disabled")),$("#id_create_course").removeAttr("disabled"),$("#id_update_course").removeAttr("disabled")}})},aoColumnDefs:[{bSearchable:!1,bVisible:!0,aTargets:[0]},{bSearchable:!0,bVisible:!0,aTargets:[1],fnCreatedCell:function(e){$(e).addClass("nowrap")}},{bSearchable:!0,bVisible:!0,aTargets:[2]},{bSearchable:!0,bVisible:!0,aTargets:[3]}]});if($("#create_classes_button").colorbox({iframe:!0,width:"60%",top:"200px",height:"124px",opacity:"0.7",className:"course_creation",href:function(){var e=$(".create_course_category").val(),t=$(".create_assignment_checkbox").is(":checked")?"1":"0",a="";$(".browser_checkbox:checked").each(function(e){a+="&class_id"+e+"="+$(this).val(),e++});var s=window.location.href,i=s.replace("cmd=courses","cmd=multiple_class_recreation");return i+"&view_context=box&category="+e+"&assignments="+t+a+"&sesskey="+M.cfg.sesskey},onCleanup:function(){window.location=window.location}}),$("#class_ids").length>0){$(".side-pre-only #page-content #region-main").css({"margin-left":"0px"}),$(".has-region-side-pre #page-content #region-main").css({width:"100%","margin-top":"-30px"});var class_ids=$("#class_ids").html();$.ajax({dataType:"html",type:"POST",url:"ajax.php",data:{action:"create_courses",class_ids:class_ids,course_category:$("#course_category").html(),create_assignments:$("#create_assignments").html(),sesskey:M.cfg.sesskey},success:function(e){$("#course_creation_status").html(e)}})}}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR1cm5pdGludG9vbHR3b19leHRyYS5qcyJdLCJuYW1lcyI6WyJqUXVlcnkiLCJkb2N1bWVudCIsInJlYWR5IiwiJCIsImluaXRpYWxpc2VFZGl0RW5kRGF0ZSIsImNvbG9yYm94IiwiaW5saW5lIiwid2lkdGgiLCJ0b3AiLCJiYWNrZ3JvdW5kIiwiaGVpZ2h0Iiwib3BhY2l0eSIsImNsYXNzTmFtZSIsIm9uTG9hZCIsImxpZ2h0Qm94Q2xvc2VCdXR0b24iLCJvbkNvbXBsZXRlIiwiY3VycmVudF9kYXRlIiwidGhpcyIsImF0dHIiLCJzcGxpdCIsInZhbCIsImlkU3RyIiwidGlpX2NvdXJzZV9pZCIsImh0bWwiLCJzaG93IiwiY3NzIiwiY2xpY2siLCJhamF4IiwiZGF0YVR5cGUiLCJ0eXBlIiwidXJsIiwiZGF0YSIsImFjdGlvbiIsInRpaV9jb3Vyc2VfdGl0bGUiLCJzZXNza2V5IiwiTSIsImNmZyIsImVuZF9kYXRlX2QiLCJlbmRfZGF0ZV9tIiwiZW5kX2RhdGVfeSIsInN1Y2Nlc3MiLCJldmFsIiwic3RhdHVzIiwicGFyZW50IiwiZm4iLCJjbG9zZSIsImVuZF9kYXRlIiwiY3VycmVudF9tc2ciLCJtc2ciLCJvbkNsZWFudXAiLCJoaWRlIiwicmVtb3ZlIiwiYXBwZW5kIiwic3RyIiwidHVybml0aW50b29sdHdvIiwiY2xvc2VidXR0b24iLCJpbml0aWFsaXNlQ291cnNlUmVjcmVhdGlvbiIsIndpbmRvd1dpZHRoIiwid2luZG93IiwiY29sb3JCb3hXaWR0aCIsIndpbmRvd0hlaWdodCIsImNvbG9yQm94SGVpZ2h0IiwiaWZyYW1lIiwibGVuZ3RoIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImluaXRpYWxpc2VDb3Vyc2VCcm93c2VyQnV0dG9ucyIsIm9UYWJsZSIsInRpaV9jb3Vyc2VfbmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvdXJzZV9uYW1lIiwiY291cnNlX2NhdGVnb3J5Iiwib2JqIiwicGFyc2VKU09OIiwiaGlkZUNvdXJzZUNyZWF0aW9uT3B0aW9ucyIsImNvdXJzZV90b19saW5rIiwiY291cnNlaWQiLCJjYl9lbGVtZW50IiwidGlja19lbGVtZW50Iiwic2xpZGVUb2dnbGUiLCJjb3Vyc2VuYW1lIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVBdHRyIiwiY2hhbmdlIiwiZmlsdGVyIiwibm90IiwiaW5pdGlhbGlzZUNyZWF0ZUFzc2lnbm1lbnRCdXR0b24iLCJ1bmJpbmQiLCJwYXJ0cyIsImVhY2giLCJpIiwiY2hhckF0Iiwic3Vic3RyaW5nIiwiY291cnNlX2lkIiwiYXNzaWdubWVudF9uYW1lIiwiZm5SZWxvYWRBamF4IiwiZm5TdGFuZGluZ1JlZHJhdyIsInRvZ2dsZUNsYXNzIiwiZGF0YVRhYmxlc0xhbmciLCJub2ludGVncmF0aW9uIiwic1Byb2Nlc3NpbmciLCJzcHJvY2Vzc2luZyIsInNaZXJvUmVjb3JkcyIsInN6ZXJvcmVjb3JkcyIsInNJbmZvIiwic2luZm8iLCJzU2VhcmNoIiwic3NlYXJjaCIsInNMZW5ndGhNZW51Iiwic2xlbmd0aG1lbnUiLCJzSW5mb0VtcHR5Iiwic2VtcHR5dGFibGUiLCJvUGFnaW5hdGUiLCJzTmV4dCIsInNuZXh0Iiwic1ByZXZpb3VzIiwic3ByZXZpb3VzIiwiZGF0YVRhYmxlc0xhbmdNaWdyYXRpb24iLCJzbGVuZ3RobWlncmF0aW9ubWVudSIsImRhdGFUYWJsZSIsImJEZXN0cm95IiwiYlByb2Nlc3NpbmciLCJiU2VydmVyU2lkZSIsIm9MYW5ndWFnZSIsImFhU29ydGluZyIsImFMZW5ndGhNZW51Iiwic0FqYXhTb3VyY2UiLCJhb0NvbHVtbnMiLCJiU29ydGFibGUiLCJmbkNyZWF0ZWRDZWxsIiwiblRkIiwic0RhdGEiLCJvRGF0YSIsImlSb3ciLCJpQ29sIiwiYWRkQ2xhc3MiLCJhRGF0YVNvcnQiLCJmbkRyYXdDYWxsYmFjayIsImNsb3Nlc3QiLCJmaW5kIiwib24iLCJzdWJtaXRidXR0b24iLCJldiIsInByZXZlbnREZWZhdWx0IiwibWVzc2FnZSIsImNvbmZpcm12MWRlbGV0ZXRpdGxlIiwidXRpbCIsImdldF9zdHJpbmciLCJjb25maXJtdjFkZWxldGV3YXJuaW5nIiwiY29uZmlybSIsInN1Ym1pdCIsInNEb20iLCJiU2VhcmNoYWJsZSIsInNDbGFzcyIsInNXaWR0aCIsImFvQ29sdW1uRGVmcyIsImJWaXNpYmxlIiwiYVRhcmdldHMiLCJvU2V0dGluZ3MiLCJhaURpc3BsYXkiLCJuVHJzIiwiaUNvbHNwYW4iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInNMYXN0R3JvdXAiLCJzR3JvdXAiLCJfaURpc3BsYXlTdGFydCIsImFvRGF0YSIsIl9hRGF0YSIsIm5Hcm91cCIsImNyZWF0ZUVsZW1lbnQiLCJuQ2VsbCIsImNvbFNwYW4iLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJhYVNvcnRpbmdGaXhlZCIsImRhdGVwaWNrZXIiLCJyZWdpb25hbCIsImRhdGVGb3JtYXQiLCJzZXREZWZhdWx0cyIsImNvdXJzZUJyb3dzZXJUYWJsZSIsImlEYXRhU29ydCIsImZuU2VydmVyRGF0YSIsInNTb3VyY2UiLCJmbkNhbGxiYWNrIiwiY291cnNlX3RpdGxlIiwiY291cnNlX2ludGVncmF0aW9uIiwiY291cnNlX2VuZF9kYXRlIiwicmVzdWx0IiwiYlN0YXRlU2F2ZSIsImZuU3RhdGVTYXZlIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInVpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJlIiwiZm5TdGF0ZUxvYWQiLCJwYXJzZSIsImdldEl0ZW0iLCJtYXJnaW4tbGVmdCIsIm51bWJlcl9vZl9hc3NpZ25tZW50cyIsImhyZWYiLCJjYXRlZ29yeSIsImFzc2lnbm1lbnRzIiwiaXMiLCJjbGFzc19pZHMiLCJwYWdldXJsIiwibG9jYXRpb24iLCJyZXBsYWNlIiwibWFyZ2luLXRvcCIsImNyZWF0ZV9hc3NpZ25tZW50cyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLFVBQVVDLE1BQU0sU0FBU0MsR0FrVzVCLFFBQVNDLHlCQUNMRCxFQUFFLDBCQUEwQkUsVUFDeEJDLFFBQU8sRUFBTUMsTUFBTSxNQUFPQyxJQUFLLFFBQVNDLFdBQVksT0FBUUMsT0FBTyxRQUFTQyxRQUFTLE1BQU9DLFVBQVcscUJBQ3ZHQyxPQUFRLFdBQ0pDLHVCQUVKQyxXQUFhLFdBSVQsR0FBSUMsY0FBZWIsRUFBRSxJQUFNQSxFQUFFYyxNQUFNQyxLQUFLLE1BQVEsU0FBU0EsS0FBSyxLQUM5REYsY0FBZUEsYUFBYUcsTUFBTSxLQUNsQ2hCLEVBQUUsK0JBQStCaUIsSUFBSUosYUFBYSxJQUNsRGIsRUFBRSxpQ0FBaUNpQixJQUFJSixhQUFhLElBQ3BEYixFQUFFLGdDQUFnQ2lCLElBQUlKLGFBQWEsR0FFbkQsSUFBSUssT0FBUWxCLEVBQUVjLE1BQU1DLEtBQUssTUFBTUMsTUFBTSxLQUNqQ0csY0FBZ0JELE1BQU0sRUFDMUJsQixHQUFFLCtCQUErQmlCLElBQUlFLGVBQ3JDbkIsRUFBRSxrQ0FBa0NpQixJQUFJakIsRUFBRSxZQUFjbUIsZUFBZUMsUUFDdkVwQixFQUFFLGlEQUFpRHFCLE9BQ25EckIsRUFBRSxnQ0FBZ0NzQixJQUFJLFVBQVcsUUFFakR0QixFQUFFLHFCQUFxQnVCLE1BQU0sV0FDekJ2QixFQUFFd0IsTUFDRUMsU0FBWSxPQUNaQyxLQUFRLE9BQ1JDLElBQU8sV0FDUEMsTUFBU0MsT0FBUSx1QkFBd0JWLGNBQWVBLGNBQ3BEVyxpQkFBa0I5QixFQUFFLFlBQWNtQixlQUFlQyxPQUFRVyxRQUFTQyxFQUFFQyxJQUFJRixRQUN4RUcsV0FBWWxDLEVBQUUsK0JBQStCaUIsTUFDN0NrQixXQUFZbkMsRUFBRSxpQ0FBaUNpQixNQUMvQ21CLFdBQVlwQyxFQUFFLGdDQUFnQ2lCLE9BRWxEb0IsUUFBUyxTQUFTVCxNQUVkLEdBREFVLEtBQUtWLE1BQ2MsV0FBZkEsS0FBS1csT0FDTEMsT0FBT3hDLEVBQUV5QyxHQUFHdkMsU0FBU3dDLFFBQ3JCMUMsRUFBRSxnQkFBa0JtQixjQUFnQixTQUFTQyxLQUFLUSxLQUFLZSxjQUNwRCxDQUNILEdBQUlDLGFBQWM1QyxFQUFFLHVCQUF1Qm9CLElBQzNDcEIsR0FBRSx1QkFBdUJvQixLQUFLd0IsWUFBYyxJQUFNaEIsS0FBS2lCLFlBTTNFQyxVQUFXLFdBQ1A5QyxFQUFFLDhCQUE4QitDLE9BQ2hDL0MsRUFBRSxrQkFBa0JnRCxZQUtoQyxRQUFTckMsdUJBQ0xYLEVBQUUsUUFBUWlELE9BQU8sbUZBQXFGakIsRUFBRWtCLElBQUlDLGdCQUFnQkMsWUFBYyxjQU05SSxRQUFTQyw4QkFFTCxHQUFJQyxHQUFjdEQsRUFBRXVELFFBQVFuRCxRQUN4Qm9ELEVBQWdCLEtBQ2hCRixHQUFjLE1BQ2RFLEVBQWdCLFFBR3BCLElBQUlDLEdBQWV6RCxFQUFFdUQsUUFBUW5ELFFBQ3pCc0QsRUFBaUIsS0FDakJELEdBQWUsTUFDZkMsRUFBaUIsU0FHckIxRCxFQUFFLHFCQUFxQkUsVUFDbkJ5RCxRQUFPLEVBQU12RCxNQUFNb0QsRUFBZWpELE9BQU9tRCxFQUFnQnJELElBQUssUUFBU0ksVUFBVyxZQUFhRCxRQUFTLE1BQ3hHRSxPQUFRLFdBQ0pDLHVCQUVKbUMsVUFBVSxXQUNOOUMsRUFBRSxrQkFBa0JnRCxZQUk1QmhELEVBQUUscUJBQXFCdUIsTUFBTSxXQUNyQnZCLEVBQUUsNkJBQTZCNEQsT0FBUyxFQUN4QzVELEVBQUUsc0JBQXNCNkQsWUFFeEI3RCxFQUFFLHNCQUFzQjhELFlBTXBDLFFBQVNDLGdDQUErQkMsR0FDcENoRSxFQUFFLHFCQUFxQnVCLE1BQU0sV0FDekJ2QixFQUFFd0IsTUFDRUMsU0FBWSxPQUNaQyxLQUFRLE9BQ1JDLElBQU8sV0FDUEMsTUFBU0MsT0FBUSxnQkFBaUJWLGNBQWVuQixFQUFFLGtCQUFrQm9CLE9BQ2pFNkMsZ0JBQWlCQyxtQkFBbUJsRSxFQUFFLG9CQUFvQm9CLFFBQzFEK0MsWUFBYUQsbUJBQW1CbEUsRUFBRSxrQkFBa0JpQixPQUNwRG1ELGdCQUFpQnBFLEVBQUUsc0JBQXNCaUIsTUFBT2MsUUFBU0MsRUFBRUMsSUFBSUYsU0FDbkVNLFFBQVMsU0FBU1QsR0FDZCxHQUFJeUMsR0FBTXhFLE9BQU95RSxVQUFVMUMsRUFDM0IyQywyQkFBMEJGLEVBQUtMLFFBSzNDaEUsRUFBRSxxQkFBcUJ1QixNQUFNLFdBQ3pCdkIsRUFBRXdCLE1BQ0VDLFNBQVksT0FDWkMsS0FBUSxPQUNSQyxJQUFPLFdBQ1BDLE1BQVNDLE9BQVEsY0FBZVYsY0FBZW5CLEVBQUUsa0JBQWtCb0IsT0FDL0Q2QyxnQkFBaUJqRSxFQUFFLG9CQUFvQm9CLE9BQVFvRCxlQUFnQnhFLEVBQUUsb0JBQW9CaUIsTUFDckZjLFFBQVNDLEVBQUVDLElBQUlGLFNBQ25CTSxRQUFTLFNBQVNULEdBQ2QsR0FBSXlDLEdBQU14RSxPQUFPeUUsVUFBVTFDLEVBQzNCMkMsMkJBQTBCRixFQUFLTCxRQVEvQyxRQUFTTywyQkFBMEJGLEVBQUtMLEdBQ3BDLEdBQVcsR0FBUEssRUFBVSxDQUNWckUsRUFBRSxjQUFjb0IsS0FBS2lELEVBQUlJLFNBRXpCLElBQUlDLEdBQWEscUJBQXVCMUUsRUFBRSxrQkFBa0JvQixPQUFTLElBQ3JFb0IsUUFBT3hDLEVBQUUwRSxHQUFZM0IsTUFDckIsSUFBSTRCLEdBQWUsU0FBVzNFLEVBQUUsa0JBQWtCb0IsTUFDbERvQixRQUFPeEMsRUFBRTJFLEdBQWN0RCxPQUV2QnJCLEVBQUUsMENBQTBDd0MsU0FBU29DLGNBQ3JENUUsRUFBRSwwQ0FBMEN3QyxTQUFTb0MsY0FFckQ1RSxFQUFFLGlCQUFpQitDLE9BRW5CL0MsRUFBRSwrQkFBK0JvQixLQUFLaUQsRUFBSVEsWUFDMUM3RSxFQUFFLDZCQUE2QjhFLFlBQVksZ0JBRXZDOUUsRUFBRSx3QkFBd0I0RCxPQUFTLElBQ25DNUQsRUFBRSx3QkFBd0IrRSxXQUFXLFlBQ3JDL0UsRUFBRSxzQkFBc0IrRSxXQUFXLFlBQ25DL0UsRUFBRSx5QkFBeUIrRSxXQUFXLGFBRzFDL0UsRUFBRSx3QkFBd0JnRixPQUFPLFdBQ3pCaEYsRUFBRSx3QkFBd0JpRixPQUFPLFlBQVlyQixRQUFVLEVBQ3ZENUQsRUFBRSx3QkFBd0JrRixJQUFJLFlBQVluRSxLQUFLLFdBQVksWUFFM0RmLEVBQUUsd0JBQXdCK0UsV0FBVyxjQUk3Q0ksaUNBQWlDbkIsSUFLekMsUUFBU21CLGtDQUFpQ25CLEdBQ3RDaEUsRUFBRSx5QkFBeUJvRixPQUFPLFNBQ2xDcEYsRUFBRSx5QkFBeUJ1QixNQUFNLFdBRTdCLEdBQUk4RCxHQUFRLEVBQ1pyRixHQUFFLGdDQUFnQ3NGLEtBQUssU0FBU0MsR0FDNUNGLEdBQVNyRixFQUFFYyxNQUFNRyxNQUFRLE1BRVMsS0FBbENvRSxFQUFNRyxPQUFPSCxFQUFNekIsT0FBUyxJQUM1QnlCLEVBQU1JLFVBQVUsRUFBR0osRUFBTXpCLE9BQVMsR0FHdEM1RCxFQUFFLHlCQUF5QmUsS0FBSyxXQUFZLFlBRTVDZixFQUFFd0IsTUFDRUMsU0FBWSxPQUNaQyxLQUFRLE9BQ1JDLElBQU8sV0FDUEMsTUFBU0MsT0FBUSxvQkFBcUI2RCxVQUFXMUYsRUFBRSxjQUFjb0IsT0FDN0R1RSxnQkFBaUIzRixFQUFFLHNCQUFzQmlCLE1BQU9vRSxNQUFPQSxFQUFPdEQsUUFBU0MsRUFBRUMsSUFBSUYsU0FDakZNLFFBQVMsU0FBU1QsR0FDZG9DLEVBQU80QixlQUNQNUIsRUFBTzZCLG1CQUNQN0YsRUFBRSxzQkFBc0IrRSxXQUFXLFlBQ25DL0UsRUFBRSx5QkFBeUIrRSxXQUFXLFlBQ3RDL0UsRUFBRSx3QkFBd0IrRSxXQUFXLGlCQS9oQnJEL0UsRUFBRSxnRUFBZ0U4RixZQUFZLFNBRzlFLElBQUlDLGlCQUNBQyxjQUFpQmhFLEVBQUVrQixJQUFJQyxnQkFBZ0I2QyxjQUN2Q0MsWUFBZWpFLEVBQUVrQixJQUFJQyxnQkFBZ0IrQyxZQUNyQ0MsYUFBZ0JuRSxFQUFFa0IsSUFBSUMsZ0JBQWdCaUQsYUFDdENDLE1BQVNyRSxFQUFFa0IsSUFBSUMsZ0JBQWdCbUQsTUFDL0JDLFFBQVd2RSxFQUFFa0IsSUFBSUMsZ0JBQWdCcUQsUUFDakNDLFlBQWV6RSxFQUFFa0IsSUFBSUMsZ0JBQWdCdUQsWUFDckNDLFdBQWMzRSxFQUFFa0IsSUFBSUMsZ0JBQWdCeUQsWUFDcENDLFdBQ0lDLE1BQVM5RSxFQUFFa0IsSUFBSUMsZ0JBQWdCNEQsTUFDL0JDLFVBQWFoRixFQUFFa0IsSUFBSUMsZ0JBQWdCOEQsWUFLdkNDLHlCQUNBbEIsY0FBaUJoRSxFQUFFa0IsSUFBSUMsZ0JBQWdCNkMsY0FDdkNDLFlBQWVqRSxFQUFFa0IsSUFBSUMsZ0JBQWdCK0MsWUFDckNDLGFBQWdCbkUsRUFBRWtCLElBQUlDLGdCQUFnQmlELGFBQ3RDQyxNQUFTckUsRUFBRWtCLElBQUlDLGdCQUFnQm1ELE1BQy9CQyxRQUFXLEdBQ1hFLFlBQWV6RSxFQUFFa0IsSUFBSUMsZ0JBQWdCZ0UscUJBQ3JDUixXQUFjM0UsRUFBRWtCLElBQUlDLGdCQUFnQnlELFlBQ3BDQyxXQUNJQyxNQUFTOUUsRUFBRWtCLElBQUlDLGdCQUFnQjRELE1BQy9CQyxVQUFhaEYsRUFBRWtCLElBQUlDLGdCQUFnQjhELFdBSzNDakgsR0FBRSxvQkFBb0JvSCxXQUNsQkMsVUFBWSxFQUNaQyxhQUFlLEVBQ2ZDLGFBQWUsRUFDZkMsVUFBYXpCLGVBQ2IwQixZQUFnQixFQUFHLFFBQ25CQyxjQUFpQixHQUFJLEdBQUksR0FBSSxTQUFXLEdBQUksR0FBSSxHQUFJLElBQUssUUFDekRDLFlBQWUsNEJBQ2ZDLFlBQ2lCQyxXQUFhLEVBQ1ZDLGNBQWlCLFNBQVVDLEVBQUtDLEVBQU9DLEVBQU9DLEVBQU1DLEdBQ2hEbkksRUFBRStILEdBQUtLLFNBQVMsbUJBRXhCLE1BQ0NDLFdBQWUsRUFBRyxLQUNsQkEsV0FBZSxFQUFHLElBQ25CLE1BRWhCQyxlQUFrQixXQUNkdEksRUFBRSw2QkFBNkJlLEtBQUssV0FBVyxNQUtILEtBQS9DZixFQUFFLG1CQUFtQjRCLEtBQUssb0JBQzNCNUIsRUFBRSxzQ0FBc0NlLEtBQUssV0FBWSxZQUN6RGYsRUFBRSxzQ0FBc0N1SSxRQUFRLFFBQVFDLEtBQUssOEJBQThCekgsS0FBSyxXQUFZLGFBSWhIZixFQUFFLDZCQUE2QnVJLFFBQVEsUUFBUUMsS0FBSyw4QkFBOEJ6SCxLQUFLLFdBQVksWUFDbkdmLEVBQUVGLFVBQVUySSxHQUFHLFFBQVMsK0VBQWdGLFdBQ2hHekksRUFBRSw2Q0FBNkM0RCxPQUFTLEVBQ3hENUQsRUFBRSxxQ0FBcUN1SSxRQUFRLFFBQVFDLEtBQUssOEJBQThCekQsV0FBVyxZQUVyRy9FLEVBQUUscUNBQXFDdUksUUFBUSxRQUFRQyxLQUFLLDhCQUE4QnpILEtBQUssV0FBWSxhQUtuSCxJQUFJMkgsY0FBZTFJLEVBQUUsbUJBQW1CdUksUUFBUSxRQUFRQyxLQUFLLDZCQUM3REUsY0FBYW5ILE1BQU0sU0FBU29ILEdBQ3hCQSxFQUFHQyxnQkFHSCxJQUFJQyxHQUFVN0csRUFBRWtCLElBQUlDLGdCQUFnQjJGLHFCQUFxQixNQUN6REQsSUFBVzdHLEVBQUUrRyxLQUFLQyxXQUFXLHNCQUF1QixrQkFBbUJoSixFQUFFLDZDQUE2QzRELFFBQVEsT0FDOUhpRixHQUFXN0csRUFBRWtCLElBQUlDLGdCQUFnQjhGLHVCQUU3QkMsUUFBUUwsSUFDUjdJLEVBQUUsbUJBQW1CdUksUUFBUSxRQUFRWSxXQU03Q25KLEVBQUUsbUJBQW1Cb0gsV0FDakJDLFVBQVksRUFDWkMsYUFBZSxFQUNmQyxhQUFlLEVBQ2ZDLFVBQWFOLHdCQUNiTyxZQUFnQixFQUFHLFFBQ25CQyxjQUFpQixHQUFJLEdBQUksR0FBSSxTQUFXLEdBQUksR0FBSSxHQUFJLElBQUssUUFDekRDLFlBQWUsa0NBQ2Z5QixLQUFRLG9DQUNSeEIsWUFDaUJDLFdBQWEsRUFBT3dCLGFBQWUsRUFDaEN2QixjQUFpQixTQUFVQyxFQUFLQyxFQUFPQyxFQUFPQyxFQUFNQyxHQUNoRG5JLEVBQUUrSCxHQUFLSyxTQUFTLG9CQUV2QlAsV0FBYSxFQUFNeUIsT0FBVSxnQkFBaUJELGFBQWUsSUFDN0R4QixXQUFhLEVBQU13QixhQUFlLElBQ2xDeEIsV0FBYSxFQUFNeUIsT0FBVSxnQkFBaUJELGFBQWUsSUFFOUVmLGVBQWtCLFdBQ2R0SSxFQUFFLDZCQUE2QmUsS0FBSyxXQUFXLE1BR3ZEZixFQUFFLGdDQUFnQ2UsS0FBSyxjQUFlLFVBR3REZixFQUFFLGVBQWVvSCxXQUNiQyxVQUFZLEVBQ1pDLGFBQWUsRUFDZkMsYUFBZSxFQUNmQyxVQUFhekIsZUFDYjRCLFlBQWUsNEJBQ2ZDLFdBQ1ksS0FDQSxLQUNBLE1BQ0MwQixPQUFVLGNBQWVDLE9BQVUsT0FDcEMsTUFDQ0QsT0FBVSxjQUFlQyxPQUFVLE9BQ3BDLE1BQ0NELE9BQVUsYUFBY0MsT0FBVSxRQUNsQ0QsT0FBVSxZQUFhQyxPQUFVLE9BRTlDQyxlQUNhSCxhQUFlLEVBQU1JLFVBQVksRUFBT0MsVUFBYyxLQUN0REwsYUFBZSxFQUFNSSxVQUFZLEVBQU9DLFVBQWMsS0FDdERMLGFBQWUsRUFBTUksVUFBWSxFQUFPQyxVQUFjLEtBQ3RETCxhQUFlLEVBQU1JLFVBQVksRUFBTUMsVUFBYyxLQUNyREwsYUFBZSxFQUFNSSxVQUFZLEVBQU9DLFVBQWMsS0FDdERMLGFBQWUsRUFBTUksVUFBWSxFQUFNQyxVQUFjLEtBQ3JETCxhQUFlLEVBQU1JLFVBQVksRUFBT0MsVUFBYyxLQUN0REwsYUFBZSxFQUFNSSxVQUFZLEVBQU1DLFVBQWMsS0FDckRMLGFBQWUsRUFBTUksVUFBWSxFQUFNQyxVQUFjLEtBRWxFcEIsZUFBa0IsU0FBV3FCLEdBQ3pCLEdBQW1DLEdBQTlCQSxFQUFVQyxVQUFVaEcsT0FRekIsSUFBSyxHQUhEaUcsR0FBTzdKLEVBQUUsd0JBQ1Q4SixFQUFXRCxFQUFLLEdBQUdFLHFCQUFxQixNQUFNbkcsT0FDOUNvRyxFQUFhLEdBQ1J6RSxFQUFJLEVBQUdBLEVBQUlzRSxFQUFLakcsT0FBUTJCLElBQUssQ0FDbEMsR0FDSTBFLElBRGdCTixFQUFVTyxlQUFpQjNFLEVBQ2xDb0UsRUFBVVEsT0FBUVIsRUFBVUMsVUFBVXJFLElBQUs2RSxPQUFPLEdBQy9ELElBQUtILEdBQVVELEVBQ2YsQ0FDSSxHQUFJSyxHQUFTdkssU0FBU3dLLGNBQWUsTUFDakNDLEVBQVF6SyxTQUFTd0ssY0FBZSxLQUNwQ0MsR0FBTUMsUUFBVVYsRUFDaEJTLEVBQU05SixVQUFZLFFBQ2xCOEosRUFBTUUsVUFBWVIsRUFDbEJJLEVBQU9LLFlBQWFILEdBQ3BCVixFQUFLdEUsR0FBR29GLFdBQVdDLGFBQWNQLEVBQVFSLEVBQUt0RSxJQUM5Q3lFLEVBQWFDLEtBSXpCWSxpQkFBcUIsRUFBRyxRQUN4QnBELFlBQWdCLEVBQUcsUUFDbkIyQixLQUFRLHlCQUdacEosRUFBRThLLFdBQVdDLFNBQVMsSUFBSUMsV0FBYSxTQUN2Q2hMLEVBQUU4SyxXQUFXRyxZQUFZakwsRUFBRThLLFdBQVdDLFNBQVMsSUFHL0MsSUFBSUcsb0JBQXFCbEwsRUFBRSx1QkFBdUJvSCxXQUM5Q0UsYUFBZSxFQUNmRSxVQUFhekIsZUFDYjBCLFlBQWdCLEVBQUcsUUFDbkJFLFlBQWUsV0FDZjZCLGVBQ2FILGFBQWUsRUFBT3hCLFdBQWEsRUFBTzBCLE9BQVUsS0FBTUUsVUFBWSxFQUFNQyxVQUFjLEdBQ3ZGNUIsY0FBaUIsU0FBVUMsR0FDdkIvSCxFQUFFK0gsR0FBS0ssU0FBUyxhQUV2QmlCLGFBQWUsRUFBTUksVUFBWSxFQUFNRixPQUFVLE1BQU80QixVQUFhLEVBQUd6QixVQUFjLEtBQ3RGTCxhQUFlLEVBQU1JLFVBQVksRUFBTUYsT0FBVSxNQUFPRyxVQUFjLEtBQ3RFTCxhQUFlLEVBQU1JLFVBQVksRUFBTUYsT0FBVSxNQUFPNEIsVUFBYSxFQUFHekIsVUFBYyxHQUNuRjVCLGNBQWlCLFNBQVVDLEdBQ3ZCL0gsRUFBRStILEdBQUtLLFNBQVMsWUFFdkJpQixhQUFlLEVBQU9JLFVBQVksRUFBTUYsT0FBVSxNQUFPRyxVQUFjLEdBQ3BFNUIsY0FBaUIsU0FBVUMsR0FDdkIvSCxFQUFFK0gsR0FBS0ssU0FBUyxZQUV2QmlCLGFBQWUsRUFBTUksVUFBWSxFQUFNRixPQUFVLE1BQU9HLFVBQWMsR0FDbkU1QixjQUFpQixTQUFVQyxHQUN2Qi9ILEVBQUUrSCxHQUFLSyxTQUFTLGFBRXZCaUIsYUFBZSxFQUFNSSxVQUFZLEVBQU9DLFVBQWMsS0FDdERMLGFBQWUsRUFBTUksVUFBWSxFQUFPQyxVQUFjLEtBRW5FMEIsYUFBZ0IsU0FBV0MsRUFBU2xCLEVBQVFtQixHQUN4Q3RMLEVBQUV3QixNQUNFQyxTQUFZLE9BQ1pDLEtBQVEsT0FDUkMsSUFBTzBKLEVBQ1B6SixNQUFTQyxPQUFRLGlCQUFrQjBKLGFBQWN2TCxFQUFFLHdCQUF3QmlCLE1BQ3ZFdUssbUJBQW9CeEwsRUFBRSw4QkFBOEJpQixNQUNwRHdLLGdCQUFpQnpMLEVBQUUsMkJBQTJCaUIsTUFBT2MsUUFBU0MsRUFBRUMsSUFBSUYsU0FDeEVNLFFBQVcsU0FBU3FKLEdBQ2hCSixFQUFXSSxPQUl2QkMsWUFBYyxFQUNkQyxZQUFlLFNBQVVqQyxFQUFXMUIsR0FDaEMsSUFDSTRELGFBQWFDLFFBQVNDLElBQU0sYUFBY0MsS0FBS0MsVUFBVWhFLElBQzNELE1BQVFpRSxNQUdkQyxZQUFlLFNBQVV4QyxHQUNyQixJQUNJLE1BQU9xQyxNQUFLSSxNQUFPUCxhQUFhUSxRQUFRTixJQUFNLGVBQ2hELE1BQVFHLE1BR2Q1RCxlQUFrQixXQUNkdEksRUFBRSw2QkFBNkJlLEtBQUssV0FBVyxHQUMvQ3NDLDZCQUNBcEQsd0JBQ0FELEVBQUUsMEJBQTBCK0UsV0FBVyxjQUkvQy9FLEdBQUUsMEJBQTBCdUIsTUFBTSxXQUk5QixNQUhBdkIsR0FBRWMsTUFBTUMsS0FBSyxXQUFZLFlBQ3pCbUssbUJBQW1CdEYsZUFDbkJzRixtQkFBbUJyRixvQkFDWixJQUdYN0YsRUFBRSwyQkFBMkI4SyxZQUc3QixJQUFJOUcsUUFBU2hFLEVBQUUsMkJBQTJCb0gsV0FDdENFLGFBQWUsRUFDZkUsVUFBYXpCLGVBQ2I0QixZQUFlLFdBQ2Z5RCxhQUFnQixTQUFXQyxRQUFTbEIsT0FBUW1CLFlBR3hDdEwsRUFBRSxxQkFBcUJlLEtBQUssV0FBVyxZQUN2Q2YsRUFBRSxxQkFBcUJlLEtBQUssV0FBVyxZQUduQ2YsRUFBRSwyQkFBMkI0RCxPQUFTLEdBQ3RDNUQsRUFBRSw2Q0FBNkNzQixLQUFLZ0wsY0FBZ0IsUUFFeEV0TSxFQUFFLHNCQUFzQmUsS0FBSyxXQUFZLFlBQ3pDZixFQUFFLHlCQUF5QmUsS0FBSyxXQUFZLFlBQzVDZixFQUFFd0IsTUFDRUMsU0FBWSxPQUNaQyxLQUFRLE9BQ1JDLElBQU8wSixRQUNQekosTUFBU0MsT0FBUSxrQkFBbUJWLGNBQWVuQixFQUFFLGtCQUFrQm9CLE9BQVFXLFFBQVNDLEVBQUVDLElBQUlGLFNBQzlGTSxRQUFXLFNBQVNxSixRQUNoQnBKLEtBQUtvSixRQUNMM0gsK0JBQStCQyxRQUMvQnNILFdBQVdJLFFBRW1CLEtBQTFCMUwsRUFBRSxjQUFjb0IsUUFBaUJzSyxPQUFPYSxzQkFBd0IsR0FDaEV2TSxFQUFFLHNCQUFzQitFLFdBQVcsWUFDbkMvRSxFQUFFLHlCQUF5QitFLFdBQVcsWUFDdEMvRSxFQUFFLHdCQUF3QitFLFdBQVcsWUFDckNJLGlDQUFpQ25CLFVBRWpDaEUsRUFBRSxzQkFBc0JlLEtBQUssV0FBWSxZQUN6Q2YsRUFBRSx5QkFBeUJlLEtBQUssV0FBWSxZQUM1Q2YsRUFBRSx3QkFBd0JlLEtBQUssV0FBWSxhQUkvQ2YsRUFBRSxxQkFBcUIrRSxXQUFXLFlBQ2xDL0UsRUFBRSxxQkFBcUIrRSxXQUFXLGdCQUk5Q3lFLGVBQ0tILGFBQWUsRUFBT0ksVUFBWSxFQUFNQyxVQUFjLEtBQ3RETCxhQUFlLEVBQU1JLFVBQVksRUFBTUMsVUFBYyxHQUNsRDVCLGNBQWlCLFNBQVVDLEdBQ3ZCL0gsRUFBRStILEdBQUtLLFNBQVMsYUFFdkJpQixhQUFlLEVBQU1JLFVBQVksRUFBTUMsVUFBYyxLQUNyREwsYUFBZSxFQUFNSSxVQUFZLEVBQU1DLFVBQWMsTUE0QjlELElBdkJBMUosRUFBRSwwQkFBMEJFLFVBQ3hCeUQsUUFBTyxFQUFNdkQsTUFBTSxNQUFPQyxJQUFLLFFBQVNFLE9BQU8sUUFBU0MsUUFBUyxNQUFPQyxVQUFXLGtCQUNuRitMLEtBQU0sV0FDRSxHQUFJQyxHQUFXek0sRUFBRSwyQkFBMkJpQixNQUN4Q3lMLEVBQWUxTSxFQUFFLCtCQUErQjJNLEdBQUcsWUFBZSxJQUFNLElBRXhFQyxFQUFZLEVBRWhCNU0sR0FBRSw2QkFBNkJzRixLQUFLLFNBQVNDLEdBQ3pDcUgsR0FBYSxZQUFjckgsRUFBSSxJQUFNdkYsRUFBRWMsTUFBTUcsTUFDN0NzRSxLQUdKLElBQUlzSCxHQUFVdEosT0FBT3VKLFNBQVNOLEtBQzFCN0ssRUFBTWtMLEVBQVFFLFFBQVEsY0FBZSxnQ0FFekMsT0FBT3BMLEdBQU0sOEJBQWdDOEssRUFBVyxnQkFBa0JDLEVBQWNFLEVBQVksWUFBYzVLLEVBQUVDLElBQUlGLFNBRWhJZSxVQUFXLFdBQ1BTLE9BQU91SixTQUFXdkosT0FBT3VKLFlBSTdCOU0sRUFBRSxjQUFjNEQsT0FBUyxFQUFHLENBRzVCNUQsRUFBRSw2Q0FBNkNzQixLQUMzQ2dMLGNBQWdCLFFBR3BCdE0sRUFBRSxtREFBbURzQixLQUNqRGxCLE1BQVMsT0FDVDRNLGFBQWMsU0FHbEIsSUFBSUosV0FBWTVNLEVBQUUsY0FBY29CLE1BRWhDcEIsR0FBRXdCLE1BQ0VDLFNBQVksT0FDWkMsS0FBUSxPQUNSQyxJQUFPLFdBQ1BDLE1BQVNDLE9BQVEsaUJBQWtCK0ssVUFBV0EsVUFBV3hJLGdCQUFpQnBFLEVBQUUsb0JBQW9Cb0IsT0FDNUY2TCxtQkFBb0JqTixFQUFFLHVCQUF1Qm9CLE9BQVFXLFFBQVNDLEVBQUVDLElBQUlGLFNBQ3hFTSxRQUFTLFNBQVNULEdBQ2Q1QixFQUFFLDJCQUEyQm9CLEtBQUtRIiwiZmlsZSI6InR1cm5pdGludG9vbHR3b19leHRyYS5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyJqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpIHtcbiAgICAvLyBBZGQgc3R5bGUgdG8gaGVhZGVyIHJvdy5cbiAgICAkKCcuc3VibWlzc2lvbnNEYXRhVGFibGUgdGhlYWQgdHIsICNjb3Vyc2VCcm93c2VyVGFibGUgdGhlYWQgdHInKS50b2dnbGVDbGFzcyhcImhlYWRlclwiKTtcblxuICAgIC8vIENvbmZpZ3VyZSBkYXRhdGFibGVzIGxhbmd1YWdlIHNldHRpbmdzLlxuICAgIHZhciBkYXRhVGFibGVzTGFuZyA9IHtcbiAgICAgICAgXCJub2ludGVncmF0aW9uXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5ub2ludGVncmF0aW9uLFxuICAgICAgICBcInNQcm9jZXNzaW5nXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zcHJvY2Vzc2luZyxcbiAgICAgICAgXCJzWmVyb1JlY29yZHNcIjogTS5zdHIudHVybml0aW50b29sdHdvLnN6ZXJvcmVjb3JkcyxcbiAgICAgICAgXCJzSW5mb1wiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc2luZm8sXG4gICAgICAgIFwic1NlYXJjaFwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc3NlYXJjaCxcbiAgICAgICAgXCJzTGVuZ3RoTWVudVwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc2xlbmd0aG1lbnUsXG4gICAgICAgIFwic0luZm9FbXB0eVwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc2VtcHR5dGFibGUsXG4gICAgICAgIFwib1BhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgIFwic05leHRcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNuZXh0LFxuICAgICAgICAgICAgXCJzUHJldmlvdXNcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNwcmV2aW91c1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIENvbmZpZ3VyZSBkYXRhdGFibGVzIGxhbmd1YWdlIHNldHRpbmdzIGZvciBtaWdyYXRpb24gdG9vbC5cbiAgICB2YXIgZGF0YVRhYmxlc0xhbmdNaWdyYXRpb24gPSB7XG4gICAgICAgIFwibm9pbnRlZ3JhdGlvblwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28ubm9pbnRlZ3JhdGlvbixcbiAgICAgICAgXCJzUHJvY2Vzc2luZ1wiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc3Byb2Nlc3NpbmcsXG4gICAgICAgIFwic1plcm9SZWNvcmRzXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zemVyb3JlY29yZHMsXG4gICAgICAgIFwic0luZm9cIjogTS5zdHIudHVybml0aW50b29sdHdvLnNpbmZvLFxuICAgICAgICBcInNTZWFyY2hcIjogJycsXG4gICAgICAgIFwic0xlbmd0aE1lbnVcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNsZW5ndGhtaWdyYXRpb25tZW51LFxuICAgICAgICBcInNJbmZvRW1wdHlcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNlbXB0eXRhYmxlLFxuICAgICAgICBcIm9QYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICBcInNOZXh0XCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zbmV4dCxcbiAgICAgICAgICAgIFwic1ByZXZpb3VzXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zcHJldmlvdXNcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDb25maWd1cmUgdGhlIHVubGluayBhbmQgcmVsaW5rIHVzZXJzIGRhdGF0YWJsZSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZWEuXG4gICAgJCgnI3VubGlua1VzZXJUYWJsZScpLmRhdGFUYWJsZSh7XG4gICAgICAgIFwiYkRlc3Ryb3lcIjogdHJ1ZSxcbiAgICAgICAgXCJiUHJvY2Vzc2luZ1wiOiB0cnVlLFxuICAgICAgICBcImJTZXJ2ZXJTaWRlXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nLFxuICAgICAgICBcImFhU29ydGluZ1wiOiBbWyAyLCBcImFzY1wiIF1dLFxuICAgICAgICBcImFMZW5ndGhNZW51XCI6IFtbMTAsIDI1LCA1MCwgMTAwLCAtMV0sIFsxMCwgMjUsIDUwLCAxMDAsIFwiQWxsXCJdXSxcbiAgICAgICAgXCJzQWpheFNvdXJjZVwiOiBcImFqYXgucGhwP2FjdGlvbj1nZXRfdXNlcnNcIixcbiAgICAgICAgXCJhb0NvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1wiYlNvcnRhYmxlXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm5DcmVhdGVkQ2VsbFwiOiBmdW5jdGlvbiAoblRkLCBzRGF0YSwgb0RhdGEsIGlSb3csIGlDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChuVGQpLmFkZENsYXNzKCdjZW50ZXJlZF9jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAge1wiYURhdGFTb3J0XCI6IFsgMiwgMyBdfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImFEYXRhU29ydFwiOiBbIDMsIDIgXX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICBcImZuRHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoJ2lucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXScpLmF0dHIoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc2FibGUgdGhlIHN1Ym1pdCBidXR0b24gaWYgVHVybml0aW4gdjEgYW5kIHYyIGFjY291bnQgaWRzIGFyZSBkaWZmZXJlbnQgaW4gTWlncmF0aW9uIFRvb2wuXG4gICAgaWYgKCAkKCcjc2FtZXRpaWFjY291bnQnKS5kYXRhKCdzYW1ldGlpYWNjb3VudCcpID09IFwiMFwiICkge1xuICAgICAgICAkKCdzZWxlY3RbbmFtZT1cImVuYWJsZW1pZ3JhdGlvbnRvb2xcIl0nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAkKCdzZWxlY3RbbmFtZT1cImVuYWJsZW1pZ3JhdGlvbnRvb2xcIl0nKS5jbG9zZXN0KCdmb3JtJykuZmluZCgnaW5wdXRbbmFtZT1cInN1Ym1pdGJ1dHRvblwiXScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbiBpbiBtaWdyYXRpb24gdGFiIGlmIHRoZXJlIGFyZSBubyByZXN1bHRzIHNlbGVjdGVkIGFuZCByZS1lbmFibGUgaWYgdGhlcmUgYXJlLlxuICAgICQoJ2lucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXScpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI21pZ3JhdGlvblRhYmxlIGlucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXSwgI21pZ3JhdGlvblRhYmxlIC5icm93c2VyX2NoZWNrYm94JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgkKCcjbWlncmF0aW9uVGFibGUgLmJyb3dzZXJfY2hlY2tib3g6Y2hlY2tlZCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICQoJyNtaWdyYXRpb25UYWJsZSAuYnJvd3Nlcl9jaGVja2JveCcpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJyNtaWdyYXRpb25UYWJsZSAuYnJvd3Nlcl9jaGVja2JveCcpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQXNrIGFkbWluaXN0cmF0b3IgZm9yIGNvbmZpcm1hdGlvbiBpZiB1c2VyIGNsaWNrcyB0byBkZWxldGUgc2VsZWN0ZWQgVjEgYXNzaWdubWVudHMuXG4gICAgdmFyIHN1Ym1pdGJ1dHRvbiA9ICQoJyNtaWdyYXRpb25UYWJsZScpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJyk7XG4gICAgc3VibWl0YnV0dG9uLmNsaWNrKGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgLy8gQ29uc3RydWN0IGNvbmZpcm0gbWVzc2FnZSB0byBhZG1pbmlzdHJhdG9yLlxuICAgICAgICB2YXIgbWVzc2FnZSA9IE0uc3RyLnR1cm5pdGludG9vbHR3by5jb25maXJtdjFkZWxldGV0aXRsZSsnXFxuXFxuJztcbiAgICAgICAgbWVzc2FnZSArPSBNLnV0aWwuZ2V0X3N0cmluZygnY29uZmlybXYxZGVsZXRldGV4dCcsICd0dXJuaXRpbnRvb2x0d28nLCAkKCcjbWlncmF0aW9uVGFibGUgLmJyb3dzZXJfY2hlY2tib3g6Y2hlY2tlZCcpLmxlbmd0aCkrJ1xcblxcbic7XG4gICAgICAgIG1lc3NhZ2UgKz0gTS5zdHIudHVybml0aW50b29sdHdvLmNvbmZpcm12MWRlbGV0ZXdhcm5pbmc7XG5cbiAgICAgICAgaWYgKGNvbmZpcm0obWVzc2FnZSkpIHtcbiAgICAgICAgICAgICQoJyNtaWdyYXRpb25UYWJsZScpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICAvLyBDb25maWd1cmUgdGhlIG1pZ3JhdGlvbiBkYXRhdGFibGUgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmVhLlxuICAgICQoJyNtaWdyYXRpb25UYWJsZScpLmRhdGFUYWJsZSh7XG4gICAgICAgIFwiYkRlc3Ryb3lcIjogdHJ1ZSxcbiAgICAgICAgXCJiUHJvY2Vzc2luZ1wiOiB0cnVlLFxuICAgICAgICBcImJTZXJ2ZXJTaWRlXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nTWlncmF0aW9uLFxuICAgICAgICBcImFhU29ydGluZ1wiOiBbWyAyLCBcImFzY1wiIF1dLFxuICAgICAgICBcImFMZW5ndGhNZW51XCI6IFtbMTAsIDI1LCA1MCwgMTAwLCAtMV0sIFsxMCwgMjUsIDUwLCAxMDAsIFwiQWxsXCJdXSxcbiAgICAgICAgXCJzQWpheFNvdXJjZVwiOiBcImFqYXgucGhwP2FjdGlvbj1nZXRfYXNzaWdubWVudHNcIixcbiAgICAgICAgXCJzRG9tXCI6ICc8XCJ0b3BcImxmPnJ0PFwiYm90dG9tXCJpcnA+PFwiY2xlYXJcIj4nLFxuICAgICAgICBcImFvQ29sdW1uc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XCJiU29ydGFibGVcIjogZmFsc2UsIFwiYlNlYXJjaGFibGVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmbkNyZWF0ZWRDZWxsXCI6IGZ1bmN0aW9uIChuVGQsIHNEYXRhLCBvRGF0YSwgaVJvdywgaUNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5UZCkuYWRkQ2xhc3MoJ2NlbnRlcmVkX2NlbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImJTb3J0YWJsZVwiOiB0cnVlLCBcInNDbGFzc1wiOiBcImNlbnRlcmVkX2NlbGxcIiwgXCJiU2VhcmNoYWJsZVwiOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XCJiU29ydGFibGVcIjogdHJ1ZSwgXCJiU2VhcmNoYWJsZVwiOiB0cnVlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImJTb3J0YWJsZVwiOiB0cnVlLCBcInNDbGFzc1wiOiBcImNlbnRlcmVkX2NlbGxcIiwgXCJiU2VhcmNoYWJsZVwiOiBmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgIFwiZm5EcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCgnaW5wdXRbbmFtZT1cInNlbGVjdGFsbGNiXCJdJykuYXR0cignY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICQoJyNtaWdyYXRpb25UYWJsZV9maWx0ZXIgaW5wdXQnKS5hdHRyKFwicGxhY2Vob2xkZXJcIiwgJ1NlYXJjaCcpO1xuXG4gICAgLy8gQ29uZmlndXJlIHRoZSBmaWxlcyBkYXRhdGFibGUgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmVhLCBncm91cCB0aGUgZmlsZXMgYnkgYXNzaWdubWVudC5cbiAgICAkKCcjZmlsZXNUYWJsZScpLmRhdGFUYWJsZSgge1xuICAgICAgICBcImJEZXN0cm95XCI6IHRydWUsXG4gICAgICAgIFwiYlByb2Nlc3NpbmdcIjogdHJ1ZSxcbiAgICAgICAgXCJiU2VydmVyU2lkZVwiOiB0cnVlLFxuICAgICAgICBcIm9MYW5ndWFnZVwiOiBkYXRhVGFibGVzTGFuZyxcbiAgICAgICAgXCJzQWpheFNvdXJjZVwiOiBcImFqYXgucGhwP2FjdGlvbj1nZXRfZmlsZXNcIixcbiAgICAgICAgXCJhb0NvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICB7XCJzQ2xhc3NcIjogXCJmaWxlbmFtZSBjMFwiLCBcInNXaWR0aFwiOiBcIjQwJVwifSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAge1wic0NsYXNzXCI6IFwiZnVsbG5hbWUgYzFcIiwgXCJzV2lkdGhcIjogXCIzNSVcIn0sXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHtcInNDbGFzc1wiOiBcImNyZWF0ZWQgYzJcIiwgXCJzV2lkdGhcIjogXCIyMiVcIn0sXG4gICAgICAgICAgICAgICAgICAgIHtcInNDbGFzc1wiOiBcInJlbW92ZSBjM1wiLCBcInNXaWR0aFwiOiBcIjMlXCJ9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgXCJhb0NvbHVtbkRlZnNcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IGZhbHNlLCBcImFUYXJnZXRzXCI6IFsgMCBdfSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiBmYWxzZSwgXCJhVGFyZ2V0c1wiOiBbIDEgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogZmFsc2UsIFwiYVRhcmdldHNcIjogWyAyIF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwiYVRhcmdldHNcIjogWyAzIF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IGZhbHNlLCBcImFUYXJnZXRzXCI6IFsgNCBdfSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgNSBdfSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiBmYWxzZSwgXCJhVGFyZ2V0c1wiOiBbIDYgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJhVGFyZ2V0c1wiOiBbIDcgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJhVGFyZ2V0c1wiOiBbIDggXX1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICBcImZuRHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uICggb1NldHRpbmdzICkge1xuICAgICAgICAgICAgaWYgKCBvU2V0dGluZ3MuYWlEaXNwbGF5Lmxlbmd0aCA9PSAwIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuVHJzID0gJCgnI2ZpbGVzVGFibGUgdGJvZHkgdHInKTtcbiAgICAgICAgICAgIHZhciBpQ29sc3BhbiA9IG5UcnNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RkJykubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHNMYXN0R3JvdXAgPSBcIlwiO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlEaXNwbGF5SW5kZXggPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgKyBpO1xuICAgICAgICAgICAgICAgIHZhciBzR3JvdXAgPSBvU2V0dGluZ3MuYW9EYXRhWyBvU2V0dGluZ3MuYWlEaXNwbGF5W2ldIF0uX2FEYXRhWzBdO1xuICAgICAgICAgICAgICAgIGlmICggc0dyb3VwICE9IHNMYXN0R3JvdXAgKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5Hcm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICd0cicgKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5DZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RkJyApO1xuICAgICAgICAgICAgICAgICAgICBuQ2VsbC5jb2xTcGFuID0gaUNvbHNwYW47XG4gICAgICAgICAgICAgICAgICAgIG5DZWxsLmNsYXNzTmFtZSA9IFwiZ3JvdXBcIjtcbiAgICAgICAgICAgICAgICAgICAgbkNlbGwuaW5uZXJIVE1MID0gc0dyb3VwO1xuICAgICAgICAgICAgICAgICAgICBuR3JvdXAuYXBwZW5kQ2hpbGQoIG5DZWxsICk7XG4gICAgICAgICAgICAgICAgICAgIG5UcnNbaV0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5Hcm91cCwgblRyc1tpXSApO1xuICAgICAgICAgICAgICAgICAgICBzTGFzdEdyb3VwID0gc0dyb3VwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhYVNvcnRpbmdGaXhlZFwiOiBbWyAwLCAnYXNjJyBdXSxcbiAgICAgICAgXCJhYVNvcnRpbmdcIjogW1sgMSwgJ2FzYycgXV0sXG4gICAgICAgIFwic0RvbVwiOiAnbGZyPFwiZ2l2ZUhlaWdodFwidD5pcCdcbiAgICB9KTtcblxuICAgICQuZGF0ZXBpY2tlci5yZWdpb25hbFtcIlwiXS5kYXRlRm9ybWF0ID0gJ2QgTSB5eSc7XG4gICAgJC5kYXRlcGlja2VyLnNldERlZmF1bHRzKCQuZGF0ZXBpY2tlci5yZWdpb25hbFsnJ10pO1xuXG4gICAgLy8gQ29uZmlndXJlIHRoZSBjb3Vyc2UgYnJvd3NlciBkYXRhIHRhYmxlIGFuZCBzaG93IGNsYXNzZXMgZnJvbSBUdXJuaXRpbiBhY29jdW50LlxuICAgIHZhciBjb3Vyc2VCcm93c2VyVGFibGUgPSAkKCcjY291cnNlQnJvd3NlclRhYmxlJykuZGF0YVRhYmxlKHtcbiAgICAgICAgXCJiUHJvY2Vzc2luZ1wiOiB0cnVlLFxuICAgICAgICBcIm9MYW5ndWFnZVwiOiBkYXRhVGFibGVzTGFuZyxcbiAgICAgICAgXCJhYVNvcnRpbmdcIjogW1sgNiwgJ2FzYyddXSxcbiAgICAgICAgXCJzQWpheFNvdXJjZVwiOiBcImFqYXgucGhwXCIsXG4gICAgICAgIFwiYW9Db2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogZmFsc2UsIFwiYlNvcnRhYmxlXCI6IGZhbHNlLCBcInNXaWR0aFwiOiBcIjUlXCIsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJhVGFyZ2V0c1wiOiBbIDAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm5DcmVhdGVkQ2VsbFwiOiBmdW5jdGlvbiAoblRkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChuVGQpLmFkZENsYXNzKCdjZW50ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwic1dpZHRoXCI6IFwiNDUlXCIsIFwiaURhdGFTb3J0XCI6IDYsIFwiYVRhcmdldHNcIjogWyAxIF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwic1dpZHRoXCI6IFwiMTAlXCIsIFwiYVRhcmdldHNcIjogWyAyIF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwic1dpZHRoXCI6IFwiMjAlXCIsIFwiaURhdGFTb3J0XCI6IDcsIFwiYVRhcmdldHNcIjogWyAzIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZuQ3JlYXRlZENlbGxcIjogZnVuY3Rpb24gKG5UZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoblRkKS5hZGRDbGFzcygncmlnaHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiBmYWxzZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcInNXaWR0aFwiOiBcIjEwJVwiLCBcImFUYXJnZXRzXCI6IFsgNCBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmbkNyZWF0ZWRDZWxsXCI6IGZ1bmN0aW9uIChuVGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5UZCkuYWRkQ2xhc3MoJ3JpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcInNXaWR0aFwiOiBcIjEwJVwiLCBcImFUYXJnZXRzXCI6IFsgNSBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmbkNyZWF0ZWRDZWxsXCI6IGZ1bmN0aW9uIChuVGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5UZCkuYWRkQ2xhc3MoJ2NlbnRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogZmFsc2UsIFwiYVRhcmdldHNcIjogWyA2IF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IGZhbHNlLCBcImFUYXJnZXRzXCI6IFsgNyBdfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgIFwiZm5TZXJ2ZXJEYXRhXCI6IGZ1bmN0aW9uICggc1NvdXJjZSwgYW9EYXRhLCBmbkNhbGxiYWNrICkge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgXCJ1cmxcIjogc1NvdXJjZSxcbiAgICAgICAgICAgICAgICBcImRhdGFcIjoge2FjdGlvbjogXCJzZWFyY2hfY2xhc3Nlc1wiLCBjb3Vyc2VfdGl0bGU6ICQoJyNzZWFyY2hfY291cnNlX3RpdGxlJykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZV9pbnRlZ3JhdGlvbjogJCgnI3NlYXJjaF9jb3Vyc2VfaW50ZWdyYXRpb24nKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgY291cnNlX2VuZF9kYXRlOiAkKCcjc2VhcmNoX2NvdXJzZV9lbmRfZGF0ZScpLnZhbCgpLCBzZXNza2V5OiBNLmNmZy5zZXNza2V5fSxcbiAgICAgICAgICAgICAgICBcInN1Y2Nlc3NcIjogZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZuQ2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJiU3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgIFwiZm5TdGF0ZVNhdmVcIjogZnVuY3Rpb24gKG9TZXR0aW5ncywgb0RhdGEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oIHVpZCArICdEYXRhVGFibGVzJywgSlNPTi5zdHJpbmdpZnkob0RhdGEpICk7XG4gICAgICAgICAgICB9IGNhdGNoICggZSApIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmblN0YXRlTG9hZFwiOiBmdW5jdGlvbiAob1NldHRpbmdzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh1aWQgKyAnRGF0YVRhYmxlcycpICk7XG4gICAgICAgICAgICB9IGNhdGNoICggZSApIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmbkRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwic2VsZWN0YWxsY2JcIl0nKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgaW5pdGlhbGlzZUNvdXJzZVJlY3JlYXRpb24oKTtcbiAgICAgICAgICAgIGluaXRpYWxpc2VFZGl0RW5kRGF0ZSgpO1xuICAgICAgICAgICAgJChcIiNzZWFyY2hfY291cnNlc19idXR0b25cIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgJChcIiNzZWFyY2hfY291cnNlc19idXR0b25cIikuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgIGNvdXJzZUJyb3dzZXJUYWJsZS5mblJlbG9hZEFqYXgoKTtcbiAgICAgICAgY291cnNlQnJvd3NlclRhYmxlLmZuU3RhbmRpbmdSZWRyYXcoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgJCgnI3NlYXJjaF9jb3Vyc2VfZW5kX2RhdGUnKS5kYXRlcGlja2VyKCk7XG5cbiAgICAvLyBJbml0aWFsaXNlIGFzc2lnbm1lbnQgYnJvd3NlciB0YWJsZS5cbiAgICB2YXIgb1RhYmxlID0gJCgnI2Fzc2lnbm1lbnRCcm93c2VyVGFibGUnKS5kYXRhVGFibGUoe1xuICAgICAgICBcImJQcm9jZXNzaW5nXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nLFxuICAgICAgICBcInNBamF4U291cmNlXCI6IFwiYWpheC5waHBcIixcbiAgICAgICAgXCJmblNlcnZlckRhdGFcIjogZnVuY3Rpb24gKCBzU291cmNlLCBhb0RhdGEsIGZuQ2FsbGJhY2sgKSB7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgY291cnNlIGJ1dHRvbnMuXG4gICAgICAgICAgICAkKCcjaWRfY3JlYXRlX2NvdXJzZScpLmF0dHIoJ2Rpc2FibGVkJywnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICQoJyNpZF91cGRhdGVfY291cnNlJykuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpO1xuXG4gICAgICAgICAgICAvLyBNb3ZlIGJveCB3aXRoaW4gZm9ybS5cbiAgICAgICAgICAgIGlmICgkKFwiI2Fzc2lnbm1lbnRCcm93c2VyVGFibGVcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICQoXCIuc2lkZS1wcmUtb25seSAjcGFnZS1jb250ZW50ICNyZWdpb24tbWFpblwiKS5jc3MoeydtYXJnaW4tbGVmdCcgOiAnMHB4J30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJChcIiNpZF9hc3NpZ25tZW50bmFtZVwiKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgJChcIiNpZF9jcmVhdGVfYXNzaWdubWVudFwiKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgXCJ1cmxcIjogc1NvdXJjZSxcbiAgICAgICAgICAgICAgICBcImRhdGFcIjoge2FjdGlvbjogXCJnZXRfYXNzaWdubWVudHNcIiwgdGlpX2NvdXJzZV9pZDogJChcIiN0aWlfY291cnNlX2lkXCIpLmh0bWwoKSwgc2Vzc2tleTogTS5jZmcuc2Vzc2tleX0sXG4gICAgICAgICAgICAgICAgXCJzdWNjZXNzXCI6IGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBldmFsKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2VDb3Vyc2VCcm93c2VyQnV0dG9ucyhvVGFibGUpO1xuICAgICAgICAgICAgICAgICAgICBmbkNhbGxiYWNrKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoXCIjY291cnNlX2lkXCIpLmh0bWwoKSAhPSBcIjBcIiAmJiByZXN1bHQubnVtYmVyX29mX2Fzc2lnbm1lbnRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNpZF9hc3NpZ25tZW50bmFtZVwiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNpZF9jcmVhdGVfYXNzaWdubWVudFwiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5hc3NpZ25tZW50aWRzX2NoZWNrXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXNlQ3JlYXRlQXNzaWdubWVudEJ1dHRvbihvVGFibGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNpZF9hc3NpZ25tZW50bmFtZVwiKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNpZF9jcmVhdGVfYXNzaWdubWVudFwiKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5hc3NpZ25tZW50aWRzX2NoZWNrXCIpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgY291cnNlIGJ1dHRvbnMuXG4gICAgICAgICAgICAgICAgICAgICQoJyNpZF9jcmVhdGVfY291cnNlJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI2lkX3VwZGF0ZV9jb3Vyc2UnKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcImFvQ29sdW1uRGVmc1wiOiBbXG4gICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiBmYWxzZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgMCBdfSxcbiAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJhVGFyZ2V0c1wiOiBbIDEgXSxcbiAgICAgICAgICAgICAgICBcImZuQ3JlYXRlZENlbGxcIjogZnVuY3Rpb24gKG5UZCkge1xuICAgICAgICAgICAgICAgICAgICAkKG5UZCkuYWRkQ2xhc3MoJ25vd3JhcCcpO1xuICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgMiBdfSxcbiAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJhVGFyZ2V0c1wiOiBbIDMgXX1cbiAgICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gT3BlbiBhbiBpZnJhbWUgbGlnaHQgYm94IHdoaWNoIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY2xhc3Nlcy5cbiAgICAkKCcjY3JlYXRlX2NsYXNzZXNfYnV0dG9uJykuY29sb3Jib3goe1xuICAgICAgICBpZnJhbWU6dHJ1ZSwgd2lkdGg6JzYwJScsIHRvcDogJzIwMHB4JywgaGVpZ2h0OicxMjRweCcsIG9wYWNpdHk6IFwiMC43XCIsIGNsYXNzTmFtZTogXCJjb3Vyc2VfY3JlYXRpb25cIixcbiAgICAgICAgaHJlZjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhdGVnb3J5ID0gJCgnLmNyZWF0ZV9jb3Vyc2VfY2F0ZWdvcnknKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgYXNzaWdubWVudHMgPSAoJCgnLmNyZWF0ZV9hc3NpZ25tZW50X2NoZWNrYm94JykuaXMoJzpjaGVja2VkJykpID8gXCIxXCIgOiBcIjBcIjtcblxuICAgICAgICAgICAgICAgIHZhciBjbGFzc19pZHMgPSBcIlwiO1xuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAkKCcuYnJvd3Nlcl9jaGVja2JveDpjaGVja2VkJykuZWFjaChmdW5jdGlvbihpKXtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NfaWRzICs9IFwiJmNsYXNzX2lkXCIgKyBpICsgXCI9XCIgKyAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcGFnZXVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwYWdldXJsLnJlcGxhY2UoXCJjbWQ9Y291cnNlc1wiLCBcImNtZD1tdWx0aXBsZV9jbGFzc19yZWNyZWF0aW9uXCIpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIFwiJnZpZXdfY29udGV4dD1ib3gmY2F0ZWdvcnk9XCIgKyBjYXRlZ29yeSArIFwiJmFzc2lnbm1lbnRzPVwiICsgYXNzaWdubWVudHMgKyBjbGFzc19pZHMgKyBcIiZzZXNza2V5PVwiICsgTS5jZmcuc2Vzc2tleTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DbGVhbnVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCQoJyNjbGFzc19pZHMnKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgLy8gTW92ZSBib3ggd2l0aGluIGZyYW1lLlxuICAgICAgICAkKFwiLnNpZGUtcHJlLW9ubHkgI3BhZ2UtY29udGVudCAjcmVnaW9uLW1haW5cIikuY3NzKHtcbiAgICAgICAgICAgICdtYXJnaW4tbGVmdCcgOiAnMHB4J1xuICAgICAgICB9KTtcblxuICAgICAgICAkKFwiLmhhcy1yZWdpb24tc2lkZS1wcmUgI3BhZ2UtY29udGVudCAjcmVnaW9uLW1haW5cIikuY3NzKHtcbiAgICAgICAgICAgICd3aWR0aCc6ICcxMDAlJyxcbiAgICAgICAgICAgICdtYXJnaW4tdG9wJzogJy0zMHB4J1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgY2xhc3NfaWRzID0gJCgnI2NsYXNzX2lkcycpLmh0bWwoKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgXCJkYXRhVHlwZVwiOiAnaHRtbCcsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICBcInVybFwiOiBcImFqYXgucGhwXCIsXG4gICAgICAgICAgICBcImRhdGFcIjoge2FjdGlvbjogXCJjcmVhdGVfY291cnNlc1wiLCBjbGFzc19pZHM6IGNsYXNzX2lkcywgY291cnNlX2NhdGVnb3J5OiAkKFwiI2NvdXJzZV9jYXRlZ29yeVwiKS5odG1sKCksXG4gICAgICAgICAgICAgICAgY3JlYXRlX2Fzc2lnbm1lbnRzOiAkKFwiI2NyZWF0ZV9hc3NpZ25tZW50c1wiKS5odG1sKCksIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXl9LFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICQoJyNjb3Vyc2VfY3JlYXRpb25fc3RhdHVzJykuaHRtbChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2hvdyBsaWdodCBib3ggdG8gY2hhbmdlIHRoZSBlbmQgZGF0ZSBvZiBhIGNvdXJzZS5cbiAgICBmdW5jdGlvbiBpbml0aWFsaXNlRWRpdEVuZERhdGUoKSB7XG4gICAgICAgICQoXCJhLmVkaXRfY291cnNlX2VuZF9saW5rXCIpLmNvbG9yYm94KHtcbiAgICAgICAgICAgIGlubGluZTp0cnVlLCB3aWR0aDpcIjYwJVwiLCB0b3A6IFwiMTAwcHhcIiwgYmFja2dyb3VuZDogXCIjZmZmXCIsIGhlaWdodDpcIjI2MHB4XCIsIG9wYWNpdHk6IFwiMC43XCIsIGNsYXNzTmFtZTogXCJlZGl0X2VuZF9kYXRlX2Zvcm1cIixcbiAgICAgICAgICAgIG9uTG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3hDbG9zZUJ1dHRvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ29tcGxldGUgOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIC8vIEdldCBjdXJyZW50IGRhdGUgZnJvbSB0aGUgc3BhbiBpZCB3aXRoaW4gdGhlIGxpbmsgYW5kIHNldFxuICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRlIG9mIHRoZSBkYXRlcGlja2VyIGluIHRoZSBsaWdodGJveCB0byB0aGF0LlxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X2RhdGUgPSAkKCcjJyArICQodGhpcykuYXR0cihcImlkXCIpICsgJyBzcGFuJykuYXR0cihcImlkXCIpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRfZGF0ZSA9IGN1cnJlbnRfZGF0ZS5zcGxpdChcIl9cIik7XG4gICAgICAgICAgICAgICAgJCgnI2lkX25ld19jb3Vyc2VfZW5kX2RhdGVfZGF5JykudmFsKGN1cnJlbnRfZGF0ZVsxXSk7XG4gICAgICAgICAgICAgICAgJCgnI2lkX25ld19jb3Vyc2VfZW5kX2RhdGVfbW9udGgnKS52YWwoY3VycmVudF9kYXRlWzJdKTtcbiAgICAgICAgICAgICAgICAkKCcjaWRfbmV3X2NvdXJzZV9lbmRfZGF0ZV95ZWFyJykudmFsKGN1cnJlbnRfZGF0ZVszXSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaWRTdHIgPSAkKHRoaXMpLmF0dHIoXCJpZFwiKS5zcGxpdChcIl9cIik7XG4gICAgICAgICAgICAgICAgdmFyIHRpaV9jb3Vyc2VfaWQgPSBpZFN0clsyXTtcbiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwidGlpX2NvdXJzZV9pZFwiXScpLnZhbCh0aWlfY291cnNlX2lkKTtcbiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwidGlpX2NvdXJzZV90aXRsZVwiXScpLnZhbCgkKCdhI2NvdXJzZV8nICsgdGlpX2NvdXJzZV9pZCkuaHRtbCgpKTtcbiAgICAgICAgICAgICAgICAkKCcjY2JveExvYWRlZENvbnRlbnQgLmVkaXRfY291cnNlX2VuZF9kYXRlX2Zvcm0nKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgJCgnI2RhdGVzZWxlY3Rvci1jYWxlbmRhci1wYW5lbCcpLmNzcygnei1pbmRleCcsICc5OTk5Jyk7XG5cbiAgICAgICAgICAgICAgICAkKCcjaWRfc2F2ZV9lbmRfZGF0ZScpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhVHlwZVwiOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVybFwiOiBcImFqYXgucGhwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGFcIjoge2FjdGlvbjogXCJlZGl0X2NvdXJzZV9lbmRfZGF0ZVwiLCB0aWlfY291cnNlX2lkOiB0aWlfY291cnNlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpaV9jb3Vyc2VfdGl0bGU6ICQoJ2EjY291cnNlXycgKyB0aWlfY291cnNlX2lkKS5odG1sKCksIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGVfZDogJCgnI2lkX25ld19jb3Vyc2VfZW5kX2RhdGVfZGF5JykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGVfbTogJCgnI2lkX25ld19jb3Vyc2VfZW5kX2RhdGVfbW9udGgnKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfZGF0ZV95OiAkKCcjaWRfbmV3X2NvdXJzZV9lbmRfZGF0ZV95ZWFyJykudmFsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LiQuZm4uY29sb3Jib3guY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvdXJzZV9kYXRlXycgKyB0aWlfY291cnNlX2lkICsgJyBzcGFuJykuaHRtbChkYXRhLmVuZF9kYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudF9tc2cgPSAkKCcjZWRpdF9lbmRfZGF0ZV9kZXNjJykuaHRtbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2VkaXRfZW5kX2RhdGVfZGVzYycpLmh0bWwoY3VycmVudF9tc2cgKyBcIiBcIiArIGRhdGEubXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xlYW51cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJCgnLmVkaXRfY291cnNlX2VuZF9kYXRlX2Zvcm0nKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3RpaV9jbG9zZV9iYXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlnaHRCb3hDbG9zZUJ1dHRvbigpIHtcbiAgICAgICAgJCgnYm9keScpLmFwcGVuZCgnPGRpdiBpZD1cInRpaV9jbG9zZV9iYXJcIj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCIkLmNvbG9yYm94LmNsb3NlKCk7IHJldHVybiBmYWxzZTtcIj4nICsgTS5zdHIudHVybml0aW50b29sdHdvLmNsb3NlYnV0dG9uICsgJzwvYT48L2Rpdj4nKTtcbiAgICB9XG5cbiAgICAvLyBTaG93IGxpZ2h0IGJveCB3aXRoIGEgZm9ybSB0byBlaXRoZXIgY3JlYXRlIGEgbmV3IGNvdXJzZSBvciBsaW5rIGFuIHVubGlua2VkIE1vb2RsZSBjb3Vyc2VcbiAgICAvLyB0byB0aGUgY2xpY2tlZCBUdXJuaXRpbiBjbGFzcywgdGhlbiBzdWJzZXF1ZW50bHkgY3JlYXRlIGEgTW9vZGxlIGFzc2lnbm1lbnQgdXNpbmcgdGhlIHNlbGVjdGVkXG4gICAgLy8gZXhpc3RpbmcgYXNzaWdubWVudHMgb24gVHVybml0aW4gYXMgcGFydHMuXG4gICAgZnVuY3Rpb24gaW5pdGlhbGlzZUNvdXJzZVJlY3JlYXRpb24oKSB7XG5cbiAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG4gICAgICAgIHZhciBjb2xvckJveFdpZHRoID0gXCI4MCVcIjtcbiAgICAgICAgaWYgKHdpbmRvd1dpZHRoIDwgMTAwMCkge1xuICAgICAgICAgICAgY29sb3JCb3hXaWR0aCA9IFwiODYwcHhcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgdmFyIGNvbG9yQm94SGVpZ2h0ID0gXCI4MCVcIjtcbiAgICAgICAgaWYgKHdpbmRvd0hlaWdodCA8IDcwMCkge1xuICAgICAgICAgICAgY29sb3JCb3hIZWlnaHQgPSBcIjYwMHB4XCI7XG4gICAgICAgIH1cblxuICAgICAgICAkKFwiYS5jb3Vyc2VfcmVjcmVhdGVcIikuY29sb3Jib3goe1xuICAgICAgICAgICAgaWZyYW1lOnRydWUsIHdpZHRoOmNvbG9yQm94V2lkdGgsIGhlaWdodDpjb2xvckJveEhlaWdodCwgdG9wOiAnMTAwcHgnLCBjbGFzc05hbWU6IFwibWlncmF0aW9uXCIsIG9wYWNpdHk6IFwiMC43XCIsXG4gICAgICAgICAgICBvbkxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxpZ2h0Qm94Q2xvc2VCdXR0b24oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNsZWFudXA6ZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJCgnI3RpaV9jbG9zZV9iYXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnLmJyb3dzZXJfY2hlY2tib3gnKS5jbGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICgkKCcuYnJvd3Nlcl9jaGVja2JveDpjaGVja2VkJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICQoJy5jcmVhdGVfY2hlY2tib3hlcycpLnNsaWRlRG93bigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcuY3JlYXRlX2NoZWNrYm94ZXMnKS5zbGlkZVVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1ha2UgdGhlIGJ1dHRvbnMgb24gdGhlIGNvdXJzZSBjcmVhdGlvbi9saW5rIGZvcm1zIGNsaWNrYWJsZSBhbmQgY29uZmlndXJlIHRoZSByZWxldmFudCB0cmlnZ2VyZWQgZXZlbnQuXG4gICAgZnVuY3Rpb24gaW5pdGlhbGlzZUNvdXJzZUJyb3dzZXJCdXR0b25zKG9UYWJsZSkge1xuICAgICAgICAkKCcjaWRfY3JlYXRlX2NvdXJzZScpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgXCJ1cmxcIjogXCJhamF4LnBocFwiLFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImNyZWF0ZV9jb3Vyc2VcIiwgdGlpX2NvdXJzZV9pZDogJChcIiN0aWlfY291cnNlX2lkXCIpLmh0bWwoKSxcbiAgICAgICAgICAgICAgICAgICAgdGlpX2NvdXJzZV9uYW1lOiBlbmNvZGVVUklDb21wb25lbnQoJChcIiN0aWlfY291cnNlX25hbWVcIikuaHRtbCgpKSxcbiAgICAgICAgICAgICAgICAgICAgY291cnNlX25hbWU6IGVuY29kZVVSSUNvbXBvbmVudCgkKFwiI2lkX2NvdXJzZW5hbWVcIikudmFsKCkpLFxuICAgICAgICAgICAgICAgICAgICBjb3Vyc2VfY2F0ZWdvcnk6ICQoXCIjaWRfY291cnNlY2F0ZWdvcnlcIikudmFsKCksIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXl9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGpRdWVyeS5wYXJzZUpTT04oZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVDb3Vyc2VDcmVhdGlvbk9wdGlvbnMob2JqLCBvVGFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKCcjaWRfdXBkYXRlX2NvdXJzZScpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgXCJ1cmxcIjogXCJhamF4LnBocFwiLFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImxpbmtfY291cnNlXCIsIHRpaV9jb3Vyc2VfaWQ6ICQoXCIjdGlpX2NvdXJzZV9pZFwiKS5odG1sKCksXG4gICAgICAgICAgICAgICAgICAgIHRpaV9jb3Vyc2VfbmFtZTogJChcIiN0aWlfY291cnNlX25hbWVcIikuaHRtbCgpLCBjb3Vyc2VfdG9fbGluazogJChcIiNpZF9jb3Vyc2V0b2xpbmtcIikudmFsKCksXG4gICAgICAgICAgICAgICAgICAgIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXl9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGpRdWVyeS5wYXJzZUpTT04oZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVDb3Vyc2VDcmVhdGlvbk9wdGlvbnMob2JqLCBvVGFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRoZSBjb3Vyc2UgY3JlYXRpb24vbGlua2luZyBmb3JtIG9uY2UgdGhlIHNlbGVjdGVkIFR1cm5pdGluXG4gICAgLy8gY291cnNlIGhhcyBiZWVuIGNyZWF0ZWQvbGlua2VkIGxvY2FsbHkgYW5kIGluaXRpYWxpc2UgdGhlIGNyZWF0ZSBhc3NpZ25tZW50IGJ1dHRvbi5cbiAgICBmdW5jdGlvbiBoaWRlQ291cnNlQ3JlYXRpb25PcHRpb25zKG9iaiwgb1RhYmxlKSB7XG4gICAgICAgIGlmIChvYmogIT0gMCkge1xuICAgICAgICAgICAgJChcIiNjb3Vyc2VfaWRcIikuaHRtbChvYmouY291cnNlaWQpO1xuXG4gICAgICAgICAgICB2YXIgY2JfZWxlbWVudCA9ICdpbnB1dFtuYW1lPVwiY2hlY2tfJyArICQoJyN0aWlfY291cnNlX2lkJykuaHRtbCgpICsgJ1wiXSc7XG4gICAgICAgICAgICBwYXJlbnQuJChjYl9lbGVtZW50KS5oaWRlKCk7XG4gICAgICAgICAgICB2YXIgdGlja19lbGVtZW50ID0gJyN0aWNrXycgKyAkKCcjdGlpX2NvdXJzZV9pZCcpLmh0bWwoKTtcbiAgICAgICAgICAgIHBhcmVudC4kKHRpY2tfZWxlbWVudCkuc2hvdygpO1xuXG4gICAgICAgICAgICAkKCdmaWVsZHNldFtpZCQ9XCJjcmVhdGVfY291cnNlX2ZpZWxkc2V0XCJdJykucGFyZW50KCkuc2xpZGVUb2dnbGUoKTtcbiAgICAgICAgICAgICQoJ2ZpZWxkc2V0W2lkJD1cInVwZGF0ZV9jb3Vyc2VfZmllbGRzZXRcIl0nKS5wYXJlbnQoKS5zbGlkZVRvZ2dsZSgpO1xuXG4gICAgICAgICAgICAkKFwiI29yX2NvbnRhaW5lclwiKS5oaWRlKCk7XG5cbiAgICAgICAgICAgICQoJyNleGlzdGluZ19jb3Vyc2VfdGl0bGVfc3BhbicpLmh0bWwob2JqLmNvdXJzZW5hbWUpO1xuICAgICAgICAgICAgJCgnLmV4aXN0aW5nX2NvdXJzZV90aXRsZV9oMycpLnJlbW92ZUNsYXNzKCdoaWRkZW5fY2xhc3MnKTtcblxuICAgICAgICAgICAgaWYgKCQoJy5hc3NpZ25tZW50aWRzX2NoZWNrJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICQoXCIuYXNzaWdubWVudGlkc19jaGVja1wiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICQoXCIjaWRfYXNzaWdubWVudG5hbWVcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAkKFwiI2lkX2NyZWF0ZV9hc3NpZ25tZW50XCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoJy5hc3NpZ25tZW50aWRzX2NoZWNrJykuY2hhbmdlKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKCQoJy5hc3NpZ25tZW50aWRzX2NoZWNrJykuZmlsdGVyKCc6Y2hlY2tlZCcpLmxlbmd0aCA+PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuYXNzaWdubWVudGlkc19jaGVja1wiKS5ub3QoJzpjaGVja2VkJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkKFwiLmFzc2lnbm1lbnRpZHNfY2hlY2tcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5pdGlhbGlzZUNyZWF0ZUFzc2lnbm1lbnRCdXR0b24ob1RhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJpbmQgdGhlIGV2ZW50IHRvIGNyZWF0ZSBhbiBhc3NpZ25tZW50IGZyb20gdGhlIHNlbGVjdGVkIHBhcnRzLlxuICAgIGZ1bmN0aW9uIGluaXRpYWxpc2VDcmVhdGVBc3NpZ25tZW50QnV0dG9uKG9UYWJsZSkge1xuICAgICAgICAkKCcjaWRfY3JlYXRlX2Fzc2lnbm1lbnQnKS51bmJpbmQoXCJjbGlja1wiKTtcbiAgICAgICAgJCgnI2lkX2NyZWF0ZV9hc3NpZ25tZW50JykuY2xpY2soZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IFwiXCI7XG4gICAgICAgICAgICAkKCcuYXNzaWdubWVudGlkc19jaGVjazpjaGVja2VkJykuZWFjaChmdW5jdGlvbihpKXtcbiAgICAgICAgICAgICAgICBwYXJ0cyArPSAkKHRoaXMpLnZhbCgpICsgXCIsXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5jaGFyQXQocGFydHMubGVuZ3RoIC0gMSkgPT0gJywnKSB7XG4gICAgICAgICAgICAgICAgcGFydHMuc3Vic3RyaW5nKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkKFwiI2lkX2NyZWF0ZV9hc3NpZ25tZW50XCIpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgXCJkYXRhVHlwZVwiOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiYWpheC5waHBcIixcbiAgICAgICAgICAgICAgICBcImRhdGFcIjoge2FjdGlvbjogXCJjcmVhdGVfYXNzaWdubWVudFwiLCBjb3Vyc2VfaWQ6ICQoXCIjY291cnNlX2lkXCIpLmh0bWwoKSxcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudF9uYW1lOiAkKFwiI2lkX2Fzc2lnbm1lbnRuYW1lXCIpLnZhbCgpLCBwYXJ0czogcGFydHMsIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXl9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgb1RhYmxlLmZuUmVsb2FkQWpheCgpO1xuICAgICAgICAgICAgICAgICAgICBvVGFibGUuZm5TdGFuZGluZ1JlZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2lkX2Fzc2lnbm1lbnRuYW1lXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjaWRfY3JlYXRlX2Fzc2lnbm1lbnRcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5hc3NpZ25tZW50aWRzX2NoZWNrXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0pOyJdfQ== +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR1cm5pdGludG9vbHR3b19leHRyYS5qcyJdLCJuYW1lcyI6WyJqUXVlcnkiLCJkb2N1bWVudCIsInJlYWR5IiwiJCIsImluaXRpYWxpc2VFZGl0RW5kRGF0ZSIsImNvbG9yYm94IiwiaW5saW5lIiwid2lkdGgiLCJ0b3AiLCJiYWNrZ3JvdW5kIiwiaGVpZ2h0Iiwib3BhY2l0eSIsImNsYXNzTmFtZSIsIm9uTG9hZCIsImxpZ2h0Qm94Q2xvc2VCdXR0b24iLCJvbkNvbXBsZXRlIiwiY3VycmVudF9kYXRlIiwidGhpcyIsImF0dHIiLCJzcGxpdCIsInZhbCIsImlkU3RyIiwidGlpX2NvdXJzZV9pZCIsImh0bWwiLCJzaG93IiwiY3NzIiwiY2xpY2siLCJhamF4IiwiZGF0YVR5cGUiLCJ0eXBlIiwidXJsIiwiZGF0YSIsImFjdGlvbiIsInRpaV9jb3Vyc2VfdGl0bGUiLCJzZXNza2V5IiwiTSIsImNmZyIsImVuZF9kYXRlX2QiLCJlbmRfZGF0ZV9tIiwiZW5kX2RhdGVfeSIsInN1Y2Nlc3MiLCJldmFsIiwic3RhdHVzIiwicGFyZW50IiwiZm4iLCJjbG9zZSIsImVuZF9kYXRlIiwiY3VycmVudF9tc2ciLCJtc2ciLCJvbkNsZWFudXAiLCJoaWRlIiwicmVtb3ZlIiwiYXBwZW5kIiwic3RyIiwidHVybml0aW50b29sdHdvIiwiY2xvc2VidXR0b24iLCJpbml0aWFsaXNlQ291cnNlUmVjcmVhdGlvbiIsIndpbmRvd1dpZHRoIiwid2luZG93IiwiY29sb3JCb3hXaWR0aCIsIndpbmRvd0hlaWdodCIsImNvbG9yQm94SGVpZ2h0IiwiaWZyYW1lIiwibGVuZ3RoIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImluaXRpYWxpc2VDb3Vyc2VCcm93c2VyQnV0dG9ucyIsIm9UYWJsZSIsInRpaV9jb3Vyc2VfbmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvdXJzZV9uYW1lIiwiY291cnNlX2NhdGVnb3J5Iiwib2JqIiwicGFyc2VKU09OIiwiaGlkZUNvdXJzZUNyZWF0aW9uT3B0aW9ucyIsImNvdXJzZV90b19saW5rIiwiY291cnNlaWQiLCJjYl9lbGVtZW50IiwidGlja19lbGVtZW50Iiwic2xpZGVUb2dnbGUiLCJjb3Vyc2VuYW1lIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVBdHRyIiwiY2hhbmdlIiwiZmlsdGVyIiwibm90IiwiaW5pdGlhbGlzZUNyZWF0ZUFzc2lnbm1lbnRCdXR0b24iLCJ1bmJpbmQiLCJwYXJ0cyIsImVhY2giLCJpIiwiY2hhckF0Iiwic3Vic3RyaW5nIiwiY291cnNlX2lkIiwiYXNzaWdubWVudF9uYW1lIiwiZm5SZWxvYWRBamF4IiwiZm5TdGFuZGluZ1JlZHJhdyIsInRvZ2dsZUNsYXNzIiwiZGF0YVRhYmxlc0xhbmciLCJub2ludGVncmF0aW9uIiwic1Byb2Nlc3NpbmciLCJzcHJvY2Vzc2luZyIsInNaZXJvUmVjb3JkcyIsInN6ZXJvcmVjb3JkcyIsInNJbmZvIiwic2luZm8iLCJzU2VhcmNoIiwic3NlYXJjaCIsInNMZW5ndGhNZW51Iiwic2xlbmd0aG1lbnUiLCJzSW5mb0VtcHR5Iiwic2VtcHR5dGFibGUiLCJvUGFnaW5hdGUiLCJzTmV4dCIsInNuZXh0Iiwic1ByZXZpb3VzIiwic3ByZXZpb3VzIiwiZGF0YVRhYmxlc0xhbmdNaWdyYXRpb24iLCJzbGVuZ3RobWlncmF0aW9ubWVudSIsImRhdGFUYWJsZSIsImJEZXN0cm95IiwiYlByb2Nlc3NpbmciLCJiU2VydmVyU2lkZSIsIm9MYW5ndWFnZSIsImFhU29ydGluZyIsImFMZW5ndGhNZW51Iiwic0FqYXhTb3VyY2UiLCJhb0NvbHVtbnMiLCJiU29ydGFibGUiLCJmbkNyZWF0ZWRDZWxsIiwiblRkIiwic0RhdGEiLCJvRGF0YSIsImlSb3ciLCJpQ29sIiwiYWRkQ2xhc3MiLCJhRGF0YVNvcnQiLCJmbkRyYXdDYWxsYmFjayIsImNsb3Nlc3QiLCJmaW5kIiwib24iLCJzdWJtaXRidXR0b24iLCJldiIsInByZXZlbnREZWZhdWx0IiwibWVzc2FnZSIsImNvbmZpcm12MWRlbGV0ZXRpdGxlIiwidXRpbCIsImdldF9zdHJpbmciLCJjb25maXJtdjFkZWxldGV3YXJuaW5nIiwiY29uZmlybSIsInN1Ym1pdCIsInNEb20iLCJiU2VhcmNoYWJsZSIsInNDbGFzcyIsInNXaWR0aCIsImFvQ29sdW1uRGVmcyIsImJWaXNpYmxlIiwiYVRhcmdldHMiLCJvU2V0dGluZ3MiLCJhaURpc3BsYXkiLCJuVHJzIiwiaUNvbHNwYW4iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInNMYXN0R3JvdXAiLCJzR3JvdXAiLCJfaURpc3BsYXlTdGFydCIsImFvRGF0YSIsIl9hRGF0YSIsIm5Hcm91cCIsImNyZWF0ZUVsZW1lbnQiLCJuQ2VsbCIsImNvbFNwYW4iLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJhYVNvcnRpbmdGaXhlZCIsImRhdGVwaWNrZXIiLCJyZWdpb25hbCIsImRhdGVGb3JtYXQiLCJzZXREZWZhdWx0cyIsImNvdXJzZUJyb3dzZXJUYWJsZSIsImlEYXRhU29ydCIsImZuU2VydmVyRGF0YSIsInNTb3VyY2UiLCJmbkNhbGxiYWNrIiwiY291cnNlX3RpdGxlIiwiY291cnNlX2ludGVncmF0aW9uIiwiY291cnNlX2VuZF9kYXRlIiwicmVzdWx0IiwiYlN0YXRlU2F2ZSIsImZuU3RhdGVTYXZlIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInVpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJlIiwiZm5TdGF0ZUxvYWQiLCJwYXJzZSIsImdldEl0ZW0iLCJtYXJnaW4tbGVmdCIsIm51bWJlcl9vZl9hc3NpZ25tZW50cyIsImhyZWYiLCJjYXRlZ29yeSIsImFzc2lnbm1lbnRzIiwiaXMiLCJjbGFzc19pZHMiLCJwYWdldXJsIiwibG9jYXRpb24iLCJyZXBsYWNlIiwibWFyZ2luLXRvcCIsImNyZWF0ZV9hc3NpZ25tZW50cyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLFVBQVVDLE1BQU0sU0FBU0MsR0FrVzVCLFFBQVNDLHlCQUNMRCxFQUFFLDBCQUEw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QUFNdkYsRUFBRWMsTUFBTUcsTUFDN0NzRSxLQUdKLElBQUlzSCxHQUFVdEosT0FBT3VKLFNBQVNOLEtBQzFCN0ssRUFBTWtMLEVBQVFFLFFBQVEsY0FBZSxnQ0FFekMsT0FBT3BMLEdBQU0sOEJBQWdDOEssRUFBVyxnQkFBa0JDLEVBQWNFLEVBQVksWUFBYzVLLEVBQUVDLElBQUlGLFNBRWhJZSxVQUFXLFdBQ1BTLE9BQU91SixTQUFXdkosT0FBT3VKLFlBSTdCOU0sRUFBRSxjQUFjNEQsT0FBUyxFQUFHLENBRzVCNUQsRUFBRSw2Q0FBNkNzQixLQUMzQ2dMLGNBQWdCLFFBR3BCdE0sRUFBRSxtREFBbURzQixLQUNqRGxCLE1BQVMsT0FDVDRNLGFBQWMsU0FHbEIsSUFBSUosV0FBWTVNLEVBQUUsY0FBY29CLE1BRWhDcEIsR0FBRXdCLE1BQ0VDLFNBQVksT0FDWkMsS0FBUSxPQUNSQyxJQUFPLFdBQ1BDLE1BQVNDLE9BQVEsaUJBQWtCK0ssVUFBV0EsVUFBV3hJLGdCQUFpQnBFLEVBQUUsb0JBQW9Cb0IsT0FDNUY2TCxtQkFBb0JqTixFQUFFLHVCQUF1Qm9CLE9BQVFXLFFBQVNDLEVBQUVDLElBQUlGLFNBQ3hFTSxRQUFTLFNBQVNULEdBQ2Q1QixFQUFFLDJCQUEyQm9CLEtBQUtRIiwiZmlsZSI6InR1cm5pdGludG9vbHR3b19leHRyYS5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyJqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpIHtcbiAgICAvLyBBZGQgc3R5bGUgdG8gaGVhZGVyIHJvdy5cbiAgICAkKCcuc3VibWlzc2lvbnNEYXRhVGFibGUgdGhlYWQgdHIsICNjb3Vyc2VCcm93c2VyVGFibGUgdGhlYWQgdHInKS50b2dnbGVDbGFzcyhcImhlYWRlclwiKTtcblxuICAgIC8vIENvbmZpZ3VyZSBkYXRhdGFibGVzIGxhbmd1YWdlIHNldHRpbmdzLlxuICAgIHZhciBkYXRhVGFibGVzTGFuZyA9IHtcbiAgICAgICAgXCJub2ludGVncmF0aW9uXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5ub2ludGVncmF0aW9uLFxuICAgICAgICBcInNQcm9jZXNzaW5nXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zcHJvY2Vzc2luZyxcbiAgICAgICAgXCJzWmVyb1JlY29yZHNcIjogTS5zdHIudHVybml0aW50b29sdHdvLnN6ZXJvcmVjb3JkcyxcbiAgICAgICAgXCJzSW5mb1wiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc2luZm8sXG4gICAgICAgIFwic1NlYXJjaFwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc3NlYXJjaCxcbiAgICAgICAgXCJzTGVuZ3RoTWVudVwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc2xlbmd0aG1lbnUsXG4gICAgICAgIFwic0luZm9FbXB0eVwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc2VtcHR5dGFibGUsXG4gICAgICAgIFwib1BhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgIFwic05leHRcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNuZXh0LFxuICAgICAgICAgICAgXCJzUHJldmlvdXNcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNwcmV2aW91c1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIENvbmZpZ3VyZSBkYXRhdGFibGVzIGxhbmd1YWdlIHNldHRpbmdzIGZvciBtaWdyYXRpb24gdG9vbC5cbiAgICB2YXIgZGF0YVRhYmxlc0xhbmdNaWdyYXRpb24gPSB7XG4gICAgICAgIFwibm9pbnRlZ3JhdGlvblwiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28ubm9pbnRlZ3JhdGlvbixcbiAgICAgICAgXCJzUHJvY2Vzc2luZ1wiOiBNLnN0ci50dXJuaXRpbnRvb2x0d28uc3Byb2Nlc3NpbmcsXG4gICAgICAgIFwic1plcm9SZWNvcmRzXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zemVyb3JlY29yZHMsXG4gICAgICAgIFwic0luZm9cIjogTS5zdHIudHVybml0aW50b29sdHdvLnNpbmZvLFxuICAgICAgICBcInNTZWFyY2hcIjogJycsXG4gICAgICAgIFwic0xlbmd0aE1lbnVcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNsZW5ndGhtaWdyYXRpb25tZW51LFxuICAgICAgICBcInNJbmZvRW1wdHlcIjogTS5zdHIudHVybml0aW50b29sdHdvLnNlbXB0eXRhYmxlLFxuICAgICAgICBcIm9QYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICBcInNOZXh0XCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zbmV4dCxcbiAgICAgICAgICAgIFwic1ByZXZpb3VzXCI6IE0uc3RyLnR1cm5pdGludG9vbHR3by5zcHJldmlvdXNcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDb25maWd1cmUgdGhlIHVubGluayBhbmQgcmVsaW5rIHVzZXJzIGRhdGF0YWJsZSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZWEuXG4gICAgJCgnI3VubGlua1VzZXJUYWJsZScpLmRhdGFUYWJsZSh7XG4gICAgICAgIFwiYkRlc3Ryb3lcIjogdHJ1ZSxcbiAgICAgICAgXCJiUHJvY2Vzc2luZ1wiOiB0cnVlLFxuICAgICAgICBcImJTZXJ2ZXJTaWRlXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nLFxuICAgICAgICBcImFhU29ydGluZ1wiOiBbWyAyLCBcImFzY1wiIF1dLFxuICAgICAgICBcImFMZW5ndGhNZW51XCI6IFtbMTAsIDI1LCA1MCwgMTAwLCAtMV0sIFsxMCwgMjUsIDUwLCAxMDAsIFwiQWxsXCJdXSxcbiAgICAgICAgXCJzQWpheFNvdXJjZVwiOiBcImFqYXgucGhwP2FjdGlvbj1nZXRfdXNlcnNcIixcbiAgICAgICAgXCJhb0NvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1wiYlNvcnRhYmxlXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm5DcmVhdGVkQ2VsbFwiOiBmdW5jdGlvbiAoblRkLCBzRGF0YSwgb0RhdGEsIGlSb3csIGlDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChuVGQpLmFkZENsYXNzKCdjZW50ZXJlZF9jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAge1wiYURhdGFTb3J0XCI6IFsgMiwgMyBdfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImFEYXRhU29ydFwiOiBbIDMsIDIgXX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICBcImZuRHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoJ2lucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXScpLmF0dHIoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc2FibGUgdGhlIHN1Ym1pdCBidXR0b24gaWYgVHVybml0aW4gdjEgYW5kIHYyIGFjY291bnQgaWRzIGFyZSBkaWZmZXJlbnQgaW4gTWlncmF0aW9uIFRvb2wuXG4gICAgaWYgKCAkKCcjc2FtZXRpaWFjY291bnQnKS5kYXRhKCdzYW1ldGlpYWNjb3VudCcpID09IFwiMFwiICkge1xuICAgICAgICAkKCdzZWxlY3RbbmFtZT1cImVuYWJsZW1pZ3JhdGlvbnRvb2xcIl0nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAkKCdzZWxlY3RbbmFtZT1cImVuYWJsZW1pZ3JhdGlvbnRvb2xcIl0nKS5jbG9zZXN0KCdmb3JtJykuZmluZCgnaW5wdXRbbmFtZT1cInN1Ym1pdGJ1dHRvblwiXScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbiBpbiBtaWdyYXRpb24gdGFiIGlmIHRoZXJlIGFyZSBubyByZXN1bHRzIHNlbGVjdGVkIGFuZCByZS1lbmFibGUgaWYgdGhlcmUgYXJlLlxuICAgICQoJ2lucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXScpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI21pZ3JhdGlvblRhYmxlIGlucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXSwgI21pZ3JhdGlvblRhYmxlIC5icm93c2VyX2NoZWNrYm94JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgkKCcjbWlncmF0aW9uVGFibGUgLmJyb3dzZXJfY2hlY2tib3g6Y2hlY2tlZCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICQoJyNtaWdyYXRpb25UYWJsZSAuYnJvd3Nlcl9jaGVja2JveCcpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJyNtaWdyYXRpb25UYWJsZSAuYnJvd3Nlcl9jaGVja2JveCcpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQXNrIGFkbWluaXN0cmF0b3IgZm9yIGNvbmZpcm1hdGlvbiBpZiB1c2VyIGNsaWNrcyB0byBkZWxldGUgc2VsZWN0ZWQgVjEgYXNzaWdubWVudHMuXG4gICAgdmFyIHN1Ym1pdGJ1dHRvbiA9ICQoJyNtaWdyYXRpb25UYWJsZScpLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwic3VibWl0YnV0dG9uXCJdJyk7XG4gICAgc3VibWl0YnV0dG9uLmNsaWNrKGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgLy8gQ29uc3RydWN0IGNvbmZpcm0gbWVzc2FnZSB0byBhZG1pbmlzdHJhdG9yLlxuICAgICAgICB2YXIgbWVzc2FnZSA9IE0uc3RyLnR1cm5pdGludG9vbHR3by5jb25maXJtdjFkZWxldGV0aXRsZSsnXFxuXFxuJztcbiAgICAgICAgbWVzc2FnZSArPSBNLnV0aWwuZ2V0X3N0cmluZygnY29uZmlybXYxZGVsZXRldGV4dCcsICd0dXJuaXRpbnRvb2x0d28nLCAkKCcjbWlncmF0aW9uVGFibGUgLmJyb3dzZXJfY2hlY2tib3g6Y2hlY2tlZCcpLmxlbmd0aCkrJ1xcblxcbic7XG4gICAgICAgIG1lc3NhZ2UgKz0gTS5zdHIudHVybml0aW50b29sdHdvLmNvbmZpcm12MWRlbGV0ZXdhcm5pbmc7XG5cbiAgICAgICAgaWYgKGNvbmZpcm0obWVzc2FnZSkpIHtcbiAgICAgICAgICAgICQoJyNtaWdyYXRpb25UYWJsZScpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICAvLyBDb25maWd1cmUgdGhlIG1pZ3JhdGlvbiBkYXRhdGFibGUgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmVhLlxuICAgICQoJyNtaWdyYXRpb25UYWJsZScpLmRhdGFUYWJsZSh7XG4gICAgICAgIFwiYkRlc3Ryb3lcIjogdHJ1ZSxcbiAgICAgICAgXCJiUHJvY2Vzc2luZ1wiOiB0cnVlLFxuICAgICAgICBcImJTZXJ2ZXJTaWRlXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nTWlncmF0aW9uLFxuICAgICAgICBcImFhU29ydGluZ1wiOiBbWyAyLCBcImFzY1wiIF1dLFxuICAgICAgICBcImFMZW5ndGhNZW51XCI6IFtbMTAsIDI1LCA1MCwgMTAwLCAtMV0sIFsxMCwgMjUsIDUwLCAxMDAsIFwiQWxsXCJdXSxcbiAgICAgICAgXCJzQWpheFNvdXJjZVwiOiBcImFqYXgucGhwP2FjdGlvbj1nZXRfYXNzaWdubWVudHNcIixcbiAgICAgICAgXCJzRG9tXCI6ICc8XCJ0b3BcImxmPnJ0PFwiYm90dG9tXCJpcnA+PFwiY2xlYXJcIj4nLFxuICAgICAgICBcImFvQ29sdW1uc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XCJiU29ydGFibGVcIjogZmFsc2UsIFwiYlNlYXJjaGFibGVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmbkNyZWF0ZWRDZWxsXCI6IGZ1bmN0aW9uIChuVGQsIHNEYXRhLCBvRGF0YSwgaVJvdywgaUNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5UZCkuYWRkQ2xhc3MoJ2NlbnRlcmVkX2NlbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImJTb3J0YWJsZVwiOiB0cnVlLCBcInNDbGFzc1wiOiBcImNlbnRlcmVkX2NlbGxcIiwgXCJiU2VhcmNoYWJsZVwiOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XCJiU29ydGFibGVcIjogdHJ1ZSwgXCJiU2VhcmNoYWJsZVwiOiB0cnVlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImJTb3J0YWJsZVwiOiB0cnVlLCBcInNDbGFzc1wiOiBcImNlbnRlcmVkX2NlbGxcIiwgXCJiU2VhcmNoYWJsZVwiOiBmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgIFwiZm5EcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwic2VsZWN0YWxsY2JcIl0nKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgJCgnI21pZ3JhdGlvblRhYmxlX2ZpbHRlciBpbnB1dCcpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCAnU2VhcmNoJyk7XG5cbiAgICAvLyBDb25maWd1cmUgdGhlIGZpbGVzIGRhdGF0YWJsZSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZWEsIGdyb3VwIHRoZSBmaWxlcyBieSBhc3NpZ25tZW50LlxuICAgICQoJyNmaWxlc1RhYmxlJykuZGF0YVRhYmxlKCB7XG4gICAgICAgIFwiYkRlc3Ryb3lcIjogdHJ1ZSxcbiAgICAgICAgXCJiUHJvY2Vzc2luZ1wiOiB0cnVlLFxuICAgICAgICBcImJTZXJ2ZXJTaWRlXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nLFxuICAgICAgICBcInNBamF4U291cmNlXCI6IFwiYWpheC5waHA/YWN0aW9uPWdldF9maWxlc1wiLFxuICAgICAgICBcImFvQ29sdW1uc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHtcInNDbGFzc1wiOiBcImZpbGVuYW1lIGMwXCIsIFwic1dpZHRoXCI6IFwiNDAlXCJ9LFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICB7XCJzQ2xhc3NcIjogXCJmdWxsbmFtZSBjMVwiLCBcInNXaWR0aFwiOiBcIjM1JVwifSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAge1wic0NsYXNzXCI6IFwiY3JlYXRlZCBjMlwiLCBcInNXaWR0aFwiOiBcIjIyJVwifSxcbiAgICAgICAgICAgICAgICAgICAge1wic0NsYXNzXCI6IFwicmVtb3ZlIGMzXCIsIFwic1dpZHRoXCI6IFwiMyVcIn1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICBcImFvQ29sdW1uRGVmc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogZmFsc2UsIFwiYVRhcmdldHNcIjogWyAwIF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IGZhbHNlLCBcImFUYXJnZXRzXCI6IFsgMSBdfSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiBmYWxzZSwgXCJhVGFyZ2V0c1wiOiBbIDIgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJhVGFyZ2V0c1wiOiBbIDMgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogZmFsc2UsIFwiYVRhcmdldHNcIjogWyA0IF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwiYVRhcmdldHNcIjogWyA1IF19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IGZhbHNlLCBcImFUYXJnZXRzXCI6IFsgNiBdfSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgNyBdfSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgOCBdfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgIFwiZm5EcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24gKCBvU2V0dGluZ3MgKSB7XG4gICAgICAgICAgICBpZiAoIG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoID09IDAgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5UcnMgPSAkKCcjZmlsZXNUYWJsZSB0Ym9keSB0cicpO1xuICAgICAgICAgICAgdmFyIGlDb2xzcGFuID0gblRyc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgc0xhc3RHcm91cCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5UcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaURpc3BsYXlJbmRleCA9IG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCArIGk7XG4gICAgICAgICAgICAgICAgdmFyIHNHcm91cCA9IG9TZXR0aW5ncy5hb0RhdGFbIG9TZXR0aW5ncy5haURpc3BsYXlbaV0gXS5fYURhdGFbMF07XG4gICAgICAgICAgICAgICAgaWYgKCBzR3JvdXAgIT0gc0xhc3RHcm91cCApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbkdyb3VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RyJyApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbkNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAndGQnICk7XG4gICAgICAgICAgICAgICAgICAgIG5DZWxsLmNvbFNwYW4gPSBpQ29sc3BhbjtcbiAgICAgICAgICAgICAgICAgICAgbkNlbGwuY2xhc3NOYW1lID0gXCJncm91cFwiO1xuICAgICAgICAgICAgICAgICAgICBuQ2VsbC5pbm5lckhUTUwgPSBzR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIG5Hcm91cC5hcHBlbmRDaGlsZCggbkNlbGwgKTtcbiAgICAgICAgICAgICAgICAgICAgblRyc1tpXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggbkdyb3VwLCBuVHJzW2ldICk7XG4gICAgICAgICAgICAgICAgICAgIHNMYXN0R3JvdXAgPSBzR3JvdXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFhU29ydGluZ0ZpeGVkXCI6IFtbIDAsICdhc2MnIF1dLFxuICAgICAgICBcImFhU29ydGluZ1wiOiBbWyAxLCAnYXNjJyBdXSxcbiAgICAgICAgXCJzRG9tXCI6ICdsZnI8XCJnaXZlSGVpZ2h0XCJ0PmlwJ1xuICAgIH0pO1xuXG4gICAgJC5kYXRlcGlja2VyLnJlZ2lvbmFsW1wiXCJdLmRhdGVGb3JtYXQgPSAnZCBNIHl5JztcbiAgICAkLmRhdGVwaWNrZXIuc2V0RGVmYXVsdHMoJC5kYXRlcGlja2VyLnJlZ2lvbmFsWycnXSk7XG5cbiAgICAvLyBDb25maWd1cmUgdGhlIGNvdXJzZSBicm93c2VyIGRhdGEgdGFibGUgYW5kIHNob3cgY2xhc3NlcyBmcm9tIFR1cm5pdGluIGFjb2N1bnQuXG4gICAgdmFyIGNvdXJzZUJyb3dzZXJUYWJsZSA9ICQoJyNjb3Vyc2VCcm93c2VyVGFibGUnKS5kYXRhVGFibGUoe1xuICAgICAgICBcImJQcm9jZXNzaW5nXCI6IHRydWUsXG4gICAgICAgIFwib0xhbmd1YWdlXCI6IGRhdGFUYWJsZXNMYW5nLFxuICAgICAgICBcImFhU29ydGluZ1wiOiBbWyA2LCAnYXNjJ11dLFxuICAgICAgICBcInNBamF4U291cmNlXCI6IFwiYWpheC5waHBcIixcbiAgICAgICAgXCJhb0NvbHVtbkRlZnNcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiBmYWxzZSwgXCJiU29ydGFibGVcIjogZmFsc2UsIFwic1dpZHRoXCI6IFwiNSVcIiwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgMCBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmbkNyZWF0ZWRDZWxsXCI6IGZ1bmN0aW9uIChuVGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5UZCkuYWRkQ2xhc3MoJ2NlbnRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJzV2lkdGhcIjogXCI0NSVcIiwgXCJpRGF0YVNvcnRcIjogNiwgXCJhVGFyZ2V0c1wiOiBbIDEgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJzV2lkdGhcIjogXCIxMCVcIiwgXCJhVGFyZ2V0c1wiOiBbIDIgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogdHJ1ZSwgXCJzV2lkdGhcIjogXCIyMCVcIiwgXCJpRGF0YVNvcnRcIjogNywgXCJhVGFyZ2V0c1wiOiBbIDMgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm5DcmVhdGVkQ2VsbFwiOiBmdW5jdGlvbiAoblRkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChuVGQpLmFkZENsYXNzKCdyaWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IGZhbHNlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwic1dpZHRoXCI6IFwiMTAlXCIsIFwiYVRhcmdldHNcIjogWyA0IF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZuQ3JlYXRlZENlbGxcIjogZnVuY3Rpb24gKG5UZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoblRkKS5hZGRDbGFzcygncmlnaHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwic1dpZHRoXCI6IFwiMTAlXCIsIFwiYVRhcmdldHNcIjogWyA1IF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZuQ3JlYXRlZENlbGxcIjogZnVuY3Rpb24gKG5UZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoblRkKS5hZGRDbGFzcygnY2VudGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiBmYWxzZSwgXCJhVGFyZ2V0c1wiOiBbIDYgXX0sXG4gICAgICAgICAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IHRydWUsIFwiYlZpc2libGVcIjogZmFsc2UsIFwiYVRhcmdldHNcIjogWyA3IF19XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgXCJmblNlcnZlckRhdGFcIjogZnVuY3Rpb24gKCBzU291cmNlLCBhb0RhdGEsIGZuQ2FsbGJhY2sgKSB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIFwiZGF0YVR5cGVcIjogJ2pzb24nLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBcInVybFwiOiBzU291cmNlLFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcInNlYXJjaF9jbGFzc2VzXCIsIGNvdXJzZV90aXRsZTogJCgnI3NlYXJjaF9jb3Vyc2VfdGl0bGUnKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgY291cnNlX2ludGVncmF0aW9uOiAkKCcjc2VhcmNoX2NvdXJzZV9pbnRlZ3JhdGlvbicpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBjb3Vyc2VfZW5kX2RhdGU6ICQoJyNzZWFyY2hfY291cnNlX2VuZF9kYXRlJykudmFsKCksIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXl9LFxuICAgICAgICAgICAgICAgIFwic3VjY2Vzc1wiOiBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm5DYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcImJTdGF0ZVNhdmVcIjogdHJ1ZSxcbiAgICAgICAgXCJmblN0YXRlU2F2ZVwiOiBmdW5jdGlvbiAob1NldHRpbmdzLCBvRGF0YSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSggdWlkICsgJ0RhdGFUYWJsZXMnLCBKU09OLnN0cmluZ2lmeShvRGF0YSkgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImZuU3RhdGVMb2FkXCI6IGZ1bmN0aW9uIChvU2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHVpZCArICdEYXRhVGFibGVzJykgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImZuRHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoJ2lucHV0W25hbWU9XCJzZWxlY3RhbGxjYlwiXScpLmF0dHIoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBpbml0aWFsaXNlQ291cnNlUmVjcmVhdGlvbigpO1xuICAgICAgICAgICAgaW5pdGlhbGlzZUVkaXRFbmREYXRlKCk7XG4gICAgICAgICAgICAkKFwiI3NlYXJjaF9jb3Vyc2VzX2J1dHRvblwiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkKFwiI3NlYXJjaF9jb3Vyc2VzX2J1dHRvblwiKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICQodGhpcykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgY291cnNlQnJvd3NlclRhYmxlLmZuUmVsb2FkQWpheCgpO1xuICAgICAgICBjb3Vyc2VCcm93c2VyVGFibGUuZm5TdGFuZGluZ1JlZHJhdygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICAkKCcjc2VhcmNoX2NvdXJzZV9lbmRfZGF0ZScpLmRhdGVwaWNrZXIoKTtcblxuICAgIC8vIEluaXRpYWxpc2UgYXNzaWdubWVudCBicm93c2VyIHRhYmxlLlxuICAgIHZhciBvVGFibGUgPSAkKCcjYXNzaWdubWVudEJyb3dzZXJUYWJsZScpLmRhdGFUYWJsZSh7XG4gICAgICAgIFwiYlByb2Nlc3NpbmdcIjogdHJ1ZSxcbiAgICAgICAgXCJvTGFuZ3VhZ2VcIjogZGF0YVRhYmxlc0xhbmcsXG4gICAgICAgIFwic0FqYXhTb3VyY2VcIjogXCJhamF4LnBocFwiLFxuICAgICAgICBcImZuU2VydmVyRGF0YVwiOiBmdW5jdGlvbiAoIHNTb3VyY2UsIGFvRGF0YSwgZm5DYWxsYmFjayApIHtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBjb3Vyc2UgYnV0dG9ucy5cbiAgICAgICAgICAgICQoJyNpZF9jcmVhdGVfY291cnNlJykuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgJCgnI2lkX3VwZGF0ZV9jb3Vyc2UnKS5hdHRyKCdkaXNhYmxlZCcsJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgICAgIC8vIE1vdmUgYm94IHdpdGhpbiBmb3JtLlxuICAgICAgICAgICAgaWYgKCQoXCIjYXNzaWdubWVudEJyb3dzZXJUYWJsZVwiKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgJChcIi5zaWRlLXByZS1vbmx5ICNwYWdlLWNvbnRlbnQgI3JlZ2lvbi1tYWluXCIpLmNzcyh7J21hcmdpbi1sZWZ0JyA6ICcwcHgnfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKFwiI2lkX2Fzc2lnbm1lbnRuYW1lXCIpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAkKFwiI2lkX2NyZWF0ZV9hc3NpZ25tZW50XCIpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIFwiZGF0YVR5cGVcIjogJ2pzb24nLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBcInVybFwiOiBzU291cmNlLFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImdldF9hc3NpZ25tZW50c1wiLCB0aWlfY291cnNlX2lkOiAkKFwiI3RpaV9jb3Vyc2VfaWRcIikuaHRtbCgpLCBzZXNza2V5OiBNLmNmZy5zZXNza2V5fSxcbiAgICAgICAgICAgICAgICBcInN1Y2Nlc3NcIjogZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV2YWwocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGlzZUNvdXJzZUJyb3dzZXJCdXR0b25zKG9UYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGZuQ2FsbGJhY2socmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoJChcIiNjb3Vyc2VfaWRcIikuaHRtbCgpICE9IFwiMFwiICYmIHJlc3VsdC5udW1iZXJfb2ZfYXNzaWdubWVudHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2lkX2Fzc2lnbm1lbnRuYW1lXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2lkX2NyZWF0ZV9hc3NpZ25tZW50XCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmFzc2lnbm1lbnRpZHNfY2hlY2tcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2VDcmVhdGVBc3NpZ25tZW50QnV0dG9uKG9UYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2lkX2Fzc2lnbm1lbnRuYW1lXCIpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2lkX2NyZWF0ZV9hc3NpZ25tZW50XCIpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmFzc2lnbm1lbnRpZHNfY2hlY2tcIikuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBjb3Vyc2UgYnV0dG9ucy5cbiAgICAgICAgICAgICAgICAgICAgJCgnI2lkX2NyZWF0ZV9jb3Vyc2UnKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAkKCcjaWRfdXBkYXRlX2NvdXJzZScpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFwiYW9Db2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgIHtcImJTZWFyY2hhYmxlXCI6IGZhbHNlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwiYVRhcmdldHNcIjogWyAwIF19LFxuICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgMSBdLFxuICAgICAgICAgICAgICAgIFwiZm5DcmVhdGVkQ2VsbFwiOiBmdW5jdGlvbiAoblRkKSB7XG4gICAgICAgICAgICAgICAgICAgICQoblRkKS5hZGRDbGFzcygnbm93cmFwJyk7XG4gICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICB7XCJiU2VhcmNoYWJsZVwiOiB0cnVlLCBcImJWaXNpYmxlXCI6IHRydWUsIFwiYVRhcmdldHNcIjogWyAyIF19LFxuICAgICAgICAgICAge1wiYlNlYXJjaGFibGVcIjogdHJ1ZSwgXCJiVmlzaWJsZVwiOiB0cnVlLCBcImFUYXJnZXRzXCI6IFsgMyBdfVxuICAgICAgICBdXG4gICAgfSk7XG5cbiAgICAvLyBPcGVuIGFuIGlmcmFtZSBsaWdodCBib3ggd2hpY2ggYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjbGFzc2VzLlxuICAgICQoJyNjcmVhdGVfY2xhc3Nlc19idXR0b24nKS5jb2xvcmJveCh7XG4gICAgICAgIGlmcmFtZTp0cnVlLCB3aWR0aDonNjAlJywgdG9wOiAnMjAwcHgnLCBoZWlnaHQ6JzEyNHB4Jywgb3BhY2l0eTogXCIwLjdcIiwgY2xhc3NOYW1lOiBcImNvdXJzZV9jcmVhdGlvblwiLFxuICAgICAgICBocmVmOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2F0ZWdvcnkgPSAkKCcuY3JlYXRlX2NvdXJzZV9jYXRlZ29yeScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBhc3NpZ25tZW50cyA9ICgkKCcuY3JlYXRlX2Fzc2lnbm1lbnRfY2hlY2tib3gnKS5pcygnOmNoZWNrZWQnKSkgPyBcIjFcIiA6IFwiMFwiO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzX2lkcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICQoJy5icm93c2VyX2NoZWNrYm94OmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgICAgICAgICAgICBjbGFzc19pZHMgKz0gXCImY2xhc3NfaWRcIiArIGkgKyBcIj1cIiArICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBwYWdldXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHBhZ2V1cmwucmVwbGFjZShcImNtZD1jb3Vyc2VzXCIsIFwiY21kPW11bHRpcGxlX2NsYXNzX3JlY3JlYXRpb25cIik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgXCImdmlld19jb250ZXh0PWJveCZjYXRlZ29yeT1cIiArIGNhdGVnb3J5ICsgXCImYXNzaWdubWVudHM9XCIgKyBhc3NpZ25tZW50cyArIGNsYXNzX2lkcyArIFwiJnNlc3NrZXk9XCIgKyBNLmNmZy5zZXNza2V5O1xuICAgICAgICB9LFxuICAgICAgICBvbkNsZWFudXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoJCgnI2NsYXNzX2lkcycpLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAvLyBNb3ZlIGJveCB3aXRoaW4gZnJhbWUuXG4gICAgICAgICQoXCIuc2lkZS1wcmUtb25seSAjcGFnZS1jb250ZW50ICNyZWdpb24tbWFpblwiKS5jc3Moe1xuICAgICAgICAgICAgJ21hcmdpbi1sZWZ0JyA6ICcwcHgnXG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoXCIuaGFzLXJlZ2lvbi1zaWRlLXByZSAjcGFnZS1jb250ZW50ICNyZWdpb24tbWFpblwiKS5jc3Moe1xuICAgICAgICAgICAgJ3dpZHRoJzogJzEwMCUnLFxuICAgICAgICAgICAgJ21hcmdpbi10b3AnOiAnLTMwcHgnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjbGFzc19pZHMgPSAkKCcjY2xhc3NfaWRzJykuaHRtbCgpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdodG1sJyxcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgICAgIFwidXJsXCI6IFwiYWpheC5waHBcIixcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImNyZWF0ZV9jb3Vyc2VzXCIsIGNsYXNzX2lkczogY2xhc3NfaWRzLCBjb3Vyc2VfY2F0ZWdvcnk6ICQoXCIjY291cnNlX2NhdGVnb3J5XCIpLmh0bWwoKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVfYXNzaWdubWVudHM6ICQoXCIjY3JlYXRlX2Fzc2lnbm1lbnRzXCIpLmh0bWwoKSwgc2Vzc2tleTogTS5jZmcuc2Vzc2tleX0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgJCgnI2NvdXJzZV9jcmVhdGlvbl9zdGF0dXMnKS5odG1sKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTaG93IGxpZ2h0IGJveCB0byBjaGFuZ2UgdGhlIGVuZCBkYXRlIG9mIGEgY291cnNlLlxuICAgIGZ1bmN0aW9uIGluaXRpYWxpc2VFZGl0RW5kRGF0ZSgpIHtcbiAgICAgICAgJChcImEuZWRpdF9jb3Vyc2VfZW5kX2xpbmtcIikuY29sb3Jib3goe1xuICAgICAgICAgICAgaW5saW5lOnRydWUsIHdpZHRoOlwiNjAlXCIsIHRvcDogXCIxMDBweFwiLCBiYWNrZ3JvdW5kOiBcIiNmZmZcIiwgaGVpZ2h0OlwiMjYwcHhcIiwgb3BhY2l0eTogXCIwLjdcIiwgY2xhc3NOYW1lOiBcImVkaXRfZW5kX2RhdGVfZm9ybVwiLFxuICAgICAgICAgICAgb25Mb2FkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsaWdodEJveENsb3NlQnV0dG9uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Db21wbGV0ZSA6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IGN1cnJlbnQgZGF0ZSBmcm9tIHRoZSBzcGFuIGlkIHdpdGhpbiB0aGUgbGluayBhbmQgc2V0XG4gICAgICAgICAgICAgICAgLy8gdGhlIGRhdGUgb2YgdGhlIGRhdGVwaWNrZXIgaW4gdGhlIGxpZ2h0Ym94IHRvIHRoYXQuXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfZGF0ZSA9ICQoJyMnICsgJCh0aGlzKS5hdHRyKFwiaWRcIikgKyAnIHNwYW4nKS5hdHRyKFwiaWRcIik7XG4gICAgICAgICAgICAgICAgY3VycmVudF9kYXRlID0gY3VycmVudF9kYXRlLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICAgICAgICAkKCcjaWRfbmV3X2NvdXJzZV9lbmRfZGF0ZV9kYXknKS52YWwoY3VycmVudF9kYXRlWzFdKTtcbiAgICAgICAgICAgICAgICAkKCcjaWRfbmV3X2NvdXJzZV9lbmRfZGF0ZV9tb250aCcpLnZhbChjdXJyZW50X2RhdGVbMl0pO1xuICAgICAgICAgICAgICAgICQoJyNpZF9uZXdfY291cnNlX2VuZF9kYXRlX3llYXInKS52YWwoY3VycmVudF9kYXRlWzNdKTtcblxuICAgICAgICAgICAgICAgIHZhciBpZFN0ciA9ICQodGhpcykuYXR0cihcImlkXCIpLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgdGlpX2NvdXJzZV9pZCA9IGlkU3RyWzJdO1xuICAgICAgICAgICAgICAgICQoJ2lucHV0W25hbWU9XCJ0aWlfY291cnNlX2lkXCJdJykudmFsKHRpaV9jb3Vyc2VfaWQpO1xuICAgICAgICAgICAgICAgICQoJ2lucHV0W25hbWU9XCJ0aWlfY291cnNlX3RpdGxlXCJdJykudmFsKCQoJ2EjY291cnNlXycgKyB0aWlfY291cnNlX2lkKS5odG1sKCkpO1xuICAgICAgICAgICAgICAgICQoJyNjYm94TG9hZGVkQ29udGVudCAuZWRpdF9jb3Vyc2VfZW5kX2RhdGVfZm9ybScpLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKCcjZGF0ZXNlbGVjdG9yLWNhbGVuZGFyLXBhbmVsJykuY3NzKCd6LWluZGV4JywgJzk5OTknKTtcblxuICAgICAgICAgICAgICAgICQoJyNpZF9zYXZlX2VuZF9kYXRlJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiYWpheC5waHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImVkaXRfY291cnNlX2VuZF9kYXRlXCIsIHRpaV9jb3Vyc2VfaWQ6IHRpaV9jb3Vyc2VfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlpX2NvdXJzZV90aXRsZTogJCgnYSNjb3Vyc2VfJyArIHRpaV9jb3Vyc2VfaWQpLmh0bWwoKSwgc2Vzc2tleTogTS5jZmcuc2Vzc2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfZGF0ZV9kOiAkKCcjaWRfbmV3X2NvdXJzZV9lbmRfZGF0ZV9kYXknKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfZGF0ZV9tOiAkKCcjaWRfbmV3X2NvdXJzZV9lbmRfZGF0ZV9tb250aCcpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlX3k6ICQoJyNpZF9uZXdfY291cnNlX2VuZF9kYXRlX3llYXInKS52YWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJC5mbi5jb2xvcmJveC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY291cnNlX2RhdGVfJyArIHRpaV9jb3Vyc2VfaWQgKyAnIHNwYW4nKS5odG1sKGRhdGEuZW5kX2RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X21zZyA9ICQoJyNlZGl0X2VuZF9kYXRlX2Rlc2MnKS5odG1sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZWRpdF9lbmRfZGF0ZV9kZXNjJykuaHRtbChjdXJyZW50X21zZyArIFwiIFwiICsgZGF0YS5tc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbGVhbnVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkKCcuZWRpdF9jb3Vyc2VfZW5kX2RhdGVfZm9ybScpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAkKCcjdGlpX2Nsb3NlX2JhcicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWdodEJveENsb3NlQnV0dG9uKCkge1xuICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8ZGl2IGlkPVwidGlpX2Nsb3NlX2JhclwiPjxhIGhyZWY9XCIjXCIgb25jbGljaz1cIiQuY29sb3Jib3guY2xvc2UoKTsgcmV0dXJuIGZhbHNlO1wiPicgKyBNLnN0ci50dXJuaXRpbnRvb2x0d28uY2xvc2VidXR0b24gKyAnPC9hPjwvZGl2PicpO1xuICAgIH1cblxuICAgIC8vIFNob3cgbGlnaHQgYm94IHdpdGggYSBmb3JtIHRvIGVpdGhlciBjcmVhdGUgYSBuZXcgY291cnNlIG9yIGxpbmsgYW4gdW5saW5rZWQgTW9vZGxlIGNvdXJzZVxuICAgIC8vIHRvIHRoZSBjbGlja2VkIFR1cm5pdGluIGNsYXNzLCB0aGVuIHN1YnNlcXVlbnRseSBjcmVhdGUgYSBNb29kbGUgYXNzaWdubWVudCB1c2luZyB0aGUgc2VsZWN0ZWRcbiAgICAvLyBleGlzdGluZyBhc3NpZ25tZW50cyBvbiBUdXJuaXRpbiBhcyBwYXJ0cy5cbiAgICBmdW5jdGlvbiBpbml0aWFsaXNlQ291cnNlUmVjcmVhdGlvbigpIHtcblxuICAgICAgICB2YXIgd2luZG93V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgdmFyIGNvbG9yQm94V2lkdGggPSBcIjgwJVwiO1xuICAgICAgICBpZiAod2luZG93V2lkdGggPCAxMDAwKSB7XG4gICAgICAgICAgICBjb2xvckJveFdpZHRoID0gXCI4NjBweFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpbmRvd0hlaWdodCA9ICQod2luZG93KS53aWR0aCgpO1xuICAgICAgICB2YXIgY29sb3JCb3hIZWlnaHQgPSBcIjgwJVwiO1xuICAgICAgICBpZiAod2luZG93SGVpZ2h0IDwgNzAwKSB7XG4gICAgICAgICAgICBjb2xvckJveEhlaWdodCA9IFwiNjAwcHhcIjtcbiAgICAgICAgfVxuXG4gICAgICAgICQoXCJhLmNvdXJzZV9yZWNyZWF0ZVwiKS5jb2xvcmJveCh7XG4gICAgICAgICAgICBpZnJhbWU6dHJ1ZSwgd2lkdGg6Y29sb3JCb3hXaWR0aCwgaGVpZ2h0OmNvbG9yQm94SGVpZ2h0LCB0b3A6ICcxMDBweCcsIGNsYXNzTmFtZTogXCJtaWdyYXRpb25cIiwgb3BhY2l0eTogXCIwLjdcIixcbiAgICAgICAgICAgIG9uTG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3hDbG9zZUJ1dHRvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xlYW51cDpmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkKCcjdGlpX2Nsb3NlX2JhcicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkKCcuYnJvd3Nlcl9jaGVja2JveCcpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQoJy5icm93c2VyX2NoZWNrYm94OmNoZWNrZWQnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgJCgnLmNyZWF0ZV9jaGVja2JveGVzJykuc2xpZGVEb3duKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQoJy5jcmVhdGVfY2hlY2tib3hlcycpLnNsaWRlVXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTWFrZSB0aGUgYnV0dG9ucyBvbiB0aGUgY291cnNlIGNyZWF0aW9uL2xpbmsgZm9ybXMgY2xpY2thYmxlIGFuZCBjb25maWd1cmUgdGhlIHJlbGV2YW50IHRyaWdnZXJlZCBldmVudC5cbiAgICBmdW5jdGlvbiBpbml0aWFsaXNlQ291cnNlQnJvd3NlckJ1dHRvbnMob1RhYmxlKSB7XG4gICAgICAgICQoJyNpZF9jcmVhdGVfY291cnNlJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIFwiZGF0YVR5cGVcIjogJ2h0bWwnLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBcInVybFwiOiBcImFqYXgucGhwXCIsXG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IHthY3Rpb246IFwiY3JlYXRlX2NvdXJzZVwiLCB0aWlfY291cnNlX2lkOiAkKFwiI3RpaV9jb3Vyc2VfaWRcIikuaHRtbCgpLFxuICAgICAgICAgICAgICAgICAgICB0aWlfY291cnNlX25hbWU6IGVuY29kZVVSSUNvbXBvbmVudCgkKFwiI3RpaV9jb3Vyc2VfbmFtZVwiKS5odG1sKCkpLFxuICAgICAgICAgICAgICAgICAgICBjb3Vyc2VfbmFtZTogZW5jb2RlVVJJQ29tcG9uZW50KCQoXCIjaWRfY291cnNlbmFtZVwiKS52YWwoKSksXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZV9jYXRlZ29yeTogJChcIiNpZF9jb3Vyc2VjYXRlZ29yeVwiKS52YWwoKSwgc2Vzc2tleTogTS5jZmcuc2Vzc2tleX0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0galF1ZXJ5LnBhcnNlSlNPTihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZUNvdXJzZUNyZWF0aW9uT3B0aW9ucyhvYmosIG9UYWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJyNpZF91cGRhdGVfY291cnNlJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIFwiZGF0YVR5cGVcIjogJ2h0bWwnLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBcInVybFwiOiBcImFqYXgucGhwXCIsXG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IHthY3Rpb246IFwibGlua19jb3Vyc2VcIiwgdGlpX2NvdXJzZV9pZDogJChcIiN0aWlfY291cnNlX2lkXCIpLmh0bWwoKSxcbiAgICAgICAgICAgICAgICAgICAgdGlpX2NvdXJzZV9uYW1lOiAkKFwiI3RpaV9jb3Vyc2VfbmFtZVwiKS5odG1sKCksIGNvdXJzZV90b19saW5rOiAkKFwiI2lkX2NvdXJzZXRvbGlua1wiKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2tleTogTS5jZmcuc2Vzc2tleX0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0galF1ZXJ5LnBhcnNlSlNPTihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZUNvdXJzZUNyZWF0aW9uT3B0aW9ucyhvYmosIG9UYWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhpZGUgdGhlIGNvdXJzZSBjcmVhdGlvbi9saW5raW5nIGZvcm0gb25jZSB0aGUgc2VsZWN0ZWQgVHVybml0aW5cbiAgICAvLyBjb3Vyc2UgaGFzIGJlZW4gY3JlYXRlZC9saW5rZWQgbG9jYWxseSBhbmQgaW5pdGlhbGlzZSB0aGUgY3JlYXRlIGFzc2lnbm1lbnQgYnV0dG9uLlxuICAgIGZ1bmN0aW9uIGhpZGVDb3Vyc2VDcmVhdGlvbk9wdGlvbnMob2JqLCBvVGFibGUpIHtcbiAgICAgICAgaWYgKG9iaiAhPSAwKSB7XG4gICAgICAgICAgICAkKFwiI2NvdXJzZV9pZFwiKS5odG1sKG9iai5jb3Vyc2VpZCk7XG5cbiAgICAgICAgICAgIHZhciBjYl9lbGVtZW50ID0gJ2lucHV0W25hbWU9XCJjaGVja18nICsgJCgnI3RpaV9jb3Vyc2VfaWQnKS5odG1sKCkgKyAnXCJdJztcbiAgICAgICAgICAgIHBhcmVudC4kKGNiX2VsZW1lbnQpLmhpZGUoKTtcbiAgICAgICAgICAgIHZhciB0aWNrX2VsZW1lbnQgPSAnI3RpY2tfJyArICQoJyN0aWlfY291cnNlX2lkJykuaHRtbCgpO1xuICAgICAgICAgICAgcGFyZW50LiQodGlja19lbGVtZW50KS5zaG93KCk7XG5cbiAgICAgICAgICAgICQoJ2ZpZWxkc2V0W2lkJD1cImNyZWF0ZV9jb3Vyc2VfZmllbGRzZXRcIl0nKS5wYXJlbnQoKS5zbGlkZVRvZ2dsZSgpO1xuICAgICAgICAgICAgJCgnZmllbGRzZXRbaWQkPVwidXBkYXRlX2NvdXJzZV9maWVsZHNldFwiXScpLnBhcmVudCgpLnNsaWRlVG9nZ2xlKCk7XG5cbiAgICAgICAgICAgICQoXCIjb3JfY29udGFpbmVyXCIpLmhpZGUoKTtcblxuICAgICAgICAgICAgJCgnI2V4aXN0aW5nX2NvdXJzZV90aXRsZV9zcGFuJykuaHRtbChvYmouY291cnNlbmFtZSk7XG4gICAgICAgICAgICAkKCcuZXhpc3RpbmdfY291cnNlX3RpdGxlX2gzJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbl9jbGFzcycpO1xuXG4gICAgICAgICAgICBpZiAoJCgnLmFzc2lnbm1lbnRpZHNfY2hlY2snKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgJChcIi5hc3NpZ25tZW50aWRzX2NoZWNrXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgJChcIiNpZF9hc3NpZ25tZW50bmFtZVwiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICQoXCIjaWRfY3JlYXRlX2Fzc2lnbm1lbnRcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJCgnLmFzc2lnbm1lbnRpZHNfY2hlY2snKS5jaGFuZ2UoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBpZiAoJCgnLmFzc2lnbm1lbnRpZHNfY2hlY2snKS5maWx0ZXIoJzpjaGVja2VkJykubGVuZ3RoID49IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5hc3NpZ25tZW50aWRzX2NoZWNrXCIpLm5vdCgnOmNoZWNrZWQnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuYXNzaWdubWVudGlkc19jaGVja1wiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpbml0aWFsaXNlQ3JlYXRlQXNzaWdubWVudEJ1dHRvbihvVGFibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQmluZCB0aGUgZXZlbnQgdG8gY3JlYXRlIGFuIGFzc2lnbm1lbnQgZnJvbSB0aGUgc2VsZWN0ZWQgcGFydHMuXG4gICAgZnVuY3Rpb24gaW5pdGlhbGlzZUNyZWF0ZUFzc2lnbm1lbnRCdXR0b24ob1RhYmxlKSB7XG4gICAgICAgICQoJyNpZF9jcmVhdGVfYXNzaWdubWVudCcpLnVuYmluZChcImNsaWNrXCIpO1xuICAgICAgICAkKCcjaWRfY3JlYXRlX2Fzc2lnbm1lbnQnKS5jbGljayhmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgdmFyIHBhcnRzID0gXCJcIjtcbiAgICAgICAgICAgICQoJy5hc3NpZ25tZW50aWRzX2NoZWNrOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgICAgICAgIHBhcnRzICs9ICQodGhpcykudmFsKCkgKyBcIixcIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnRzLmNoYXJBdChwYXJ0cy5sZW5ndGggLSAxKSA9PSAnLCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5zdWJzdHJpbmcoMCwgcGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoXCIjaWRfY3JlYXRlX2Fzc2lnbm1lbnRcIikuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcblxuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBcImRhdGFUeXBlXCI6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgXCJ1cmxcIjogXCJhamF4LnBocFwiLFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImNyZWF0ZV9hc3NpZ25tZW50XCIsIGNvdXJzZV9pZDogJChcIiNjb3Vyc2VfaWRcIikuaHRtbCgpLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50X25hbWU6ICQoXCIjaWRfYXNzaWdubWVudG5hbWVcIikudmFsKCksIHBhcnRzOiBwYXJ0cywgc2Vzc2tleTogTS5jZmcuc2Vzc2tleX0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBvVGFibGUuZm5SZWxvYWRBamF4KCk7XG4gICAgICAgICAgICAgICAgICAgIG9UYWJsZS5mblN0YW5kaW5nUmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjaWRfYXNzaWdubWVudG5hbWVcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNpZF9jcmVhdGVfYXNzaWdubWVudFwiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiLmFzc2lnbm1lbnRpZHNfY2hlY2tcIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufSk7Il19 diff --git a/jquery/turnitintooltwo_migration_tool.js b/jquery/turnitintooltwo_migration_tool.js index c3d4aadd..a3f4f7a3 100644 --- a/jquery/turnitintooltwo_migration_tool.js +++ b/jquery/turnitintooltwo_migration_tool.js @@ -76,7 +76,8 @@ function migrate(courseid, turnitintoolid) { $.colorbox.close(); } $('#migration_alert').hide(); - window.location.href = M.cfg.wwwroot + "/mod/turnitintooltwo/view.php?id="+data.id+"&migrated=1"; + + window.location.href = M.cfg.wwwroot + "/mod/turnitintooltwo/view.php?id="+data.id; }, error: function(error) { var data = error.responseJSON; diff --git a/jquery/turnitintooltwo_migration_tool.min.js b/jquery/turnitintooltwo_migration_tool.min.js index 47d5447c..3ff97fa0 100644 --- a/jquery/turnitintooltwo_migration_tool.min.js +++ b/jquery/turnitintooltwo_migration_tool.min.js @@ -1,2 +1,2 @@ -function dontmigrate(t){$("#migration_alert").hide(),t.close()}function lightBoxCloseButton(t){$("body").append('")}function displayMigrationModal(){$("#migrate_type").data("turnitintoolid")!=$("#migrate_type").data("lastasked")&&($.colorbox({width:550,height:600,inline:!0,opacity:"0.7",href:"#migration_alert",onLoad:function(){$("#asktomigrate").show(),lightBoxCloseButton(),$(".tii_close_link").click($.proxy(dontmigrate,null,$.colorbox))},onCleanup:function(){$("#tii_close_bar").remove(),$("#migration_alert").hide()}}),$("#migration_alert").show()),2==$("#migrate_type").data("migratetype")&&($("#asktomigrate").hide(),$("#migrating").show(),migrate($("#migrate_type").data("courseid"),$("#migrate_type").data("turnitintoolid")))}function migrate(t,o){$.ajax({dataType:"json",type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",data:{action:"begin_migration",courseid:t,turnitintoolid:o,sesskey:M.cfg.sesskey},success:function(t){$.colorbox&&$.colorbox.close(),$("#migration_alert").hide(),window.location.href=M.cfg.wwwroot+"/mod/turnitintooltwo/view.php?id="+t.id+"&migrated=1"},error:function(t){var o=t.responseJSON;$.colorbox&&$.colorbox.close(),$("#migration_alert").hide(),$("#turnitintool_style").prepend('
'+o.error+" "+o.message+"
"),o.hasOwnProperty("trace")&&(console.error(o.message),console.error(JSON.stringify(o.trace,null,4)))}})}$(document).ready(function(){$.ajax({dataType:"json",type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",data:{action:"check_migrated",turnitintoolid:$("#migrate_type").data("turnitintoolid"),sesskey:M.cfg.sesskey},success:function(t){t.migrated===!0?window.location.href=M.cfg.wwwroot+"/mod/turnitintooltwo/view.php?id="+t.v2id:(displayMigrationModal(),$(".dontmigrate_link").click($.proxy(dontmigrate,null,$.colorbox)))}})}),$(".migrate_link").on("click",function(){$("#asktomigrate").hide(),$("#migrating").show(),migrate($(this).data("courseid"),$(this).data("turnitintoolid"))}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR1cm5pdGludG9vbHR3b19taWdyYXRpb25fdG9vbC5qcyJdLCJuYW1lcyI6WyJkb250bWlncmF0ZSIsImNiIiwiJCIsImhpZGUiLCJjbG9zZSIsImxpZ2h0Qm94Q2xvc2VCdXR0b24iLCJhcHBlbmQiLCJNIiwic3RyIiwidHVybml0aW50b29sdHdvIiwiY2xvc2VidXR0b24iLCJkaXNwbGF5TWlncmF0aW9uTW9kYWwiLCJkYXRhIiwiY29sb3Jib3giLCJ3aWR0aCIsImhlaWdodCIsImlubGluZSIsIm9wYWNpdHkiLCJocmVmIiwib25Mb2FkIiwic2hvdyIsImNsaWNrIiwicHJveHkiLCJvbkNsZWFudXAiLCJyZW1vdmUiLCJtaWdyYXRlIiwiY291cnNlaWQiLCJ0dXJuaXRpbnRvb2xpZCIsImFqYXgiLCJkYXRhVHlwZSIsInR5cGUiLCJ1cmwiLCJjZmciLCJ3d3dyb290IiwiYWN0aW9uIiwic2Vzc2tleSIsInN1Y2Nlc3MiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImlkIiwiZXJyb3IiLCJyZXNwb25zZUpTT04iLCJwcmVwZW5kIiwibWVzc2FnZSIsImhhc093blByb3BlcnR5IiwiY29uc29sZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFjZSIsImRvY3VtZW50IiwicmVhZHkiLCJtaWdyYXRlZCIsInYyaWQiLCJvbiIsInRoaXMiXSwibWFwcGluZ3MiOiJBQThCQSxRQUFTQSxhQUFZQyxHQUNqQkMsRUFBRSxvQkFBb0JDLE9BQ3RCRixFQUFHRyxRQUdQLFFBQVNDLHFCQUFvQkosR0FDekJDLEVBQUUsUUFBUUksT0FBTyw4REFBZ0VDLEVBQUVDLElBQUlDLGdCQUFnQkMsWUFBYyxjQUl6SCxRQUFTQyx5QkFFRFQsRUFBRSxpQkFBaUJVLEtBQUssbUJBQXFCVixFQUFFLGlCQUFpQlUsS0FBSyxlQUNyRVYsRUFBRVcsVUFBVUMsTUFBTyxJQUFLQyxPQUFRLElBQUtDLFFBQU8sRUFBTUMsUUFBUyxNQUFPQyxLQUFLLG1CQUNuRUMsT0FBUSxXQUNKakIsRUFBRSxpQkFBaUJrQixPQUNuQmYsc0JBRUFILEVBQUUsbUJBQW1CbUIsTUFBTW5CLEVBQUVvQixNQUFNdEIsWUFBYSxLQUFNRSxFQUFFVyxZQUU1RFUsVUFBVSxXQUNOckIsRUFBRSxrQkFBa0JzQixTQUNwQnRCLEVBQUUsb0JBQW9CQyxVQUk5QkQsRUFBRSxvQkFBb0JrQixRQUdvQixHQUExQ2xCLEVBQUUsaUJBQWlCVSxLQUFLLGlCQUN4QlYsRUFBRSxpQkFBaUJDLE9BQ25CRCxFQUFFLGNBQWNrQixPQUVoQkssUUFBUXZCLEVBQUUsaUJBQWlCVSxLQUFLLFlBQWFWLEVBQUUsaUJBQWlCVSxLQUFLLG9CQUk3RSxRQUFTYSxTQUFRQyxFQUFVQyxHQUN2QnpCLEVBQUUwQixNQUNFQyxTQUFZLE9BQ1pDLEtBQVEsT0FDUkMsSUFBS3hCLEVBQUV5QixJQUFJQyxRQUFVLGdDQUNyQnJCLE1BQVNzQixPQUFRLGtCQUFtQlIsU0FBVUEsRUFBVUMsZUFBZ0JBLEVBQWdCUSxRQUFTNUIsRUFBRXlCLElBQUlHLFNBQ3ZHQyxRQUFTLFNBQVN4QixHQUNWVixFQUFFVyxVQUNGWCxFQUFFVyxTQUFTVCxRQUVmRixFQUFFLG9CQUFvQkMsT0FDdEJrQyxPQUFPQyxTQUFTcEIsS0FBT1gsRUFBRXlCLElBQUlDLFFBQVUsb0NBQW9DckIsRUFBSzJCLEdBQUcsZUFFdkZDLE1BQU8sU0FBU0EsR0FDWixHQUFJNUIsR0FBTzRCLEVBQU1DLFlBQ2J2QyxHQUFFVyxVQUNGWCxFQUFFVyxTQUFTVCxRQUVmRixFQUFFLG9CQUFvQkMsT0FDdEJELEVBQUUsdUJBQ0d3QyxRQUFRLHlEQUEyRDlCLEVBQUs0QixNQUFRLElBQU01QixFQUFLK0IsUUFBVSxVQUd0Ry9CLEVBQUtnQyxlQUFlLFdBQ3BCQyxRQUFRTCxNQUFNNUIsRUFBSytCLFNBQ25CRSxRQUFRTCxNQUFNTSxLQUFLQyxVQUFVbkMsRUFBS29DLE1BQU8sS0FBTSxRQTVGL0Q5QyxFQUFFK0MsVUFBVUMsTUFBTSxXQUdkaEQsRUFBRTBCLE1BQ0VDLFNBQVksT0FDWkMsS0FBUSxPQUNSQyxJQUFPeEIsRUFBRXlCLElBQUlDLFFBQVUsZ0NBQ3ZCckIsTUFDSXNCLE9BQVEsaUJBQ1JQLGVBQWdCekIsRUFBRSxpQkFBaUJVLEtBQUssa0JBQ3hDdUIsUUFBUzVCLEVBQUV5QixJQUFJRyxTQUVuQkMsUUFBVyxTQUFTeEIsR0FDWkEsRUFBS3VDLFlBQWEsRUFDbEJkLE9BQU9DLFNBQVNwQixLQUFPWCxFQUFFeUIsSUFBSUMsUUFBVSxvQ0FBb0NyQixFQUFLd0MsTUFFaEZ6Qyx3QkFFQVQsRUFBRSxxQkFBcUJtQixNQUFNbkIsRUFBRW9CLE1BQU10QixZQUFhLEtBQU1FLEVBQUVXLGlCQU0xRVgsRUFBRSxpQkFBaUJtRCxHQUFHLFFBQVMsV0FDM0JuRCxFQUFFLGlCQUFpQkMsT0FDbkJELEVBQUUsY0FBY2tCLE9BQ2hCSyxRQUFRdkIsRUFBRW9ELE1BQU0xQyxLQUFLLFlBQWFWLEVBQUVvRCxNQUFNMUMsS0FBSyIsImZpbGUiOiJ0dXJuaXRpbnRvb2x0d29fbWlncmF0aW9uX3Rvb2wubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcblxuICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBhc3NpZ25tZW50IGhhcyBiZWVuIG1pZ3JhdGVkIGluIHRoaXMgc2Vzc2lvbiBhbmQgcmVkaXJlY3QgaWYgc28uXG4gICAgJC5hamF4KHtcbiAgICAgICAgXCJkYXRhVHlwZVwiOiAnanNvbicsXG4gICAgICAgIFwidHlwZVwiOiBcIlBPU1RcIixcbiAgICAgICAgXCJ1cmxcIjogTS5jZmcud3d3cm9vdCArIFwiL21vZC90dXJuaXRpbnRvb2x0d28vYWpheC5waHBcIixcbiAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgIGFjdGlvbjogXCJjaGVja19taWdyYXRlZFwiLFxuICAgICAgICAgICAgdHVybml0aW50b29saWQ6ICQoXCIjbWlncmF0ZV90eXBlXCIpLmRhdGEoXCJ0dXJuaXRpbnRvb2xpZFwiKSxcbiAgICAgICAgICAgIHNlc3NrZXk6IE0uY2ZnLnNlc3NrZXlcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLm1pZ3JhdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBNLmNmZy53d3dyb290ICsgXCIvbW9kL3R1cm5pdGludG9vbHR3by92aWV3LnBocD9pZD1cIitkYXRhLnYyaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlNaWdyYXRpb25Nb2RhbCgpO1xuXG4gICAgICAgICAgICAgICAgJCgnLmRvbnRtaWdyYXRlX2xpbmsnKS5jbGljaygkLnByb3h5KGRvbnRtaWdyYXRlLCBudWxsLCAkLmNvbG9yYm94KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuXG4kKCcubWlncmF0ZV9saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgJCgnI2Fza3RvbWlncmF0ZScpLmhpZGUoKTtcbiAgICAkKCcjbWlncmF0aW5nJykuc2hvdygpO1xuICAgIG1pZ3JhdGUoJCh0aGlzKS5kYXRhKFwiY291cnNlaWRcIiksICQodGhpcykuZGF0YShcInR1cm5pdGludG9vbGlkXCIpKTtcbn0pO1xuXG5mdW5jdGlvbiBkb250bWlncmF0ZShjYikge1xuICAgICQoJyNtaWdyYXRpb25fYWxlcnQnKS5oaWRlKCk7XG4gICAgY2IuY2xvc2UoKTtcbn1cblxuZnVuY3Rpb24gbGlnaHRCb3hDbG9zZUJ1dHRvbihjYikge1xuICAgICQoJ2JvZHknKS5hcHBlbmQoJzxkaXYgaWQ9XCJ0aWlfY2xvc2VfYmFyXCI+PGEgY2xhc3M9XCJ0aWlfY2xvc2VfbGlua1wiIGhyZWY9XCIjXCI+JyArIE0uc3RyLnR1cm5pdGludG9vbHR3by5jbG9zZWJ1dHRvbiArICc8L2E+PC9kaXY+Jyk7XG59XG5cblxuZnVuY3Rpb24gZGlzcGxheU1pZ3JhdGlvbk1vZGFsKCkge1xuICAgIC8vIE9ubHkgZGlzcGxheSB0aGUgbW9kYWwgZHVyaW5nIGEgbWFudWFsIG1pZ3JhdGlvbi5cbiAgICBpZiAoJCgnI21pZ3JhdGVfdHlwZScpLmRhdGEoXCJ0dXJuaXRpbnRvb2xpZFwiKSAhPSAkKFwiI21pZ3JhdGVfdHlwZVwiKS5kYXRhKFwibGFzdGFza2VkXCIpKSB7XG4gICAgICAgICQuY29sb3Jib3goe3dpZHRoOiA1NTAsIGhlaWdodDogNjAwLCBpbmxpbmU6dHJ1ZSwgb3BhY2l0eTogXCIwLjdcIiwgaHJlZjpcIiNtaWdyYXRpb25fYWxlcnRcIixcbiAgICAgICAgICAgIG9uTG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJCgnI2Fza3RvbWlncmF0ZScpLnNob3coKTtcbiAgICAgICAgICAgICAgICBsaWdodEJveENsb3NlQnV0dG9uKCk7XG5cbiAgICAgICAgICAgICAgICAkKCcudGlpX2Nsb3NlX2xpbmsnKS5jbGljaygkLnByb3h5KGRvbnRtaWdyYXRlLCBudWxsLCAkLmNvbG9yYm94KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbGVhbnVwOmZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICQoJyN0aWlfY2xvc2VfYmFyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI21pZ3JhdGlvbl9hbGVydCcpLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnI21pZ3JhdGlvbl9hbGVydCcpLnNob3coKTtcbiAgICB9XG5cbiAgICBpZiAoJCgnI21pZ3JhdGVfdHlwZScpLmRhdGEoXCJtaWdyYXRldHlwZVwiKSA9PSAyKSB7XG4gICAgICAgICQoJyNhc2t0b21pZ3JhdGUnKS5oaWRlKCk7XG4gICAgICAgICQoJyNtaWdyYXRpbmcnKS5zaG93KCk7XG5cbiAgICAgICAgbWlncmF0ZSgkKFwiI21pZ3JhdGVfdHlwZVwiKS5kYXRhKFwiY291cnNlaWRcIiksICQoXCIjbWlncmF0ZV90eXBlXCIpLmRhdGEoXCJ0dXJuaXRpbnRvb2xpZFwiKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtaWdyYXRlKGNvdXJzZWlkLCB0dXJuaXRpbnRvb2xpZCkge1xuICAgICQuYWpheCh7XG4gICAgICAgIFwiZGF0YVR5cGVcIjogJ2pzb24nLFxuICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgIHVybDogTS5jZmcud3d3cm9vdCArIFwiL21vZC90dXJuaXRpbnRvb2x0d28vYWpheC5waHBcIixcbiAgICAgICAgXCJkYXRhXCI6IHthY3Rpb246IFwiYmVnaW5fbWlncmF0aW9uXCIsIGNvdXJzZWlkOiBjb3Vyc2VpZCwgdHVybml0aW50b29saWQ6IHR1cm5pdGludG9vbGlkLCBzZXNza2V5OiBNLmNmZy5zZXNza2V5fSxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgaWYgKCQuY29sb3Jib3gpIHtcbiAgICAgICAgICAgICAgICAkLmNvbG9yYm94LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKCcjbWlncmF0aW9uX2FsZXJ0JykuaGlkZSgpO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBNLmNmZy53d3dyb290ICsgXCIvbW9kL3R1cm5pdGludG9vbHR3by92aWV3LnBocD9pZD1cIitkYXRhLmlkK1wiJm1pZ3JhdGVkPTFcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IGVycm9yLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgIGlmICgkLmNvbG9yYm94KSB7XG4gICAgICAgICAgICAgICAgJC5jb2xvcmJveC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJCgnI21pZ3JhdGlvbl9hbGVydCcpLmhpZGUoKTtcbiAgICAgICAgICAgICQoJyN0dXJuaXRpbnRvb2xfc3R5bGUnKVxuICAgICAgICAgICAgICAgIC5wcmVwZW5kKCc8ZGl2IGlkPVwiZnVsbC1lcnJvclwiIGNsYXNzPVwiYm94IGdlbmVyYWxib3ggbm90aWNlYm94XCI+JyArIGRhdGEuZXJyb3IgKyAnICcgKyBkYXRhLm1lc3NhZ2UgKyAnPC9kaXY+Jyk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBzdGFjayB0cmFjZSBpbmNsdWRlZC5cbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KCd0cmFjZScpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZGF0YS50cmFjZSwgbnVsbCwgNCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4iXX0= +function dontmigrate(t){$("#migration_alert").hide(),t.close()}function lightBoxCloseButton(t){$("body").append('")}function displayMigrationModal(){$("#migrate_type").data("turnitintoolid")!=$("#migrate_type").data("lastasked")&&($.colorbox({width:550,height:600,inline:!0,opacity:"0.7",href:"#migration_alert",onLoad:function(){$("#asktomigrate").show(),lightBoxCloseButton(),$(".tii_close_link").click($.proxy(dontmigrate,null,$.colorbox))},onCleanup:function(){$("#tii_close_bar").remove(),$("#migration_alert").hide()}}),$("#migration_alert").show()),2==$("#migrate_type").data("migratetype")&&($("#asktomigrate").hide(),$("#migrating").show(),migrate($("#migrate_type").data("courseid"),$("#migrate_type").data("turnitintoolid")))}function migrate(t,o){$.ajax({dataType:"json",type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",data:{action:"begin_migration",courseid:t,turnitintoolid:o,sesskey:M.cfg.sesskey},success:function(t){$.colorbox&&$.colorbox.close(),$("#migration_alert").hide(),window.location.href=M.cfg.wwwroot+"/mod/turnitintooltwo/view.php?id="+t.id},error:function(t){var o=t.responseJSON;$.colorbox&&$.colorbox.close(),$("#migration_alert").hide(),$("#turnitintool_style").prepend('
'+o.error+" "+o.message+"
"),o.hasOwnProperty("trace")&&(console.error(o.message),console.error(JSON.stringify(o.trace,null,4)))}})}$(document).ready(function(){$.ajax({dataType:"json",type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",data:{action:"check_migrated",turnitintoolid:$("#migrate_type").data("turnitintoolid"),sesskey:M.cfg.sesskey},success:function(t){t.migrated===!0?window.location.href=M.cfg.wwwroot+"/mod/turnitintooltwo/view.php?id="+t.v2id:(displayMigrationModal(),$(".dontmigrate_link").click($.proxy(dontmigrate,null,$.colorbox)))}})}),$(".migrate_link").on("click",function(){$("#asktomigrate").hide(),$("#migrating").show(),migrate($(this).data("courseid"),$(this).data("turnitintoolid"))}); +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR1cm5pdGludG9vbHR3b19taWdyYXRpb25fdG9vbC5qcyJdLCJuYW1lcyI6WyJkb250bWlncmF0ZSIsImNiIiwiJCIsImhpZGUiLCJjbG9zZSIsImxpZ2h0Qm94Q2xvc2VCdXR0b24iLCJhcHBlbmQiLCJNIiwic3RyIiwidHVybml0aW50b29sdHdvIiwiY2xvc2VidXR0b24iLCJkaXNwbGF5TWlncmF0aW9uTW9kYWwiLCJkYXRhIiwiY29sb3Jib3giLCJ3aWR0aCIsImhlaWdodCIsImlubGluZSIsIm9wYWNpdHkiLCJocmVmIiwib25Mb2FkIiwic2hvdyIsImNsaWNrIiwicHJveHkiLCJvbkNsZWFudXAiLCJyZW1vdmUiLCJtaWdyYXRlIiwiY291cnNlaWQiLCJ0dXJuaXRpbnRvb2xpZCIsImFqYXgiLCJkYXRhVHlwZSIsInR5cGUiLCJ1cmwiLCJjZmciLCJ3d3dyb290IiwiYWN0aW9uIiwic2Vzc2tleSIsInN1Y2Nlc3MiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImlkIiwiZXJyb3IiLCJyZXNwb25zZUpTT04iLCJwcmVwZW5kIiwibWVzc2FnZSIsImhhc093blByb3BlcnR5IiwiY29uc29sZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFjZSIsImRvY3VtZW50IiwicmVhZHkiLCJtaWdyYXRlZCIsInYyaWQiLCJvbiIsInRoaXMiXSwibWFwcGluZ3MiOiJBQThCQSxRQUFTQSxhQUFZQyxHQUNqQkMsRUFBRSxvQkFBb0JDLE9BQ3RCRixFQUFHRyxRQUdQLFFBQVNDLHFCQUFvQkosR0FDekJDLEVBQUUsUUFBUUksT0FBTyw4REFBZ0VDLEVBQUVDLElBQUlDLGdCQUFnQkMsWUFBYyxjQUl6SCxRQUFTQyx5QkFFRFQsRUFBRSxpQkFBaUJVLEtBQUssbUJBQXFCVixFQUFFLGlCQUFpQlUsS0FBSyxlQUNyRVYsRUFBRVcsVUFBVUMsTUFBTyxJQUFLQyxPQUFRLElBQUtDLFFBQU8sRUFBTUMsUUFBUyxNQUFPQyxLQUFLLG1CQUNuRUMsT0FBUSxXQUNKakIsRUFBRSxpQkFBaUJrQixPQUNuQmYsc0JBRUFILEVBQUUsbUJBQW1CbUIsTUFBTW5CLEVBQUVvQixNQUFNdEIsWUFBYSxLQUFNRSxFQUFFVyxZQUU1RFUsVUFBVSxXQUNOckIsRUFBRSxrQkFBa0JzQixTQUNwQnRCLEVBQUUsb0JBQW9CQyxVQUk5QkQsRUFBRSxvQkFBb0JrQixRQUdvQixHQUExQ2xCLEVBQUUsaUJBQWlCVSxLQUFLLGlCQUN4QlYsRUFBRSxpQkFBaUJDLE9BQ25CRCxFQUFFLGNBQWNrQixPQUVoQkssUUFBUXZCLEVBQUUsaUJBQWlCVSxLQUFLLFlBQWFWLEVBQUUsaUJBQWlCVSxLQUFLLG9CQUk3RSxRQUFTYSxTQUFRQyxFQUFVQyxHQUN2QnpCLEVBQUUwQixNQUNFQyxTQUFZLE9BQ1pDLEtBQVEsT0FDUkMsSUFBS3hCLEVBQUV5QixJQUFJQyxRQUFVLGdDQUNyQnJCLE1BQVNzQixPQUFRLGtCQUFtQlIsU0FBVUEsRUFBVUMsZUFBZ0JBLEVBQWdCUSxRQUFTNUIsRUFBRXlCLElBQUlHLFNBQ3ZHQyxRQUFTLFNBQVN4QixHQUNWVixFQUFFVyxVQUNGWCxFQUFFVyxTQUFTVCxRQUVmRixFQUFFLG9CQUFvQkMsT0FFdEJrQyxPQUFPQyxTQUFTcEIsS0FBT1gsRUFBRXlCLElBQUlDLFFBQVUsb0NBQW9DckIsRUFBSzJCLElBRXBGQyxNQUFPLFNBQVNBLEdBQ1osR0FBSTVCLEdBQU80QixFQUFNQyxZQUNidkMsR0FBRVcsVUFDRlgsRUFBRVcsU0FBU1QsUUFFZkYsRUFBRSxvQkFBb0JDLE9BQ3RCRCxFQUFFLHVCQUNHd0MsUUFBUSx5REFBMkQ5QixFQUFLNEIsTUFBUSxJQUFNNUIsRUFBSytCLFFBQVUsVUFHdEcvQixFQUFLZ0MsZUFBZSxXQUNwQkMsUUFBUUwsTUFBTTVCLEVBQUsrQixTQUNuQkUsUUFBUUwsTUFBTU0sS0FBS0MsVUFBVW5DLEVBQUtvQyxNQUFPLEtBQU0sUUE3Ri9EOUMsRUFBRStDLFVBQVVDLE1BQU0sV0FHZGhELEVBQUUwQixNQUNFQyxTQUFZLE9BQ1pDLEtBQVEsT0FDUkMsSUFBT3hCLEVBQUV5QixJQUFJQyxRQUFVLGdDQUN2QnJCLE1BQ0lzQixPQUFRLGlCQUNSUCxlQUFnQnpCLEVBQUUsaUJBQWlCVSxLQUFLLGtCQUN4Q3VCLFFBQVM1QixFQUFFeUIsSUFBSUcsU0FFbkJDLFFBQVcsU0FBU3hCLEdBQ1pBLEVBQUt1QyxZQUFhLEVBQ2xCZCxPQUFPQyxTQUFTcEIsS0FBT1gsRUFBRXlCLElBQUlDLFFBQVUsb0NBQW9DckIsRUFBS3dDLE1BRWhGekMsd0JBRUFULEVBQUUscUJBQXFCbUIsTUFBTW5CLEVBQUVvQixNQUFNdEIsWUFBYSxLQUFNRSxFQUFFVyxpQkFNMUVYLEVBQUUsaUJBQWlCbUQsR0FBRyxRQUFTLFdBQzNCbkQsRUFBRSxpQkFBaUJDLE9BQ25CRCxFQUFFLGNBQWNrQixPQUNoQkssUUFBUXZCLEVBQUVvRCxNQUFNMUMsS0FBSyxZQUFhVixFQUFFb0QsTUFBTTFDLEtBQUsiLCJmaWxlIjoidHVybml0aW50b29sdHdvX21pZ3JhdGlvbl90b29sLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XG5cbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgYXNzaWdubWVudCBoYXMgYmVlbiBtaWdyYXRlZCBpbiB0aGlzIHNlc3Npb24gYW5kIHJlZGlyZWN0IGlmIHNvLlxuICAgICQuYWpheCh7XG4gICAgICAgIFwiZGF0YVR5cGVcIjogJ2pzb24nLFxuICAgICAgICBcInR5cGVcIjogXCJQT1NUXCIsXG4gICAgICAgIFwidXJsXCI6IE0uY2ZnLnd3d3Jvb3QgKyBcIi9tb2QvdHVybml0aW50b29sdHdvL2FqYXgucGhwXCIsXG4gICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICBhY3Rpb246IFwiY2hlY2tfbWlncmF0ZWRcIixcbiAgICAgICAgICAgIHR1cm5pdGludG9vbGlkOiAkKFwiI21pZ3JhdGVfdHlwZVwiKS5kYXRhKFwidHVybml0aW50b29saWRcIiksXG4gICAgICAgICAgICBzZXNza2V5OiBNLmNmZy5zZXNza2V5XG4gICAgICAgIH0sXG4gICAgICAgIFwic3VjY2Vzc1wiOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5taWdyYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gTS5jZmcud3d3cm9vdCArIFwiL21vZC90dXJuaXRpbnRvb2x0d28vdmlldy5waHA/aWQ9XCIrZGF0YS52MmlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TWlncmF0aW9uTW9kYWwoKTtcblxuICAgICAgICAgICAgICAgICQoJy5kb250bWlncmF0ZV9saW5rJykuY2xpY2soJC5wcm94eShkb250bWlncmF0ZSwgbnVsbCwgJC5jb2xvcmJveCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuJCgnLm1pZ3JhdGVfbGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICQoJyNhc2t0b21pZ3JhdGUnKS5oaWRlKCk7XG4gICAgJCgnI21pZ3JhdGluZycpLnNob3coKTtcbiAgICBtaWdyYXRlKCQodGhpcykuZGF0YShcImNvdXJzZWlkXCIpLCAkKHRoaXMpLmRhdGEoXCJ0dXJuaXRpbnRvb2xpZFwiKSk7XG59KTtcblxuZnVuY3Rpb24gZG9udG1pZ3JhdGUoY2IpIHtcbiAgICAkKCcjbWlncmF0aW9uX2FsZXJ0JykuaGlkZSgpO1xuICAgIGNiLmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGxpZ2h0Qm94Q2xvc2VCdXR0b24oY2IpIHtcbiAgICAkKCdib2R5JykuYXBwZW5kKCc8ZGl2IGlkPVwidGlpX2Nsb3NlX2JhclwiPjxhIGNsYXNzPVwidGlpX2Nsb3NlX2xpbmtcIiBocmVmPVwiI1wiPicgKyBNLnN0ci50dXJuaXRpbnRvb2x0d28uY2xvc2VidXR0b24gKyAnPC9hPjwvZGl2PicpO1xufVxuXG5cbmZ1bmN0aW9uIGRpc3BsYXlNaWdyYXRpb25Nb2RhbCgpIHtcbiAgICAvLyBPbmx5IGRpc3BsYXkgdGhlIG1vZGFsIGR1cmluZyBhIG1hbnVhbCBtaWdyYXRpb24uXG4gICAgaWYgKCQoJyNtaWdyYXRlX3R5cGUnKS5kYXRhKFwidHVybml0aW50b29saWRcIikgIT0gJChcIiNtaWdyYXRlX3R5cGVcIikuZGF0YShcImxhc3Rhc2tlZFwiKSkge1xuICAgICAgICAkLmNvbG9yYm94KHt3aWR0aDogNTUwLCBoZWlnaHQ6IDYwMCwgaW5saW5lOnRydWUsIG9wYWNpdHk6IFwiMC43XCIsIGhyZWY6XCIjbWlncmF0aW9uX2FsZXJ0XCIsXG4gICAgICAgICAgICBvbkxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICQoJyNhc2t0b21pZ3JhdGUnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3hDbG9zZUJ1dHRvbigpO1xuXG4gICAgICAgICAgICAgICAgJCgnLnRpaV9jbG9zZV9saW5rJykuY2xpY2soJC5wcm94eShkb250bWlncmF0ZSwgbnVsbCwgJC5jb2xvcmJveCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xlYW51cDpmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkKCcjdGlpX2Nsb3NlX2JhcicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICQoJyNtaWdyYXRpb25fYWxlcnQnKS5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJyNtaWdyYXRpb25fYWxlcnQnKS5zaG93KCk7XG4gICAgfVxuXG4gICAgaWYgKCQoJyNtaWdyYXRlX3R5cGUnKS5kYXRhKFwibWlncmF0ZXR5cGVcIikgPT0gMikge1xuICAgICAgICAkKCcjYXNrdG9taWdyYXRlJykuaGlkZSgpO1xuICAgICAgICAkKCcjbWlncmF0aW5nJykuc2hvdygpO1xuXG4gICAgICAgIG1pZ3JhdGUoJChcIiNtaWdyYXRlX3R5cGVcIikuZGF0YShcImNvdXJzZWlkXCIpLCAkKFwiI21pZ3JhdGVfdHlwZVwiKS5kYXRhKFwidHVybml0aW50b29saWRcIikpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWlncmF0ZShjb3Vyc2VpZCwgdHVybml0aW50b29saWQpIHtcbiAgICAkLmFqYXgoe1xuICAgICAgICBcImRhdGFUeXBlXCI6ICdqc29uJyxcbiAgICAgICAgXCJ0eXBlXCI6IFwiUE9TVFwiLFxuICAgICAgICB1cmw6IE0uY2ZnLnd3d3Jvb3QgKyBcIi9tb2QvdHVybml0aW50b29sdHdvL2FqYXgucGhwXCIsXG4gICAgICAgIFwiZGF0YVwiOiB7YWN0aW9uOiBcImJlZ2luX21pZ3JhdGlvblwiLCBjb3Vyc2VpZDogY291cnNlaWQsIHR1cm5pdGludG9vbGlkOiB0dXJuaXRpbnRvb2xpZCwgc2Vzc2tleTogTS5jZmcuc2Vzc2tleX0sXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICgkLmNvbG9yYm94KSB7XG4gICAgICAgICAgICAgICAgJC5jb2xvcmJveC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJCgnI21pZ3JhdGlvbl9hbGVydCcpLmhpZGUoKTtcblxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBNLmNmZy53d3dyb290ICsgXCIvbW9kL3R1cm5pdGludG9vbHR3by92aWV3LnBocD9pZD1cIitkYXRhLmlkO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gZXJyb3IucmVzcG9uc2VKU09OO1xuICAgICAgICAgICAgaWYgKCQuY29sb3Jib3gpIHtcbiAgICAgICAgICAgICAgICAkLmNvbG9yYm94LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKCcjbWlncmF0aW9uX2FsZXJ0JykuaGlkZSgpO1xuICAgICAgICAgICAgJCgnI3R1cm5pdGludG9vbF9zdHlsZScpXG4gICAgICAgICAgICAgICAgLnByZXBlbmQoJzxkaXYgaWQ9XCJmdWxsLWVycm9yXCIgY2xhc3M9XCJib3ggZ2VuZXJhbGJveCBub3RpY2Vib3hcIj4nICsgZGF0YS5lcnJvciArICcgJyArIGRhdGEubWVzc2FnZSArICc8L2Rpdj4nKTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHN0YWNrIHRyYWNlIGluY2x1ZGVkLlxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ3RyYWNlJykpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShkYXRhLnRyYWNlLCBudWxsLCA0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ== diff --git a/lang/ar/turnitintooltwo.php b/lang/ar/turnitintooltwo.php index b398f1ed..d747da12 100644 --- a/lang/ar/turnitintooltwo.php +++ b/lang/ar/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'تم تصعيد الإرسال الخاص بك بنجاح الى Turnitin'; $string['submitpaper'] = 'ارسال المستندات'; $string['submitpapersto'] = 'حفظ مستندات الطلبة'; -$string['submitpapersto_help'] = 'سيوفر هذا الإعداد للمدرسين القدرة على اختيار ما اذا كانت المستندات ستحفظ في مستودع مستندات الطلبة. تكمن الفائدة من إرسال المستندات إلى مستودع مستندات الطلبة في التحقق من مستندات الطلاب التي تم إرسالها مقابل إرسالات 'الطلاب الآخرين في صفوفك الدراسية الحالية أو السابقة. إذا اخترت "لا مستودعات"، فلن يتم تخزين مستندات طلابك' في مستودع مستندات طلاب Turnitin.'; $string['submitted'] = 'تم الإرسال'; $string['submittoturnitin'] = 'إرسال إلى Turnitin'; $string['textsubmission'] = 'ارسال النص'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'قام المستخدم بحذف إرسال'; $string['turnitinrepositoryoptions'] = 'المهام الخاصة بمخزن المستندات'; $string['turnitinrepositoryoptions_desc'] = 'اختر خيارات المستودع لمهام Turnitin.
(يتوفر المستودع المؤسسي فقط للمستخدمين الذين قاموا بتمكين هذا الخيار في حساباتهم)'; -$string['turnitinrepositoryoptions_help'] = 'استخدم هذا الإعداد لتغيير خيارات المستودع المتاحة في شاشة إعداد المهام.
(يتوفر المستودع المؤسسي فقط لمن قاموا بتمكين هذا الخيار في حساباتهم)'; $string['repositoryoptions_0'] = 'تمكين خيارات مستودعات المدرس القياسية'; $string['repositoryoptions_1'] = 'تمكين خيارات المستودع الموسعة للمدرب'; $string['repositoryoptions_2'] = 'قم بإرسال كل الأوراق إلى المستودع المعتاد'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'قياسي'; $string['diagnosticoptions_2'] = 'تصحيح الأخطاء'; $string['reportgenspeed_resubmission'] = 'لقد أرسلت بالفعل مستندًا لهذه المهمة وتم إنشاء تقرير تشابه للإرسال. إذا اخترت إعادة إرسال المستند، فإن الإرسال السابق سيتم استبداله وسيتم إنشاء تقرير جديد. بعد {$a->num_resubmissions} من عمليات إعادة الإرسال، سينبغي الانتظار لمدة {$a->num_hours} من الساعات بعد إعادة الإرسال للاطلاع على تقرير تشابه جديد.'; +$string['submitpapersto_help'] = 'لا توجد مستودعات:
تتم مطالبة Turnitin بعدم تخزين المستندات المرسلة في أي مستودع. وسوف تقتصر معالجتنا للورق على إجراء فحص أولي على التشابه.

المستودع القياسي:
سوف يخزن Turnitin نُسخة من المستندات المرسلة فقط في المستودع القياسي. وباختيار هذا الخيار، يتم توجيه Turnitin باستخدام المستندات المخزنة فقط لإجراء فحوصات تشابه على المستندات التي يتم إرسالها لاحقًا.

المستودعات المؤسسية (عند الاقتضاء):
باختيار هذا الخيار، يتم توجيه Turnitin إلى إضافة المستندات المرسلة إلى المستودع الخاص بالمؤسسة فقط. ويتم إجراء فحوصات التشابه على المستندات المرسلة بواسطة معلمين آخرين من مؤسستك.'; +$string['turnitinrepositoryoptions_help'] = 'تمكين خيارات مستودعات المدرس القياسية:
يستطيع المعلمون مطالبة Turnitin بإضافة مستندات إلى المستودع القياسي أو المستودع الخاص بالمؤسسة التعليمية أو عدم إضافتها إلى مستودع.

تمكين خيارات المستودع الموسعة للمدرب:
سوف يتيح هذا الخيار للمعلمين عرض إعداد الواجبات للمساح للطلاب بإعلام Turnitin بمكان تخزين مستنداتهم. ويستطيع الطلاب اختيار إضافة مستنداتهم إلى مستودع الطلاب القياسي أو إلى المستودع الخاص بالمعلم.

قم بإرسال كل الأوراق إلى المستودع المعتاد:
ستتم إضافة جميع المستندات إلى مستودع الطلاب القياسي بشكل افتراضي.

لا تقم بإرسال أي أوراق إلى المستودع:
سوف يقتصر استخدام المستندات على إجراء فحص أولي بواسطة Turnitin والعرض على المعلم لوضع الدرجات.

إرسال كل الورق إلى المستودع المؤسسي:
تتم مطالبة Turnitin بتخزين جميع الأوراق في مستودع أوراق المؤسسة. ولا يتم إجراء فحوصات التشابه على المستندات المرسلة إلا بواسطة معلمين آخرين من مؤسستك.'; +$string['migrationtoolv1list'] = 'استخدم القائمة أدناه لإزالة تعيينات Moodle Direct V1 التي تم ترحيلها قبل الإصدار {$a}؛ سيؤدي ذلك إلى حل أية نقاط لعدم الدقة في دفتر درجات Moodle. ويمكنك أيضًا تحديد تعيينات الإصدار V1 التي لم يتم ترحيلها بعد إلى الإصدار V2.

لمزيد من المعلومات، تفضل بزيارة ملاحظات الإصدار على: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'إرسال كل الورق إلى المستودع المؤسسي'; diff --git a/lang/cs/turnitintooltwo.php b/lang/cs/turnitintooltwo.php index ec33a5d3..ab8a671a 100644 --- a/lang/cs/turnitintooltwo.php +++ b/lang/cs/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Vaše odevzdání bylo úspěšně nahráno do sítě Turnitin.'; $string['submitpaper'] = 'Odevzdat práci'; $string['submitpapersto'] = 'Uložit studentské práce'; -$string['submitpapersto_help'] = 'Nastavení poskytuje instruktorům možnost zvolit, zda práce budou uloženy v archivu prací Turnitin. Výhodou odevzdání prací do tohoto archivu je, že práce odevzdané v rámci tohoto úkolu jsou porovnány s dalšími odevzdanými pracemi v rámci vašich současných a předchozích kurzů. Jestliže zvolíte "bez archivu", odevzdané práce nebudou uloženy v archivu prací Turnitin.'; $string['submitted'] = 'Odevzdáno'; $string['submittoturnitin'] = 'Odevzdat do sítě Turnitin'; $string['textsubmission'] = 'Odevzdání textu'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Uživatel vymazal odevzdanou práci'; $string['turnitinrepositoryoptions'] = 'Úkoly archivu prací'; $string['turnitinrepositoryoptions_desc'] = 'Zvolte možnosti archivu pro úkoly Turnitin.
(Archiv instituce mají k dispozici pouze ti, kdo si ho aktivovali u svého účtu)'; -$string['turnitinrepositoryoptions_help'] = 'Použijte toto nastavení ke změně možností dostupných na obrazovce nastavení úkolu.
(Archiv instituce mají k dispozici pouze ti, kdo si ho aktivovali u svého účtu)'; $string['repositoryoptions_0'] = 'Dát instruktorovi standardní volby archivu'; $string['repositoryoptions_1'] = 'Aktivovat instruktorské rozšířené možnosti archivu'; $string['repositoryoptions_2'] = 'Odevzdat všechny práce do standardního archivu'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Standardní'; $string['diagnosticoptions_2'] = 'Ladění'; $string['reportgenspeed_resubmission'] = 'Do tohoto úkolu jste již odevzdali práci a Zpráva o podobnosti pro ni byla vytvořena. Pokud se rozhodnete práci znovu odevzdat, dřívější odevzdání bude nahrazeno a bude vytvořena nová zpráva. Poté, co práci {$a->num_resubmissions}x opakovaně odevzdáte, budete muset na zobrazení nové Zprávy o podobnosti počkat {$a->num_hours} hodin.'; +$string['submitpapersto_help'] = 'Žádný archiv:
Turnitin nebude odevzdané práce ukládat do žádného úložiště. Práci zpracujeme pouze pro účely kontroly podobnosti.

Standardní archiv:
Turnitin uloží kopii odevzdaného dokumentu pouze do standardního úložiště. Pokud je vybrána tato možnost, bude Turnitin používat uložené dokumenty pouze ke kontrole podobnosti s dokumenty, které budou odevzdány v budoucnu.

Archiv instituce (v případě potřeby):
Tato možnost znamená, že bude Turnitin odevzdané dokumenty přidávat pouze do soukromého úložiště vaší instituce. Kontroly podobnosti odevzdaných dokumentů budou provádět pouze jiní instruktoři ve vaší instituci.'; +$string['turnitinrepositoryoptions_help'] = 'Dát instruktorovi standardní volby archivu:
Instruktoři mohou Turnitin nastavit tak, aby dokumenty přidával buď do standardního úložiště, do soukromého úložiště vaší instituce nebo do žádného úložiště.

Aktivovat instruktorské rozšířené možnosti archivu:
Tato možnost instruktorům umožňuje zobrazit nastavení úkolu, aby mohli dát studentům instrukce, kde jejich dokumenty budou uloženy. Studenti mohou své dokumenty přidat do standardního úložiště pro studenty nebo do soukromého úložiště vaší instituce.

Odevzdat všechny práce do standardního archivu:
Ve výchozím nastavení se všechny dokumenty přidávají do stadnardního úložiště pro studenty.

Neodesílejte žádné práce do archivu:
Dokumenty se budou používat pouze k úvodní kontrole v systému Turnitin a zobrazí se pouze instruktorovi pro účely známkování.

Odeslat všechy práce do archivu instituce:
Turnitim bude všechny práce ukládat do archivu prací instituce. Kontroly podobnosti odevzdaných prací budou provádět pouze jiní instruktoři ve vaší instituci.'; +$string['migrationtoolv1list'] = 'Pomocí níže uvedeného seznamu odeberte úkoly Moodle DirectV1 migrované před verzí {$a}, tím se vyřeší jakékoli nepřesnosti v knize hodnocení Moodle. Můžete také identifikovat úkoly V1, které ještě nejsou migrované na V2.

Další informace jsou dostupné v poznámkách k verzi: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Odeslat všechy práce do archivu instituce'; diff --git a/lang/de/turnitintooltwo.php b/lang/de/turnitintooltwo.php index c06cd83a..c56ad404 100644 --- a/lang/de/turnitintooltwo.php +++ b/lang/de/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Ihre Übermittlung erfolgreich bei Turnitin hochgeladen'; $string['submitpaper'] = 'Arbeit übermitteln'; $string['submitpapersto'] = 'Studentenarbeiten ablegen'; -$string['submitpapersto_help'] = 'Mit dieser Einstellung können Lehrkräfte festlegen, ob Arbeiten in einem Turnitin-Repository für Studentenarbeiten gespeichert werden. Der Vorteil einer Übermittlung von Arbeiten das Studentenarbeits-Repository besteht darin, dass die zu einer Aufgabe übermittelten Studentenarbeiten mit den Arbeiten von Studenten' Ihrer aktuellen sowie früheren Kurse abgeglichen werden. Wenn Sie die Option "Kein Repository" wählen, werden die Arbeiten Ihrer Studenten' nicht im Studentenarbeits-Repository von Turnitin gespeichert.'; $string['submitted'] = 'Übermittelt'; $string['submittoturnitin'] = 'An Turnitin übermitteln'; $string['textsubmission'] = 'Textübermittlung'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Der Benutzer hat eine Übermittlung gelöscht'; $string['turnitinrepositoryoptions'] = 'Ablage für Arbeiten zu Aufgaben'; $string['turnitinrepositoryoptions_desc'] = 'Wählen Sie die Repository-Optionen für Turnitin-Aufgaben aus.
(Institutions-Repositories stehen nur Benutzern zur Verfügung, die diese Option für ihren Account aktiviert haben.)'; -$string['turnitinrepositoryoptions_help'] = 'Mit dieser Einstellung ändern Sie auf dem Einrichtungsbildschirm einer Aufgabe die verfügbaren Repository-Optionen.
(Institutions-Repositories stehen nur Benutzern zur Verfügung, die diese Option für ihren Account aktiviert haben.)'; $string['repositoryoptions_0'] = 'Standardmäßige Repository-Optionen für Lehrkräfte aktivieren'; $string['repositoryoptions_1'] = 'Erweiterte Ablageoptionen für Lehrkräfte aktivieren'; $string['repositoryoptions_2'] = 'Alle Arbeiten an die Standardablage übermitteln'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = 'Aus'; $string['diagnosticoptions_1'] = 'Standard'; $string['diagnosticoptions_2'] = 'Debuggen'; -$string['reportgenspeed_resubmission'] = 'Sie haben bereits eine Arbeit zu dieser Aufgabe übermittelt, und ein Ähnlichkeitsbericht wurde für Ihre übermittelte Arbeit erstellt. Wenn Sie Ihre Arbeit erneut übermitteln möchten, wird Ihre frühere Arbeit ersetzt und ein neuer Bericht wird erstellt. Nach {$a->num_resubmissions} erneuten Übermittlungen müssen Sie {$a->num_hours} Stunden warten, bis ein neuer Ähnlichkeitsbericht angezeigt wird.'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = 'Sie haben bereits eine Arbeit zu dieser Aufgabe übermittelt, und ein Ähnlichkeitsbericht wurde für Ihre übermittelte Arbeit erstellt. Wenn Sie Ihre Arbeit erneut übermitteln möchten, wird Ihre frühere Arbeit ersetzt und ein neuer Bericht wird erstellt. Nach {$a->num_resubmissions} erneuten Übermittlungen müssen Sie {$a->num_hours} Stunden warten, bis ein neuer Ähnlichkeitsbericht angezeigt wird.'; +$string['submitpapersto_help'] = 'Kein Repository:
In Turnitin ist festgelegt, dass übermittelte Dokumente nicht in einem Repository gespeichert werden. Die Arbeiten werden lediglich verarbeitet, um die eigentliche Ähnlichkeitsprüfung durchzuführen.

Standardablage:
Turnitin speichert eine Kopie des übermittelten Dokuments nur im Standard-Repository. Bei Auswahl dieser Option verwendet Turnitin nur gespeicherte Dokumente, um Ähnlichkeitsprüfungen mit zukünftig übermittelten Dokumenten durchzuführen.

Institutions-Repository (wenn vorhanden):
Mit dieser Option wird festgelegt, dass Turnitin übermittelte Dokumente nur zum privaten Repository Ihres Instituts hinzufügt. Ähnlichkeitsprüfungen übermittelter Dokumente werden von anderen Lehrkräften Ihrer Institution durchgeführt.'; +$string['turnitinrepositoryoptions_help'] = 'Standardmäßige Repository-Optionen für Lehrkräfte aktivieren:
Lehrkräfte können in Turnitin festlegen, ob Dokumente zum Standard-Repository, zum privaten Repository der Institution oder zu keinem Repository hinzugefügt werden sollen.

Erweiterte Ablageoptionen für Lehrkräfte aktivieren:
Mit dieser Option können Lehrkräfte die Aufgabeneinstellungen anzeigen, damit Studenten in Turnitin festlegen können, wo ihre Dokumente gespeichert werden. Studenten können wählen, ob ihre Dokumente zum Standard-Studenten-Repository oder zum privaten Repository der Institution hinzugefügt werden.

Alle Arbeiten an die Standardablage übermitteln:
Alle Dokumente werden standardmäßig zum Standard-Studenten-Repository hinzugefügt.

Übermitteln Sie keine Arbeiten an eine Ablage:
Dokumente werden ausschließlich für die eigentliche Prüfung durch Turnitin und zum Anzeigen für die Lehrkraft zur Benotung verwendet.

Alle Arbeiten an das Instituts-Repository übermitteln:
In Turnitin ist festgelegt, dass alle übermittelten Arbeiten in der Institutionsablage für Arbeiten gespeichert werden. Ähnlichkeitsprüfungen der übermittelten Dokumente werden ausschließlich von anderen Lehrkräften in Ihrer Institution durchgeführt.'; +$string['migrationtoolv1list'] = 'Verwenden Sie die Liste unten, um die vor Version {$a} migrierten Moodle Direct V1-Aufgaben zu entfernen. Dadurch werden Ungenauigkeiten im Moodle-Notenbuch behoben. Sie können auch V1-Aufgaben identifizieren, die noch nicht zu V2 migriert wurden.

Weitere Informationen finden Sie in den Versionshinweisen unter: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Alle Arbeiten an das Instituts-Repository übermitteln'; diff --git a/lang/en/turnitintooltwo.php b/lang/en/turnitintooltwo.php index ce624856..6177db22 100755 --- a/lang/en/turnitintooltwo.php +++ b/lang/en/turnitintooltwo.php @@ -142,7 +142,7 @@ $string['submissionuploadsuccess'] = 'Your submission has successfully been uploaded to Turnitin.'; $string['submitpaper'] = 'Submit Paper'; $string['submitpapersto'] = 'Store Student Papers'; -$string['submitpapersto_help'] = 'This setting provides instructors with the ability to select whether papers are stored in a Turnitin student paper repository. The benefit of submitting papers to the student paper repository is that student papers submitted to the assignment are checked against other students' submissions within your current and previous classes. If you select "no repository", your students' papers will not be stored in the Turnitin student paper repository.'; +$string['submitpapersto_help'] = 'No Repository:
Turnitin is instructed to not store submitted documents to any repository. We will only process the paper to perform the initial similarity check.

Standard Repository:
Turnitin will store a copy of the submitted document only in the Standard Repository. By choosing this option, Turnitin is instructed to only use stored documents to make similarity checks against any documents submitted in the future.

Institutional Repository (Where Applicable):
Choosing this option instructs Turnitin to only add submitted documents to a repository private to your institution. Similarity checks to the submitted documents will only be made by other instructors within your institution.'; $string['submitted'] = 'Submitted'; $string['submittoturnitin'] = 'Submit to Turnitin'; $string['textsubmission'] = 'Text Submission'; @@ -470,11 +470,12 @@ $string['deletesubmissiondesc'] = 'User deleted the submission'; $string['turnitinrepositoryoptions'] = 'Paper Repository Assignments'; $string['turnitinrepositoryoptions_desc'] = 'Choose the repository options for Turnitin Assignments.
(An Institutional Repository is only available to those that have this enabled for their account)'; -$string['turnitinrepositoryoptions_help'] = 'Use this setting to change the repository options available on the assignment set up screen.
(An Institutional Repository is only available to those that have this enabled for their account)'; +$string['turnitinrepositoryoptions_help'] = 'Enable instructor standard repository options:
Instructors can instruct Turnitin to add documents to either the standard repository or no repository

Enable instructor expanded repository options:
This option will allow instructors to view an assignment setting to allow students to instruct Turnitin where their documents will be stored. Students can choose to add their documents to the standard student repository or to your institution’s private repository.

Submit all papers to the standard repository:
All documents will be added to the standard student repository by default.

Do not submit any papers into a repository:
Documents will only ever be used to perform the initial check with Turnitin and to display to the instructor for grading.

Submit all papers to the institutional repository:
Turnitin is instructed to store all papers within the institutional paper repository. Similarity checks to the submitted documents will only be made by other instructors within your institution.'; $string['repositoryoptions_0'] = 'Enable instructor standard repository options'; $string['repositoryoptions_1'] = 'Enable instructor expanded repository options'; $string['repositoryoptions_2'] = 'Submit all papers to the standard repository'; $string['repositoryoptions_3'] = 'Do not submit any papers into a repository'; +$string['repositoryoptions_4'] = 'Submit all papers to the institutional repository'; $string['turnitinula_btn'] = 'Please click here to read and accept the Agreement.'; $string['turnitinula'] = 'You must accept the latest Turnitin User Agreement before you can make a submission.'; $string['upgradenotavailable'] = 'No Upgrade Available'; @@ -588,7 +589,11 @@ $string['migrationredirect'] = 'You will be redirected to the Moodle Direct V2 assignment upon completion.'; $string['migration_event_name'] = 'Migrate V1 Assignment To V2'; $string['migration_event_desc'] = 'Turnitin Tool V1 Course: {$a->v1_name} ({$a->v1_cm_id}) has been migrated to Turnitin V2 ({$a->v2_cm_id}).'; +$string['migrationtoolv1list'] = 'Use the list below to remove the Moodle Direct V1 assignments that migrated prior to version {$a}; this will resolve any inaccuracies in the Moodle grade book. You can also identify V1 assignments that have not yet migrated to V2. +

For more information, visit the release notes at: guides.turnitin.com/releasenotes'; $string['migrationtoolprogress'] = 'Select the migrated V1 assignments that you\'d like to remove. V1 assignments that have not yet been migrated cannot be removed.'; +$string['delete_selected'] = 'Delete Selected'; +$string['v1assignmentsdeleted'] = 'The assignment(s) have been successfully deleted.'; $string['complete'] = 'complete'; $string['assignments'] = 'assignments'; $string['migrationtoolerror'] = 'The migration of this assignment has failed. Please try again.'; @@ -625,15 +630,12 @@ $string['migrationredirect'] = 'You will be redirected to the Moodle Direct V2 assignment upon completion.'; $string['migration_event_name'] = 'Migrate V1 Assignment To V2'; $string['migration_event_desc'] = 'Turnitin Tool V1 Course: {$a->v1_name} ({$a->v1_cm_id}) has been migrated to Turnitin V2 ({$a->v2_cm_id}).'; -$string['migrationtoolprogress'] = 'Select the migrated V1 assignments that you\'d like to remove. V1 assignments that have not yet been migrated cannot be removed.'; $string['complete'] = 'complete'; $string['assignments'] = 'assignments'; $string['migrationtoolerror'] = 'The migration of this assignment has failed. Please try again.'; $string['assignmentid'] = 'V1 Assignment ID'; $string['migrationassignmenttitle'] = 'V1 Assignment Title'; $string['migration_status'] = 'Migration Status'; -$string['delete_selected'] = 'Delete Selected'; -$string['v1assignmentsdeleted'] = 'The assignment(s) have been successfully deleted.'; $string['migrationtoolaccounterror'] = 'You must use the same Turnitin account ID in both your V1 and V2 plugins to enable the Moodle Migration Tool.'; $string['hasmigrated'] = 'Migrated?'; $string['migrationselectall'] = 'Select all migrated assignments'; @@ -648,5 +650,38 @@ $string['activatemigrationnotice'] = 'On activation of the Moodle Migration Tool, the V1 Migration tab is displayed in the Turnitin Assignment 2 settings.
Select the tab to manage the tool (including disabling its use and removing any migrated V1 assignments).'; $string['renew_assignment_dates'] = 'Use new assignment dates'; $string['renew_assignment_dates_help'] = 'Select this option to use new assignment dates when resetting a course. The assignment start date will be set to the date and time of the course reset, while the due and post date will elapse seven days from now.

If you’d rather not use new assignment dates, that’s fine; Turnitin will use the course’s original assignment dates instead. However, any anonymous marking settings will not be carried over for assignments where the post date has passed.'; -$string['v1migrationearlyaccess'] = 'Early Access'; $string['reportgenspeed_resubmission'] = 'You have already submitted a paper to this assignment and a Similarity Report was generated for your submission. If you choose to resubmit your paper, your earlier submission will be replaced and a new report will be generated. After {$a->num_resubmissions} resubmissions, you will need to wait {$a->num_hours} hours after a resubmission to see a new Similarity Report.'; +$string['migrationtool:gradebookerror'] = 'Your assignment has successfully migrated from Moodle Direct V1 to V2. However, some grades failed to update in the grade book during migration. The original V1 assignment is available for you to check any conflicting grades. Please remove the V1 assignment once you\'ve completed this check.

Warning: Failing to remove a migrated V1 assignment may cause grades to count twice towards the grade book total.'; +$string['migrationtool:successful'] = "Your assignment has successfully migrated from Moodle Direct V1 to V2. The original V1 assignment has been removed."; +$string['migrationtool:successfulcron'] = "Your assignment has successfully migrated from Moodle Direct V1 to V2. As this is a large assignment, please allow time for the grade book to update. The original V1 assignment will be removed automatically once the update is complete.

Warning: Removing the V1 assignment manually may result in the grade book failing to update correctly."; + +// Privacy strings for GDPR. +$string['privacy:metadata:core_files'] = 'Turnitin Assignment 2 stores files that have been uploaded to Moodle to form a Turnitin submission.'; +$string['privacy:metadata:turnitintooltwo_users'] = 'Information that links a Moodle user to a Turnitin user account and any preferences specific to Turnitin. These include default assignment settings and any Turnitin rubrics owned by them.'; +$string['privacy:metadata:turnitintooltwo_users:userid'] = 'The ID of the user being linked to a Turnitin account.'; +$string['privacy:metadata:turnitintooltwo_users:turnitin_uid'] = 'The user\'s Turnitin account ID.'; +$string['privacy:metadata:turnitintooltwo_users:instructor_defaults'] = 'The instructor\'s default assignment settings'; +$string['privacy:metadata:turnitintooltwo_users:instructor_rubrics'] = 'The Turnitin rubric scorecards that belong to the instructor'; +$string['privacy:metadata:turnitintooltwo_users:user_agreement_accepted'] = 'Indicates whether this user has accepted the Turnitin End User Licence Agreement (EULA).'; + +$string['privacy:metadata:turnitintooltwo_submissions'] = 'Information about a submission that has been sent to Turnitin.'; +$string['privacy:metadata:turnitintooltwo_submissions:userid'] = 'The ID of the user who has made a submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_title'] = 'The title of the submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_filename'] = 'The name of the file that has been submitted to Turnitin.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_objectid'] = 'The ID used by Turnitin to reference the submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_score'] = 'The similarity score of the submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_grade'] = 'The grade applied by an instructor to the submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_attempts'] = 'A timestamp indicating when the user viewed feedback on their submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_modified'] = 'A timestamp indicating when the user last modified their submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_unanon'] = 'Indicates that the anonymity of a submission has been removed, making the author\'s identity available to the instructor.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_unanonreason'] = 'An explanation for the removal of an author’s anonymity, supplied by their instructor.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_transmatch'] = 'Indicates whether Turnitin used translated matching to produce a Similarity Report for the submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_orcapable'] = 'Indicates whether Turnitin was able to produce a Similarity report for the submission.'; +$string['privacy:metadata:turnitintooltwo_submissions:submission_hash'] = 'A submission specific hash containing the user\'s ID.'; + +$string['privacy:metadata:turnitintooltwo_client'] = 'To successfully make a submission to Turnitin, specific user data needs to be exchanged between Moodle and Turnitin.'; +$string['privacy:metadata:turnitintooltwo_client:email'] = 'The user\'s email address is shared by Moodle to enable the creation of a Turnitin account.'; +$string['privacy:metadata:turnitintooltwo_client:firstname'] = 'The user’s first name is sent to Turnitin so that the user can be identified.'; +$string['privacy:metadata:turnitintooltwo_client:lastname'] = 'The user’s last name is sent to Turnitin so that the user can be identified.'; +$string['privacy:metadata:turnitintooltwo_client:submission_title'] = 'The title of the submission is sent to Turntin so that it is identifiable.'; +$string['privacy:metadata:turnitintooltwo_client:submission_filename'] = 'The name of the submitted file is sent to Turntin so that it is identifiable.'; \ No newline at end of file diff --git a/lang/es/turnitintooltwo.php b/lang/es/turnitintooltwo.php index b6bbfc81..cd302bb7 100644 --- a/lang/es/turnitintooltwo.php +++ b/lang/es/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Tu entrega se ha cargado con éxito a Turnitin'; $string['submitpaper'] = 'Entregar Trabajo'; $string['submitpapersto'] = 'Almacenar trabajos del estudiante'; -$string['submitpapersto_help'] = 'Esta opción proporciona a los profesores la alternativa de decidir si los trabajos deben guardarse en un depósito de trabajos de estudiantes de Turnitin. El beneficio de entregar trabajos al depósito de trabajos de estudiantes es que los trabajos que se entreguen al ejercicio se compararán con las entregas de otros estudiantes' dentro de tus clases, antiguas y actuales. Si seleccionas "sin depósito", los trabajos de tus estudiantes' no se guardarán en el depósito de trabajos de estudiantes de Turnitin.'; $string['submitted'] = 'Entregado'; $string['submittoturnitin'] = 'Entregar a Turnitin'; $string['textsubmission'] = 'Entrega de Texto'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'El usuario ha eliminado la entrega'; $string['turnitinrepositoryoptions'] = 'Ejercicios del depósito de trabajos'; $string['turnitinrepositoryoptions_desc'] = 'Elija las opciones de depósitos para los ejercicios de Turnitin.
(El depósito institucional solo está disponible para quienes tengan la opción habilitada en su cuenta)'; -$string['turnitinrepositoryoptions_help'] = 'Utiliza este ajuste para cambiar las opciones del depósito disponibles en la pantalla de configuración del ejercicio.
(El depósito institucional solo está disponible para quienes tengan la opción habilitada en su cuenta)'; $string['repositoryoptions_0'] = 'Habilitar las opciones de depósito estándar del instructor'; $string['repositoryoptions_1'] = 'Habilitar las opciones ampliadas del depósito del instructor'; $string['repositoryoptions_2'] = 'Entregar todos los trabajos al depósito estándar'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = 'Desactivado'; $string['diagnosticoptions_1'] = 'Estándar'; $string['diagnosticoptions_2'] = 'Depuración'; -$string['reportgenspeed_resubmission'] = 'Ya entregó un trabajo para este ejercicio y se generó el reporte de similitud correspondiente. Si decide volver a entregar el trabajo, la entrega anterior se reemplazará y se generará un reporte nuevo. Después de {$a->num_resubmissions} segundas entregas, deberá esperar {$a->num_hours} para ver un reporte de similitud nuevo.'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = 'Ya entregó un trabajo para este ejercicio y se generó el reporte de similitud correspondiente. Si decide volver a entregar el trabajo, la entrega anterior se reemplazará y se generará un reporte nuevo. Después de {$a->num_resubmissions} segundas entregas, deberá esperar {$a->num_hours} para ver un reporte de similitud nuevo.'; +$string['submitpapersto_help'] = 'No hay depósitos:
Se indica a Turnitin que no almacene los documentos enviados a un depósito. El trabajo solo se procesará para realizar la comprobación de similitud inicial.

Depósito Estándar:
Turnitin almacena una copia del documento enviado solamente en el depósito estándar. Al elegir esta opción, se indica a Turnitin que solo use los documentos almacenados para hacer comprobaciones de similitud de los documentos que se envíen a futuro.

Depósito institucional (cuando existe):
Al elegir esta opción, se indica a Turnitin que solo agregue los documentos enviados a un depósito privado de la institución. Las comprobaciones de similitud de los documentos entregados solamente estarán a cargo de otros instructores de la institución.'; +$string['turnitinrepositoryoptions_help'] = 'Habilitar las opciones de depósito estándar del instructor:
Los instructores pueden indicar a Turnitin que agregue documentos al depósito estándar, al depósito privado de la institución o a ningún depósito.

Habilitar las opciones ampliadas del depósito del instructor:
Esta opción permite que los instructores vean la configuración de un ejercicio para que los estudiantes puedan indicar a Turnitin dónde se almacenarán sus documentos. Los estudiantes pueden elegir agregar sus documentos en un depósito estándar de estudiantes o en el depósito privado de la institución.

Entregar todos los trabajos al depósito estándar:
Todos los documentos se agregarán al depósito estándar de estudiantes de forma predeterminada.

No entregar ningún trabajo al depósito:
Los documentos solo se usarán para realizar la revisión original en Turnitin y para que el instructor pueda verlos y calificarlos.

Enviar todos los trabajos al depósito de la institución:
Se indica a Turnitin que almacene todos los trabajos dentro del depósito de trabajos de la institución. Las comprobaciones de similitud de los documentos entregados solo estarán a cargo de otros instructores de la institución.'; +$string['migrationtoolv1list'] = 'Utilice la lista a continuación para eliminar las asignaciones de Moodle Direct V1 que se migraron antes de la versión {$a}; esto resolverá las imprecisiones en la libreta de calificaciones de Moodle. También puede identificar las asignaciones de V1 que todavía no se migraron a V2.

Para obtener más información, visite las notas de la versión en: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Enviar todos los trabajos al depósito de la institución'; diff --git a/lang/fi/turnitintooltwo.php b/lang/fi/turnitintooltwo.php index 03ae7d8f..e3ecda9a 100644 --- a/lang/fi/turnitintooltwo.php +++ b/lang/fi/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Palautuksesi on siirretty onnistuneesti Turnitiniin.'; $string['submitpaper'] = 'Palauta Työ'; $string['submitpapersto'] = 'Varastoi Opiskelijatyöt'; -$string['submitpapersto_help'] = 'Tällä asetuksella ohjaajat voivat valita tullaanko työt varastoimaan Turnitinin opiskelijatöiden arkistoon. Etu töiden opiskelijatöiden arkistoon lähettämisessä on se, että palautetut opiskelijatyöt tullaan tarkistamaan muiden opiskelijoiden palautuksia vastaan sekä nykyisten että entisten luokkiesi kesken. Jos valitset "ei arkistoa", ei opiskelijoittesi töitä tulla varastoimaan Turnitinin opiskelijatöiden arkistoon.'; $string['submitted'] = 'Palautettu'; $string['submittoturnitin'] = 'Palauta Turnitiniin'; $string['textsubmission'] = 'Tekstipalautus'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Käyttäjä hävitti palautetun työn'; $string['turnitinrepositoryoptions'] = 'Arkistoidut palautukset'; $string['turnitinrepositoryoptions_desc'] = 'Valitse arkistovaihtoehdot Turnitin-tehtäville.
(Tämä edellyttää, että tilillä on otettu käyttöön Laitoskohtainen Arkisto -asetus)'; -$string['turnitinrepositoryoptions_help'] = 'Käytä tätä asetusta, kun haluat muuttaa tehtävän määritysnäytössä saatavilla olevia arkistointivaihtoehtoja.
(Tämä edellyttää, että tilillä on otettu käyttöön Laitoskohtainen Arkisto -asetus)'; $string['repositoryoptions_0'] = 'Salli ohjaajan vakioarkistovaihtoehdot'; $string['repositoryoptions_1'] = 'Aktivoi ohjaajan laajennetut arkistovaihtoehdot'; $string['repositoryoptions_2'] = 'Toimita kaikki työt perusarkistoon'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Vakio'; $string['diagnosticoptions_2'] = 'Virheiden korjaus'; $string['reportgenspeed_resubmission'] = 'Olet jo palauttanut tätä tehtävää koskevan työn, ja palautuksellesi laadittiin alkuperäisyysraportti. Jos päätät palauttaa työsi uudelleen, se korvaa aikaisemman palautuksesi ja luodaan uusi raportti. {$a->num_resubmissions} uuden palautuksen jälkeen sinun on odotettava {$a->num_hours} tuntia uuden palautuksen jälkeen jotta saat nähdä uuden alkuperäisyysraportin.'; +$string['submitpapersto_help'] = 'Ei Arkistoa:
Turnitin ei tallenna lähetettyjä asiakirjoja mihinkään arkistoon. Järjestelmä käsittelee työn ainoastaan ensimmäistä yhtäläisyystarkistusta varten.

Vakioarkisto:
Turnitin tallentaa kopion lähetetystä asiakirjasta vain vakioarkistoon. Valitsemalla tämän vaihtoehdon Turnitin-järjestelmää ohjeistetaan käyttämään ainoastaan tallennettuja asiakirjoja uusien asiakirjojen yhtäläisyystarkistuksissa.

Laitoskohtainen Arkisto (Mikäli Soveltuu):
Vaihtoehdon valitseminen ohjeistaa Turnitin-järjestelmää lisäämään lähetetyt asiakirjat ainoastaan oppilaitoksen yksityiseen arkistoon. Vain oppilaitoksen muut ohjaajat voivat suorittaa lähetettyjen asiakirjojen yhtäläisyystarkastuksia.'; +$string['turnitinrepositoryoptions_help'] = 'Salli ohjaajan vakioarkistovaihtoehdot:
Ohjaajat voivat ohjeistaa Turnitin-järjestelmää joko lisäämään asiakirjoja vakioarkistoon tai oppilaitoksen yksityiseen arkistoon tai jättää asiakirjat lisäämättä mihinkään arkistoon.

Aktivoi ohjaajan laajennetut arkistovaihtoehdot:
Tällä vaihtoehdolla ohjaaja voi tarkastella tehtäväasetusta, joka sallii opiskelijoiden muokata asiakirjojen tallennuspaikkaa Turnitinissa. Opiskelijat voivat lisätä asiakirjansa vakioarkistoon tai oppilaitoksen yksityiseen arkistoon.

Toimita kaikki työt perusarkistoon:
Kaikki asiakirjat lisätään oletusarvoisesti vakioarkistoon.

Älä toimita töitä mihinkään arkistoon:
Asiakirjoja käytetään ainoastaan ensimmäisessä Turnitin-tarkastuksessa ja näytettäessä ohjaajalle arvostelua varten.

Palauta kaikki esseet oppilaitoksen tietokantaan:
Turnitin tallentaa kaikki työt oppilaitoksen arkistoon. Vain oppilaitoksen ohjaajat voivat suorittaa lähetettyjen asiakirjojen yhtäläisyystarkastuksia.'; +$string['migrationtoolv1list'] = 'Alla olevan luettelon avulla voit poistaa ne Moodle Direct V1 -tehtävät, jotka on siirretty ennen versiota {$a}; tämä ratkaisee kaikki ongelmat Moodle-arviointikirjassa. Löydät myös ne V1-tehtävät, joita ei vielä ole siirretty V2:een.

Lisätietoja on julkaisutiedoissa osoitteessa: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Palauta kaikki esseet oppilaitoksen tietokantaan'; diff --git a/lang/fr/turnitintooltwo.php b/lang/fr/turnitintooltwo.php index ffda0c82..9d1108ea 100644 --- a/lang/fr/turnitintooltwo.php +++ b/lang/fr/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Votre soumission a été envoyée vers Turnitin avec succès.'; $string['submitpaper'] = 'Envoyer une copie'; $string['submitpapersto'] = 'Conserver les travaux des étudiants'; -$string['submitpapersto_help'] = 'Cette option permet aux enseignants de choisir de conserver les travaux des étudiants dans la base de données documentaire des étudiants de Turnitin. L'avantage d’un tel choix de stockage est que les travaux soumis à un exercice seront comparés avec l'ensemble des autres copies envoyées par les étudiants pour vos cours actuels et passés. Si vous sélectionnez "Aucune base de données", les travaux de vos élèves ne seront pas conservés dans la base de données documentaire des étudiants.'; $string['submitted'] = 'Envoyé'; $string['submittoturnitin'] = 'Envoyer à Turnitin'; $string['textsubmission'] = 'Envoyer un texte'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'L´utilisateur a supprimé l´envoi'; $string['turnitinrepositoryoptions'] = 'Base de Données Documentaire'; $string['turnitinrepositoryoptions_desc'] = 'Choisissez l’option de stockage des exercices Turnitin.
(Vous ne pouvez choisir la base de données de l’établissement que si celle-ci est disponible pour le compte)'; -$string['turnitinrepositoryoptions_help'] = 'Utilisez ce paramètre pour modifier les options de base de données disponibles dans l’écran de configuration de l’exercice.
(Vous ne pouvez choisir la base de données de l’établissement que si celle-ci est disponible pour le compte)'; $string['repositoryoptions_0'] = 'Activer les options de base de données standard de l’enseignant'; $string['repositoryoptions_1'] = 'Activer les options de stockage élargies de l´enseignant'; $string['repositoryoptions_2'] = 'Soumettre tous les documents vers la base de données standard'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = 'Arrêt'; $string['diagnosticoptions_1'] = 'Standard'; $string['diagnosticoptions_2'] = 'Débogage'; -$string['reportgenspeed_resubmission'] = 'Vous avez déjà soumis une copie pour cet exercice et un rapport de similarité a été généré pour votre copie envoyée. Si vous choisissez de renvoyer votre copie, votre précédente copie envoyée sera remplacée et un nouveau rapport sera généré. Après {$a->num_resubmissions} renvois, vous devrez attendre {$a->num_hours} heures après un renvoi pour voir un nouveau rapport de similarité.'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = 'Vous avez déjà soumis une copie pour cet exercice et un rapport de similarité a été généré pour votre copie envoyée. Si vous choisissez de renvoyer votre copie, votre précédente copie envoyée sera remplacée et un nouveau rapport sera généré. Après {$a->num_resubmissions} renvois, vous devrez attendre {$a->num_hours} heures après un renvoi pour voir un nouveau rapport de similarité.'; +$string['submitpapersto_help'] = 'Aucune base de données:
Turnitin est chargé de ne pas conserver des documents envoyés à des bases de données. Nous traiterons la copie uniquement pour réaliser la comparaison initiale.

Base de données standard:
Turnitin conservera une copie du document envoyé uniquement dans la Base de données standard. En choisissant cette option, Turnitin est chargé d\'utiliser uniquement les documents conservés pour effectuer des comparaisons avec les documents qui seront envoyés à l\'avenir.

Base de données de l’établissement (le cas échéant):
Choisir cette option indique à Turnitin d\'ajouter uniquement les documents envoyés à une base de données privée de votre établissement. Des comparaisons des documents envoyés seront effectuées par d\'autres enseignants au sein de votre établissement.'; +$string['turnitinrepositoryoptions_help'] = 'Activer les options de base de données standard de l’enseignant:
Les enseignants peuvent indiquer à Turnitin d\'ajouter des documents à la base de données standard, à la base données privée de l\'établissement, ou bien à aucune base de données.

Activer les options de stockage élargies de l´enseignant:
Cette option permettra aux enseignants de visualiser le paramètre d\'un exercice afin de permettre aux étudiants d\'indiquer à Turnitin l\'emplacement où seront conservés leurs documents. Les étudiants peuvent choisir d\'ajouter leurs documents à la base de données standard des étudiants ou à la base de données privée de votre établissement.

Soumettre tous les documents vers la base de données standard:
Par défaut, tous les documents seront ajoutés à la base de données standard des étudiants.

Ne pas soumettre les documents dans une base de données:
Les documents seront toujours utilisés dans le but unique de réaliser la vérification initiale avec Turnitin et de l\'afficher à l\'enseignant pour évaluation.

Envoyer toutes les copies à la base de données de l\'établissement:
Turnitin est chargé de conserver toutes les copies dans la base de données des travaux de l\'établissement. Des comparaisons aux documents envoyés seront effectuées uniquement par d\'autres enseignants au sein de votre établissement.'; +$string['migrationtoolv1list'] = 'Utilisez la liste ci-dessous pour supprimer les exercices Moodle Direct V1 ayant migré vers la version {$a} ; cela résoudra toute inexactitude dans le carnet de notes Moodle. Vous pouvez également identifier les exercices V1 n\'ayant pas encore migré vers V2.

Pour plus d\'informations, consultez les communiqués à: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Envoyer toutes les copies à la base de données de l\'établissement'; diff --git a/lang/it/turnitintooltwo.php b/lang/it/turnitintooltwo.php index fc148be3..13a4cbde 100644 --- a/lang/it/turnitintooltwo.php +++ b/lang/it/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'La consegna è stata caricata correttamente in Turnitin.'; $string['submitpaper'] = 'Consegna elaborato'; $string['submitpapersto'] = 'Archivia gli elaborati degli studenti'; -$string['submitpapersto_help'] = 'Questa impostazione offre ai docenti la possibilità di scegliere se gli elaborati devono essere memorizzati in un archivio elaborati studenti Turnitin. Il vantaggio di consegnare gli elaborati nell'apposito archivio è che gli elaborati degli studenti consegnati per il compito verranno confrontati con quelli di altri studenti all'interno delle classi attuali e precedenti. Se selezioni "nessun archivio", gli elaborati degli studenti non verranno memorizzati nell'archivio elaborati studenti di Turnitin.'; $string['submitted'] = 'Consegnato'; $string['submittoturnitin'] = 'Consegna a Turnitin'; $string['textsubmission'] = 'Consegna del testo'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'L'utente ha eliminato una consegna'; $string['turnitinrepositoryoptions'] = 'Compiti dell'archivio elaborati'; $string['turnitinrepositoryoptions_desc'] = 'Scegli le opzioni archivio per i compiti Turnitin.
(Un archivio dell'istituto è disponibile solo per chi ha abilitato questa opzione nel proprio account)'; -$string['turnitinrepositoryoptions_help'] = 'Utilizza questa impostazione per modificare le opzioni archivio disponibili nella schermata di impostazione del compito.
(Un archivio dell'istituto è disponibile solo per chi ha abilitato questa opzione nel proprio account)'; $string['repositoryoptions_0'] = 'Abilita le opzioni archivio standard del docente'; $string['repositoryoptions_1'] = 'Abilita le opzioni archivio estese per il docente'; $string['repositoryoptions_2'] = 'Consegna tutti gli elaborati nell'archivio standard'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Standard'; $string['diagnosticoptions_2'] = 'Debug'; $string['reportgenspeed_resubmission'] = 'Hai già presentato un elaborato per questo compito ed è stato generato un report Somiglianza per la riconsegna. Se scegli di riconsegnare il tuo elaborato, l\'elaborato precedente verrà sostituito e verrà generato un nuovo report. Dopo {$a->num_resubmissions} riconsegne, si dovrà attendere {$a->num_hours} ore dopo la riconsegna per visualizzare un nuovo report.'; +$string['submitpapersto_help'] = 'Nessun archivio:
Turnitin è istruito di non archiviare in alcun archivio i documenti inviati. Elaboreremo gli elaborati solo per eseguire il controllo di somiglianza iniziale.

Archivio standard:
Turnitin archivierà una copia del documento inviato solo nell\'archivio standard. Scegliendo questa opzione, Turnitin è istruito di utilizzare solo i documenti archiviati per eseguire controlli di somiglianza rispetto ai documenti inviati in futuro.

Archivio dell'istituto (ove applicabile):
La scelta di questa opzione istruisce Turnitin di aggiungere solo i documenti inviati a un archivio privato del proprio istituto. I controlli di somiglianza con documenti inviati saranno eseguiti solo da altri docenti all\'interno del vostro istituto.'; +$string['turnitinrepositoryoptions_help'] = 'Abilita le opzioni archivio standard del docente:
I docenti possono dare istruzioni a Turnitin per aggiungere documenti all\'archivio standard, all\'archivio privato dell\'istituto o a nessun archivio.

Abilita le opzioni archivio estese per il docente:
Questa opzione consentirà ai docenti di visualizzare un\'impostazione di compito per consentire agli studenti di istruire Turnitin in cui verranno archiviati i loro documenti. Gli studenti possono scegliere di aggiungere i propri documenti all\'archivio standard degli studenti o all\'archivio privato del proprio istituto.

Consegna tutti gli elaborati nell'archivio standard:
Tutti i documenti verranno aggiunti al repository standard degli studenti per impostazione predefinita.

Non consegnare elaborati in un archivio:
I documenti verranno sempre utilizzati solo per eseguire il controllo iniziale con Turnitin e per visualizzare il docente per la valutazione.

Invia tutti gli elaborati all\'archivio istitutzionale:
Turnitin è istruito di conservare tutti i documenti all\'interno dell\'archivio elaborati istituzionale. Controlli di somiglianza con i documenti inviati saranno eseguiti soltanto da altri docenti all\'interno del vostro istituto.'; +$string['migrationtoolv1list'] = 'Utilizzare l\'elenco seguente per rimuovere i compiti Moodle Direct V1 migrati prima della versione {$a}; questo risolverà eventuali inesattezze nel registro di classe Moodle. È inoltre possibile identificare i compiti V1 che non sono ancora stati migrati in V2.

Per maggiori informazioni, consultare le note di rilascio all\'indirizzo: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Invia tutti gli elaborati all\'archivio istitutzionale'; diff --git a/lang/ja/turnitintooltwo.php b/lang/ja/turnitintooltwo.php index 53c87f26..376175a2 100644 --- a/lang/ja/turnitintooltwo.php +++ b/lang/ja/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Turnitinへの提出物のアップロードに成功しました。'; $string['submitpaper'] = 'レポートを提出'; $string['submitpapersto'] = '学生レポートを保存'; -$string['submitpapersto_help'] = 'インストラクタはこの設定を使って、Turnitinの学生のレポートリポジトリに提出されたレポートを保存するかどうかを決めます。レポートをリポジトリに保存すると、課題に提出されたレポートを現在のクラス、または過去に提出された提出物に照らし合わせてチェックできるメリットがあります。[リポジトリなし]を設定すると、Turnitinの学生のレポートリポジトリにレポートは保存されません。'; $string['submitted'] = '提出済み'; $string['submittoturnitin'] = 'Turnitinに提出'; $string['textsubmission'] = 'テキスト提出'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'ユーザーは提出物を削除しました'; $string['turnitinrepositoryoptions'] = 'レポートリポジトリの課題'; $string['turnitinrepositoryoptions_desc'] = 'Turnitin課題のリポジトリ オプションを選択してください。
(所属機関リポジトリは、アカウントで有効にしている場合にのみ利用可能です)'; -$string['turnitinrepositoryoptions_help'] = 'この設定を使って、課題設定画面のリポジトリ オプションを変更してください。
(所属機関リポジトリは、アカウントで有効にしている場合にのみ利用可能です)'; $string['repositoryoptions_0'] = 'インストラクタの標準リポジトリ オプションを有効にする'; $string['repositoryoptions_1'] = '講師の拡大リポジトリオプションを有効にする'; $string['repositoryoptions_2'] = 'すべてのレポートを標準リポジトリに提出する'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = '標準'; $string['diagnosticoptions_2'] = 'デバッグ'; $string['reportgenspeed_resubmission'] = 'この課題に対するレポートはすでに提出されており、その提出への類似性レポートが作成されました。レポートを再提出すると選択した場合、最初の提出と置き換えられ、新たなレポートが作成されます。{$a->num_resubmissions}再提出後は、新しい類似性レポートを見るのに再提出から{$a->num_hours}時間待つ必要があります。'; +$string['submitpapersto_help'] = 'リポジトリなし:
Turnitin は、提出された文書を他のレポジトリに保管するように指定されていません。Turnitin によるレポートの処理は、初回の類似性チェックのときにのみ行われます。

標準リポジトリ:
Turnitin は提出された文書のコピーを標準のレポジトリにのみ保管します。このオプションを選択すると、Turnitin は将来提出されるすべての文書への類似性チェックを行うときにだけ、保管された文書を使用します。

所属機関リポジトリ(適用する場合):
このオプションを選択すると、Turnitin は提出された文書を所属機関専用のレポジトリにのみ追加します。提出された文書への類似性チェックは、所属機関内の別の講師によってのみ行われます。'; +$string['turnitinrepositoryoptions_help'] = 'インストラクタの標準リポジトリ オプションを有効にする:
講師は、文書の追加先として標準のレポジトリを使う、所属機関専用のレポジトリを使う、またはレポジトリを使わないことを Turnitin で指定できます。

講師の拡大リポジトリオプションを有効にする:
このオプションは、講師が課題の設定を表示し、受講生が文書をどこに保管するかを Turnitin で指定できるようにするためのものです。受講生は自分の文書を標準の受講生レポジトリに追加することも、所属機関の専用レポジトリに保管することもできます。

すべてのレポートを標準リポジトリに提出する:
すべての文書は、既定で標準の受講者レポジトリに追加されます。

レポートをリポジトリに提出しない:
文書が使用されるのは、Turnitin での初回チェック時と講師による評価時のみです。

すべてのレポートを機関レポジトリに提出:
Turnitin は、すべてのレポートを所属機関のレポートレポジトリ内に保管するように指定されています。同様に、提出された文書のチェックは、所属機関内の別の講師によってのみ行われます。'; +$string['migrationtoolv1list'] = '以下の一覧を使用して、バージョン {$a} 以前に移行された Moodle Direct V1 課題を削除します。これにより Moodle 採点簿内の不正確さを解決します。V2 課題に移行していない V1 課題を判別することもできます。

詳細については、リリースノートを次からご覧ください。: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'すべてのレポートを機関レポジトリに提出'; diff --git a/lang/ko/turnitintooltwo.php b/lang/ko/turnitintooltwo.php index 4f547c28..e3af6c0a 100644 --- a/lang/ko/turnitintooltwo.php +++ b/lang/ko/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = '귀하의 제출물이 Turnitin에 성공적으로 업로드 되었습니다.'; $string['submitpaper'] = '보고서 제출'; $string['submitpapersto'] = '학생 보고서 보관'; -$string['submitpapersto_help'] = '이 환경은 학생 보고서가 Turnitin 데이터베이스에 저장될 것인지를 강사가 선택할 수 있도록 해줍니다. Turnitin 데이터베이스에 보고서를 제출하는 이점은 과제에 대해 제출된 학생 보고서들이 귀하의 현재와 이전의 클래스로 제출된 학생' 제출물들과 비교검색된다는 점입니다. "보관소 없음" 옵션 선택시, 귀하의 학생' 보고서들은 Turnitin 데이터베이스에 저장되지 않을 것입니다.'; $string['submitted'] = '제출됨'; $string['submittoturnitin'] = 'Turnitin에 제출'; $string['textsubmission'] = '본문 제출'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = '사용자가 제출물을 삭제했습니다'; $string['turnitinrepositoryoptions'] = '보고서 보관소 설정'; $string['turnitinrepositoryoptions_desc'] = 'Turnitin 과제의 보관소 옵션을 선택하십시오.
(기관 사용자 계정이 활성화된 사용자만 기관 보관소 이용 가능)'; -$string['turnitinrepositoryoptions_help'] = '과제 설정 화면에서 사용할 수 있는 보관소 옵션을 변경하려면 이 설정을 사용하십시오.
(기관 사용자 계정이 활성화된 사용자만 기관 보관소 이용 가능)'; $string['repositoryoptions_0'] = '강사에게 Turnitin 보관소 보관 옵션을 활성화하기'; $string['repositoryoptions_1'] = '강사 확장 보관소 옵션 활성화'; $string['repositoryoptions_2'] = '표준 보관소에 모든 보고서를 제출하십시오'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = '꺼짐'; $string['diagnosticoptions_1'] = '표준'; $string['diagnosticoptions_2'] = '디버깅'; -$string['reportgenspeed_resubmission'] = '이 과제에 대한 보고서를 이미 제출하셨으며, 제출물에 대한 유사성 보고서가 생성되었습니다. 보고서를 다시 제출하도록 선택하는 경우 이전 제출물이 대체되고, 새 보고서가 생성됩니다. {$a->num_resubmissions}의 재제출 이후, 새로운 유사성 보고서를 보려면 재제출 후 {$a->num_hours}시간 동안 기다려야 합니다.'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = '이 과제에 대한 보고서를 이미 제출하셨으며, 제출물에 대한 유사성 보고서가 생성되었습니다. 보고서를 다시 제출하도록 선택하는 경우 이전 제출물이 대체되고, 새 보고서가 생성됩니다. {$a->num_resubmissions}의 재제출 이후, 새로운 유사성 보고서를 보려면 재제출 후 {$a->num_hours}시간 동안 기다려야 합니다.'; +$string['submitpapersto_help'] = '보관소 없음:
Turnitin은 제출된 문서를 데이터베이스에 저장하지 않습니다. 보고서는 초기 유사성 검사를 수행할 목적으로만 처리됩니다.

표준 보관소:
Turnitin은 제출된 문서의 사본을 표준 데이터베이스에만 저장합니다. 이 옵션을 선택하면 Turnitin은 저장된 문서만 사용하여 향후 제출되는 모든 문서에 대해 유사성 검사를 수행합니다.

기관 보관소(적용 가능시):
이 옵션을 선택하면 Turnitin이 제출된 문서를 기관의 개인 데이터베이스에만 추가합니다. 제출된 문서의 유사성 검사는 기관 내의 다른 강사가 수행합니다.'; +$string['turnitinrepositoryoptions_help'] = '강사에게 Turnitin 보관소 보관 옵션을 활성화하기:
강사는 문서를 표준 데이터베이스에 추가하거나, 기관의 개인 데이터베이스에 추가하거나, 데이터베이스에 추가하지 않도록 Turnitin에 지정할 수 있습니다.

강사 확장 보관소 옵션 활성화:
강사는 이 옵션을 사용하여 과제 설정을 보고 Turnitin에서 학생들이 문서 저장 위치를 지정하도록 허용할 수 있습니다. 학생들은 문서를 표준 학생 데이터베이스에 추가할지 아니면 기관의 개인 데이터베이스에 추가할지를 선택할 수 있습니다.

표준 보관소에 모든 보고서를 제출하십시오:
기본적으로 모든 문서는 표준 학생 데이터베이스에 추가됩니다.

보관소에 어떤 보고서도 제출하지 마십시오:
문서는 Turnitin에서 초기 검사를 수행하여 강사에게 채점 결과를 표시하는 데에만 사용됩니다.

기관 보관소에 모든 보고서 제출:
Turnitin은 기관의 보고서 데이터베이스 내에 모든 보고서를 저장합니다. 제출된 문서에 대한 유사성 검사는 기관 내의 다른 강사에 의해서만 수행됩니다.'; +$string['migrationtoolv1list'] = '아래 목록을 사용하여 버전 {$a} 이전에 이동된 Moodle Direct V1 과제를 제거하십시오. 그러면 Moodle 채점 기록부의 부정확성이 해결됩니다. 또한 아직 V2로 이동되지 않은 V1 과제를 식별할 수도 있습니다.

자세한 내용은 다음을 참조하십시오. 릴리스 정보:: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = '기관 보관소에 모든 보고서 제출'; diff --git a/lang/nl/turnitintooltwo.php b/lang/nl/turnitintooltwo.php index 9cb57c28..c18ba160 100644 --- a/lang/nl/turnitintooltwo.php +++ b/lang/nl/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Uw inzending is geüpload naar Turnitin.'; $string['submitpaper'] = 'Paper indienen'; $string['submitpapersto'] = 'Papers van studenten opslaan'; -$string['submitpapersto_help'] = 'Met deze instelling kunnen docenten selecteren of papers moeten worden opgeslagen in een Turnitin online opslag voor papers van studenten. Het voordeel van het indienen van papers bij een opslag voor papers van studenten is dat papers van studenten die worden ingediend bij de opdracht worden vergeleken met andere papers die zijn ingediend voor uw huidige en vorige cursussen. Als u "geen opslag" selecteert, worden de papers van uw studenten niet opgeslagen in de Turnitin-opslag voor papers van studenten.'; $string['submitted'] = 'Ingediend'; $string['submittoturnitin'] = 'Indienen bij Turnitin'; $string['textsubmission'] = 'Tekst van inzending'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Gebruiker heeft inzending verwijderd'; $string['turnitinrepositoryoptions'] = 'Online opslag van opdrachten voor papers'; $string['turnitinrepositoryoptions_desc'] = 'Kies de opties voor online opslag voor Turnitin-opdrachten.
(Een instellingsopslag is alleen beschikbaar voor diegenen die deze functie hebben ingeschakeld voor hun account)'; -$string['turnitinrepositoryoptions_help'] = 'Gebruik deze instelling om de opties voor online opslag te wijzigen die beschikbaar zijn op het configuratiescherm van de opdracht.
(Een instellingsopslag is alleen beschikbaar voor diegenen die deze functie hebben ingeschakeld voor hun account)'; $string['repositoryoptions_0'] = 'Standaard online opties voor opslag inschakelen voor docent'; $string['repositoryoptions_1'] = 'Uitgebreide online opties voor opslag inschakelen voor docenten'; $string['repositoryoptions_2'] = 'Alle papers indienen bij de standaard online opslag'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Standaard'; $string['diagnosticoptions_2'] = 'Foutopsporing'; $string['reportgenspeed_resubmission'] = 'U hebt al een paper voor deze opdracht ingezonden en er is een Similariteitsrapport gegenereerd voor deze inzending. Als u ervoor kiest om uw paper opnieuw te in te dienen, wordt uw eerdere inzending vervangen en wordt er een nieuw rapport gegenereerd. Als u iets {$a->num_resubmissions} opnieuw indient, moet u {$a->num_hours} uur wachten om een nieuw Similariteitsrapport te kunnen bekijken.'; +$string['submitpapersto_help'] = 'Geen online opslag:
Turnitin heeft de opdracht ontvangen om ingediende documenten in geen enkele bibliotheek op te slaan. We verwerken de paper alleen om de eerste controle op overeenkomsten uit te kunnen voeren.

Standaard online opslag:
Turnitin slaat alleen in de standaardbibliotheek een kopie op van het ingediende document. Door deze optie te kiezen, krijgt Turnitin de opdracht om alleen opgeslagen documenten te gebruiken om te controleren op overeenkomsten tussen alle documenten die in de toekomst worden ingediend.

Online opslag van instelling (indien van toepassing):
Als er voor deze optie wordt gekozen, krijgt Turnitin de opdracht om alleen ingediende documenten toe te voegen aan een privébibliotheek van uw instelling. Controles op overeenkomsten tussen de ingediende documenten worden alleen uitgevoerd door andere instructeurs binnen uw instelling.'; +$string['turnitinrepositoryoptions_help'] = 'Standaard online opties voor opslag inschakelen voor docent:
Instructeurs kunnen Turnitin de opdracht geven documenten toe te voegen aan de standaardbibliotheek , aan de privébibliotheek van uw instelling of aan géén bibliotheek.

Uitgebreide online opties voor opslag inschakelen voor docenten:
Met deze optie kunnen instructeurs opdrachtinstellingen bekijken om studenten aan te kunnen laten geven waar Turnitin hun documenten op moet slaan. Studenten kunnen ervoor kiezen hun documenten toe te voegen aan de standaardbibliotheek of aan de privébibliotheek van uw instelling.

Alle papers indienen bij de standaard online opslag:
Alle documenten worden standaard aan de studentbibliotheek toegevoegd.

Geen papers indienen bij een online opslag:
Documenten worden uitsluitend gebruikt om de eerste controle uit te voeren met Turnitin en om ter beoordeling aan de instructeur weer te geven.

Verzend alle papers naar de online opslag van de instelling:
Turnitin heeft de opdracht ontvangen om alle papers op te slaan in de paperbibliotheek van de instelling. Controles op overeenkomsten tussen de ingediende documenten worden alleen uitgevoerd door andere instructeurs binnen uw instelling.'; +$string['migrationtoolv1list'] = 'Gebruik onderstaande lijst om Moodle Direct V1-opdrachten die vóór versie {$a} zijn gemigreerd; hiermee worden eventuele fouten het Moodle-gradebook opgelost. U kunt daarnaast V1-opdrachten terugvinden die nog niet naar V2 zijn gemigreerd.

Ga voor meer informatie over de versie naar: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Verzend alle papers naar de online opslag van de instelling'; diff --git a/lang/pl/turnitintooltwo.php b/lang/pl/turnitintooltwo.php index 807ee312..325f59a2 100644 --- a/lang/pl/turnitintooltwo.php +++ b/lang/pl/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Twoja przesyłka została wysłana do Turnitin.'; $string['submitpaper'] = 'Wyślij pracę'; $string['submitpapersto'] = 'Przechowuj prace studentów'; -$string['submitpapersto_help'] = 'Dzięki temu ustawieniu instruktorzy mają wybór, czy przechowywać prace w magazynie prac studenckich Turnitin. Przechowywanie prac w magazynie pozwala na porównanie\' prac wysłanych do zadania z pracami z Twoich obecnych i dawnych klas. Jeśli wybierzesz "nie do magazynu", prace Twoich studentów\' nie będą przechowywane w magazynie prac studenckich Turnitin.'; $string['submitted'] = 'Wysłane'; $string['submittoturnitin'] = 'Wyślij do Turnitin'; $string['textsubmission'] = 'Tekst wysyłki'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Użytkownik usunął przesyłkę'; $string['turnitinrepositoryoptions'] = 'Archiwum zadanych prac'; $string['turnitinrepositoryoptions_desc'] = 'Skonfiguruj opcje magazynu zadań Turnitin.
(opcja dostępna tylko dla użytkowników, którzy mają na swoim koncie włączony magazyn instytucji)'; -$string['turnitinrepositoryoptions_help'] = 'Użyj tego ustawienia, aby zmienić opcje magazynu dostępne na ekranie konfiguracji zadania.
(magazyn instytucji jest dostępny tylko dla tych użytkowników, którzy włączyli go na swoim koncie)'; $string['repositoryoptions_0'] = 'Włącz standardowe opcje magazynu dla instruktora'; $string['repositoryoptions_1'] = 'Włącz rozszerzone opcje archwizowania dla instruktora.'; $string['repositoryoptions_2'] = 'Wyślij wszystkie prace do archiwum standardowego.'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Standardowa'; $string['diagnosticoptions_2'] = 'Wykrywanie błędów'; $string['reportgenspeed_resubmission'] = 'Już wysłałeś pracę do tego zadania i został wygenerowany raport podobieństwa dla Twojej wysyłki. Jeśli zdecydujesz się wysłać ponownie swoją pracę, Twoja wcześniejsza wysyłka zostanie zastąpiona i zostanie wygenerowany nowy raport. W przypadku {$a->num_resubmissions} ponownych wysyłek trzeba poczekać {$a->num_hours} godzin od ponownego wysłania, aby zobaczyć nowy raport podobieństwa.'; +$string['submitpapersto_help'] = 'Brak magazynu:
Turnitin nie będzie przechowywać wysłanych dokumentów w żadnym magazynie. Przetworzymy pracę tylko w celu przeprowadzenia wstępnej weryfikacji podobieństwa.

Magazyn standardowy:
Turnitin będzie przechowywać kopię wysłanego dokumentu tylko w magazynie standardowym. Wybór tej opcji powoduje, że Turnitin będzie wykorzystywać przechowywane dokumenty tylko w celu przeprowadzenia weryfikacji podobieństwa do dokumentów wysłanych w przyszłości.

Magazyn instytucji (jeśli dotyczy):
Wybranie tej opcji spowoduje, że Turnitin będzie dodawać wysłane dokumenty tylko do prywatnego magazynu instytucji. Weryfikację podobieństwa wysłanych dokumentów będą przeprowadzać inni instruktorzy z instytucji. '; +$string['turnitinrepositoryoptions_help'] = 'Włącz standardowe opcje magazynu dla instruktora:
Instruktorzy mogą zdecydować, czy Turnitin ma dodawać dokumenty do magazynu standardowego albo prywatnego magazynu instytucji czy też w ogóle nie umieszczać ich w magazynie.

Włącz rozszerzone opcje archwizowania dla instruktora.:
Ta opcja pozwala instruktorom wyświetlić ustawienie zadania, które umożliwia studentom wskazanie Turnitin, gdzie mają być przechowywane ich dokumenty. Studenci mogą dodawać swoje dokumenty do standardowego magazynu studenta lub do prywatnego magazynu instytucji.

Wyślij wszystkie prace do archiwum standardowego.:
Wszystkie dokumenty są domyślnie dodawane do standardowego magazynu studenta.

Nie wysyłaj żadnych prac do archiwum.:
Dokumenty będą używane tylko w celu przeprowadzenia wstępnej weryfikacji w Turnitin. Będą też wyświetlane instruktorom w celu dokonania oceny.

Wyślij wszystkie prace do magazynu instytucji:
Turnitin ma przechowywać wszystkie prace w magazynie prac instytucji. Weryfikację podobieństwa do wysłanych dokumentów będą przeprowadzać inni instruktorzy z instytucji.'; +$string['migrationtoolv1list'] = 'Skorzystaj z poniższej listy, aby usunąć zadania z Moodle Direct V1, które przeniesiono przed opublikowaniem wersji {$a}. Pozwoli to rozwiązać problemy z nieścisłościami w dzienniku ocen Moodle. Możesz też wyszukać zadania z Moodle Direct V1, które nie zostały jeszcze przeniesione do Moodle Direct V2.

Więcej szczegółów można znaleźć w informacjach o wersji pod adresem: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Wyślij wszystkie prace do magazynu instytucji'; diff --git a/lang/pt_br/turnitintooltwo.php b/lang/pt_br/turnitintooltwo.php index 27a00fbd..4b32ca6e 100644 --- a/lang/pt_br/turnitintooltwo.php +++ b/lang/pt_br/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'O upload do seu envio para o Turnitin foi feito com sucesso.'; $string['submitpaper'] = 'Enviar Documento'; $string['submitpapersto'] = 'Armazenar Documentos dos Alunos'; -$string['submitpapersto_help'] = 'Essa configuração fornece aos professores a possibilidade de selecionar se os documentos serão armazenados em um depósito de documentos de alunos Turnitin. A vantagem de enviar os documentos para o depósito de documentos de alunos é que os documentos enviados ao trabalho serão comparados com os envios de outros alunos\' nas suas aulas atuais e anteriores. Se você selecionar "nenhum depósito", os documentos de seus alunos\' não serão armazenados no depósito de documentos de alunos Turnitin.'; $string['submitted'] = 'Enviado'; $string['submittoturnitin'] = 'Enviar ao Turnitin'; $string['textsubmission'] = 'Envio de Texto'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'O usuário excluiu o envio'; $string['turnitinrepositoryoptions'] = 'Trabalhos do depósito de documentos'; $string['turnitinrepositoryoptions_desc'] = 'Escolher as opções de depósitos para Trabalhos Turnitin.
(Um Depósito Institucional só está disponível para aqueles que habilitaram essa opção na conta)'; -$string['turnitinrepositoryoptions_help'] = 'Usar essa configuração para alterar as opções de depósito disponíveis na tela de configuração do trabalho.
(Um Depósito institucional só está disponível para aqueles que habilitaram essa opção na conta)'; $string['repositoryoptions_0'] = 'Habilitar opções de depósito padrão do professor'; $string['repositoryoptions_1'] = 'Ativar as opções de depósito expandido do professor'; $string['repositoryoptions_2'] = 'Enviar todos documento para o depósito padrão'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Padrão'; $string['diagnosticoptions_2'] = 'Depuração'; $string['reportgenspeed_resubmission'] = 'Você já enviou um documento para esse trabalho e um Relatório de similaridades foi gerado para o seu envio. Se você optar por reenviar o seu documento, o seu envio anterior será substituído e um novo relatório será gerado. Após {$a->num_resubmissions} reenvios, você precisará esperar {$a->num_hours} horas após um reenvio para ver um novo relatório.'; +$string['submitpapersto_help'] = 'Nenhum Depósito:
Instrui-se à Turnitin não armazenar documentos enviados em nenhum repositório. Nós só processaremos o documento para realizar a verificação de similaridade inicial.

Depósito Padrão:
A Turnitin armazenará uma cópia do documento enviado somente no Repositório Padrão. Ao escolher essa opção, a Turnitin é instruída a usar somente os documentos armazenados para realizar verificações de similaridade contra qualquer documento enviado no futuro.

Depósito Institucional (Onde Aplicável):
Escolher essa opção instrui a Turnitin a somente adicionar documentos enviados para um repositório privado na sua instituição. As verificações de similaridade para os documentos enviados só serão realizadas por outros professores da sua instituição.'; +$string['turnitinrepositoryoptions_help'] = 'Habilitar opções de depósito padrão do professor:
Os professores podem orientar a Turnitin para adicionar documentos no repositório padrão, no repositório particular da instituição ou no repositório.

Ativar as opções de depósito expandido do professor:
Essa opção permitirá aos professores visualizar uma configuração de trabalho para permitir que os alunos orientem a Turnitin onde seus documentos serão armazenados. Os alunos podem escolher adicionar seus documentos no repositório de aluno padrão ou no repositório particular da instituição.

Enviar todos documento para o depósito padrão:
Todos os documentos serão adicionados ao repositório padrão do aluno por padrão.

Não enviar documentos para um depósito:
Os documentos só serão usados para realizar a verificação inicial da Turnitin e para exibir ao professor para pontuação.

Envie todos os documentos para o repositório da instituição:
Instrui-se à Turnitin armazenar todos os documentos no depósito de documentos institucional. As verificações de similaridade para os documentos enviados só serão realizadas por outros professores da sua instituição.'; +$string['migrationtoolv1list'] = 'Use a lista abaixo para remover os trabalhos do Moodle Direct V1 que migraram antes da versão {$a}; assim, qualquer imperfeição será resolvida no livro de notas do Moodle. Também é possível identificar trabalhos V1 que ainda não migraram para V2.

Para obter mais informações, acesse as notas de versão em: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Envie todos os documentos para o repositório da instituição'; diff --git a/lang/ro/turnitintooltwo.php b/lang/ro/turnitintooltwo.php index 824e38b0..21e13bf6 100644 --- a/lang/ro/turnitintooltwo.php +++ b/lang/ro/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Depunerea a fost încărcată cu succes în Turnitin.'; $string['submitpaper'] = 'Depunere lucrare'; $string['submitpapersto'] = 'Stocarea lucrărilor studenților'; -$string['submitpapersto_help'] = 'Această setare oferă profesorilor posibilitatea de a stoca lucrările studenților în depozitul Turnitin. Avantajul stocării în depozit este că lucrările studenților depuse pentru o temă sunt comparate cu alte depuneri ale studenților, din cursurile prezente și trecute. Dacă selectați „niciun depozit”, lucrările studenților nu vor fi depozitate în depozitul Turnitin.'; $string['submitted'] = 'Depus'; $string['submittoturnitin'] = 'Depunere în Turnitin'; $string['textsubmission'] = 'Depunerea textului'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Utilizatorul a șters depunerea'; $string['turnitinrepositoryoptions'] = 'Teme – depozit de lucrări'; $string['turnitinrepositoryoptions_desc'] = 'Alegeți opțiunile de depozit pentru temele Turnitin.
(Depozitul instituțional este disponibil doar utilizatorilor pentru ale căror conturi s-a activat acest lucru)'; -$string['turnitinrepositoryoptions_help'] = 'Cu această setare puteți modifica opțiunile de depozit disponibile în ecranul de configurare a temelor.
(Depozitul instituțional este disponibil doar utilizatorilor pentru conturile cărora s-a activat acest lucru)'; $string['repositoryoptions_0'] = 'Activarea opțiunilor de depozit standard pentru profesor'; $string['repositoryoptions_1'] = 'Activarea opțiunilor de depozit extinse pentru profesor'; $string['repositoryoptions_2'] = 'Toate lucrările se trimit în depozitul standard'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Standard'; $string['diagnosticoptions_2'] = 'Depanare'; $string['reportgenspeed_resubmission'] = 'Ați depus deja o lucrare la această temă și un Raport de similitudine a fost generat pentru depunere. Dacă decideți să vă redepuneți lucrarea, depunerea anterioară va fi înlocuită și va fi generat un raport nou. Pentru a vizualiza un nou Raport de similitudine, după {$a->num_resubmissions} redepuneri, va trebui să așteptați {$a->num_hours} ore după o redepunere.'; +$string['submitpapersto_help'] = 'Niciun depozit:
Turnitin este configurat să nu stocheze documentele depuse în niciun depozit. Vom procesa lucrarea numai pentru o verificare inițială de similaritate.

Depozit standard:
Turnitin va trimite un exemplar al documentului depus numai în Depozitul standard. Alegând această opțiune, Turnitin va fi configurat să folosească numai documentele depuse pentru a efectua verificări de similaritate pentru documente depuse în viitor.

Depozitul instituțional (dacă este cazul):
Prin alegerea acestei opțiuni, Turnitin este configurat să adauge documentele depuse într-un depozit privat al instituției. Verificările de similaritate pentru documentele depuse se vor efectua de către alți profesori din instituția dvs.'; +$string['turnitinrepositoryoptions_help'] = 'Activarea opțiunilor de depozit standard pentru profesor:
Profesorii pot configura Turnitin să adauge documente în depozitul standard, în depozitul privat al instituţiei sau în niciun depozit.

Activarea opțiunilor de depozit extinse pentru profesor:
Această opțiune le permite profesorilor să vizualizeze o setare a temei care îi lasă pe studenți să specifice sistemului Turnitin unde vor fi stocate documentele lor. Studenții pot alege să adauge documentele în depozitul standard de documente sau în depozitul privat al instituției dumneavoastră.

Toate lucrările se trimit în depozitul standard:
În mod implicit, toate documentele vor fi adăugate în depozitul standard al studentului.

Nu se trimite nicio lucrare în niciun depozit:
Documentele vor fi folosite numai pentru a efectua verificarea inițială de sistemul Turnitin și pentru a le afișa profesorului pentru evaluare.

Depuneți toate lucrările la depozitul instituției:
Turnitin este configurat să stocheze toate lucrările în depozitul de lucrări al instituției. Verificările de similaritate pentru documentele depuse se vor efectua de către alți profesori din instituția dumneavoastră.'; +$string['migrationtoolv1list'] = 'Utilizați lista de mai jos pentru a elimina temele Moodle Direct V1 care au migrat înainte de versiunea {$a}; acest lucru va rezolva orice inexactități din Catalogul de note Moodle. De asemenea, puteți identifica temele V1 care nu au migrat încă la V2.

Pentru informații suplimentare, accesați notele de lansare la: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Depuneți toate lucrările la depozitul instituției'; diff --git a/lang/ru/turnitintooltwo.php b/lang/ru/turnitintooltwo.php index 473084bc..734f9fa6 100644 --- a/lang/ru/turnitintooltwo.php +++ b/lang/ru/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Ваше представление было успешно загружено в Turnitin.'; $string['submitpaper'] = 'Представить работу'; $string['submitpapersto'] = 'Хранить студенческие работы'; -$string['submitpapersto_help'] = 'С помощью этого параметра преподаватели могут выбрать, будут ли сохраняться работы студентов в хранилище работ Turnitin. Преимущество отправки работ в хранилище состоит в том, что выполненные студентами задания можно сравнить с работами других студентов', текущего набора или предыдущих. Если выбрать "Не сохранять", работы ваших студентов' не будут отправляться в хранилище работ студентов Turnitin.'; $string['submitted'] = 'Отправлено'; $string['submittoturnitin'] = 'Представить в Turnitin'; $string['textsubmission'] = 'Текст отправленной работы'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Пользователь удалил представленную работу'; $string['turnitinrepositoryoptions'] = 'Задания в архиве работ'; $string['turnitinrepositoryoptions_desc'] = 'Этот параметр позволяет выбрать хранилище для заданий Turnitin.
(Хранилище учебного заведения доступно только для пользователей, включивших эту возможность в своем аккаунте.)'; -$string['turnitinrepositoryoptions_help'] = 'С помощью этого параметра можно выбрать варианты хранилища, доступные при настройке задания.
(Хранилище учебного заведения доступно только для пользователей, включивших эту возможность в своем аккаунте.)'; $string['repositoryoptions_0'] = 'Включить стандартные варианты хранилища для преподавателя'; $string['repositoryoptions_1'] = 'Включить расширенные варианты хранилища для преподавателя'; $string['repositoryoptions_2'] = 'Отправить все работы в стандартное хранилище'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Стандартн.'; $string['diagnosticoptions_2'] = 'Отладка'; $string['reportgenspeed_resubmission'] = 'Вы уже отправили работу по этому заданию, и Отчет о подобии для отправленной работы уже создан. При выборе повторной отправки работы отправленная ранее работа будет заменена на новую и будет создан новый Отчет о подобии. После {$a->num_resubmissions} повторной отправки работы им необходимо подождать {$a->num_hours} час(-а/-ов), прежде чем можно будет просмотреть новый Отчет о подобии.'; +$string['submitpapersto_help'] = 'Не сохранять:
Turnitin получил инструкции не хранить представленные документы ни в каких репозиториях. Мы будем выполнять только первоначальную проверку на подобие.

Стандартный репозиторий:
Turnitin будет хранить копию представленного документа только в типовом репозитории. При выборе этого параметра Turnitin получит указания об использовании сохраненных документов для выполнения проверки их подобия с любыми документами, которые будут представлены в будущем.

Хранилище учебного заведения (если применимо):
При выборе этого параметра Turnitin получит инструкцию добавлять представленные документы только в закрытый репозиторий вашего учебного заведения. Проверка представленных документов на подобие будет выполняться другими преподавателями вашего учебного заведения.'; +$string['turnitinrepositoryoptions_help'] = 'Включить стандартные варианты хранилища для преподавателя:
Преподаватели могут дать Turnitin указание добавлять документ либо в типовой репозиторий, либо в репозиторий учебного заведения, либо не добавлять его ни в один из репозиториев.

Включить расширенные варианты хранилища для преподавателя:
Этот параметр позволит преподавателям просматривать настройки задания, чтобы позволить студентам указывать Turnitin, где сохраняются их документы. Студенты могут выбирать, сохранять ли свои документы в типовом студенческом репозитории или в закрытом репозитории.

Отправить все работы в стандартное хранилище:
Все документы по умолчанию будут добавлены в типовой студенческий репозиторий.

Не отправлять работы в хранилище:
Документы будут использованы только для выполнения первоначальной проверки и отображены, чтобы преподаватель мог поставить оценку.

Отправить все работы в репозиторий учебного заведения:
Turnitin получил инструкции хранить все документы в репозитории документов учебного заведения. Проверки представленных документов на подобие будут выполняться только преподавателями вашего учебного заведения.'; +$string['migrationtoolv1list'] = 'Используйте приведенный ниже список, чтобы удалить задания Moodle Direct V1, перенесенные до установки версии {$a}; так вы устраните неточности в журнале Moodle. Вы также можете определить задания V1, еще не перенесенные в V2.

Дополнительные сведения можно прочитать в заметках к выпуску здесь:: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Отправить все работы в репозиторий учебного заведения'; diff --git a/lang/sv/turnitintooltwo.php b/lang/sv/turnitintooltwo.php index bcdc7273..ed5e0911 100644 --- a/lang/sv/turnitintooltwo.php +++ b/lang/sv/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Din inlämning har nu laddats upp till Turnitin.'; $string['submitpaper'] = 'Lämna in Uppsats'; $string['submitpapersto'] = 'Lagra Studentuppsatser'; -$string['submitpapersto_help'] = 'Denna inställning ger instruktörer möjligheten att välja om uppsatser skall lagras i ett Turnitin arkiv för studentuppsatser. Fördelen med att lämna in uppsatser till arkivet för studentuppsatser är att studentuppsatser som lämnas in till uppgiften kontrolleras mot andra studenters\' inlämningar inom både din nuvarande och tidigare klasser. Om du väljer "inget arkiv" kommer dina studenters\' uppsatser ej att lagras i Turnitins arkiv för studentuppsatser.'; $string['submitted'] = 'Inlämnad'; $string['submittoturnitin'] = 'Lämna in till Turnitin'; $string['textsubmission'] = 'Textinlämning'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Användaren tog bort inlämningsuppgiften'; $string['turnitinrepositoryoptions'] = 'Arkiv för uppgifter'; $string['turnitinrepositoryoptions_desc'] = 'Välj arkivalternativen för Turnitin-uppgifter.
(Institutionellt arkiv är endast tillgängligt för de som har det aktiverat på sitt konto)'; -$string['turnitinrepositoryoptions_help'] = 'Använd denna inställning för att ändra de arkivalternativ som finns tillgängliga på skärmen för uppgiftskonfigurering.
(Institutionellt arkiv är endast tillgängligt för den som har det aktiverat på sitt konto)'; $string['repositoryoptions_0'] = 'Aktivera instruktörens alternativ för standardarkiv'; $string['repositoryoptions_1'] = 'Aktivera utvidgade arkiveringsalternativ för lärare'; $string['repositoryoptions_2'] = 'Skicka alla uppsatser till standardarkivet'; @@ -564,3 +562,7 @@ $string['diagnosticoptions_1'] = 'Standardklass'; $string['diagnosticoptions_2'] = 'Felsökning'; $string['reportgenspeed_resubmission'] = 'Du har redan lämnat in en uppsats i den här uppgiften och en Likhetsrapport skapades för din inlämning. Om du väljer att lämna in din uppsats igen kommer din tidigare inlämning att ersättas och en ny rapport kommer att skapas. Efter {$a->num_resubmissions} återinlämningar behöver du vänta {$a->num_hours} timmar efter en återinlämning för att kunna se en ny Likhetsrapport.'; +$string['submitpapersto_help'] = 'Inget arkiv:
Enligt anvisning sparar Turnitin inte dokument i något arkiv. Uppsatser behandlas endast för den första likhetsgranskningen.

Standardarkiv:
Turnitin sparar en kopia av det inlämnade dokumentet endast i standardarkivet. Om alternativet väljs, använder Turnitin endast sparade dokument i framtida likhetsgranskningar av andra dokument.

Institutionellt arkiv (Om tillämpligt):
Om alternativet väljs, sparar Turnitin inlämnade dokument endast i institutionens privata arkiv. Likhetsgranskningar av inlämnade dokument görs endast av andra instruktörer vid institutionen.'; +$string['turnitinrepositoryoptions_help'] = 'Aktivera instruktörens alternativ för standardarkiv:
Instruktörer kan instruera Turnitin att antingen lägga till dokument i standardarkivet eller i institutionens privata arkiv eller inte lägga till dokument i något arkiv.

Aktivera utvidgade arkiveringsalternativ för lärare:
Med detta alternativ kan instruktörer visa en uppgiftsinställning som tillåter studenter att bestämma vart Turnitin sparar deras dokument. Studenter kan välja att spara sina dokument i standardarkivet eller i institutionens privata arkiv.

Skicka alla uppsatser till standardarkivet:
Alla dokument läggs till i standardarkivet som standard.

Skicka inte in några uppsatser till ett arkiv:
Dokument används endast för den första kontrollen med Turnitin och för visning för instruktören för betygsättning.

Skicka alla uppsatser till institutionens datalager:
Enligt anvisning sparar Turnitin alla uppsatser i institutionens arkiv. Likhetsgranskningar av inlämnade uppsatser görs endast av instruktörer vid institutionen.'; +$string['migrationtoolv1list'] = 'Använd nedanstående lista för att ta bort de Moodle Direct V1-uppgifter som har flyttats före version {$a}; detta löser eventuella fel i Moodle-betygsboken. Du kan också hitta V1-uppgifter som ännu inte har flyttats till V2.

Mer information finns i versionsinformationen på: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Skicka alla uppsatser till institutionens datalager'; diff --git a/lang/tr/turnitintooltwo.php b/lang/tr/turnitintooltwo.php index cd50d589..c3e72301 100644 --- a/lang/tr/turnitintooltwo.php +++ b/lang/tr/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Gönderiniz Turnitin' e başarıyla yüklendi.'; $string['submitpaper'] = 'Ödev Gönder'; $string['submitpapersto'] = 'Öğrenci Ödevlerini Depola'; -$string['submitpapersto_help'] = 'Bu ayar eğitmenin öğrenci ödevini Turnitin öğrenci ödev havuzunda saklanıp saklanmayacağını seçmesini sağlar. Ödevi öğrenci ödev havuzunda saklamak, ödevin mevcut ve önceki sınıflarınıza gönderilmiş ödevler ile karşılaştırılmasını sağlar. "Havuz Yok" seçilmişse, öğrencinizin ödevi Turnitin öğrenci ödev havuzunda saklanmaz.'; $string['submitted'] = 'Gönderildi'; $string['submittoturnitin'] = 'Turnitin' e Gönder'; $string['textsubmission'] = 'Metin Gönderisi'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Kullanıcı gönderiyi sildi'; $string['turnitinrepositoryoptions'] = 'Yazılı Ödev Havuzları'; $string['turnitinrepositoryoptions_desc'] = 'Turnitin ödevleri için havuz ayarlarını seçin.
(Kurumsal Havuz, yalnızca bu seçeneği hesaplarında etkinleştiren kullanıcılar tarafından kullanılabilir)'; -$string['turnitinrepositoryoptions_help'] = 'Ödev ayarları ekranındaki mevcut havuz seçeneklerini değiştirmek için bu ayarı kullanın.
(Kurumsal Havuz, yalnızca bu seçeneği hesaplarında etkinleştiren kullanıcılar tarafından kullanılabilir)'; $string['repositoryoptions_0'] = 'Standart eğitmen havuz seçeneklerini etkinleştir'; $string['repositoryoptions_1'] = 'Genişletilmiş eğitmen havuz seçeneklerini etkinleştir'; $string['repositoryoptions_2'] = 'Tüm yazılı ödevleri standart havuza gönder'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = 'Kapalı'; $string['diagnosticoptions_1'] = 'Standart'; $string['diagnosticoptions_2'] = 'Hata Ayıklama'; -$string['reportgenspeed_resubmission'] = 'Bu ödev için zaten bir yazılı ödev gönderdiniz ve gönderiniz için bir Benzerlik Raporu oluşturuldu. Yazılı ödevinizi yeniden göndermek isterseniz önceki gönderiniz değiştirilecek ve yeni bir rapor oluşturulacaktır. {$a->num_resubmissions} yeniden gönderimden sonra yeniden gönderimin ardından yeni bir Benzerlik Raporu görebilmek için {$a->num_hours} saat beklemeniz gerekecektir.'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = 'Bu ödev için zaten bir yazılı ödev gönderdiniz ve gönderiniz için bir Benzerlik Raporu oluşturuldu. Yazılı ödevinizi yeniden göndermek isterseniz önceki gönderiniz değiştirilecek ve yeni bir rapor oluşturulacaktır. {$a->num_resubmissions} yeniden gönderimden sonra yeniden gönderimin ardından yeni bir Benzerlik Raporu görebilmek için {$a->num_hours} saat beklemeniz gerekecektir.'; +$string['submitpapersto_help'] = 'Havuz Yok:
Turnitin\'e, gönderilen belgeleri herhangi bir havuzda depolamama talimatı verilir. Yazılı ödevi yalnızca ilk benzerlik kontrolünü gerçekleştirmek üzere işleyeceğiz.

Standart Havuz:
Turnitin, gönderilen belgenin bir kopyasını yalnızca Standart Havuzda depolayacaktır. Bu seçeneğin belirlenmesi Turnitin\'e, depolanan belgeleri yalnızca ileride gönderilecek herhangi bir belgeyle karşılaştırarak benzerlik kontrolleri gerçekleştirmek için kullanma talimatı verir.

Kurum Havuzu (Uygulanabilir Yer):
Bu seçeneğin belirlenmesi Turnitin\'e yalnızca gönderilen belgeleri kurumunuza özel bir havuza ekleme talimatı verir. Gönderilen belgeler üzerindeki benzerlik kontrolleri, kurumunuzdaki diğer eğitmenler tarafından gerçekleştirilecektir.'; +$string['turnitinrepositoryoptions_help'] = 'Standart eğitmen havuz seçeneklerini etkinleştir:
Eğitmenler Turnitin\'e, belgeleri standart havuza veya kurumun özel havuzuna ekleme ya da hiçbir havuza eklememe talimatı verebilirler.

Genişletilmiş eğitmen havuz seçeneklerini etkinleştir:
Bu seçenek, öğrencilerin Turnitin\'e belgelerinin nerede depolanacağı konusunda talimat verebilmelerini sağlamak için eğitmenlerin bir ödev ayarını görüntüleyebilmelerini sağlar. Öğrenciler belgelerini standart öğrenci havuzuna veya kurumunuzun özel havuzuna eklemeyi tercih edebilirler.

Tüm yazılı ödevleri standart havuza gönder:
Tüm belgeler varsayılan olarak standart öğrenci havuzuna eklenecektir.

Havuza hiçbir yazılı ödev göndermeyin:
Belgeler yalnızca Turnitin\'de ilk kontrolü gerçekleştirmek ve puanlama için eğitmene gösterilmek üzere kullanılacaktır.

Tüm yazılı ödevleri kurum havuzuna gönder:
Turnitin\'e, tüm yazılı ödevleri kurum yazılı ödev havuzunda depolama talimatı verilir. Gönderilen belgeler üzerindeki benzerlik kontrolleri, yalnızca kurumunuzdaki diğer eğitmenler tarafından gerçekleştirilecektir.'; +$string['migrationtoolv1list'] = '{$a} sürümünün öncesine taşınan Moodle Direct V1 ödevlerini kaldırmak için aşağıdaki listeyi kullanın; bu, Moodle not defterindeki tüm yanlışlıkları düzeltecektir. Ayrıca henüz V2\'ye taşınmamış V1 ödevlerini de tespit edebilirsiniz.

Daha fazla bilgi için şu adresteki sürüm notlarına göz atın:: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Tüm yazılı ödevleri kurum havuzuna gönder'; diff --git a/lang/vi/turnitintooltwo.php b/lang/vi/turnitintooltwo.php index ea47e90e..7e09a55d 100644 --- a/lang/vi/turnitintooltwo.php +++ b/lang/vi/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = 'Bài nộp của bạn đã được tải thành công lên Turnitin.'; $string['submitpaper'] = 'Nộp Bài'; $string['submitpapersto'] = 'Lưu trữ Bài của Học sinh'; -$string['submitpapersto_help'] = 'Cài đặt này cung cấp cho người hướng dẫn khả năng chọn có hay không cho phép bài nộp được lưu vào kho dữ liệu bài của Turnitin. Lợi ích của việc nộp bài vào kho dữ liệu bài học sinh là các bài học sinh đã nộp vào bài tập sẽ được đối chiếu với những bài nộp của các học sinh khác bên trong các lớp hiện tại và trước đây của bạn. Nếu bạn chọn "không có kho dữ liệu", bài nộp của học sinh sẽ không được lưu vào kho dữ liệu bài học sinh của Turnitin.'; $string['submitted'] = 'Đã nộp'; $string['submittoturnitin'] = 'Nộp cho Turnitin'; $string['textsubmission'] = 'Phần văn bản Bài nộp'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = 'Người dùng đã xóa bài nộp'; $string['turnitinrepositoryoptions'] = 'Các bài tập từ kho lưu trữ bài'; $string['turnitinrepositoryoptions_desc'] = 'Chọn các tùy chọn kho dữ liệu cho Bài tập Turnitin.
(Kho dữ liệu của Tổ chức chỉ khả dụng cho những ai có tài khoản được bật tùy chọn này)'; -$string['turnitinrepositoryoptions_help'] = 'Sử dụng cài đặt này để thay đổi các tùy chọn kho dữ liệu khả dụng trên màn hình thiết lập bài tập.
(Kho dữ liệu của Tổ chức chỉ khả dụng cho những ai có Kho dữ liệu của Tổ chức được cho phép trong tài khoản của họ)'; $string['repositoryoptions_0'] = 'Cho phép các tùy chọn kho dữ liệu chuẩn cho người hướng dẫn'; $string['repositoryoptions_1'] = 'Cho phép người hướng dẫn mở rộng các tùy chọn kho lưu trữ'; $string['repositoryoptions_2'] = 'Nộp tất cả các bài vào kho lưu trữ chuẩn'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = 'Tắt'; $string['diagnosticoptions_1'] = 'Chuẩn'; $string['diagnosticoptions_2'] = 'Gỡ lỗi'; -$string['reportgenspeed_resubmission'] = 'Bạn đã nộp bài tập này và một Báo cáo Tính Tương đồng đã được tạo cho bài bạn nộp. Nếu bạn chọn nộp lại bài, bài tập bạn đã nộp trước đây sẽ được thay thế và một báo cáo mới sẽ được tạo. Sau {$a->num_resubmissions} lần nộp lại bài tập, bạn sẽ cần phải đợi {$a->num_hours} giờ sau mỗi lần nộp lại bài để xem Báo cáo Tính Tương đồng mới.'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = 'Bạn đã nộp bài tập này và một Báo cáo Tính Tương đồng đã được tạo cho bài bạn nộp. Nếu bạn chọn nộp lại bài, bài tập bạn đã nộp trước đây sẽ được thay thế và một báo cáo mới sẽ được tạo. Sau {$a->num_resubmissions} lần nộp lại bài tập, bạn sẽ cần phải đợi {$a->num_hours} giờ sau mỗi lần nộp lại bài để xem Báo cáo Tính Tương đồng mới.'; +$string['submitpapersto_help'] = 'Không có Kho dữ liệu:
Turnitin được hướng dẫn không lưu trữ các tài liệu đã nộp vào bất kỳ kho dữ liệu nào. Chúng tôi sẽ chỉ xử lý bài nộp giấy để thực hiện hoạt động kiểm tra tính tương đồng ban đầu.

Kho dữ liệu Chuẩn:
Turnitin sẽ chỉ lưu trữ một bản sao của tài liệu đã nộp trong Kho dữ liệu tiêu chuẩn. Bằng việc chọn tùy chọn này, Turnitin được hướng dẫn chỉ sử dụng tài liệu đã lưu trữ để thực hiện các hoạt động kiểm tra tính tương đồng đối với mọi tài liệu được nộp trong tương lai.

Kho dữ liệu của Tổ chức (Nếu có):
Việc chọn tùy chọn này sẽ hướng dẫn Turnitin chỉ thêm tài liệu đã nộp vào kho dữ liệu riêng của trường bạn. Các hoạt động kiểm tra tính tương đồng với tài liệu đã nộp sẽ do những người hướng dẫn khác trong trường của bạn thực hiện.'; +$string['turnitinrepositoryoptions_help'] = 'Cho phép các tùy chọn kho dữ liệu chuẩn cho người hướng dẫn:
Người hướng dẫn có thể hướng dẫn Turnitin thêm tài liệu vào kho dữ liệu tiêu chuẩn, kho dữ liệu riêng của trường hoặc không thêm vào kho dữ liệu.

Cho phép người hướng dẫn mở rộng các tùy chọn kho lưu trữ:
Tùy chọn này sẽ cho phép người hướng dẫn xem mục cài đặt bài tập để giúp học sinh hướng dẫn Turnitin nơi sẽ lưu trữ tài liệu. Học sinh có thể chọn thêm tài liệu của họ vào kho dữ liệu tiêu chuẩn dành cho học sinh hoặc vào kho dữ liệu riêng của trường.

Nộp tất cả các bài vào kho lưu trữ chuẩn:
Theo mặc định, tất cả tài liệu sẽ được thêm vào kho dữ liệu tiêu chuẩn dành cho học sinh.

Không nộp bất kỳ bài nào vào kho lưu trữ:
Các tài liệu sẽ chỉ được Turnitin dùng để thực hiện hoạt động kiểm tra ban đầu và để hiển thị cho người hướng dẫn chấm điểm.

Gửi tất cả bài giấy đến kho lưu trữ của trường học:
Turnitin được hướng dẫn lưu trữ tất cả bài nộp giấy trong kho dữ liệu bài nộp giấy của trường học. Các hoạt động kiểm tra tính tương đồng đối với tài liệu đã nộp sẽ chỉ do những người hướng dẫn khác trong trường học của bạn thực hiện.'; +$string['migrationtoolv1list'] = 'Sử dụng danh sách bên dưới để xóa bài tập ở Moodle Direct V1 đã được di chuyển trước đó sang phiên bản {$a}; điều này sẽ khắc phục mọi sự không chính xác trong sổ điểm Moodle. Bạn cũng có thể xác định bài tập ở V1 chưa được di chuyển sang V2.

Để biết thêm thông tin, vui lòng truy cập vào ghi chú phát hành tại: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = 'Gửi tất cả bài giấy đến kho lưu trữ của trường học'; diff --git a/lang/zh_cn/turnitintooltwo.php b/lang/zh_cn/turnitintooltwo.php index 76e75eaf..4f41b216 100644 --- a/lang/zh_cn/turnitintooltwo.php +++ b/lang/zh_cn/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = '您的提交内容已成功上传至 Turnitin。'; $string['submitpaper'] = '提交论文'; $string['submitpapersto'] = '存储学生论文'; -$string['submitpapersto_help'] = '此设置使导师能够选择是否将论文存储在 Turnitin 学生论文存储库内。将论文提交至学生论文存储库的好处在于,提交至作业的学生论文将跟您现有或过去班级内的其他学生的提交内容做对比。如果您选择“无存储库”,您的学生的论文将不会被存储在 Turnitin 学生论文存储库内。'; $string['submitted'] = '已提交'; $string['submittoturnitin'] = '提交至 Turnitin'; $string['textsubmission'] = '文字提交'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = '用户已删除提交内容'; $string['turnitinrepositoryoptions'] = '论文存储库作业'; $string['turnitinrepositoryoptions_desc'] = '为 Turnitin 作业选择存储库选项。
(机构存储库仅用于为其帐户启用了此选项的用户)'; -$string['turnitinrepositoryoptions_help'] = '用此设置以更改作业设置屏幕内可用的存储库选项。
(机构存储库仅用于为其帐户启用了此选项的用户)'; $string['repositoryoptions_0'] = '启用导师标准存储库选项'; $string['repositoryoptions_1'] = '启用导师扩展存储库选项'; $string['repositoryoptions_2'] = '将所有论文提交至标准存储库'; @@ -563,4 +561,7 @@ $string['diagnosticoptions_0'] = '关闭'; $string['diagnosticoptions_1'] = '标准'; $string['diagnosticoptions_2'] = '调试'; -$string['reportgenspeed_resubmission'] = '您已针对该作业提交论文,所提交论文的相似度报告已生成。如果您选择重新提交论文,那么之前提交的内容将被替换,并将生成新的报告。在 {$a->num_resubmissions} 次重新提交后,您需要在提交后等待 {$a->num_hours} 小时才能查看新报告。'; \ No newline at end of file +$string['submitpapersto_help'] = ':
Turnitin 被设定为不将上传文件储存至任何知识库。文件仅用于初始查重。

:
Turnitin 将只在标准知识库中储存上传文件的副本。选择此选项,Turnitin 对日后上传文件的查重工作将只使用已储存文件。

:
选择此选项,将 Turnitin 设定为只添加文件至您机构的私有知识库。上传文件的查重工作将只由您机构的其他教员完成。'; +$string['turnitinrepositoryoptions_help'] = '启用导师标准存储库选项:
教员可将 Turnitin 设定为添加文件至标准知识库、至机构的私有知识库、或不添加至知识库。

启用导师扩展存储库选项:
这一选项将允许教员查看作业设置,该作业设置允许学生通过 Turnitin 设定文件的储存位置。学生可以选择添加文件至标准学生知识库或添加至您机构的私有知识库。

将所有论文提交至标准存储库:
所有文件都默认添加至标准学生知识库。

请勿将任何论文提交至存储库:
文件通过 Turnitin 将只用于供教员查看评分和初始查重。

将所有文件上传至机构资源库:
Turnitin 被设定为将所有论文储存至机构论文知识库。上传文件的查重工作将由您机构内的其他教员完成。'; +$string['migrationtoolv1list'] = '通过以下列表将版本 {$a} 之前迁移的 Moodle Direct V1 作业移除;这样可以解决 Moodle 成绩册中存在的误差。您也能识别尚未迁移到 V2 的 V1 作业。

若要了解更多信息,请参见版本说明:: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = '将所有文件上传至机构资源库'; diff --git a/lang/zh_tw/turnitintooltwo.php b/lang/zh_tw/turnitintooltwo.php index eee263e6..26c2d8fb 100644 --- a/lang/zh_tw/turnitintooltwo.php +++ b/lang/zh_tw/turnitintooltwo.php @@ -141,7 +141,6 @@ $string['submissionuploadsuccess'] = '已將您的提交物件成功上傳至 Turnitin。'; $string['submitpaper'] = '提交報告'; $string['submitpapersto'] = '儲存學生報告'; -$string['submitpapersto_help'] = '此設定讓指導教師能夠選擇是否要將報告儲存在 Turnitin 學生報告存放庫內。將報告提交至學生報告存放庫的優點在於,提交至作業的學生報告將會與您現有或過去班級內其他學生的提交物件做比較。若您選擇「沒有存放庫」,您的學生報告將不會儲存在 Turnitin 學生報告存放庫內。'; $string['submitted'] = '已提交'; $string['submittoturnitin'] = '提交至 Turnitin'; $string['textsubmission'] = '提交文字'; @@ -469,7 +468,6 @@ $string['deletesubmissiondesc'] = '使用者已刪除提交物件'; $string['turnitinrepositoryoptions'] = '報告存放庫作業'; $string['turnitinrepositoryoptions_desc'] = '選擇 Turnitin 作業的存放庫選項.
(唯有帳戶啟用此功能的使用者才可使用機關存放庫)'; -$string['turnitinrepositoryoptions_help'] = '使用此設定,變更作業設定畫面上可用的機關存放庫選項。
(唯有帳戶啟用此功能的使用者才可使用機關存放庫)'; $string['repositoryoptions_0'] = '啟用指導教師標準存放庫選項'; $string['repositoryoptions_1'] = '啟用指導教師的擴充存放庫選項'; $string['repositoryoptions_2'] = '將所有報告提交至標準存放庫'; @@ -563,4 +561,8 @@ $string['diagnosticoptions_0'] = '關閉'; $string['diagnosticoptions_1'] = '標準'; $string['diagnosticoptions_2'] = '偵錯'; -$string['reportgenspeed_resubmission'] = '您已經繳交文稿至此作業,我們已針對您繳交的文稿作成相似度報告。如果選擇重新繳交文稿,新文稿會覆蓋較早的文稿,並作成新報告。{$a->num_resubmissions} 重新繳交後,您必須等候 {$a->num_hours} 小時才能看到新的相似度報告。'; \ No newline at end of file +$string['reportgenspeed_resubmission'] = '您已經繳交文稿至此作業,我們已針對您繳交的文稿作成相似度報告。如果選擇重新繳交文稿,新文稿會覆蓋較早的文稿,並作成新報告。{$a->num_resubmissions} 重新繳交後,您必須等候 {$a->num_hours} 小時才能看到新的相似度報告。'; +$string['submitpapersto_help'] = '無儲存在資料庫:
Turnitin 被設定為不將上傳文件儲存至任何知識庫。文件僅用於初始查重。

存在標準資料庫:
Turnitin 將只在標準知識庫中儲存上傳文件的副本。選擇此選項,Turnitin 對日後上傳文件的查重工作將只使用已儲存文件。

機構存放庫 (適用時):
選擇此選項,將 Turnitin 設定為只添加文件至您機構的私有知識庫。上傳文件的查重工作將只由您機構的其他教員完成。'; +$string['turnitinrepositoryoptions_help'] = '啟用指導教師標準存放庫選項:
教員可將 Turnitin 設置為添加文件至標準知識庫、機構私有知識庫或不添加至知識庫。

啟用指導教師的擴充存放庫選項:
這一選項將允許教員查看作業設置,該作業設置允許學生通過 Turnitin 設定文件的儲存位置。學生可以選擇添加文件至標準學生知識庫或添加至您機構的私有知識庫。

將所有報告提交至標準存放庫:
所有文件都默認添加至標準學生知識庫。

不要將任何報告提交至存放庫:
文件通過 Turnitin 將只用于供教員查看評分和初始查重。

將所有文件上傳至機構資源庫:
Turnitin 被設定為將所有論文儲存至機構論文知識庫。上傳文件的查重工作將由您機構內的其他教員完成。'; +$string['migrationtoolv1list'] = '使用下面的清單,來移除移轉至版本 {$a} 以前的 Moodle Direct V1 作業;這將解決任何 Moodle 成績簿中的不準確之處。您也可以藉此辨明尚未移轉至 V2 的 V1 作業。

如需更多資訊,請造訪版本資訊,網址:: guides.turnitin.com/releasenotes'; +$string['repositoryoptions_4'] = '將所有文件上傳至機構資源庫'; diff --git a/lib.php b/lib.php index 48762848..5a761e82 100755 --- a/lib.php +++ b/lib.php @@ -40,6 +40,18 @@ define('REPORT_GEN_SPEED_NUM_RESUBMISSIONS', 3); define('REPORT_GEN_SPEED_NUM_HOURS', 24); +// Admin Repository constants. +define('ADMIN_REPOSITORY_OPTION_STANDARD', 0); +define('ADMIN_REPOSITORY_OPTION_EXPANDED', 1); +define('ADMIN_REPOSITORY_OPTION_FORCE_STANDARD', 2); +define('ADMIN_REPOSITORY_OPTION_FORCE_NO', 3); +define('ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL', 4); + +// Submit Papers to Repository constants. +define('SUBMIT_TO_NO_REPOSITORY', 0); +define('SUBMIT_TO_STANDARD_REPOSITORY', 1); +define('SUBMIT_TO_INSTITUTIONAL_REPOSITORY', 2); + // For use in course migration. $tiiintegrationids = array(0 => get_string('nointegration', 'turnitintooltwo'), 1 => 'Blackboard Basic', 2 => 'WebCT', 5 => 'Angel', 6 => 'Moodle Basic', 7 => 'eCollege', 8 => 'Desire2Learn', @@ -691,12 +703,13 @@ function turnitintooltwo_cron() { * Migrate the gradebook for submissions which were not migrated during the migration tool. */ function turnitintooltwo_cron_migrate_gradebook() { - global $DB, $CFG; + global $DB; // Get a list of assignments with outstanding gradebook migrations. require_once(__DIR__.'/classes/v1migration/v1migration.php'); $sql = "migrate_gradebook = 1 GROUP BY turnitintooltwoid"; $assignments = $DB->get_records_select("turnitintooltwo_submissions", $sql, NULL, 'turnitintooltwoid', "turnitintooltwoid, count(turnitintooltwoid) AS numsubmissions"); + $numsubmissions = 0; foreach ($assignments as $assignment) { // We will break out unless the number of submissions migrated + to be migrated is MIGRATION_SUBMISSIONS_CUTOFF or less. @@ -705,28 +718,27 @@ function turnitintooltwo_cron_migrate_gradebook() { $numsubmissions += $assignment->numsubmissions; - $gradeupdates = v1migration::migrate_gradebook($assignment->turnitintooltwoid, "cron"); + // Get the course ID. + $courseid = $DB->get_field('turnitintooltwo', 'course', array('id' => $assignment->turnitintooltwoid)); - // If we have migrated, update the titles. - if ($gradeupdates == "migrated") { + // Get a TII assignment ID on this assignment so we can link back to V1. + $sql = "turnitintooltwoid = " . $assignment->turnitintooltwoid . " LIMIT 1"; + $tiiid = $DB->get_field_select('turnitintooltwo_parts', 'tiiassignid', $sql); - // Get the course ID. - $courseid = $DB->get_field('turnitintooltwo', 'course', array('id' => $assignment->turnitintooltwoid)); + // Get a V1 part belonging to this assignment. + $sql = "tiiassignid = " . $tiiid . " LIMIT 1"; + $turnitintoolid = $DB->get_field_select('turnitintool_parts', 'turnitintoolid', $sql); - // Get a TII assignment ID on this assignment so we can link back to V1. - $sql = "turnitintooltwoid = " . $assignment->turnitintooltwoid . " LIMIT 1"; - $tiiid = $DB->get_field_select('turnitintooltwo_parts', 'tiiassignid', $sql); - - // Get a V1 part belonging to this assignment. - $sql = "tiiassignid = " . $tiiid . " LIMIT 1"; - $turnitintoolid = $DB->get_field_select('turnitintool_parts', 'turnitintoolid', $sql); + $gradeupdates = v1migration::migrate_gradebook($assignment->turnitintooltwoid, $turnitintoolid, $courseid, "cron"); + // If we have migrated, update the titles. + if ($gradeupdates == "migrated") { // Get the V1 assignment. $v1assignment = $DB->get_record('turnitintool', array("id" => $turnitintoolid)); - // Set assignment title back to old title for assignments where all grades have been migrated. + // Perform post-migration tasks. $v1migration = new v1migration($courseid, $v1assignment); - $v1migration->update_titles_post_migration($assignment->turnitintooltwoid); + $v1migration->post_migration($assignment->turnitintooltwoid); } } else { break; @@ -1790,4 +1802,27 @@ function turnitintooltwo_get_report_gen_speed_params() { $genparams->num_hours = REPORT_GEN_SPEED_NUM_HOURS; return $genparams; -} \ No newline at end of file +} + +/** + * Override the repository option if necessary depending on the configuration setting. + * @param $submitpapersto int - The repository to submit to. + * @return $submitpapersto int - The repository to submit to. + */ +function turnitintooltwo_override_repository($submitpapersto) { + $config = turnitintooltwo_admin_config(); + + switch ($config->repositoryoption) { + case ADMIN_REPOSITORY_OPTION_FORCE_STANDARD; // Force Standard Repository. + $submitpapersto = SUBMIT_TO_STANDARD_REPOSITORY; + break; + case ADMIN_REPOSITORY_OPTION_FORCE_NO; // Force No Repository. + $submitpapersto = SUBMIT_TO_NO_REPOSITORY; + break; + case ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL; // Force Individual Repository. + $submitpapersto = SUBMIT_TO_INSTITUTIONAL_REPOSITORY; + break; + } + + return $submitpapersto; +} diff --git a/mod_form.php b/mod_form.php index 5c629bcf..6f2a4adf 100755 --- a/mod_form.php +++ b/mod_form.php @@ -35,7 +35,6 @@ class mod_turnitintooltwo_mod_form extends moodleform_mod { public function definition() { global $DB, $USER, $COURSE; - $config = turnitintooltwo_admin_config(); // Module string is useful for product support. $modulestring = ''; @@ -187,7 +180,7 @@ public function show_form($instructorrubrics, $sharedrubrics, $modulestring = '' if (isset($_SESSION["notice"])) { $notice = $_SESSION["notice"]; if (empty($_SESSION["notice"]["type"])) { - $notice["type"] = "general"; + $notice["type"] = "info"; } unset($_SESSION["notice"]); } else { @@ -329,9 +322,7 @@ public function show_form($instructorrubrics, $sharedrubrics, $modulestring = '' $dateoptions = array('startyear' => date( 'Y', strtotime( '-6 years' )), 'stopyear' => date( 'Y', strtotime( '+6 years' )), 'timezone' => 99, 'applydst' => true, 'step' => 1, 'optional' => false); - if (!empty($config->usegrademark)) { - $this->standard_grading_coursemodule_elements(); - } + $this->standard_grading_coursemodule_elements(); if (isset($this->_cm->id)) { $turnitintooltwoassignment = new turnitintooltwo_assignment($this->_cm->instance); @@ -421,28 +412,35 @@ public function show_form($instructorrubrics, $sharedrubrics, $modulestring = '' $mform->addHelpButton('reportgenspeed', 'reportgenspeed', 'turnitintooltwo'); $mform->setDefault('reportgenspeed', $config->default_reportgenspeed); - $suboptions = array(0 => get_string('norepository', 'turnitintooltwo'), - 1 => get_string('standardrepository', 'turnitintooltwo')); + $suboptions = array( + SUBMIT_TO_NO_REPOSITORY => get_string('norepository', 'turnitintooltwo'), + SUBMIT_TO_STANDARD_REPOSITORY => get_string('standardrepository', 'turnitintooltwo') + ); + switch ($config->repositoryoption) { - case 0; // Standard options. + case ADMIN_REPOSITORY_OPTION_STANDARD; // 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'); + case ADMIN_REPOSITORY_OPTION_EXPANDED; // Standard options + Allow Instituional Repository. + $suboptions[SUBMIT_TO_INSTITUTIONAL_REPOSITORY] = 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); + case ADMIN_REPOSITORY_OPTION_FORCE_STANDARD; // Force Standard Repository. + $mform->addElement('hidden', 'submitpapersto', SUBMIT_TO_STANDARD_REPOSITORY); + $mform->setType('submitpapersto', PARAM_RAW); + break; + case ADMIN_REPOSITORY_OPTION_FORCE_NO; // Force No Repository. + $mform->addElement('hidden', 'submitpapersto', SUBMIT_TO_NO_REPOSITORY); $mform->setType('submitpapersto', PARAM_RAW); break; - case 3; // Force No Repository. - $mform->addElement('hidden', 'submitpapersto', 0); + case ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL; // Force Individual Repository. + $mform->addElement('hidden', 'submitpapersto', SUBMIT_TO_INSTITUTIONAL_REPOSITORY); $mform->setType('submitpapersto', PARAM_RAW); break; } @@ -462,7 +460,8 @@ public function show_form($instructorrubrics, $sharedrubrics, $modulestring = '' $mform->addHelpButton('journalcheck', 'journalcheck', 'turnitintooltwo'); $mform->setDefault('journalcheck', $config->default_journalcheck); - if ($config->repositoryoption == "1") { + if ($config->repositoryoption == ADMIN_REPOSITORY_OPTION_EXPANDED || + $config->repositoryoption == ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL) { $mform->addElement('select', 'institution_check', get_string('institutionalcheck', 'turnitintooltwo'), $ynoptions); $mform->setDefault('institution_check', $config->default_institutioncheck); } @@ -581,7 +580,7 @@ public function show_form($instructorrubrics, $sharedrubrics, $modulestring = '' $mform->setType('rubric', PARAM_RAW); } - if (!empty($config->usegrademark) && !empty($config->useerater)) { + if (!empty($config->useerater)) { $handbookoptions = array( 1 => get_string('erater_handbook_advanced', 'turnitintooltwo'), 2 => get_string('erater_handbook_highschool', 'turnitintooltwo'), diff --git a/sass/_variables.scss b/sass/_variables.scss index 64a15304..4fbf1e65 100644 --- a/sass/_variables.scss +++ b/sass/_variables.scss @@ -16,10 +16,6 @@ $border-color: $light-grey; $odd-color: $light-grey; $even-color: $white; -// Warning colours -$warning: $red; -$warning-border: darken($red, 20%); - // Table padding $table-padding: 15px; $table-head-padding: $table-padding - 5px; \ No newline at end of file diff --git a/sass/partials/_warnings.scss b/sass/partials/_warnings.scss deleted file mode 100644 index 00316397..00000000 --- a/sass/partials/_warnings.scss +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Warning styles - */ - -.tii_library_not_present_warning { - border: 1px solid $warning-border; - padding: 8px; - background: $warning; - width: 99%; - text-align:center; - display:block; - margin-bottom:6px; - color: white; -} - -.mod_turnitintooltwo { - - noscript.warning, - .library_not_present_warning, - .general_warning, - #error, - #full-error { - border: 1px solid $warning-border; - padding: 8px; - background: $warning; - width: 99%; - text-align:center; - display:block; - margin-bottom:6px; - color: white; - } - - #error { - margin-left:24px; - margin-right:24px; - width:96%; - } - - .submission_failure_msg, - .box_receipt { - padding: 16px; - } - - .submission_failure_msg .general_warning { - margin-top: 16px; - width: auto; - } - - #enrolling_error { - margin-top: 8px; - } - - .manual_submission_failure_msg { - margin-bottom: 12px; - } -} \ No newline at end of file diff --git a/sass/styles.scss b/sass/styles.scss index dea7cb2f..9dabb960 100644 --- a/sass/styles.scss +++ b/sass/styles.scss @@ -7,7 +7,6 @@ @import "partials/table"; @import "partials/part_details"; @import "partials/modal"; -@import "partials/warnings"; @import "partials/eula"; @import "partials/digital_receipt"; @import "partials/inbox"; diff --git a/settings.php b/settings.php index adef5948..c449604a 100755 --- a/settings.php +++ b/settings.php @@ -216,14 +216,16 @@ 0, $ynoptions)); $repositoryoptions = array( - 0 => get_string('repositoryoptions_0', 'turnitintooltwo'), - 1 => get_string('repositoryoptions_1', 'turnitintooltwo'), - 2 => get_string('repositoryoptions_2', 'turnitintooltwo'), - 3 => get_string('repositoryoptions_3', 'turnitintooltwo') - ); + ADMIN_REPOSITORY_OPTION_STANDARD => get_string('repositoryoptions_0', 'turnitintooltwo'), + ADMIN_REPOSITORY_OPTION_EXPANDED => get_string('repositoryoptions_1', 'turnitintooltwo'), + ADMIN_REPOSITORY_OPTION_FORCE_STANDARD => get_string('repositoryoptions_2', 'turnitintooltwo'), + ADMIN_REPOSITORY_OPTION_FORCE_NO => get_string('repositoryoptions_3', 'turnitintooltwo'), + ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL => get_string('repositoryoptions_4', 'turnitintooltwo') + ); $settings->add(new admin_setting_configselect('turnitintooltwo/repositoryoption', - get_string('turnitinrepositoryoptions', 'turnitintooltwo'), + get_string('turnitinrepositoryoptions', 'turnitintooltwo'). + $OUTPUT->help_icon('turnitinrepositoryoptions', 'turnitintooltwo'), get_string('turnitinrepositoryoptions_desc', 'turnitintooltwo'), 0, $repositoryoptions)); @@ -383,14 +385,16 @@ switch ($config->repositoryoption) { case 0; // Standard options. $settings->add(new admin_setting_configselect('turnitintooltwo/default_submitpapersto', - get_string('submitpapersto', 'turnitintooltwo'), + get_string('submitpapersto', 'turnitintooltwo'). + $OUTPUT->help_icon('submitpapersto', 'turnitintooltwo'), '', 1, $suboptions )); break; case 1; // Standard options + Allow Instituional Repository. $suboptions[2] = get_string('institutionalrepository', 'turnitintooltwo'); $settings->add(new admin_setting_configselect('turnitintooltwo/default_submitpapersto', - get_string('submitpapersto', 'turnitintooltwo'), + get_string('submitpapersto', 'turnitintooltwo'). + $OUTPUT->help_icon('submitpapersto', 'turnitintooltwo'), '', 1, $suboptions )); break; } diff --git a/settings_extras.php b/settings_extras.php index ea4921f3..8b343740 100644 --- a/settings_extras.php +++ b/settings_extras.php @@ -481,8 +481,7 @@ $html .= html_writer::tag('hr', ''); $html .= html_writer::tag('h2', get_string('migration_status', 'turnitintooltwo'), array('class' => 'migrationheader')); - // Display our progress bar. - $html .= v1migration::output_progress_bar(); + $html .= html_writer::tag('p', get_string('migrationtoolv1list', 'turnitintooltwo', '2018031201')); $jsrequired = true; @@ -491,8 +490,10 @@ // Delete assignments if the form has been submitted. if (isset($assignmentids) && count($assignmentids) > 0) { - v1migration::turnitintooltwo_delete_assignments($assignmentids); - + foreach ($assignmentids as $assignmentid) { + v1migration::delete_migrated_assignment($assignmentid); + } + $urlparams = array('cmd' => 'v1migration', 'msg' => 'delete', 'type' => 'success'); redirect(new moodle_url('/mod/turnitintooltwo/settings_extras.php', $urlparams)); exit; @@ -501,8 +502,8 @@ // Show successful delete message if applicable. if ($msg == 'delete') { $close = html_writer::tag('button', '×', array('class' => 'close', 'data-dismiss' => 'alert')); - $alert = html_writer::tag('div', $close.get_string("v1assignmentsdeleted", 'turnitintooltwo'), - array('class' => 'alert alert-success', 'role' => 'alert')); + $alert = html_writer::tag('div', $close.get_string("v1assignmentsdeleted", 'turnitintooltwo'), + array('class' => 'alert alert-success', 'role' => 'alert')); } $table = new html_table(); @@ -522,7 +523,7 @@ $cells[0]->attributes['width'] = "100px"; $cells['assignmentid']->attributes['width'] = "150px"; $cells['migrationstatus']->attributes['width'] = "100px"; - + $table->head = $cells; $elements2[] = array('html', html_writer::table($table)); diff --git a/styles.css b/styles.css index be8ea2ec..9a3c80b2 100644 --- a/styles.css +++ b/styles.css @@ -1,2 +1,2 @@ -.listbar,.listbar .messages_inbox .smallicon{vertical-align:middle}.dropdown-menu,.mod_turnitintooltwo .nowrap{white-space:nowrap}.clearfix:after{content:".";visibility:hidden;display:block;height:0;clear:both}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.listbar,.listbar input,.listbar select{border:1px solid #EFEFEF;background:#fff}h3.main{line-height:40px}.mod_turnitintooltwo .fitem_fbutton{padding-top:12px}.listbar,.mod_turnitintooltwo #assignmentBrowserTable_wrapper{padding:10px}.mod_turnitintooltwo span.dimmed{color:#999}.mod_turnitintooltwo .italic{font-style:italic}.mod_turnitintooltwo .underline{text-decoration:underline}#courseBrowserTable a,#ppErrors a,#tii_close_bar a,.listbar .messages_inbox,.submissionsDataTable a{text-decoration:none}.mod_turnitintooltwo #or_container,.mod_turnitintooltwo .bold{font-weight:700}.mod_turnitintooltwo span.link{color:#00F}.listbar-container{display:table;width:100%}.listbar{position:relative;display:table-cell}.listbar input,.listbar label,.listbar select{margin:0}.listbar input,.listbar select{height:30px;padding:0 5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.listbar .nonsubmitters_link,.listbar .refresh_link,.listbar .refreshing_link{float:right;margin-left:30px;padding:5px 0;width:195px}.listbar .nonsubmitters_link{text-decoration:none;display:none}.listbar .messages_inbox{float:right;margin-left:30px;padding:5px 0}.listbar .messages_loading_span{float:none!important;margin:0!important}.listbar .zip_downloads{float:left;position:relative;top:4px;height:22px}.listbar .zip_downloads img{position:relative;top:4px;left:-2px}.listbar .zip_downloads a.gmpdfzip_box,.listbar .zip_downloads div.origchecked_zip_open{padding:3px 16px;display:block}.listbar .zip_downloads a.gmpdfzip_box:hover{background:#00699e;color:#fff}.listbar .zip_downloads .zip_open{display:inline}.listbar .dataTables_filter{float:right!important;text-align:left!important}.listbar .dataTables_length{float:left!important}#courseBrowserTable,#ppErrors,.submissionsDataTable{font-size:13px;border:1px solid #EFEFEF;width:100%!important;margin-top:6px!important}#courseBrowserTable .ccheckbox,#ppErrors .ccheckbox,.submissionsDataTable .ccheckbox{text-align:center;padding:8px 10px 2px!important}#courseBrowserTable .odd,#ppErrors .odd,.submissionsDataTable .odd{background:#EFEFEF!important}#courseBrowserTable .odd .sorting_1,#ppErrors .odd .sorting_1,.submissionsDataTable .odd .sorting_1{background:#e7e7e7!important}#courseBrowserTable .even,#ppErrors .even,.submissionsDataTable .even{background:#fff!important}#courseBrowserTable .even .sorting_1,#ppErrors .even .sorting_1,.submissionsDataTable .even .sorting_1{background:#fafafa!important}#courseBrowserTable thead th,#ppErrors thead th,.submissionsDataTable thead th{border-bottom:0!important}#courseBrowserTable th,#ppErrors th,.submissionsDataTable th{padding:10px 20px!important}#courseBrowserTable td,#ppErrors td,.submissionsDataTable td{padding:15px 10px!important;font-size:13px;vertical-align:top}#courseBrowserTable .sorting_disabled,#ppErrors .sorting_disabled,.submissionsDataTable .sorting_disabled{cursor:default}#courseBrowserTable .left,#ppErrors .left,.submissionsDataTable .left{text-align:left}#courseBrowserTable .right,#ppErrors .right,.submissionsDataTable .right{text-align:right}#tii_close_bar a,.partDetails td.data,.partDetails td.export_data,.partDetails td.rubric_qm{text-align:center}#courseBrowserTable .grademark_grade,#courseBrowserTable .grademark_open,#courseBrowserTable .origreport_score,#ppErrors .grademark_grade,#ppErrors .grademark_open,#ppErrors .origreport_score,.submissionsDataTable .grademark_grade,.submissionsDataTable .grademark_open,.submissionsDataTable .origreport_score{float:right}#courseBrowserTable .grademark_grade,#courseBrowserTable .origreport_score,#ppErrors .grademark_grade,#ppErrors .origreport_score,.submissionsDataTable .grademark_grade,.submissionsDataTable .origreport_score{padding-right:8px}#courseBrowserTable td.narrow,#courseBrowserTable th.narrow,#ppErrors td.narrow,#ppErrors th.narrow,.submissionsDataTable td.narrow,.submissionsDataTable th.narrow{width:60px}#courseBrowserTable .delete_paper,#courseBrowserTable .submission_title,#courseBrowserTable .submit_nothing,#ppErrors .delete_paper,#ppErrors .submission_title,#ppErrors .submit_nothing,.submissionsDataTable .delete_paper,.submissionsDataTable .submission_title,.submissionsDataTable .submit_nothing{cursor:pointer}#courseBrowserTable .score_colour,#ppErrors .score_colour,.submissionsDataTable .score_colour{width:36px;display:inline-block;float:right}#courseBrowserTable .late_submission,#ppErrors .late_submission,.submissionsDataTable .late_submission{color:#d31900}#courseBrowserTable #tii_digital_receipt_icon,#ppErrors #tii_digital_receipt_icon,.submissionsDataTable #tii_digital_receipt_icon{margin-top:-3px;margin-right:5px}.dataTables_paginate{margin-top:6px;font-size:12px;float:right}.dataTables_paginate a{display:inline-block;border:1px solid #EFEFEF;padding:2px 5px;background-position:left -2px}.dataTables_paginate .current{background:#EFEFEF}.dataTables_paginate .previous,.dataTables_paginate span a{border-right:0}.dataTables_info{float:left;clear:none;margin-top:8px;text-transform:uppercase;font-size:11px}.mod_turnitintooltwo .score_colour_{background:#999}.mod_turnitintooltwo .score_colour_0{background:#3552B7}.mod_turnitintooltwo .score_colour_10{background:#617B8D}.mod_turnitintooltwo .score_colour_20{background:#A1B556}.mod_turnitintooltwo .score_colour_30{background:#DAE235}.mod_turnitintooltwo .score_colour_40{background:#EDAC28}.mod_turnitintooltwo .score_colour_50{background:#EDD42F}.mod_turnitintooltwo .score_colour_60{background:#ECAD28}.mod_turnitintooltwo .score_colour_70{background:#E15A21}.mod_turnitintooltwo .score_colour_80{background:#E05A21}.mod_turnitintooltwo .score_colour_90{background:#DC4321}.mod_turnitintooltwo .score_colour_100{background:#DB4221}.mod_turnitintooltwo .enrol_link{padding:6px 18px 0 0}.partDetails{font-size:13px;margin-bottom:0;width:100%;border:1px solid #EFEFEF}.partDetails tr{border-right:1px solid #EFEFEF}.partDetails th{padding:6px 12px;border-bottom:1px solid #EFEFEF}.partDetails td{border:1px solid #EFEFEF;border-top:0;padding:12px 12px 4px}.partDetails td.export_data{padding-top:12px}.partDetails td.introduction_cell,.partDetails td.peermark_assignments_cell{padding:0;border:0}.partDetails td.peermarks{border:0}.partDetails .editable-click{border:none;position:relative;padding-right:24px}.partDetails .editable-click:before{position:absolute;font-family:FontAwesome;top:0;right:0;font-size:1.33333em!important;color:#A8A8A8!important;line-height:.75em;vertical-align:-15%;content:"\f040";display:inline-block;font-style:normal;font-weight:400;font-size-adjust:none;font-stretch:normal;font-feature-settings:normal;font-language-override:normal;font-kerning:auto;font-synthesis:weight style;font-variant:normal;text-rendering:auto;-moz-osx-font-smoothing:grayscale}.partDetails .editable-click:hover{border-bottom:0!important}.partDetails .introduction,.partDetails .peermark_instructions{padding:6px 10px;border-bottom:1px solid #EFEFEF;display:none}.partDetails .introduction h2{margin:8px 0}.partDetails .introduction p{margin:6px 0}.partDetails .row_export_orig,.partDetails .row_export_pdf,.partDetails .row_export_xls,.partDetails .row_quickmark_manager,.partDetails .row_rubric_manager,.partDetails .zip_open{display:inline}.partDetails .toggle_peermark_instructions img{display:block}.partDetails .toggle_peermark_instructions,.partDetails .toggle_peermarks,.partDetails .toggle_summary{cursor:pointer;float:left;position:relative;top:-3px;margin-right:8px}.partDetails .peermark_header{margin-bottom:8px;float:left}#turnitin_sync_all_grades{float:right;font-size:16px}.turnitin_sync_grades,.turnitin_syncing_grades{cursor:pointer;margin-bottom:20px}.turnitin_syncing_grades{display:none}.peermarkDetails{width:100%;border-top:1px solid #EFEFEF}.peermarkDetails td{padding:8px 12px;border-bottom-width:0}.peermarkDetails td.peermark_instructions_cell{border:0;padding:0}.quickmark_manager_launch{padding:2px 0 2px 30px;height:20px;color:#0070A8!important}.rubric_manager_launch,.rubric_view_launch{padding:4px 0;line-height:22px;color:#0070A8!important}.rubric_right_margin{margin-right:7px}.tii_peermark_manager_launch,.tii_peermark_reviews_launch{color:#090!important;padding:4px 0 4px 46px;height:22px}.mod_turnitintooltwo .peermark_loading_row{text-align:center;margin:0 auto 8px}.mod_turnitintooltwo #id_submissiontext{width:80%;height:320px}#colorbox{margin-top:60px;outline:0!important;overflow:visible!important}.cboxIframe{border-radius:5px}#cboxContent{margin-top:0!important}#tii_close_bar{position:fixed;z-index:9999;right:0;top:0;width:100%;height:45px;background:rgba(0,0,0,.3)}#tii_close_bar a{color:#fff;display:block;background:#000;width:100px;float:right;height:45px;line-height:43px}#page-admin-setting-modsettingturnitintooltwo .tii_upgrade_check,.turnitin_ula{text-decoration:underline;cursor:pointer}.mod_turnitintooltwo #error,.mod_turnitintooltwo #full-error,.mod_turnitintooltwo .general_warning,.mod_turnitintooltwo .library_not_present_warning,.mod_turnitintooltwo noscript.warning,.tii_library_not_present_warning{border:1px solid #702c2b;padding:8px;background:#B94A48;width:99%;text-align:center;display:block;margin-bottom:6px;color:#fff}.turnitin_ula,noscript.turnitin_ula_noscript{border:1px solid #C00;text-align:center;display:block}.mod_turnitintooltwo #error{margin-left:24px;margin-right:24px;width:96%}.mod_turnitintooltwo .box_receipt,.mod_turnitintooltwo .submission_failure_msg{padding:16px}.mod_turnitintooltwo .submission_failure_msg .general_warning{margin-top:16px;width:auto}.mod_turnitintooltwo #enrolling_error{margin-top:8px}.mod_turnitintooltwo .manual_submission_failure_msg{margin-bottom:12px}.turnitin_ula_text{padding-top:15px;text-align:center}.turnitin_ula input[type=submit]{margin:0}.turnitin_ula{padding:12px;color:red;margin-top:12px;margin-bottom:16px!important;font-size:14px;font-weight:700}noscript.turnitin_ula_noscript{padding:8px;background:#FFE9E8;width:99%;margin:16px 6px;line-height:28px}.ui-widget-content,.ui-widget-header{border:0!important}.turnitin_ula_warn{color:red}.tii_digital_receipt{display:inline-block;width:150px}#tii_digital_receipt_box{padding:20px;background:#fff}#tii_digital_receipt_box .generaltable{width:100%}#tii_digital_receipt_box .logo{display:block;margin:0 auto;width:214px;height:68px}#tii_digital_receipt_box #tii_receipt_print{text-align:right;display:block}#digital_receipt{margin:0}.mod_turnitintooltwo #upload_success{color:#C00}.ui-widget-header{background:#EFEFEF!important;margin-bottom:6px!important}.ui-tabs .ui-tabs-panel{padding:0!important}.ui-tabs .ui-tabs-nav{padding:10px 10px 0!important}.mod_turnitintooltwo .edit_course_end_date_form,.tii_unanonymise_reveal_form .unanonymise_form{background:#FFF;padding:12px 12px 0;height:100%;overflow:hidden}.mod_turnitintooltwo .nonsubmittersform textarea,.tii_unanonymise_reveal_form .unanonymise_form textarea{height:90px;width:80%}.tii_unanonymise_reveal_form #unanonymise_desc{text-align:center;font-weight:700;display:block;margin-bottom:10px}.mod_turnitintooltwo .nonsubmitters_desc{padding:10px 0}.mod_turnitintooltwo #fitem_id_nonsubmitters_sendtoself .fitemtitle{display:none}.mod_turnitintooltwo .nonsubmittersform .general_warning{margin-top:8px}.mod_turnitintooltwo .nonsubmittersformsuccessmsg{text-align:center;padding-top:46px}#download_links{margin-left:15px;top:-5px}.dropdown-menu .origchecked_zip_open:hover{background-color:#00699e;display:block;line-height:20px;color:#fff;font-weight:400}.dropdown-menu{margin-top:2px!important}#rubric_view_form{padding-left:6px}.inbox .peermark-loading-span img.icon{margin-right:0}.selectlong{width:530px}.members .dataTables_wrapper .dataTables_processing{top:0;left:0;right:0;height:100%;margin:0;padding:0}.members .dataTables_wrapper .dataTables_processing .loading-message{position:absolute;top:50%;left:0;right:0;margin-top:-10px}.edit_course_end_date_form{padding:20px;background:#fff}.edit_course_end_date_form #edit_end_date_desc{text-align:center;margin-bottom:20px}.edit_course_end_date_form .fitemtitle{float:none!important;text-align:center!important;width:100%!important;display:block!important}.edit_course_end_date_form .fdate_selector{float:none!important;display:block!important;margin:0 auto!important;width:256px!important}.edit_course_end_date_form .fbutton{width:100%!important;margin:0!important}.edit_course_end_date_form #id_save_end_date{margin:0 auto!important;display:block!important}#page-admin-setting-modsettingturnitintooltwo #test_link,#page-admin-setting-modsettingturnitintooltwo #testing_container{margin-bottom:8px}#page-admin-setting-modsettingturnitintooltwo #test_link img{position:relative;top:4px}#page-admin-setting-modsettingturnitintooltwo #test_result{margin:4px 0 0;padding:5px 10px;width:500px;text-align:center}#page-admin-setting-modsettingturnitintooltwo .test_link_success{border:1px solid #0C0;background:#C3FDB8}#page-admin-setting-modsettingturnitintooltwo .test_link_fail{border:1px solid #C00;background:#E77471}#page-admin-setting-modsettingturnitintooltwo .smallicon{vertical-align:middle}#page-admin-setting-modsettingturnitintooltwo .tii_upgrade_check,#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check{font-size:12px;width:30px;height:30px;display:inline-block}#page-admin-setting-modsettingturnitintooltwo .tii_upgrade_check img,#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check img{padding:0 0 5px 5px;vertical-align:middle}#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check img{position:relative;top:3px}.centered_cell,.centered_div,.student_read{text-align:center!important}.centered_cb_cell{padding-right:8px;padding-left:8px}body[class*='-moodle23'] .mod_turnitintooltwo .centered_cb_cell input{position:relative;left:-1px}#page-admin-setting-modsettingturnitintooltwo #test_link,#page-admin-setting-modsettingturnitintooltwo #test_result,#page-admin-setting-modsettingturnitintooltwo #testing_container,#page-admin-setting-modsettingturnitintooltwo .test_connection,#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check,.mod_turnitintooltwo #assignment_id,.mod_turnitintooltwo #class_ids,.mod_turnitintooltwo #courseBrowserTable_filter,.mod_turnitintooltwo #course_category,.mod_turnitintooltwo #course_id,.mod_turnitintooltwo #create_assignments,.mod_turnitintooltwo #enrolling_error,.mod_turnitintooltwo #inbox_form,.mod_turnitintooltwo #submission_id,.mod_turnitintooltwo #tii_course_id,.mod_turnitintooltwo #tii_course_name,.mod_turnitintooltwo #user_role,.mod_turnitintooltwo #useragreement_form form,.mod_turnitintooltwo #view_context,.mod_turnitintooltwo .dv_url,.mod_turnitintooltwo .edit_course_end_date_form,.mod_turnitintooltwo .enrolling_container,.mod_turnitintooltwo .hidden_class,.mod_turnitintooltwo .js_required,.mod_turnitintooltwo .launch_form,.mod_turnitintooltwo .messages_loading,.mod_turnitintooltwo .peermark_instructions,.mod_turnitintooltwo .peermark_loading,.mod_turnitintooltwo .refresh_row .fa-spinner,.mod_turnitintooltwo .row_peermark_reviews,.mod_turnitintooltwo .tii_table_functions,.mod_turnitintooltwo .toggle_peermark_instructions .hide_peermark_instructions,.mod_turnitintooltwo .unanonymise_form,.mod_turnitintooltwo .zip_downloads{display:none}.mod_turnitintooltwo #digital_receipt,.mod_turnitintooltwo .class_recreation,.mod_turnitintooltwo .submission_form_container{padding:0 24px}.mod_turnitintooltwo .row_peermark_manager,.mod_turnitintooltwo .row_peermark_reviews,.mod_turnitintooltwo .row_score{float:right}#page-admin-setting-modsettingturnitintooltwo #test_link,.mod_turnitintooltwo .download_original_open,.mod_turnitintooltwo .enrol_link,.mod_turnitintooltwo .grademark_open,.mod_turnitintooltwo .messages_inbox,.mod_turnitintooltwo .origreport_open,.mod_turnitintooltwo .quickmark_manager_launch,.mod_turnitintooltwo .refresh_link,.mod_turnitintooltwo .refresh_row,.mod_turnitintooltwo .rubric_manager_launch,.mod_turnitintooltwo .rubric_view_launch,.mod_turnitintooltwo .tii_peermark_manager_launch,.mod_turnitintooltwo .tii_peermark_reviews_launch,.mod_turnitintooltwo .zip_open,.mod_turnitintooltwo span.link{cursor:pointer}.mod_turnitintooltwo #refresh_loading,.mod_turnitintooltwo #submitting_loader{display:none;padding:16px 0 8px;text-align:center}.grey{color:#A8A8A8!important}.light-blue{color:#bbe6ff!important}.gm-blue{color:#0070A8!important}.green{color:#19B719!important}.red{color:#B94A48!important}.tii_checkagainstnote,.tii_genspeednote{border:1px solid #6fcaff;background:#bbe6ff;padding:10px;margin-bottom:16px}.partDetails .fa,.submissionsDataTable .fa{color:#8f8f8f}.middle-padding{padding:0 5px}.mod_turnitintooltwo #course_search_options,.mod_turnitintooltwo .create_checkboxes{border:1px solid #EFEFEF;padding:6px 10px}.mod_turnitintooltwo .create_checkboxes{display:none;margin-top:12px}.icon_margin{margin-right:20px}.icon_smallmargin{margin-right:10px}#btn_tiisupportform_link,#tii_helpdesk_mod_id,#tii_solution_template,.tii_solutions,.tii_wizard_options{display:none}#tii_solution_template,#tii_wizard_container,.mod_turnitintooltwo iframe{border:1px solid #EFEFEF}#tii_solution_template{padding:0 16px 16px}#tii_wizard_container{padding:16px 16px 12px;margin-bottom:12px}#migration-progress-bar{background-color:#FFF;height:30px;line-height:28px;border:1px solid;border-radius:3px;margin:15px 0 30px}#migration-progress,#migration-progress-todo{width:0%;height:100%;float:left;font-size:14px;text-align:center}#migration-progress{background-color:#0073D2;color:#fff}.migration-spinner{text-align:center}.enablemigrationtool{text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.data-table-splitter{float:left;padding-right:20px}.yellowtest{color:#ff0}#fitem_id_enablemigrationtool,#migration-delete-selected #fitem_id_submitbutton,#migrationform #fitem_id_submitbutton{width:75%;margin:0 auto;background-color:#FFF}#fitem_id_enablemigrationtool .fitemtitle{width:300px}#migrationform{margin:30px 0}.migrationheader{color:#003A69;font-weight:400;margin-bottom:15px}.mod_turnitintooltwo .btn-primary{background:#0073D2;box-shadow:none;border:none;height:35px;margin-right:11px;border-radius:3px}.mod_turnitintooltwo .btn-primary:hover{background:#00569E}.mod_turnitintooltwo .btn-primary:active{background:#003A69}.migrationTable_length{margin-top:20px}#migrationTable .fa-times{color:red}#migrationTable .fa-check{color:green} +.listbar,.listbar .messages_inbox .smallicon{vertical-align:middle}.dropdown-menu,.mod_turnitintooltwo .nowrap{white-space:nowrap}.clearfix:after{content:".";visibility:hidden;display:block;height:0;clear:both}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.listbar,.listbar input,.listbar select{border:1px solid #EFEFEF;background:#fff}h3.main{line-height:40px}.mod_turnitintooltwo .fitem_fbutton{padding-top:12px}.listbar,.mod_turnitintooltwo #assignmentBrowserTable_wrapper{padding:10px}.mod_turnitintooltwo span.dimmed{color:#999}.mod_turnitintooltwo .italic{font-style:italic}.mod_turnitintooltwo .underline{text-decoration:underline}#courseBrowserTable a,#ppErrors a,#tii_close_bar a,.listbar .messages_inbox,.submissionsDataTable a{text-decoration:none}.mod_turnitintooltwo #or_container,.mod_turnitintooltwo .bold{font-weight:700}.mod_turnitintooltwo span.link{color:#00F}.listbar-container{display:table;width:100%}.listbar{position:relative;display:table-cell}.listbar input,.listbar label,.listbar select{margin:0}.listbar input,.listbar select{height:30px;padding:0 5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.listbar .nonsubmitters_link,.listbar .refresh_link,.listbar .refreshing_link{float:right;margin-left:30px;padding:5px 0;width:195px}.listbar .nonsubmitters_link{text-decoration:none;display:none}.listbar .messages_inbox{float:right;margin-left:30px;padding:5px 0}.listbar .messages_loading_span{float:none!important;margin:0!important}.listbar .zip_downloads{float:left;position:relative;top:4px;height:22px}.listbar .zip_downloads img{position:relative;top:4px;left:-2px}.listbar .zip_downloads a.gmpdfzip_box,.listbar .zip_downloads div.origchecked_zip_open{padding:3px 16px;display:block}.listbar .zip_downloads a.gmpdfzip_box:hover{background:#00699e;color:#fff}.listbar .zip_downloads .zip_open{display:inline}.listbar .dataTables_filter{float:right!important;text-align:left!important}.listbar .dataTables_length{float:left!important}#courseBrowserTable,#ppErrors,.submissionsDataTable{font-size:13px;border:1px solid #EFEFEF;width:100%!important;margin-top:6px!important}#courseBrowserTable .ccheckbox,#ppErrors .ccheckbox,.submissionsDataTable .ccheckbox{text-align:center;padding:8px 10px 2px!important}#courseBrowserTable .odd,#ppErrors .odd,.submissionsDataTable .odd{background:#EFEFEF!important}#courseBrowserTable .odd .sorting_1,#ppErrors .odd .sorting_1,.submissionsDataTable .odd .sorting_1{background:#e7e7e7!important}#courseBrowserTable .even,#ppErrors .even,.submissionsDataTable .even{background:#fff!important}#courseBrowserTable .even .sorting_1,#ppErrors .even .sorting_1,.submissionsDataTable .even .sorting_1{background:#fafafa!important}#courseBrowserTable thead th,#ppErrors thead th,.submissionsDataTable thead th{border-bottom:0!important}#courseBrowserTable th,#ppErrors th,.submissionsDataTable th{padding:10px 20px!important}#courseBrowserTable td,#ppErrors td,.submissionsDataTable td{padding:15px 10px!important;font-size:13px;vertical-align:top}#courseBrowserTable .sorting_disabled,#ppErrors .sorting_disabled,.submissionsDataTable .sorting_disabled{cursor:default}#courseBrowserTable .left,#ppErrors .left,.submissionsDataTable .left{text-align:left}#courseBrowserTable .right,#ppErrors .right,.submissionsDataTable .right{text-align:right}#courseBrowserTable .grademark_grade,#courseBrowserTable .grademark_open,#courseBrowserTable .origreport_score,#ppErrors .grademark_grade,#ppErrors .grademark_open,#ppErrors .origreport_score,.submissionsDataTable .grademark_grade,.submissionsDataTable .grademark_open,.submissionsDataTable .origreport_score{float:right}#courseBrowserTable .grademark_grade,#courseBrowserTable .origreport_score,#ppErrors .grademark_grade,#ppErrors .origreport_score,.submissionsDataTable .grademark_grade,.submissionsDataTable .origreport_score{padding-right:8px}#courseBrowserTable td.narrow,#courseBrowserTable th.narrow,#ppErrors td.narrow,#ppErrors th.narrow,.submissionsDataTable td.narrow,.submissionsDataTable th.narrow{width:60px}#courseBrowserTable .delete_paper,#courseBrowserTable .submission_title,#courseBrowserTable .submit_nothing,#ppErrors .delete_paper,#ppErrors .submission_title,#ppErrors .submit_nothing,.submissionsDataTable .delete_paper,.submissionsDataTable .submission_title,.submissionsDataTable .submit_nothing{cursor:pointer}#courseBrowserTable .score_colour,#ppErrors .score_colour,.submissionsDataTable .score_colour{width:36px;display:inline-block;float:right}#courseBrowserTable .late_submission,#ppErrors .late_submission,.submissionsDataTable .late_submission{color:#d31900}#courseBrowserTable #tii_digital_receipt_icon,#ppErrors #tii_digital_receipt_icon,.submissionsDataTable #tii_digital_receipt_icon{margin-top:-3px;margin-right:5px}.dataTables_paginate{margin-top:6px;font-size:12px;float:right}.dataTables_paginate a{display:inline-block;border:1px solid #EFEFEF;padding:2px 5px;background-position:left -2px}.dataTables_paginate .current{background:#EFEFEF}.dataTables_paginate .previous,.dataTables_paginate span a{border-right:0}.dataTables_info{float:left;clear:none;margin-top:8px;text-transform:uppercase;font-size:11px}.mod_turnitintooltwo .score_colour_{background:#999}.mod_turnitintooltwo .score_colour_0{background:#3552B7}.mod_turnitintooltwo .score_colour_10{background:#617B8D}.mod_turnitintooltwo .score_colour_20{background:#A1B556}.mod_turnitintooltwo .score_colour_30{background:#DAE235}.mod_turnitintooltwo .score_colour_40{background:#EDAC28}.mod_turnitintooltwo .score_colour_50{background:#EDD42F}.mod_turnitintooltwo .score_colour_60{background:#ECAD28}.mod_turnitintooltwo .score_colour_70{background:#E15A21}.mod_turnitintooltwo .score_colour_80{background:#E05A21}.mod_turnitintooltwo .score_colour_90{background:#DC4321}.mod_turnitintooltwo .score_colour_100{background:#DB4221}.mod_turnitintooltwo .enrol_link{padding:6px 18px 0 0}.partDetails{font-size:13px;margin-bottom:0;width:100%;border:1px solid #EFEFEF}.partDetails tr{border-right:1px solid #EFEFEF}.partDetails th{padding:6px 12px;border-bottom:1px solid #EFEFEF}.partDetails td{border:1px solid #EFEFEF;border-top:0;padding:12px 12px 4px}.partDetails td.data,.partDetails td.export_data,.partDetails td.rubric_qm{text-align:center}.partDetails td.export_data{padding-top:12px}.partDetails td.introduction_cell,.partDetails td.peermark_assignments_cell{padding:0;border:0}.partDetails td.peermarks{border:0}.partDetails .editable-click{border:none;position:relative;padding-right:24px}.partDetails .editable-click:before{position:absolute;font-family:FontAwesome;top:0;right:0;font-size:1.33333em!important;color:#A8A8A8!important;line-height:.75em;vertical-align:-15%;content:"\f040";display:inline-block;font-style:normal;font-weight:400;font-size-adjust:none;font-stretch:normal;font-feature-settings:normal;font-language-override:normal;font-kerning:auto;font-synthesis:weight style;font-variant:normal;text-rendering:auto;-moz-osx-font-smoothing:grayscale}.partDetails .editable-click:hover{border-bottom:0!important}.partDetails .introduction,.partDetails .peermark_instructions{padding:6px 10px;border-bottom:1px solid #EFEFEF;display:none}.partDetails .introduction h2{margin:8px 0}.partDetails .introduction p{margin:6px 0}.partDetails .row_export_orig,.partDetails .row_export_pdf,.partDetails .row_export_xls,.partDetails .row_quickmark_manager,.partDetails .row_rubric_manager,.partDetails .zip_open{display:inline}.partDetails .toggle_peermark_instructions img{display:block}.partDetails .toggle_peermark_instructions,.partDetails .toggle_peermarks,.partDetails .toggle_summary{cursor:pointer;float:left;position:relative;top:-3px;margin-right:8px}.partDetails .peermark_header{margin-bottom:8px;float:left}#turnitin_sync_all_grades{float:right;font-size:16px}.turnitin_sync_grades,.turnitin_syncing_grades{cursor:pointer;margin-bottom:20px}.turnitin_syncing_grades{display:none}.peermarkDetails{width:100%;border-top:1px solid #EFEFEF}.peermarkDetails td{padding:8px 12px;border-bottom-width:0}.peermarkDetails td.peermark_instructions_cell{border:0;padding:0}.quickmark_manager_launch{padding:2px 0 2px 30px;height:20px;color:#0070A8!important}.rubric_manager_launch,.rubric_view_launch{padding:4px 0;line-height:22px;color:#0070A8!important}.rubric_right_margin{margin-right:7px}.tii_peermark_manager_launch,.tii_peermark_reviews_launch{color:#090!important;padding:4px 0 4px 46px;height:22px}.mod_turnitintooltwo .peermark_loading_row{text-align:center;margin:0 auto 8px}.mod_turnitintooltwo #id_submissiontext{width:80%;height:320px}#colorbox{margin-top:60px;outline:0!important;overflow:visible!important}.cboxIframe{border-radius:5px}.turnitin_ula,noscript.turnitin_ula_noscript{border:1px solid #C00;text-align:center;display:block}#cboxContent{margin-top:0!important}#tii_close_bar{position:fixed;z-index:9999;right:0;top:0;width:100%;height:45px;background:rgba(0,0,0,.3)}#tii_close_bar a{color:#fff;display:block;background:#000;width:100px;text-align:center;float:right;height:45px;line-height:43px}#page-admin-setting-modsettingturnitintooltwo .tii_upgrade_check,.turnitin_ula{text-decoration:underline;cursor:pointer}.turnitin_ula_text{padding-top:15px;text-align:center}.turnitin_ula input[type=submit]{margin:0}.turnitin_ula{padding:12px;color:red;margin-top:12px;margin-bottom:16px!important;font-size:14px;font-weight:700}noscript.turnitin_ula_noscript{padding:8px;background:#FFE9E8;width:99%;margin:16px 6px;line-height:28px}.ui-widget-content,.ui-widget-header{border:0!important}.turnitin_ula_warn{color:red}.tii_digital_receipt{display:inline-block;width:150px}#tii_digital_receipt_box{padding:20px;background:#fff}#tii_digital_receipt_box .generaltable{width:100%}#tii_digital_receipt_box .logo{display:block;margin:0 auto;width:214px;height:68px}#tii_digital_receipt_box #tii_receipt_print{text-align:right;display:block}#digital_receipt{margin:0}.mod_turnitintooltwo #upload_success{color:#C00}.ui-widget-header{background:#EFEFEF!important;margin-bottom:6px!important}.ui-tabs .ui-tabs-panel{padding:0!important}.ui-tabs .ui-tabs-nav{padding:10px 10px 0!important}.mod_turnitintooltwo .edit_course_end_date_form,.tii_unanonymise_reveal_form .unanonymise_form{background:#FFF;padding:12px 12px 0;height:100%;overflow:hidden}.mod_turnitintooltwo .nonsubmittersform textarea,.tii_unanonymise_reveal_form .unanonymise_form textarea{height:90px;width:80%}.tii_unanonymise_reveal_form #unanonymise_desc{text-align:center;font-weight:700;display:block;margin-bottom:10px}.mod_turnitintooltwo .nonsubmitters_desc{padding:10px 0}.mod_turnitintooltwo #fitem_id_nonsubmitters_sendtoself .fitemtitle{display:none}.mod_turnitintooltwo .nonsubmittersform .general_warning{margin-top:8px}.mod_turnitintooltwo .nonsubmittersformsuccessmsg{text-align:center;padding-top:46px}#download_links{margin-left:15px;top:-5px}.dropdown-menu .origchecked_zip_open:hover{background-color:#00699e;display:block;line-height:20px;color:#fff;font-weight:400}.dropdown-menu{margin-top:2px!important}#rubric_view_form{padding-left:6px}.inbox .peermark-loading-span img.icon{margin-right:0}.selectlong{width:530px}.members .dataTables_wrapper .dataTables_processing{top:0;left:0;right:0;height:100%;margin:0;padding:0}.members .dataTables_wrapper .dataTables_processing .loading-message{position:absolute;top:50%;left:0;right:0;margin-top:-10px}.edit_course_end_date_form{padding:20px;background:#fff}.edit_course_end_date_form #edit_end_date_desc{text-align:center;margin-bottom:20px}.edit_course_end_date_form .fitemtitle{float:none!important;text-align:center!important;width:100%!important;display:block!important}.edit_course_end_date_form .fdate_selector{float:none!important;display:block!important;margin:0 auto!important;width:256px!important}.edit_course_end_date_form .fbutton{width:100%!important;margin:0!important}.edit_course_end_date_form #id_save_end_date{margin:0 auto!important;display:block!important}#page-admin-setting-modsettingturnitintooltwo #test_link,#page-admin-setting-modsettingturnitintooltwo #testing_container{margin-bottom:8px}#page-admin-setting-modsettingturnitintooltwo #test_link img{position:relative;top:4px}#page-admin-setting-modsettingturnitintooltwo #test_result{margin:4px 0 0;padding:5px 10px;width:500px;text-align:center}#page-admin-setting-modsettingturnitintooltwo .test_link_success{border:1px solid #0C0;background:#C3FDB8}#page-admin-setting-modsettingturnitintooltwo .test_link_fail{border:1px solid #C00;background:#E77471}#page-admin-setting-modsettingturnitintooltwo .smallicon{vertical-align:middle}#page-admin-setting-modsettingturnitintooltwo .tii_upgrade_check,#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check{font-size:12px;width:30px;height:30px;display:inline-block}#page-admin-setting-modsettingturnitintooltwo .tii_upgrade_check img,#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check img{padding:0 0 5px 5px;vertical-align:middle}#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check img{position:relative;top:3px}.centered_cell,.centered_div,.student_read{text-align:center!important}.centered_cb_cell{padding-right:8px;padding-left:8px}body[class*='-moodle23'] .mod_turnitintooltwo .centered_cb_cell input{position:relative;left:-1px}#page-admin-setting-modsettingturnitintooltwo #test_link,#page-admin-setting-modsettingturnitintooltwo #test_result,#page-admin-setting-modsettingturnitintooltwo #testing_container,#page-admin-setting-modsettingturnitintooltwo .test_connection,#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check,.mod_turnitintooltwo #assignment_id,.mod_turnitintooltwo #class_ids,.mod_turnitintooltwo #courseBrowserTable_filter,.mod_turnitintooltwo #course_category,.mod_turnitintooltwo #course_id,.mod_turnitintooltwo #create_assignments,.mod_turnitintooltwo #enrolling_error,.mod_turnitintooltwo #inbox_form,.mod_turnitintooltwo #submission_id,.mod_turnitintooltwo #tii_course_id,.mod_turnitintooltwo #tii_course_name,.mod_turnitintooltwo #user_role,.mod_turnitintooltwo #useragreement_form form,.mod_turnitintooltwo #view_context,.mod_turnitintooltwo .dv_url,.mod_turnitintooltwo .edit_course_end_date_form,.mod_turnitintooltwo .enrolling_container,.mod_turnitintooltwo .hidden_class,.mod_turnitintooltwo .js_required,.mod_turnitintooltwo .launch_form,.mod_turnitintooltwo .messages_loading,.mod_turnitintooltwo .peermark_instructions,.mod_turnitintooltwo .peermark_loading,.mod_turnitintooltwo .refresh_row .fa-spinner,.mod_turnitintooltwo .row_peermark_reviews,.mod_turnitintooltwo .tii_table_functions,.mod_turnitintooltwo .toggle_peermark_instructions .hide_peermark_instructions,.mod_turnitintooltwo .unanonymise_form,.mod_turnitintooltwo .zip_downloads{display:none}.mod_turnitintooltwo #digital_receipt,.mod_turnitintooltwo .class_recreation,.mod_turnitintooltwo .submission_form_container{padding:0 24px}.mod_turnitintooltwo .row_peermark_manager,.mod_turnitintooltwo .row_peermark_reviews,.mod_turnitintooltwo .row_score{float:right}#page-admin-setting-modsettingturnitintooltwo #test_link,.mod_turnitintooltwo .download_original_open,.mod_turnitintooltwo .enrol_link,.mod_turnitintooltwo .grademark_open,.mod_turnitintooltwo .messages_inbox,.mod_turnitintooltwo .origreport_open,.mod_turnitintooltwo .quickmark_manager_launch,.mod_turnitintooltwo .refresh_link,.mod_turnitintooltwo .refresh_row,.mod_turnitintooltwo .rubric_manager_launch,.mod_turnitintooltwo .rubric_view_launch,.mod_turnitintooltwo .tii_peermark_manager_launch,.mod_turnitintooltwo .tii_peermark_reviews_launch,.mod_turnitintooltwo .zip_open,.mod_turnitintooltwo span.link{cursor:pointer}.mod_turnitintooltwo #refresh_loading,.mod_turnitintooltwo #submitting_loader{display:none;padding:16px 0 8px;text-align:center}.grey{color:#A8A8A8!important}.light-blue{color:#bbe6ff!important}.gm-blue{color:#0070A8!important}.green{color:#19B719!important}.red{color:#B94A48!important}.tii_checkagainstnote,.tii_genspeednote{border:1px solid #6fcaff;background:#bbe6ff;padding:10px;margin-bottom:16px}.partDetails .fa,.submissionsDataTable .fa{color:#8f8f8f}.middle-padding{padding:0 5px}.mod_turnitintooltwo #course_search_options,.mod_turnitintooltwo .create_checkboxes{border:1px solid #EFEFEF;padding:6px 10px}.mod_turnitintooltwo .create_checkboxes{display:none;margin-top:12px}.icon_margin{margin-right:20px}.icon_smallmargin{margin-right:10px}#btn_tiisupportform_link,#tii_helpdesk_mod_id,#tii_solution_template,.tii_solutions,.tii_wizard_options{display:none}#tii_solution_template,#tii_wizard_container,.mod_turnitintooltwo iframe{border:1px solid #EFEFEF}#tii_solution_template{padding:0 16px 16px}#tii_wizard_container{padding:16px 16px 12px;margin-bottom:12px}#migration-progress-bar{background-color:#FFF;height:30px;line-height:28px;border:1px solid;border-radius:3px;margin:15px 0 30px}#migration-progress,#migration-progress-todo{width:0%;height:100%;float:left;font-size:14px;text-align:center}#migration-progress{background-color:#0073D2;color:#fff}.migration-spinner{text-align:center}.enablemigrationtool{text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.data-table-splitter{float:left;padding-right:20px}.yellowtest{color:#ff0}#fitem_id_enablemigrationtool,#migration-delete-selected #fitem_id_submitbutton,#migrationform #fitem_id_submitbutton{width:75%;margin:0 auto;background-color:#FFF}#fitem_id_enablemigrationtool .fitemtitle{width:300px}#migrationform{margin:30px 0}.migrationheader{color:#003A69;font-weight:400;margin-bottom:15px}.mod_turnitintooltwo .btn-primary{background:#0073D2;box-shadow:none;border:none;height:35px;margin-right:11px;border-radius:3px}.mod_turnitintooltwo .btn-primary:hover{background:#00569E}.mod_turnitintooltwo .btn-primary:active{background:#003A69}.migrationTable_length{margin-top:20px}#migrationTable .fa-times{color:red}#migrationTable .fa-check{color:green} /*# sourceMappingURL=styles.css.map */ diff --git a/styles.css.map b/styles.css.map index 9fd0f8b2..298ad531 100644 --- a/styles.css.map +++ b/styles.css.map @@ -1 +1 @@ -{"version":3,"sources":["partials/_listbar.scss","partials/_inbox.scss","_utilities.scss","_variables.scss","partials/_table.scss","partials/_modal.scss","partials/_part_details.scss","settings_partials/_settings_tab.scss","partials/_eula.scss","_other.scss","partials/_warnings.scss","partials/_digital_receipt.scss","partials/_members.scss","settings_partials/_class_migration_tab.scss"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":["/*\n * Listbar - Contains datatables links, dropdowns and search\n */\n\n.listbar-container {\n display: table;\n width: 100%;\n}\n\n.listbar {\n background: #fff;\n border: 1px solid $border-color;\n position: relative;\n display: table-cell;\n vertical-align: middle;\n padding: 10px;\n\n label,\n input,\n select {\n margin: 0;\n }\n\n select,\n input {\n height: 30px;\n padding: 0 5px;\n border: 1px solid #EFEFEF;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n background: #fff;\n }\n\n .refresh_link,\n .refreshing_link,\n .nonsubmitters_link {\n float: right;\n margin-left: 30px;\n padding: 5px 0;\n width: 195px;\n }\n\n .nonsubmitters_link {\n text-decoration: none;\n display: none;\n }\n\n /*\n * Messages inbox link in listbar\n */\n .messages_inbox {\n float: right;\n margin-left: 30px;\n padding: 5px 0;\n text-decoration: none;\n }\n\n .messages_loading_span {\n float: none !important;\n margin: 0 !important;\n }\n\n .messages_inbox .smallicon {\n vertical-align: middle;\n }\n\n // Zip file download links\n .zip_downloads {\n float: left;\n position: relative;\n top: 4px;\n height: 22px;\n\n img {\n position:relative;\n top:4px;\n left:-2px;\n }\n\n div.origchecked_zip_open,\n a.gmpdfzip_box {\n padding:3px 16px;\n display: block;\n }\n\n a.gmpdfzip_box:hover {\n background: $hover-blue;\n color: $white;\n }\n\n .zip_open {\n display: inline;\n }\n }\n\n /*\n * DataTables filter (search bar)\n */\n .dataTables_filter {\n float: right !important;\n text-align: left !important;\n }\n\n /*\n * DataTables length (how many per page)\n */\n .dataTables_length {\n float: left !important;\n }\n}","/*\n * Tabs on inbox page\n */\n.ui-widget-header {\n background: $light-grey !important;\n border: 0 !important;\n margin-bottom: 6px !important;\n}\n\n.ui-widget-content {\n border: 0 !important;\n}\n\n.ui-tabs .ui-tabs-panel {\n padding: 0 !important;\n}\n\n.ui-tabs .ui-tabs-nav {\n padding: 10px 10px 0 !important;\n}\n\n/*\n * Unanonymise form in modal\n */\n.tii_unanonymise_reveal_form .unanonymise_form,\n.mod_turnitintooltwo .edit_course_end_date_form {\n background: #FFFFFF;\n padding: 12px 12px 0;\n height: 100%;\n overflow: hidden\n}\n\n.tii_unanonymise_reveal_form #unanonymise_desc {\n text-align: center;\n font-weight: bold;\n display: block;\n margin-bottom: 10px;\n}\n\n.tii_unanonymise_reveal_form .unanonymise_form textarea {\n height: 90px;\n width:80%;\n}\n\n\n/*\n * Email non submitters form\n */\n.mod_turnitintooltwo .nonsubmitters_desc {\n padding: 10px 0;\n}\n\n.mod_turnitintooltwo .nonsubmittersform textarea {\n height: 90px;\n width:80%;\n}\n\n.mod_turnitintooltwo #fitem_id_nonsubmitters_sendtoself .fitemtitle {\n display: none;\n}\n\n.mod_turnitintooltwo .nonsubmittersform .general_warning {\n margin-top:8px;\n}\n\n.mod_turnitintooltwo .nonsubmittersformsuccessmsg {\n text-align: center;\n padding-top: 46px;\n}\n\n#download_links {\n margin-left: 15px;\n top: -5px;\n}\n\n.dropdown-menu .origchecked_zip_open:hover {\n background-color: $hover-blue;\n display: block;\n line-height: 20px;\n color: #fff;\n font-weight: normal;\n}\n\n.dropdown-menu {\n white-space: nowrap;\n margin-top: 2px !important;\n}\n\n#rubric_view_form {\n padding-left: 6px;\n}\n\n.inbox {\n .peermark-loading-span img.icon {\n margin-right: 0px;\n }\n}\n\n.selectlong {\n width: 530px;\n}","/*\n * Helpers and general styles\n */\n\n/*\n * Lets us clear floats for older moodles\n */\n.clearfix:after {\n content: \".\";\n visibility: hidden;\n display: block;\n height: 0;\n clear: both;\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\nh3.main {\n line-height: 40px;\n}\n\n.mod_turnitintooltwo {\n .fitem_fbutton {\n padding-top:12px;\n }\n\n span.dimmed {\n color:#999999;\n }\n\n #assignmentBrowserTable_wrapper {\n padding: 10px;\n }\n\n .nowrap {\n white-space:nowrap;\n }\n\n .italic {\n font-style: italic;\n }\n\n .underline {\n text-decoration: underline;\n }\n\n .bold,\n #or_container {\n font-weight:bold;\n }\n\n span.link {\n color: #0000FF;\n }\n}","// Colours\n$light-grey: #EFEFEF;\n$dark-grey: #A8A8A8;\n$light-blue: #bbe6ff;\n$light-blue2: #6fcaff;\n$gm-blue: #0070A8;\n$white: #fff;\n$red: #B94A48;\n$green: #19B719;\n$hover-blue: #00699e;\n\n// Table border colours\n$border-color: $light-grey;\n\n// Odd / Even colours for table\n$odd-color: $light-grey;\n$even-color: $white;\n\n// Warning colours\n$warning: $red;\n$warning-border: darken($red, 20%);\n\n// Table padding\n$table-padding: 15px;\n$table-head-padding: $table-padding - 5px;","/*\n 1. DataTable Table\n 2. DataTable Pagination\n 3. Score colour\n*/\n\n\n/*\n * 1. Table styles and related\n */\n.submissionsDataTable, #ppErrors, #courseBrowserTable {\n width:100%;\n font-size: 13px;\n border:1px solid $border-color;\n width:100% !important;\n margin-top: 6px !important;\n\n .ccheckbox {\n text-align: center;\n padding: 8px 10px 2px !important;\n }\n\n .odd {\n background: $odd-color !important;\n\n .sorting_1 {\n background: darken($odd-color, 3%) !important;\n }\n }\n\n .even {\n background: $even-color !important;\n\n .sorting_1 {\n background: darken($even-color, 2%) !important;\n }\n }\n\n a {\n text-decoration: none;\n }\n\n thead th {\n border-bottom: 0 !important;\n }\n\n th {\n padding: $table-head-padding 20px !important;\n }\n\n td {\n padding: $table-padding 10px !important;\n font-size: 13px;\n vertical-align: top;\n }\n\n .sorting_disabled {\n cursor: default;\n }\n\n .left {\n text-align: left;\n }\n\n .right {\n text-align: right;\n }\n\n .grademark_open,\n .grademark_grade,\n .origreport_score {\n float:right;\n }\n\n .grademark_grade,\n .origreport_score {\n padding-right:8px;\n }\n\n th.narrow,\n td.narrow {\n width: 60px;\n }\n\n .submit_nothing, .submission_title, .delete_paper {\n cursor: pointer;\n }\n\n .score_colour {\n width:36px;\n display:inline-block;\n float:right;\n }\n\n .late_submission {\n color: #d31900;\n }\n\n #tii_digital_receipt_icon {\n margin-top: -3px;\n margin-right: 5px;\n }\n\n}\n\n\n/*\n * 2. DataTables pagination\n */\n.dataTables_paginate {\n margin-top: 6px;\n font-size:12px;\n float: right;\n\n a {\n display: inline-block;\n border: 1px solid $border-color;\n padding: 2px 5px;\n background-position: left -2px;\n }\n\n .current {\n background: #EFEFEF;\n }\n\n span a {\n border-right: 0;\n }\n\n .previous {\n border-right: 0;\n }\n\n}\n\n.dataTables_info {\n float:left;\n clear:none;\n margin-top: 8px;\n text-transform: uppercase;\n font-size: 11px;\n}\n\n\n/*\n * 3. Score colour for originality report.\n */\n.mod_turnitintooltwo .score_colour_ { background: #999999; }\n.mod_turnitintooltwo .score_colour_0 { background: #3552B7; }\n.mod_turnitintooltwo .score_colour_10 { background: #617B8D; }\n.mod_turnitintooltwo .score_colour_20 { background: #A1B556; }\n.mod_turnitintooltwo .score_colour_30 { background: #DAE235; }\n.mod_turnitintooltwo .score_colour_40 { background: #EDAC28; }\n.mod_turnitintooltwo .score_colour_50 { background: #EDD42F; }\n.mod_turnitintooltwo .score_colour_60 { background: #ECAD28; }\n.mod_turnitintooltwo .score_colour_70 { background: #E15A21; }\n.mod_turnitintooltwo .score_colour_80 { background: #E05A21; }\n.mod_turnitintooltwo .score_colour_90 { background: #DC4321; }\n.mod_turnitintooltwo .score_colour_100 { background: #DB4221; }\n\n\n.mod_turnitintooltwo .enrol_link {\n padding: 6px 18px 0 0;\n}","/*\n 1. Styles within modal\n 2. Styles for actual colorbox modal\n 3. Styles for close bar at the top\n*/\n\n/*\n * 1. Within the modal\n */\n#page-mod-turnitintooltwo-view {\n // padding-top: 20px;\n}\n\n.mod_turnitintooltwo #id_submissiontext {\n width:80%;\n height:320px;\n}\n\n/*\n * 2. Colorbox modal iframe\n */\n#colorbox {\n margin-top: 60px;\n outline: 0 !important;\n overflow: visible !important;\n}\n\n.cboxIframe {\n border-radius: 5px;\n}\n\n#cboxContent {\n margin-top: 0 !important;\n}\n\n/*\n * 3. Modal close bar\n */\n#tii_close_bar {\n position: fixed;\n z-index: 9999;\n right: 0;\n top: 0;\n width: 100%;\n height: 45px;\n background: rgba(0, 0, 0, .3);\n\n a {\n color: #fff;\n display: block;\n background: #000;\n width: 100px;\n text-align: center;\n float: right;\n text-decoration: none;\n height: 45px;\n line-height: 43px;\n }\n}",".partDetails {\n font-size: 13px;\n margin-bottom:0px;\n width:100%;\n border: 1px solid $border-color;\n\n tr {\n border-right: 1px solid $border-color;\n }\n\n th {\n padding: 6px 12px 6px;\n border-bottom: 1px solid $border-color;\n }\n\n td {\n border: 1px solid $border-color;\n border-top: 0;\n padding: 12px 12px 4px;\n }\n\n td.data,\n td.export_data,\n td.rubric_qm {\n text-align: center;\n }\n\n td.export_data {\n padding-top:12px;\n }\n\n td.introduction_cell {\n border:0;\n padding:0;\n }\n\n td.peermarks {\n border:0;\n }\n\n td.peermark_assignments_cell {\n padding:0;\n border:0;\n }\n\n .editable-click {\n border:none;\n position: relative;\n padding-right: 24px;\n\n &:before {\n position:absolute;\n font-family: FontAwesome;\n top:0;\n right:0;\n font-size: 1.33333em !important;\n color: $dark-grey !important;\n line-height: 0.75em;\n vertical-align: -15%;\n content: \"\\f040\";\n display: inline-block;\n font-style: normal;\n font-weight: normal;\n font-size-adjust: none;\n font-stretch: normal;\n font-feature-settings: normal;\n font-language-override: normal;\n font-kerning: auto;\n font-synthesis: weight style;\n font-variant: normal;\n font-size: inherit;\n text-rendering: auto;\n -moz-osx-font-smoothing: grayscale;\n }\n\n &:hover {\n border-bottom: 0 !important;\n }\n }\n\n /*\n * Introduction (summary section)\n */\n .introduction,\n .peermark_instructions {\n padding: 6px 10px;\n border-bottom: 1px solid $border-color;\n display: none;\n }\n\n .introduction h2 {\n margin: 8px 0;\n }\n\n .introduction p {\n margin: 6px 0;\n }\n\n /*\n * Export options\n */\n .row_export_xls,\n .row_export_pdf,\n .row_export_orig,\n .zip_open,\n .row_rubric_manager,\n .row_quickmark_manager {\n display:inline;\n }\n\n .toggle_peermark_instructions img {\n display: block;\n }\n\n .toggle_summary,\n .toggle_peermarks,\n .toggle_peermark_instructions {\n cursor: pointer;\n float:left;\n position: relative;\n top:-3px;\n margin-right:8px;\n }\n\n .peermark_header {\n margin-bottom:8px;\n float:left;\n }\n}\n\n#turnitin_sync_all_grades {\n float: right;\n font-size: 16px;\n}\n\n.turnitin_sync_grades, .turnitin_syncing_grades {\n cursor: pointer;\n margin-bottom: 20px;\n}\n\n.turnitin_syncing_grades {\n display: none;\n}\n\n.peermarkDetails {\n width: 100%;\n border-top: 1px solid $border-color;\n\n td {\n padding:8px 12px;\n border-bottom-width: 0;\n }\n\n td.peermark_instructions_cell {\n border:0;\n padding:0;\n }\n}\n\n.quickmark_manager_launch {\n padding: 2px 0 2px 30px;\n height: 20px;\n color: #0070A8 !important;\n}\n\n.rubric_manager_launch,\n.rubric_view_launch {\n padding:4px 0px 4px 0px;\n line-height: 22px;\n color: #0070A8 !important;\n}\n\n.rubric_right_margin {\n margin-right:7px;\n}\n\n.tii_peermark_manager_launch {\n color: #009900 !important;\n}\n\n.tii_peermark_reviews_launch {\n color: #009900 !important;\n}\n\n.tii_peermark_manager_launch,\n.tii_peermark_reviews_launch {\n padding: 4px 0 4px 46px;\n height: 22px;\n}\n\n.mod_turnitintooltwo .peermark_loading_row {\n text-align: center;\n margin:0 auto 8px;\n}","#page-admin-setting-modsettingturnitintooltwo {\n\n #test_link,\n #testing_container {\n margin-bottom:8px;\n }\n\n #test_link img {\n position: relative;\n top:4px;\n }\n\n #test_result {\n margin: 4px 0 0;\n padding: 5px 10px;\n width: 500px;\n text-align: center;\n }\n\n .test_link_success {\n border: 1px solid #00CC00;\n background: #C3FDB8;\n }\n\n .test_link_fail {\n border:1px solid #CC0000;\n background: #E77471;\n }\n\n .smallicon {\n vertical-align: middle;\n }\n\n\n\n // Upgrade\n .tii_upgrade_check,\n .tii_upgrading_check {\n font-size: 12px;\n }\n\n .tii_upgrade_check {\n text-decoration: underline;\n cursor: pointer;\n }\n\n .tii_upgrade_check,\n .tii_upgrading_check {\n width: 30px;\n height: 30px;\n display: inline-block;\n }\n .tii_upgrade_check img,\n .tii_upgrading_check img {\n padding: 0 0 5px 5px;\n vertical-align: middle;\n }\n\n .tii_upgrading_check img {\n position: relative;\n top: 3px;\n }\n}",".turnitin_ula_text {\n padding-top: 15px;\n text-align: center;\n}\n\n.turnitin_ula input[type=\"submit\"] {\n margin: 0;\n}\n\n.turnitin_ula {\n\tcursor:pointer;\n\ttext-decoration: underline;\n\ttext-align: center;\n\tborder: 1px solid #CC0000;\n\tpadding: 12px 12px 12px;\n\tcolor: #FF0000;\n\tmargin-top:12px;\n\tmargin-bottom:16px !important;\n\tfont-size: 14px;\n\tfont-weight: bold;\n\tdisplay: block;\n}\n\nnoscript.turnitin_ula_noscript {\n border: 1px solid #CC0000;\n padding: 8px;\n background: #FFE9E8;\n width: 99%;\n text-align:center;\n display:block;\n margin:16px 6px;\n line-height: 28px;\n}\n.turnitin_ula_warn {\n\tcolor: #FF0000;\n}","/*\n * No other place to go.\n */\n.student_read,\n.centered_cell,\n.centered_div {\n text-align:center !important;\n}\n\n.centered_cb_cell {\n padding-right:8px;\n padding-left:8px;\n}\n\nbody[class*='-moodle23'] .mod_turnitintooltwo .centered_cb_cell input {\n position: relative;\n left: -1px;\n}\n\n.mod_turnitintooltwo .hidden_class, .mod_turnitintooltwo #user_role, .mod_turnitintooltwo .launch_form,\n.mod_turnitintooltwo #useragreement_form form, .mod_turnitintooltwo #assignment_id, .mod_turnitintooltwo #course_id,\n.mod_turnitintooltwo #submission_id, .mod_turnitintooltwo #tii_course_id, .mod_turnitintooltwo #tii_course_name,\n.mod_turnitintooltwo .enrolling_container, .mod_turnitintooltwo .zip_downloads, .mod_turnitintooltwo #view_context,\n.mod_turnitintooltwo #inbox_form, .mod_turnitintooltwo .unanonymise_form, .mod_turnitintooltwo .edit_course_end_date_form,\n.mod_turnitintooltwo #course_category, .mod_turnitintooltwo #class_ids, .mod_turnitintooltwo #create_assignments,\n.mod_turnitintooltwo .row_peermark_reviews, .mod_turnitintooltwo .peermark_instructions,\n.mod_turnitintooltwo .toggle_peermark_instructions .hide_peermark_instructions,\n.mod_turnitintooltwo #courseBrowserTable_filter, .mod_turnitintooltwo .js_required,\n.mod_turnitintooltwo #course_category, .mod_turnitintooltwo #create_assignments,\n#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check, #page-admin-setting-modsettingturnitintooltwo #test_link,\n#page-admin-setting-modsettingturnitintooltwo #test_result, #page-admin-setting-modsettingturnitintooltwo .test_connection,\n#page-admin-setting-modsettingturnitintooltwo #testing_container, .mod_turnitintooltwo .peermark_loading,\n.mod_turnitintooltwo .messages_loading, .mod_turnitintooltwo .tii_table_functions, .mod_turnitintooltwo .refresh_row .fa-spinner,\n.mod_turnitintooltwo #enrolling_error, .mod_turnitintooltwo .dv_url {\n display:none;\n}\n\n\n.mod_turnitintooltwo .submission_form_container, .mod_turnitintooltwo .class_recreation,\n.mod_turnitintooltwo #digital_receipt {\n padding: 0 24px;\n}\n\n.mod_turnitintooltwo .row_score, .mod_turnitintooltwo .row_peermark_manager, .mod_turnitintooltwo .row_peermark_reviews {\n float:right;\n}\n\n.mod_turnitintooltwo .grademark_open, .mod_turnitintooltwo .origreport_open, .mod_turnitintooltwo .download_original_open,\n.mod_turnitintooltwo .zip_open, .mod_turnitintooltwo .enrol_link, .mod_turnitintooltwo .refresh_link,\n.mod_turnitintooltwo .refresh_row, .mod_turnitintooltwo .messages_inbox, .mod_turnitintooltwo span.link,\n.mod_turnitintooltwo .rubric_manager_launch, .mod_turnitintooltwo .rubric_view_launch,\n.mod_turnitintooltwo .quickmark_manager_launch, .mod_turnitintooltwo .tii_peermark_manager_launch,\n.mod_turnitintooltwo .tii_peermark_reviews_launch, #page-admin-setting-modsettingturnitintooltwo #test_link {\n cursor:pointer;\n}\n\n.mod_turnitintooltwo #submitting_loader, .mod_turnitintooltwo #refresh_loading {\n display:none;\n padding: 16px 0 8px;\n text-align: center;\n}\n\n.grey {\n color: $dark-grey !important;\n}\n\n.light-blue {\n color: $light-blue !important;\n}\n\n.gm-blue {\n color: $gm-blue !important;\n}\n\n.green {\n color: $green !important;\n}\n\n.red {\n color: $red !important;\n}\n\n.tii_checkagainstnote, .tii_genspeednote {\n border: 1px solid $light-blue2;\n background: $light-blue;\n padding: 10px;\n margin-bottom: 16px;\n}\n\n.submissionsDataTable .fa,\n.partDetails .fa {\n color: darken($dark-grey, 10%);\n}\n\n.middle-padding {\n padding: 0 5px;\n}\n\n.mod_turnitintooltwo #course_search_options, .mod_turnitintooltwo .create_checkboxes {\n border: 1px solid $border-color;\n padding: 6px 10px;\n}\n\n.mod_turnitintooltwo .create_checkboxes {\n display: none;\n margin-top: 12px;\n}\n\n.icon_margin {\n margin-right: 20px;\n}\n.icon_smallmargin {\n margin-right: 10px;\n}\n\n/**\n * Helpdesk Form\n */\n\n#tii_solution_template,\n.tii_wizard_options,\n.tii_solutions,\n#btn_tiisupportform_link,\n#tii_helpdesk_mod_id {\n display: none;\n}\n\n#tii_solution_template, #tii_wizard_container {\n border: 1px solid $light-grey;\n}\n\n#tii_solution_template {\n padding: 0px 16px 16px;\n}\n\n#tii_wizard_container {\n padding: 16px 16px 12px;\n margin-bottom: 12px;\n}\n\n.mod_turnitintooltwo iframe {\n border: 1px solid $light-grey;\n}\n\n#migration-progress-bar {\n background-color: #FFFFFF;\n height: 30px;\n line-height: 28px;\n border: 1px solid;\n border-radius: 3px;\n margin: 15px 0px 30px 0px;\n}\n#migration-progress, #migration-progress-todo {\n width: 0%;\n height: 100%;\n text-align: center;\n float: left;\n font-size: 14px;\n text-align: center;\n}\n#migration-progress {\n background-color: #0073D2;\n color: #fff;\n}\n.migration-spinner {\n text-align: center;\n}\n\n.enablemigrationtool {\n text-align: center;\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n background-color: #0e90d2;\n background-image: -moz-linear-gradient(top,#149bdf,#0480be);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));\n background-image: -webkit-linear-gradient(top,#149bdf,#0480be);\n background-image: -o-linear-gradient(top,#149bdf,#0480be);\n background-image: linear-gradient(to bottom,#149bdf,#0480be);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);\n -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-transition: width 0.6s ease;\n -moz-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n\n#migration-progress-bar {\n background-color: #FFFFFF;\n height: 30px;\n line-height: 28px;\n border: 1px solid;\n border-radius: 3px;\n margin: 15px 0px 30px 0px;\n}\n#migration-progress, #migration-progress-todo {\n width: 0%;\n height: 100%;\n text-align: center;\n float: left;\n font-size: 14px;\n text-align: center;\n}\n#migration-progress {\n background-color: #0073D2;\n color: #fff;\n}\n.migration-spinner {\n text-align: center;\n}\n\n.enablemigrationtool {\n text-align: center;\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n background-color: #0e90d2;\n background-image: -moz-linear-gradient(top,#149bdf,#0480be);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));\n background-image: -webkit-linear-gradient(top,#149bdf,#0480be);\n background-image: -o-linear-gradient(top,#149bdf,#0480be);\n background-image: linear-gradient(to bottom,#149bdf,#0480be);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);\n -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-transition: width 0.6s ease;\n -moz-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n\n.data-table-splitter {\n float: left;\n padding-right: 20px;\n}\n.yellowtest{color: yellow;}\n\n#migrationform #fitem_id_submitbutton, \n#migration-delete-selected #fitem_id_submitbutton, \n#fitem_id_enablemigrationtool {\n width: 75%;\n margin: 0 auto;\n background-color: #FFFFFF;\n}\n#fitem_id_enablemigrationtool .fitemtitle {\n width: 300px;\n}\n#migrationform {\n margin: 30px 0px;\n}\n\n.migrationheader {\n color: #003A69;\n font-weight: normal;\n margin-bottom: 15px;\n}\n.mod_turnitintooltwo .btn-primary {\n background: #0073D2;\n}\n.mod_turnitintooltwo .btn-primary:hover {\n background: #00569E;\n}\n.mod_turnitintooltwo .btn-primary:active {\n background: #003A69;\n}\n.mod_turnitintooltwo .btn-primary {\n box-shadow: none;\n border: none;\n height: 35px;\n margin-right: 11px;\n border-radius: 3px;\n}\n\n.migrationTable_length {\n margin-top: 20px;\n}\n\n#migrationTable .fa-times {\n color: #FF0000;\n}\n\n#migrationTable .fa-check {\n color: #008000;\n}\n","/*\n * Warning styles\n */\n\n.tii_library_not_present_warning {\n border: 1px solid $warning-border;\n padding: 8px;\n background: $warning;\n width: 99%;\n text-align:center;\n display:block;\n margin-bottom:6px;\n color: white;\n}\n\n.mod_turnitintooltwo {\n\n noscript.warning,\n .library_not_present_warning,\n .general_warning,\n #error,\n #full-error {\n border: 1px solid $warning-border;\n padding: 8px;\n background: $warning;\n width: 99%;\n text-align:center;\n display:block;\n margin-bottom:6px;\n color: white;\n }\n\n #error {\n margin-left:24px;\n margin-right:24px;\n width:96%;\n }\n\n .submission_failure_msg,\n .box_receipt {\n padding: 16px;\n }\n\n .submission_failure_msg .general_warning {\n margin-top: 16px;\n width: auto;\n }\n\n #enrolling_error {\n margin-top: 8px;\n }\n\n .manual_submission_failure_msg {\n margin-bottom: 12px;\n }\n}",".tii_digital_receipt {\n display: inline-block;\n width: 150px;\n}\n\n#tii_digital_receipt_box {\n padding: 20px;\n background: #fff;\n\n .generaltable {\n width: 100%;\n }\n\n .logo {\n display: block;\n margin: 0 auto;\n width: 214px;\n height: 68px;\n }\n\n #tii_receipt_print {\n text-align: right;\n display: block;\n }\n\n}\n\n#digital_receipt {\n margin: 0;\n}\n\n.mod_turnitintooltwo #upload_success {\n color: #CC0000;\n}",".members {\n // Overwrite datatables CSS for loading message to cover the whole table\n // accurately. By default datatables centers the loading message vertically\n // and horizontally but it is only the size of the message meaning a user\n // can click the content being loaded behind the message as the loading mask\n // won't cover it all. Fix is to create a loading mask that covers all the\n // loading content and position the message within the mask\n .dataTables_wrapper .dataTables_processing {\n // cover entire table that is loading\n top: 0px;\n left: 0px;\n right: 0px;\n height: 100%;\n margin: 0px;\n padding: 0px;\n\n .loading-message {\n // position message within loading element\n position: absolute;\n top: 50%;\n left: 0px;\n right: 0px;\n margin-top: -10px; // half line-height\n }\n }\n}\n","/*\nLocated at mod/turnitintooltwo/settings_extras.php?cmd=courses\n*/\n\n.edit_course_end_date_form {\n padding: 20px;\n background: #fff;\n\n #edit_end_date_desc {\n text-align: center;\n margin-bottom: 20px;\n }\n\n .fitemtitle {\n float: none !important;\n text-align: center !important;\n width: 100% !important;\n display: block !important;\n }\n\n .fdate_selector {\n float: none !important;\n display: block !important;\n margin: 0 auto !important;\n width: 256px !important;\n }\n\n .fbutton {\n width: 100% !important;\n margin: 0 !important;\n }\n\n #id_save_end_date {\n margin: 0 auto !important;\n display: block !important;\n }\n}"]} \ No newline at end of file +{"version":3,"sources":["partials/_listbar.scss","partials/_inbox.scss","_utilities.scss","_variables.scss","partials/_table.scss","partials/_modal.scss","partials/_part_details.scss","partials/_eula.scss","settings_partials/_settings_tab.scss","_other.scss","partials/_digital_receipt.scss","partials/_members.scss","settings_partials/_class_migration_tab.scss"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":["/*\n * Listbar - Contains datatables links, dropdowns and search\n */\n\n.listbar-container {\n display: table;\n width: 100%;\n}\n\n.listbar {\n background: #fff;\n border: 1px solid $border-color;\n position: relative;\n display: table-cell;\n vertical-align: middle;\n padding: 10px;\n\n label,\n input,\n select {\n margin: 0;\n }\n\n select,\n input {\n height: 30px;\n padding: 0 5px;\n border: 1px solid #EFEFEF;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n background: #fff;\n }\n\n .refresh_link,\n .refreshing_link,\n .nonsubmitters_link {\n float: right;\n margin-left: 30px;\n padding: 5px 0;\n width: 195px;\n }\n\n .nonsubmitters_link {\n text-decoration: none;\n display: none;\n }\n\n /*\n * Messages inbox link in listbar\n */\n .messages_inbox {\n float: right;\n margin-left: 30px;\n padding: 5px 0;\n text-decoration: none;\n }\n\n .messages_loading_span {\n float: none !important;\n margin: 0 !important;\n }\n\n .messages_inbox .smallicon {\n vertical-align: middle;\n }\n\n // Zip file download links\n .zip_downloads {\n float: left;\n position: relative;\n top: 4px;\n height: 22px;\n\n img {\n position:relative;\n top:4px;\n left:-2px;\n }\n\n div.origchecked_zip_open,\n a.gmpdfzip_box {\n padding:3px 16px;\n display: block;\n }\n\n a.gmpdfzip_box:hover {\n background: $hover-blue;\n color: $white;\n }\n\n .zip_open {\n display: inline;\n }\n }\n\n /*\n * DataTables filter (search bar)\n */\n .dataTables_filter {\n float: right !important;\n text-align: left !important;\n }\n\n /*\n * DataTables length (how many per page)\n */\n .dataTables_length {\n float: left !important;\n }\n}","/*\n * Tabs on inbox page\n */\n.ui-widget-header {\n background: $light-grey !important;\n border: 0 !important;\n margin-bottom: 6px !important;\n}\n\n.ui-widget-content {\n border: 0 !important;\n}\n\n.ui-tabs .ui-tabs-panel {\n padding: 0 !important;\n}\n\n.ui-tabs .ui-tabs-nav {\n padding: 10px 10px 0 !important;\n}\n\n/*\n * Unanonymise form in modal\n */\n.tii_unanonymise_reveal_form .unanonymise_form,\n.mod_turnitintooltwo .edit_course_end_date_form {\n background: #FFFFFF;\n padding: 12px 12px 0;\n height: 100%;\n overflow: hidden\n}\n\n.tii_unanonymise_reveal_form #unanonymise_desc {\n text-align: center;\n font-weight: bold;\n display: block;\n margin-bottom: 10px;\n}\n\n.tii_unanonymise_reveal_form .unanonymise_form textarea {\n height: 90px;\n width:80%;\n}\n\n\n/*\n * Email non submitters form\n */\n.mod_turnitintooltwo .nonsubmitters_desc {\n padding: 10px 0;\n}\n\n.mod_turnitintooltwo .nonsubmittersform textarea {\n height: 90px;\n width:80%;\n}\n\n.mod_turnitintooltwo #fitem_id_nonsubmitters_sendtoself .fitemtitle {\n display: none;\n}\n\n.mod_turnitintooltwo .nonsubmittersform .general_warning {\n margin-top:8px;\n}\n\n.mod_turnitintooltwo .nonsubmittersformsuccessmsg {\n text-align: center;\n padding-top: 46px;\n}\n\n#download_links {\n margin-left: 15px;\n top: -5px;\n}\n\n.dropdown-menu .origchecked_zip_open:hover {\n background-color: $hover-blue;\n display: block;\n line-height: 20px;\n color: #fff;\n font-weight: normal;\n}\n\n.dropdown-menu {\n white-space: nowrap;\n margin-top: 2px !important;\n}\n\n#rubric_view_form {\n padding-left: 6px;\n}\n\n.inbox {\n .peermark-loading-span img.icon {\n margin-right: 0px;\n }\n}\n\n.selectlong {\n width: 530px;\n}","/*\n * Helpers and general styles\n */\n\n/*\n * Lets us clear floats for older moodles\n */\n.clearfix:after {\n content: \".\";\n visibility: hidden;\n display: block;\n height: 0;\n clear: both;\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\nh3.main {\n line-height: 40px;\n}\n\n.mod_turnitintooltwo {\n .fitem_fbutton {\n padding-top:12px;\n }\n\n span.dimmed {\n color:#999999;\n }\n\n #assignmentBrowserTable_wrapper {\n padding: 10px;\n }\n\n .nowrap {\n white-space:nowrap;\n }\n\n .italic {\n font-style: italic;\n }\n\n .underline {\n text-decoration: underline;\n }\n\n .bold,\n #or_container {\n font-weight:bold;\n }\n\n span.link {\n color: #0000FF;\n }\n}","// Colours\n$light-grey: #EFEFEF;\n$dark-grey: #A8A8A8;\n$light-blue: #bbe6ff;\n$light-blue2: #6fcaff;\n$gm-blue: #0070A8;\n$white: #fff;\n$red: #B94A48;\n$green: #19B719;\n$hover-blue: #00699e;\n\n// Table border colours\n$border-color: $light-grey;\n\n// Odd / Even colours for table\n$odd-color: $light-grey;\n$even-color: $white;\n\n// Table padding\n$table-padding: 15px;\n$table-head-padding: $table-padding - 5px;","/*\n 1. DataTable Table\n 2. DataTable Pagination\n 3. Score colour\n*/\n\n\n/*\n * 1. Table styles and related\n */\n.submissionsDataTable, #ppErrors, #courseBrowserTable {\n width:100%;\n font-size: 13px;\n border:1px solid $border-color;\n width:100% !important;\n margin-top: 6px !important;\n\n .ccheckbox {\n text-align: center;\n padding: 8px 10px 2px !important;\n }\n\n .odd {\n background: $odd-color !important;\n\n .sorting_1 {\n background: darken($odd-color, 3%) !important;\n }\n }\n\n .even {\n background: $even-color !important;\n\n .sorting_1 {\n background: darken($even-color, 2%) !important;\n }\n }\n\n a {\n text-decoration: none;\n }\n\n thead th {\n border-bottom: 0 !important;\n }\n\n th {\n padding: $table-head-padding 20px !important;\n }\n\n td {\n padding: $table-padding 10px !important;\n font-size: 13px;\n vertical-align: top;\n }\n\n .sorting_disabled {\n cursor: default;\n }\n\n .left {\n text-align: left;\n }\n\n .right {\n text-align: right;\n }\n\n .grademark_open,\n .grademark_grade,\n .origreport_score {\n float:right;\n }\n\n .grademark_grade,\n .origreport_score {\n padding-right:8px;\n }\n\n th.narrow,\n td.narrow {\n width: 60px;\n }\n\n .submit_nothing, .submission_title, .delete_paper {\n cursor: pointer;\n }\n\n .score_colour {\n width:36px;\n display:inline-block;\n float:right;\n }\n\n .late_submission {\n color: #d31900;\n }\n\n #tii_digital_receipt_icon {\n margin-top: -3px;\n margin-right: 5px;\n }\n\n}\n\n\n/*\n * 2. DataTables pagination\n */\n.dataTables_paginate {\n margin-top: 6px;\n font-size:12px;\n float: right;\n\n a {\n display: inline-block;\n border: 1px solid $border-color;\n padding: 2px 5px;\n background-position: left -2px;\n }\n\n .current {\n background: #EFEFEF;\n }\n\n span a {\n border-right: 0;\n }\n\n .previous {\n border-right: 0;\n }\n\n}\n\n.dataTables_info {\n float:left;\n clear:none;\n margin-top: 8px;\n text-transform: uppercase;\n font-size: 11px;\n}\n\n\n/*\n * 3. Score colour for originality report.\n */\n.mod_turnitintooltwo .score_colour_ { background: #999999; }\n.mod_turnitintooltwo .score_colour_0 { background: #3552B7; }\n.mod_turnitintooltwo .score_colour_10 { background: #617B8D; }\n.mod_turnitintooltwo .score_colour_20 { background: #A1B556; }\n.mod_turnitintooltwo .score_colour_30 { background: #DAE235; }\n.mod_turnitintooltwo .score_colour_40 { background: #EDAC28; }\n.mod_turnitintooltwo .score_colour_50 { background: #EDD42F; }\n.mod_turnitintooltwo .score_colour_60 { background: #ECAD28; }\n.mod_turnitintooltwo .score_colour_70 { background: #E15A21; }\n.mod_turnitintooltwo .score_colour_80 { background: #E05A21; }\n.mod_turnitintooltwo .score_colour_90 { background: #DC4321; }\n.mod_turnitintooltwo .score_colour_100 { background: #DB4221; }\n\n\n.mod_turnitintooltwo .enrol_link {\n padding: 6px 18px 0 0;\n}","/*\n 1. Styles within modal\n 2. Styles for actual colorbox modal\n 3. Styles for close bar at the top\n*/\n\n/*\n * 1. Within the modal\n */\n#page-mod-turnitintooltwo-view {\n // padding-top: 20px;\n}\n\n.mod_turnitintooltwo #id_submissiontext {\n width:80%;\n height:320px;\n}\n\n/*\n * 2. Colorbox modal iframe\n */\n#colorbox {\n margin-top: 60px;\n outline: 0 !important;\n overflow: visible !important;\n}\n\n.cboxIframe {\n border-radius: 5px;\n}\n\n#cboxContent {\n margin-top: 0 !important;\n}\n\n/*\n * 3. Modal close bar\n */\n#tii_close_bar {\n position: fixed;\n z-index: 9999;\n right: 0;\n top: 0;\n width: 100%;\n height: 45px;\n background: rgba(0, 0, 0, .3);\n\n a {\n color: #fff;\n display: block;\n background: #000;\n width: 100px;\n text-align: center;\n float: right;\n text-decoration: none;\n height: 45px;\n line-height: 43px;\n }\n}",".partDetails {\n font-size: 13px;\n margin-bottom:0px;\n width:100%;\n border: 1px solid $border-color;\n\n tr {\n border-right: 1px solid $border-color;\n }\n\n th {\n padding: 6px 12px 6px;\n border-bottom: 1px solid $border-color;\n }\n\n td {\n border: 1px solid $border-color;\n border-top: 0;\n padding: 12px 12px 4px;\n }\n\n td.data,\n td.export_data,\n td.rubric_qm {\n text-align: center;\n }\n\n td.export_data {\n padding-top:12px;\n }\n\n td.introduction_cell {\n border:0;\n padding:0;\n }\n\n td.peermarks {\n border:0;\n }\n\n td.peermark_assignments_cell {\n padding:0;\n border:0;\n }\n\n .editable-click {\n border:none;\n position: relative;\n padding-right: 24px;\n\n &:before {\n position:absolute;\n font-family: FontAwesome;\n top:0;\n right:0;\n font-size: 1.33333em !important;\n color: $dark-grey !important;\n line-height: 0.75em;\n vertical-align: -15%;\n content: \"\\f040\";\n display: inline-block;\n font-style: normal;\n font-weight: normal;\n font-size-adjust: none;\n font-stretch: normal;\n font-feature-settings: normal;\n font-language-override: normal;\n font-kerning: auto;\n font-synthesis: weight style;\n font-variant: normal;\n font-size: inherit;\n text-rendering: auto;\n -moz-osx-font-smoothing: grayscale;\n }\n\n &:hover {\n border-bottom: 0 !important;\n }\n }\n\n /*\n * Introduction (summary section)\n */\n .introduction,\n .peermark_instructions {\n padding: 6px 10px;\n border-bottom: 1px solid $border-color;\n display: none;\n }\n\n .introduction h2 {\n margin: 8px 0;\n }\n\n .introduction p {\n margin: 6px 0;\n }\n\n /*\n * Export options\n */\n .row_export_xls,\n .row_export_pdf,\n .row_export_orig,\n .zip_open,\n .row_rubric_manager,\n .row_quickmark_manager {\n display:inline;\n }\n\n .toggle_peermark_instructions img {\n display: block;\n }\n\n .toggle_summary,\n .toggle_peermarks,\n .toggle_peermark_instructions {\n cursor: pointer;\n float:left;\n position: relative;\n top:-3px;\n margin-right:8px;\n }\n\n .peermark_header {\n margin-bottom:8px;\n float:left;\n }\n}\n\n#turnitin_sync_all_grades {\n float: right;\n font-size: 16px;\n}\n\n.turnitin_sync_grades, .turnitin_syncing_grades {\n cursor: pointer;\n margin-bottom: 20px;\n}\n\n.turnitin_syncing_grades {\n display: none;\n}\n\n.peermarkDetails {\n width: 100%;\n border-top: 1px solid $border-color;\n\n td {\n padding:8px 12px;\n border-bottom-width: 0;\n }\n\n td.peermark_instructions_cell {\n border:0;\n padding:0;\n }\n}\n\n.quickmark_manager_launch {\n padding: 2px 0 2px 30px;\n height: 20px;\n color: #0070A8 !important;\n}\n\n.rubric_manager_launch,\n.rubric_view_launch {\n padding:4px 0px 4px 0px;\n line-height: 22px;\n color: #0070A8 !important;\n}\n\n.rubric_right_margin {\n margin-right:7px;\n}\n\n.tii_peermark_manager_launch {\n color: #009900 !important;\n}\n\n.tii_peermark_reviews_launch {\n color: #009900 !important;\n}\n\n.tii_peermark_manager_launch,\n.tii_peermark_reviews_launch {\n padding: 4px 0 4px 46px;\n height: 22px;\n}\n\n.mod_turnitintooltwo .peermark_loading_row {\n text-align: center;\n margin:0 auto 8px;\n}",".turnitin_ula_text {\n padding-top: 15px;\n text-align: center;\n}\n\n.turnitin_ula input[type=\"submit\"] {\n margin: 0;\n}\n\n.turnitin_ula {\n\tcursor:pointer;\n\ttext-decoration: underline;\n\ttext-align: center;\n\tborder: 1px solid #CC0000;\n\tpadding: 12px 12px 12px;\n\tcolor: #FF0000;\n\tmargin-top:12px;\n\tmargin-bottom:16px !important;\n\tfont-size: 14px;\n\tfont-weight: bold;\n\tdisplay: block;\n}\n\nnoscript.turnitin_ula_noscript {\n border: 1px solid #CC0000;\n padding: 8px;\n background: #FFE9E8;\n width: 99%;\n text-align:center;\n display:block;\n margin:16px 6px;\n line-height: 28px;\n}\n.turnitin_ula_warn {\n\tcolor: #FF0000;\n}","#page-admin-setting-modsettingturnitintooltwo {\n\n #test_link,\n #testing_container {\n margin-bottom:8px;\n }\n\n #test_link img {\n position: relative;\n top:4px;\n }\n\n #test_result {\n margin: 4px 0 0;\n padding: 5px 10px;\n width: 500px;\n text-align: center;\n }\n\n .test_link_success {\n border: 1px solid #00CC00;\n background: #C3FDB8;\n }\n\n .test_link_fail {\n border:1px solid #CC0000;\n background: #E77471;\n }\n\n .smallicon {\n vertical-align: middle;\n }\n\n\n\n // Upgrade\n .tii_upgrade_check,\n .tii_upgrading_check {\n font-size: 12px;\n }\n\n .tii_upgrade_check {\n text-decoration: underline;\n cursor: pointer;\n }\n\n .tii_upgrade_check,\n .tii_upgrading_check {\n width: 30px;\n height: 30px;\n display: inline-block;\n }\n .tii_upgrade_check img,\n .tii_upgrading_check img {\n padding: 0 0 5px 5px;\n vertical-align: middle;\n }\n\n .tii_upgrading_check img {\n position: relative;\n top: 3px;\n }\n}","/*\n * No other place to go.\n */\n.student_read,\n.centered_cell,\n.centered_div {\n text-align:center !important;\n}\n\n.centered_cb_cell {\n padding-right:8px;\n padding-left:8px;\n}\n\nbody[class*='-moodle23'] .mod_turnitintooltwo .centered_cb_cell input {\n position: relative;\n left: -1px;\n}\n\n.mod_turnitintooltwo .hidden_class, .mod_turnitintooltwo #user_role, .mod_turnitintooltwo .launch_form,\n.mod_turnitintooltwo #useragreement_form form, .mod_turnitintooltwo #assignment_id, .mod_turnitintooltwo #course_id,\n.mod_turnitintooltwo #submission_id, .mod_turnitintooltwo #tii_course_id, .mod_turnitintooltwo #tii_course_name,\n.mod_turnitintooltwo .enrolling_container, .mod_turnitintooltwo .zip_downloads, .mod_turnitintooltwo #view_context,\n.mod_turnitintooltwo #inbox_form, .mod_turnitintooltwo .unanonymise_form, .mod_turnitintooltwo .edit_course_end_date_form,\n.mod_turnitintooltwo #course_category, .mod_turnitintooltwo #class_ids, .mod_turnitintooltwo #create_assignments,\n.mod_turnitintooltwo .row_peermark_reviews, .mod_turnitintooltwo .peermark_instructions,\n.mod_turnitintooltwo .toggle_peermark_instructions .hide_peermark_instructions,\n.mod_turnitintooltwo #courseBrowserTable_filter, .mod_turnitintooltwo .js_required,\n.mod_turnitintooltwo #course_category, .mod_turnitintooltwo #create_assignments,\n#page-admin-setting-modsettingturnitintooltwo .tii_upgrading_check, #page-admin-setting-modsettingturnitintooltwo #test_link,\n#page-admin-setting-modsettingturnitintooltwo #test_result, #page-admin-setting-modsettingturnitintooltwo .test_connection,\n#page-admin-setting-modsettingturnitintooltwo #testing_container, .mod_turnitintooltwo .peermark_loading,\n.mod_turnitintooltwo .messages_loading, .mod_turnitintooltwo .tii_table_functions, .mod_turnitintooltwo .refresh_row .fa-spinner,\n.mod_turnitintooltwo #enrolling_error, .mod_turnitintooltwo .dv_url {\n display:none;\n}\n\n\n.mod_turnitintooltwo .submission_form_container, .mod_turnitintooltwo .class_recreation,\n.mod_turnitintooltwo #digital_receipt {\n padding: 0 24px;\n}\n\n.mod_turnitintooltwo .row_score, .mod_turnitintooltwo .row_peermark_manager, .mod_turnitintooltwo .row_peermark_reviews {\n float:right;\n}\n\n.mod_turnitintooltwo .grademark_open, .mod_turnitintooltwo .origreport_open, .mod_turnitintooltwo .download_original_open,\n.mod_turnitintooltwo .zip_open, .mod_turnitintooltwo .enrol_link, .mod_turnitintooltwo .refresh_link,\n.mod_turnitintooltwo .refresh_row, .mod_turnitintooltwo .messages_inbox, .mod_turnitintooltwo span.link,\n.mod_turnitintooltwo .rubric_manager_launch, .mod_turnitintooltwo .rubric_view_launch,\n.mod_turnitintooltwo .quickmark_manager_launch, .mod_turnitintooltwo .tii_peermark_manager_launch,\n.mod_turnitintooltwo .tii_peermark_reviews_launch, #page-admin-setting-modsettingturnitintooltwo #test_link {\n cursor:pointer;\n}\n\n.mod_turnitintooltwo #submitting_loader, .mod_turnitintooltwo #refresh_loading {\n display:none;\n padding: 16px 0 8px;\n text-align: center;\n}\n\n.grey {\n color: $dark-grey !important;\n}\n\n.light-blue {\n color: $light-blue !important;\n}\n\n.gm-blue {\n color: $gm-blue !important;\n}\n\n.green {\n color: $green !important;\n}\n\n.red {\n color: $red !important;\n}\n\n.tii_checkagainstnote, .tii_genspeednote {\n border: 1px solid $light-blue2;\n background: $light-blue;\n padding: 10px;\n margin-bottom: 16px;\n}\n\n.submissionsDataTable .fa,\n.partDetails .fa {\n color: darken($dark-grey, 10%);\n}\n\n.middle-padding {\n padding: 0 5px;\n}\n\n.mod_turnitintooltwo #course_search_options, .mod_turnitintooltwo .create_checkboxes {\n border: 1px solid $border-color;\n padding: 6px 10px;\n}\n\n.mod_turnitintooltwo .create_checkboxes {\n display: none;\n margin-top: 12px;\n}\n\n.icon_margin {\n margin-right: 20px;\n}\n.icon_smallmargin {\n margin-right: 10px;\n}\n\n/**\n * Helpdesk Form\n */\n\n#tii_solution_template,\n.tii_wizard_options,\n.tii_solutions,\n#btn_tiisupportform_link,\n#tii_helpdesk_mod_id {\n display: none;\n}\n\n#tii_solution_template, #tii_wizard_container {\n border: 1px solid $light-grey;\n}\n\n#tii_solution_template {\n padding: 0px 16px 16px;\n}\n\n#tii_wizard_container {\n padding: 16px 16px 12px;\n margin-bottom: 12px;\n}\n\n.mod_turnitintooltwo iframe {\n border: 1px solid $light-grey;\n}\n\n#migration-progress-bar {\n background-color: #FFFFFF;\n height: 30px;\n line-height: 28px;\n border: 1px solid;\n border-radius: 3px;\n margin: 15px 0px 30px 0px;\n}\n#migration-progress, #migration-progress-todo {\n width: 0%;\n height: 100%;\n text-align: center;\n float: left;\n font-size: 14px;\n text-align: center;\n}\n#migration-progress {\n background-color: #0073D2;\n color: #fff;\n}\n.migration-spinner {\n text-align: center;\n}\n\n.enablemigrationtool {\n text-align: center;\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n background-color: #0e90d2;\n background-image: -moz-linear-gradient(top,#149bdf,#0480be);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));\n background-image: -webkit-linear-gradient(top,#149bdf,#0480be);\n background-image: -o-linear-gradient(top,#149bdf,#0480be);\n background-image: linear-gradient(to bottom,#149bdf,#0480be);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);\n -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-transition: width 0.6s ease;\n -moz-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n\n#migration-progress-bar {\n background-color: #FFFFFF;\n height: 30px;\n line-height: 28px;\n border: 1px solid;\n border-radius: 3px;\n margin: 15px 0px 30px 0px;\n}\n#migration-progress, #migration-progress-todo {\n width: 0%;\n height: 100%;\n text-align: center;\n float: left;\n font-size: 14px;\n text-align: center;\n}\n#migration-progress {\n background-color: #0073D2;\n color: #fff;\n}\n.migration-spinner {\n text-align: center;\n}\n\n.enablemigrationtool {\n text-align: center;\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n background-color: #0e90d2;\n background-image: -moz-linear-gradient(top,#149bdf,#0480be);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));\n background-image: -webkit-linear-gradient(top,#149bdf,#0480be);\n background-image: -o-linear-gradient(top,#149bdf,#0480be);\n background-image: linear-gradient(to bottom,#149bdf,#0480be);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);\n -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-transition: width 0.6s ease;\n -moz-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n\n.data-table-splitter {\n float: left;\n padding-right: 20px;\n}\n.yellowtest{color: yellow;}\n\n#migrationform #fitem_id_submitbutton, \n#migration-delete-selected #fitem_id_submitbutton, \n#fitem_id_enablemigrationtool {\n width: 75%;\n margin: 0 auto;\n background-color: #FFFFFF;\n}\n#fitem_id_enablemigrationtool .fitemtitle {\n width: 300px;\n}\n#migrationform {\n margin: 30px 0px;\n}\n\n.migrationheader {\n color: #003A69;\n font-weight: normal;\n margin-bottom: 15px;\n}\n.mod_turnitintooltwo .btn-primary {\n background: #0073D2;\n}\n.mod_turnitintooltwo .btn-primary:hover {\n background: #00569E;\n}\n.mod_turnitintooltwo .btn-primary:active {\n background: #003A69;\n}\n.mod_turnitintooltwo .btn-primary {\n box-shadow: none;\n border: none;\n height: 35px;\n margin-right: 11px;\n border-radius: 3px;\n}\n\n.migrationTable_length {\n margin-top: 20px;\n}\n\n#migrationTable .fa-times {\n color: #FF0000;\n}\n\n#migrationTable .fa-check {\n color: #008000;\n}\n",".tii_digital_receipt {\n display: inline-block;\n width: 150px;\n}\n\n#tii_digital_receipt_box {\n padding: 20px;\n background: #fff;\n\n .generaltable {\n width: 100%;\n }\n\n .logo {\n display: block;\n margin: 0 auto;\n width: 214px;\n height: 68px;\n }\n\n #tii_receipt_print {\n text-align: right;\n display: block;\n }\n\n}\n\n#digital_receipt {\n margin: 0;\n}\n\n.mod_turnitintooltwo #upload_success {\n color: #CC0000;\n}",".members {\n // Overwrite datatables CSS for loading message to cover the whole table\n // accurately. By default datatables centers the loading message vertically\n // and horizontally but it is only the size of the message meaning a user\n // can click the content being loaded behind the message as the loading mask\n // won't cover it all. Fix is to create a loading mask that covers all the\n // loading content and position the message within the mask\n .dataTables_wrapper .dataTables_processing {\n // cover entire table that is loading\n top: 0px;\n left: 0px;\n right: 0px;\n height: 100%;\n margin: 0px;\n padding: 0px;\n\n .loading-message {\n // position message within loading element\n position: absolute;\n top: 50%;\n left: 0px;\n right: 0px;\n margin-top: -10px; // half line-height\n }\n }\n}\n","/*\nLocated at mod/turnitintooltwo/settings_extras.php?cmd=courses\n*/\n\n.edit_course_end_date_form {\n padding: 20px;\n background: #fff;\n\n #edit_end_date_desc {\n text-align: center;\n margin-bottom: 20px;\n }\n\n .fitemtitle {\n float: none !important;\n text-align: center !important;\n width: 100% !important;\n display: block !important;\n }\n\n .fdate_selector {\n float: none !important;\n display: block !important;\n margin: 0 auto !important;\n width: 256px !important;\n }\n\n .fbutton {\n width: 100% !important;\n margin: 0 !important;\n }\n\n #id_save_end_date {\n margin: 0 auto !important;\n display: block !important;\n }\n}"]} \ No newline at end of file diff --git a/tests/generator/lib.php b/tests/generator/lib.php deleted file mode 100644 index 011274e8..00000000 --- a/tests/generator/lib.php +++ /dev/null @@ -1,90 +0,0 @@ -. - -defined('MOODLE_INTERNAL') || die(); - -/** - * turnitintooltwo module data generator class - * - * @package mod_turnitintooltwo - * @category test - * @copyright 2017 John McGettrick - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class mod_turnitintooltwo_generator extends testing_module_generator { - - /** - * Create a Turnitin assignment on the course. - */ - public function create_assignment($record = null, array $options = null) { - $record = (object)(array)$record; - - $defaultsettings = array( - 'defaultdtstart' => time(), - 'defaultdtdue' => time(), - 'defaultdtpost' => time(), - 'anon' => 0, - 'name' => 'Test Assignment', - 'grade' => 100, - 'numparts' => 1, - 'type' => 0, - 'grade' => 100, - 'allowlate' => 0, - 'reportgenspeed' => 0, - 'submitpapersto' => 1, - 'spapercheck' => 1, - 'internetcheck' => 1, - 'journalcheck' => 1, - 'introformat' => 1, - 'timecreated' => time(), - 'timemodified' => time() - ); - - foreach ($defaultsettings as $name => $value) { - if (!isset($record->{$name})) { - $record->{$name} = $value; - } - } - - return parent::create_instance($record, (array)$options); - } - - /** - * Create a part on the Turnitin assignment. - */ - public function create_part(array $record = null) { - global $DB; - - $record = (object)(array)$record; - - $defaultsettings = array( - 'partname' => 'Test Part', - 'dtstart' => time(), - 'dtdue' => time(), - 'dtpost' => time(), - 'maxmarks' => 100, - 'deleted' => 0 - ); - - foreach ($defaultsettings as $name => $value) { - if (!isset($record->{$name})) { - $record->{$name} = $value; - } - } - - return $DB->insert_record("turnitintooltwo_parts", $record); - } -} diff --git a/tests/unit/classes/nonsubmitters/nonsubmitters_message_test.php b/tests/unit/classes/nonsubmitters/nonsubmitters_message_test.php index cbb93391..95367b89 100644 --- a/tests/unit/classes/nonsubmitters/nonsubmitters_message_test.php +++ b/tests/unit/classes/nonsubmitters/nonsubmitters_message_test.php @@ -29,7 +29,7 @@ public function test_send_instructor_message() { $user1 = $this->getDataGenerator()->create_user(); // Send message to both instructors. - $nonsubmitters_message->send_message($user1->id, 'Nonsubmitters Subject', 'Nonsubmitters Message'); + $nonsubmitters_message->send_message($user1->id, 'Nonsubmitters Subject', 'Nonsubmitters Message', 1); $messages = $sink->get_messages(); diff --git a/tests/unit/classes/privacy/provider_test.php b/tests/unit/classes/privacy/provider_test.php new file mode 100644 index 00000000..9d41cf3d --- /dev/null +++ b/tests/unit/classes/privacy/provider_test.php @@ -0,0 +1,276 @@ +. + +/** + * Privacy provider tests. + * + * @package mod_turnitintooltwo + * @copyright 2018 John McGettrick + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +use core_privacy\local\metadata\collection; +use core_privacy\local\request\deletion_criteria; +use mod_turnitintooltwo\privacy\provider; + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/mod/turnitintooltwo/tests/unit/lib_test.php'); + +class mod_turnitintooltwo_privacy_provider_testcase extends \core_privacy\tests\provider_testcase { + + public function setup() { + global $DB; + + $this->resetAfterTest(); + + $this->testcase = new mod_lib_testcase(); + $generator = $this->getDataGenerator(); + + // Set up test assignment. + $this->turnitintooltwoassignment = $this->testcase->make_test_tii_assignment(); + + // Set up test module. + $cmid = $this->testcase->make_test_module( + $this->turnitintooltwoassignment->turnitintooltwo->course, + 'turnitintooltwo', + $this->turnitintooltwoassignment->turnitintooltwo->id + ); + $this->cm = $DB->get_record("course_modules", array('id' => $cmid)); + context_module::instance($cmid); + + $this->parts = $this->testcase->make_test_parts( + 'turnitintooltwo', + $this->turnitintooltwoassignment->turnitintooltwo->id, + 1 + ); + + // Create and enrol student. + $this->student1 = $generator->create_user(); + $this->studentrole = $DB->get_record('role', ['shortname' => 'student']); + $generator->enrol_user( + $this->student1->id, + $this->turnitintooltwoassignment->turnitintooltwo->course, + $this->studentrole->id + ); + + // Create and enrol another student. + $this->student2 = $this->getDataGenerator()->create_user(); + $generator->enrol_user( + $this->student2->id, + $this->turnitintooltwoassignment->turnitintooltwo->course, + $this->studentrole->id + ); + + // Create test submission for student1. + $this->testcase->create_test_submission( + $this->turnitintooltwoassignment, + $this->student1->id, + current($this->parts)->id + ); + } + + /** + * Test that metadata is returned. + */ + public function test_get_metadata() { + $this->resetAfterTest(); + + $collection = new collection('mod_turnitintooltwo'); + $newcollection = provider::get_metadata($collection); + $itemcollection = $newcollection->get_collection(); + + $this->assertCount(4, $itemcollection); + + // Verify core_files data is returned. + $this->assertEquals('core_files', $itemcollection[0]->get_name()); + $this->assertEquals('privacy:metadata:core_files', $itemcollection[0]->get_summary()); + + // Verify turnitintooltwo_users data is returned. + $this->assertEquals('turnitintooltwo_users', $itemcollection[1]->get_name()); + + $privacyfields = $itemcollection[1]->get_privacy_fields(); + $this->assertArrayHasKey('userid', $privacyfields); + $this->assertArrayHasKey('turnitin_uid', $privacyfields); + $this->assertArrayHasKey('instructor_defaults', $privacyfields); + $this->assertArrayHasKey('instructor_rubrics', $privacyfields); + $this->assertArrayHasKey('user_agreement_accepted', $privacyfields); + + $this->assertEquals('privacy:metadata:turnitintooltwo_users', $itemcollection[1]->get_summary()); + + // Verify turnitintooltwo_submissions data is returned. + $this->assertEquals('turnitintooltwo_submissions', $itemcollection[2]->get_name()); + + $privacyfields = $itemcollection[2]->get_privacy_fields(); + $this->assertArrayHasKey('userid', $privacyfields); + $this->assertArrayHasKey('submission_title', $privacyfields); + $this->assertArrayHasKey('submission_filename', $privacyfields); + $this->assertArrayHasKey('submission_objectid', $privacyfields); + $this->assertArrayHasKey('submission_score', $privacyfields); + $this->assertArrayHasKey('submission_grade', $privacyfields); + $this->assertArrayHasKey('submission_attempts', $privacyfields); + $this->assertArrayHasKey('submission_modified', $privacyfields); + $this->assertArrayHasKey('submission_unanon', $privacyfields); + $this->assertArrayHasKey('submission_unanonreason', $privacyfields); + $this->assertArrayHasKey('submission_transmatch', $privacyfields); + $this->assertArrayHasKey('submission_orcapable', $privacyfields); + $this->assertArrayHasKey('submission_hash', $privacyfields); + + $this->assertEquals('privacy:metadata:turnitintooltwo_submissions', $itemcollection[2]->get_summary()); + + // Verify turnitintooltwo_client data is returned. + $this->assertEquals('turnitintooltwo_client', $itemcollection[3]->get_name()); + + $privacyfields = $itemcollection[3]->get_privacy_fields(); + $this->assertArrayHasKey('email', $privacyfields); + $this->assertArrayHasKey('firstname', $privacyfields); + $this->assertArrayHasKey('lastname', $privacyfields); + $this->assertArrayHasKey('submission_title', $privacyfields); + $this->assertArrayHasKey('submission_filename', $privacyfields); + + $this->assertEquals('privacy:metadata:turnitintooltwo_client', $itemcollection[3]->get_summary()); + } + + /** + * Test that user's contexts are exported. + */ + public function test_get_contexts_for_userid() { + $contextlist = provider::get_contexts_for_userid($this->student1->id); + + $this->assertCount(1, $contextlist); + $contextforuser = $contextlist->current(); + $cmcontext = context_module::instance($this->cm->id); + $this->assertEquals($cmcontext->id, $contextforuser->id); + } + + /** + * Test that export_user_data returns data. + */ + public function test_export_user_data() { + $cm = get_coursemodule_from_instance('turnitintooltwo', $this->turnitintooltwoassignment->turnitintooltwo->id); + $context = context_module::instance($cm->id); + + // Export all of the data for the context. + $this->export_context_data_for_user($this->student1->id, $context, 'mod_turnitintooltwo'); + $writer = \core_privacy\local\request\writer::with_context($context); + $this->assertTrue($writer->has_any_data()); + } + + /** + * Test data is deleted for all users in a given context. + */ + public function test_delete_data_for_all_users_in_context() { + global $DB; + $this->resetAfterTest(); + + $turnitintooltwoassignment = $this->turnitintooltwoassignment; + + // Create test submission for student2. + $this->testcase->create_test_submission( + $turnitintooltwoassignment, + $this->student2->id, + current($this->parts)->id + ); + + // Before deletion, we should have 2 submissions. + $count = $DB->count_records( + 'turnitintooltwo_submissions', + array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id) + ); + $this->assertEquals(2, $count); + + // Delete data based on context. + $cmcontext = context_module::instance($this->cm->id); + provider::delete_data_for_all_users_in_context($cmcontext); + + // After deletion, there should be no submissions for that assignment. + $count = $DB->count_records( + 'turnitintooltwo_submissions', + array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id) + ); + $this->assertEquals(0, $count); + } + + /** + * Test all data is deleted for a user. + */ + public function test_delete_data_for_user() { + global $DB; + + $turnitintooltwoassignment = $this->turnitintooltwoassignment; + + // Create a second assignment. + $turnitintooltwoassignment2 = $this->testcase->make_test_tii_assignment(); + // $cm2 = get_coursemodule_from_instance('turnitintooltwo', $turnitintooltwoassignment2->turnitintooltwo->id); + + // Set up second module. + $cm2id = $this->testcase->make_test_module( + $turnitintooltwoassignment2->turnitintooltwo->course, + 'turnitintooltwo', + $turnitintooltwoassignment2->turnitintooltwo->id + ); + + // Submit to second assignment as student1. + $this->testcase->create_test_submission( + $turnitintooltwoassignment2, + $this->student1->id, + current($this->parts)->id + ); + + // Submit to first assignment as student2. + $this->testcase->create_test_submission( + $turnitintooltwoassignment, + $this->student2->id, + current($this->parts)->id + ); + + // Before deletion, we should have 2 responses to the first assignment. + $count = $DB->count_records( + 'turnitintooltwo_submissions', + array('turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id) + ); + $this->assertEquals(2, $count); + + $context1 = context_module::instance($this->cm->id); + $context2 = context_module::instance($cm2id); + $contextlist = new \core_privacy\local\request\approved_contextlist( + $this->student1, + 'turnitintooltwo', + array($context1->id, $context2->id) + ); + provider::delete_data_for_user($contextlist); + + // After deletion, the submissions for the first student should have been deleted. + $count = $DB->count_records( + 'turnitintooltwo_submissions', + array( + 'turnitintooltwoid' => $turnitintooltwoassignment->turnitintooltwo->id, + 'userid' => $this->student1->id + ) + ); + $this->assertEquals(0, $count); + + // Confirm that there is only one submission in total available. + $submissions = $DB->get_records('turnitintooltwo_submissions'); + $this->assertCount(1, $submissions); + + // Check that it belongs to student2. + $submission = reset($submissions); + $this->assertEquals($this->student2->id, $submission->userid); + } +} diff --git a/tests/unit/classes/v1migration/v1migration_test.php b/tests/unit/classes/v1migration/v1migration_test.php index 7c98539c..504a26fa 100755 --- a/tests/unit/classes/v1migration/v1migration_test.php +++ b/tests/unit/classes/v1migration/v1migration_test.php @@ -19,6 +19,7 @@ global $CFG; require_once($CFG->dirroot . '/mod/turnitintooltwo/classes/v1migration/v1migration.php'); require_once($CFG->dirroot . '/mod/turnitintooltwo/tests/unit/generator/lib.php'); +require_once($CFG->libdir . "/gradelib.php"); /** * Tests for classes/v1migration/v1migration @@ -95,36 +96,6 @@ public function test_set_settings_menu_v1_installed() { $this->assertEquals(0, $module->value); } - /** - * Test that the progress bar displays the values we expect it to. - */ - public function test_progress_bar() { - global $DB; - - if (!$this->v1installed()) { - return false; - } - - // Generate a new course. - $course = $this->getDataGenerator()->create_course(); - - // Create some V1 assignments. - $v1assignment1 = $this->make_test_assignment($course->id, 'turnitintool'); - $v1assignment2 = $this->make_test_assignment($course->id, 'turnitintool'); - - $v1assignments = $DB->get_records('turnitintool'); - - // Set one of the assignments to migrated. - $update = new stdClass(); - $update->id = $v1assignment2->id; - $update->migrated = 1; - $DB->update_record('turnitintool', $update, false); - - - $progressbar = v1migration::output_progress_bar(); - $this->assertContains('50% complete', $progressbar); - $this->assertContains('width: 50%', $progressbar); - } /** * Make a test Turnitin assignment module for use in various test cases. @@ -132,8 +103,9 @@ public function test_progress_bar() { * @param string $modname Module name (turnitintool or turnitintooltwo) * @param string $assignmentname The name of the assignment. * @param string The number of submissions to make. + * @param int $tiiassignid - Specify a Turnitin assignment ID - use when creating multiple assignments to differentiate them. */ - public function make_test_assignment($courseid, $modname, $assignmentname = "", $submissions = 1) { + public function make_test_assignment($courseid, $modname, $assignmentname = "", $submissions = 1, $tiiassignid = 0) { global $DB; if (!$this->v1installed()) { @@ -165,7 +137,7 @@ public function make_test_assignment($courseid, $modname, $assignmentname = "", $assignment->id = $DB->insert_record($modname, $assignment); // Create Assignment Part. - $parts = $this->make_test_parts($modname, $assignment->id, 1); + $parts = $this->make_test_parts($modname, $assignment->id, 1, $tiiassignid); $part = current($parts); // Create Assignment Submission. @@ -176,7 +148,7 @@ public function make_test_assignment($courseid, $modname, $assignmentname = "", $this->make_test_module($courseid, $modname, $assignment->id, $addtocm); return $assignment; - } + } /** * Create a test submission on the specified assignment part. @@ -202,6 +174,27 @@ public function make_test_submission($modname, $partid, $assignmentid, $amount = } } + /** + * Create a grade entry for a student on an assignment. + * + * @param string $modname Module name (turnitintool or turnitintooltwo) + * @param int $assignmentid Assignment Module ID + * @param int $courseid Course ID + * @param int $userid The user we want to grade for. + * @param int $grade The grade we want to set. + */ + public function make_test_grade($module, $assignmentid, $courseid, $userid, $grade) { + $cm = get_coursemodule_from_instance($module, $assignmentid); + + $grades = new stdClass(); + $grades->rawgrade = $grade; + $grades->userid = $userid; + + $params['idnumber'] = $cm->idnumber; + + grade_update('mod/'.$module, $courseid, 'mod', $module, $assignmentid, 0, $grades, $params); + } + /** * Test the migrate modal. */ @@ -237,6 +230,8 @@ public function test_set_default_values() { return false; } + $this->resetAfterTest(); + // Fields to set to null. $nullcheckfields = array('grade', 'allowlate', 'reportgenspeed', 'submitpapersto', 'spapercheck', 'internetcheck', 'journalcheck', 'introformat', 'studentreports', 'dateformat', 'usegrademark', 'gradedisplay', 'autoupdates', 'commentedittime', 'commentmaxsize', @@ -404,7 +399,7 @@ public function test_migrate_multiple_submission() { // Create Assignment. $v1assignment = $this->make_test_assignment($course->id, 'turnitintool'); - + // Get part details. $part = $DB->get_record('turnitintool_parts', array('turnitintoolid' => $v1assignment->id)); @@ -455,7 +450,7 @@ public function test_migrate_multiple_unenrolled_users() { // Create Assignment. $v1assignment = $this->make_test_assignment($course->id, 'turnitintool', '', 0); - + // Get part details. $part = $DB->get_record('turnitintool_parts', array('turnitintoolid' => $v1assignment->id)); @@ -484,7 +479,7 @@ public function test_migrate_multiple_unenrolled_users() { $v2assignmentid = $v1migration->migrate(); // Verify both submissions have migrated. - $v2submissions = $DB->get_records('turnitintooltwo_submissions', + $v2submissions = $DB->get_records('turnitintooltwo_submissions', array('turnitintooltwoid' => $v2assignmentid, 'userid' => 0)); $this->assertEquals(2, count($v2submissions)); @@ -545,8 +540,6 @@ public function test_migrate_course() { Legacy field should be set to 1 on these tests. */ // Create our initial V2 course. - $v1iicourse = 9; - $course = new stdClass(); $course->courseid = 1; $course->ownerid = 1; @@ -623,7 +616,7 @@ public function test_migrate_gradebook() { $DB->set_field('turnitintooltwo_submissions', "migrate_gradebook", 1); // Test that this gradebook update was performed. - $response = $v1migration->migrate_gradebook($v2assignment->id); + $response = $v1migration->migrate_gradebook($v2assignment->id, $v1assignment->id, $course->id); $this->assertEquals("migrated", $response); // There should be no grades that require a migration. @@ -637,7 +630,7 @@ public function test_migrate_gradebook() { $DB->set_field('turnitintooltwo_submissions', "migrate_gradebook", 1); // Test that we return cron when there are more than 200 submissions. - $response = $v1migration->migrate_gradebook($v2assignment->id); + $response = $v1migration->migrate_gradebook($v2assignment->id, $v1assignment->id, $course->id); $this->assertEquals("cron", $response); // All grades should still require migration. @@ -645,7 +638,7 @@ public function test_migrate_gradebook() { $this->assertEquals(201, count($submissions)); // Test that we return migrated when using the cron workflow. - $response = $v1migration->migrate_gradebook($v2assignment->id, "cron"); + $response = $v1migration->migrate_gradebook($v2assignment->id, $v1assignment->id, $course->id, "cron"); $this->assertEquals("migrated", $response); // There should be no grades that require a migration. @@ -654,9 +647,10 @@ public function test_migrate_gradebook() { } /** - * Test that the titles have been updated after migrating. + * Test that the post migration task works as expected. */ - public function test_update_titles_post_migration() { + public function test_post_migration() { + global $DB; if (!$this->v1installed()) { @@ -681,10 +675,93 @@ public function test_update_titles_post_migration() { $v1assignment = $this->make_test_assignment($course->id, 'turnitintool', $v1assignmenttitle); $v1migration = new v1migration($course->id, $v1assignment); - // Test that the title gets updated after the migration. - $response = $v1migration->update_titles_post_migration(1); - $updatedassignment = $DB->get_record('turnitintool', array('id' => $v1assignment->id)); - $this->assertEquals("Test Assignment (Migrated)", $updatedassignment->name); + // Create V2 Assignment. + $v2assignmenttitle = "Test Assignment"; + $v2assignment = $this->make_test_assignment($course->id, 'turnitintooltwo', $v2assignmenttitle); + + // Perform post-migration tasks - ie deletion of V1 assignment. + $response = $v1migration->post_migration($v2assignment->id); + + // Check that the V1 assignment no longer exists. + $assignments = $DB->get_records('turnitintool', array('id' => $v1assignment->id)); + $this->assertEquals(0, count($assignments)); + + // Should return success. + $this->assertEquals("success", $response); + } + + public function test_get_grades_array() { + global $DB; + + if (!$this->v1installed()) { + return false; + } + + $this->resetAfterTest(); + + $course = $this->getDataGenerator()->create_course(); + + // create a user and enrol them on the course. + $student = $this->getDataGenerator()->create_user(); + $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $this->getDataGenerator()->enrol_user($student->id, $course->id, $studentrole->id, 'manual'); + + // Create V2 Assignment. + $v2assignmenttitle = "Test Assignment"; + $v2assignment = $this->make_test_assignment($course->id, 'turnitintooltwo', $v2assignmenttitle, 10); + + $v1migration = new v1migration($course->id, $v2assignment); + $v1migration->setup_v2_module($course->id, $v2assignment->id); + + // Set and get the grades for this assignment. + $this->make_test_grade("turnitintooltwo", $v2assignment->id, $course->id, $student->id, 10); + $response = v1migration::get_grades_array("turnitintooltwo", $v2assignment->id, $course->id); + + // Should return an empty array as there are no grades. + $this->assertEquals(array($student->id => 10), $response); + } + + public function test_handle_overridden_grade() { + global $DB; + + if (!$this->v1installed()) { + return false; + } + + $this->resetAfterTest(); + + // Generate a new course. + $course = $this->getDataGenerator()->create_course(); + + // Link course to Turnitin. + $courselink = new stdClass(); + $courselink->courseid = $course->id; + $courselink->ownerid = 0; + $courselink->turnitin_ctl = "Test Course"; + $courselink->turnitin_cid = 0; + $DB->insert_record('turnitintool_courses', $courselink); + + // Create V1 Assignment. + $v1assignmenttitle = "Test Assignment"; + $v1assignment = $this->make_test_assignment($course->id, 'turnitintool', $v1assignmenttitle); + + // Create V2 Assignment. + $v2assignmenttitle = "Test Assignment"; + $v2assignment = $this->make_test_assignment($course->id, 'turnitintooltwo', $v2assignmenttitle, 10); + + $v1migration = new v1migration($course->id, $v2assignment); + $v1migration->setup_v2_module($course->id, $v2assignment->id); + + $this->make_test_grade("turnitintooltwo", $v2assignment->id, $course->id, 1, 10); + + // Call the overriden grades function with a different grade to the one set above. + v1migration::handle_overridden_grade(20, 1, $v2assignment->id, $course->id); + + $grading_info = grade_get_grades($course->id, 'mod', 'turnitintooltwo', $v2assignment->id, 1); + + // Should return an empty array as there are no grades. + $this->assertEquals(20, $grading_info->items[0]->grades[1]->grade); + $this->assertGreaterThan(0, $grading_info->items[0]->grades[1]->overridden); } /** @@ -733,7 +810,7 @@ public function test_turnitintooltwo_getassignments() { $_POST["_"] = 1494857276336; $numAssignments = 20; $shownRecords = 10; - + // Generate a new course. $course = $this->getDataGenerator()->create_course(); // Link course to Turnitin. @@ -779,9 +856,9 @@ public function test_turnitintooltwo_getassignments() { } $outputrows[] = array($checkbox, $value->id, $assignmenttitle, $migrationValue); } - $expectedoutput = array("aaData" => $outputrows, - "sEcho" => $_POST["sEcho"], - "iTotalRecords" => $_POST["iDisplayLength"], + $expectedoutput = array("aaData" => $outputrows, + "sEcho" => $_POST["sEcho"], + "iTotalRecords" => $_POST["iDisplayLength"], "iTotalDisplayRecords" => $numAssignments); $this->assertEquals($_POST["iDisplayLength"], count($assignments)); $response = v1migration::turnitintooltwo_getassignments(); @@ -789,12 +866,13 @@ public function test_turnitintooltwo_getassignments() { $this->assertEquals($expectedoutput, $response); // Do a second test for the search box. $_POST["sSearch"] = "coursework"; - $query = "SELECT id, name, migrated FROM {turnitintool} + $query = "SELECT id, name, migrated FROM {turnitintool} WHERE LOWER(name) LIKE LOWER(:search_term_2) ORDER BY name asc"; $queryparams = array("search_term_2" => "%".$_POST["sSearch"]."%"); $assignments = $DB->get_records_sql($query, $queryparams, $_POST["iDisplayStart"], $_POST["iDisplayLength"]); $totalassignments = count($DB->get_records_sql($query, $queryparams)); + $outputrows = array(); foreach ($assignments as $key => $value) { if ($value->migrated == 1) { @@ -813,9 +891,9 @@ public function test_turnitintooltwo_getassignments() { } $outputrows[] = array($checkbox, $value->id, $assignmenttitle, $migrationValue); } - $expectedoutput = array("aaData" => $outputrows, - "sEcho" => $_POST["sEcho"], - "iTotalRecords" => $_POST["iDisplayLength"], + $expectedoutput = array("aaData" => $outputrows, + "sEcho" => $_POST["sEcho"], + "iTotalRecords" => $_POST["iDisplayLength"], "iTotalDisplayRecords" => $totalassignments); $this->assertEquals($_POST["iDisplayLength"], count($assignments)); $response = v1migration::turnitintooltwo_getassignments(); @@ -823,38 +901,35 @@ public function test_turnitintooltwo_getassignments() { $this->assertEquals($expectedoutput, $response); } - /** - * Test that assignments are deleted when given a list of assignments. + * Test that assignments are deleted when given an assignment. */ - public function test_turnitintooltwo_delete_assignments() { + public function test_delete_migrated_assignment() { global $DB; if (!$this->v1installed()) { return false; } + $this->resetAfterTest(); + // Generate a new course. $course = $this->getDataGenerator()->create_course(); // Create some V1 assignments. - $v1assignment1 = $this->make_test_assignment($course->id, 'turnitintool', "Assignment 1", 5); - $v1assignment2 = $this->make_test_assignment($course->id, 'turnitintool', "Assignment 2", 5); - $v1assignment3 = $this->make_test_assignment($course->id, 'turnitintool', "Assignment 3", 5); - $cm1 = get_coursemodule_from_instance('turnitintool', $v1assignment1->id); - $cm2 = get_coursemodule_from_instance('turnitintool', $v1assignment2->id); - $cm3 = get_coursemodule_from_instance('turnitintool', $v1assignment3->id); + $v1assignment = $this->make_test_assignment($course->id, 'turnitintool', "Assignment 1", 5); + $cm1 = get_coursemodule_from_instance('turnitintool', $v1assignment->id); // Check that the assignments have been created correctly. $v1assignments = $DB->get_records('turnitintool'); $v1parts = $DB->get_records('turnitintool_parts'); $v1submissions = $DB->get_records('turnitintool_submissions'); - $this->assertEquals(3, count($v1assignments)); - $this->assertEquals(3, count($v1parts)); - $this->assertEquals(15, count($v1submissions)); + $this->assertEquals(1, count($v1assignments)); + $this->assertEquals(1, count($v1parts)); + $this->assertEquals(5, count($v1submissions)); - // Delete the assignments. - $response = v1migration::turnitintooltwo_delete_assignments(array($v1assignment1->id, $v1assignment2->id, $v1assignment3->id)); + // Delete the assignment. + v1migration::delete_migrated_assignment($v1assignment->id); // Verify that they have been deleted. $v1assignments = $DB->get_records('turnitintool'); @@ -867,17 +942,13 @@ public function test_turnitintooltwo_delete_assignments() { // Verify that records have been removed from the course_modules table. $v1cm = $DB->get_records('course_modules', array('id' => $cm1->id)); $this->assertEquals(0, count($v1cm)); - $v2cm = $DB->get_records('course_modules', array('id' => $cm2->id)); - $this->assertEquals(0, count($v2cm)); - $v3cm = $DB->get_records('course_modules', array('id' => $cm3->id)); - $this->assertEquals(0, count($v3cm)); } /** * Test that the v1 and v2 account ids being used are the same. */ public function test_check_account_ids() { - global $CFG, $DB; + global $DB; $this->resetAfterTest(); // Set Account Id for v1. diff --git a/tests/unit/classes/view/turnitintooltwo_view_test.php b/tests/unit/classes/view/turnitintooltwo_view_test.php index d7634021..42d64c4a 100755 --- a/tests/unit/classes/view/turnitintooltwo_view_test.php +++ b/tests/unit/classes/view/turnitintooltwo_view_test.php @@ -136,6 +136,7 @@ public function test_inbox_table_structure_instructor() { } public function test_inbox_table_structure_student() { + global $DB, $USER; $this->resetAfterTest(); $_SESSION["unit_test"] = true; @@ -148,6 +149,11 @@ public function test_inbox_table_structure_student() { $USER->middlename = ""; $USER->alternatename = ""; + // Set Turnitin account values in config as they are used in comms. + set_config('apiurl', 'http://invalid', 'turnitintooltwo'); + set_config('accountid', '1001', 'turnitintooltwo'); + set_config('secretkey', 'ABCDEFGH', 'turnitintooltwo'); + $course = $this->getDataGenerator()->create_course(); $turnitintooltwoassignment = $this->make_test_tii_assignment(); diff --git a/tests/unit/generator/lib.php b/tests/unit/generator/lib.php index 120efc18..769a58a1 100644 --- a/tests/unit/generator/lib.php +++ b/tests/unit/generator/lib.php @@ -42,16 +42,17 @@ abstract class test_lib extends advanced_testcase { * @param string $modname Module name (turnitintool or turnitintooltwo) * @param int $assignmentid Assignment Module ID * @param int $number_of_parts - The number of parts to create + * @param int $tiiassignid - Specify a Turnitin assignment ID - use when creating multiple assignments to differentiate them. * * @return array $parts_created - parts added to the assignment listed as partid => partobject */ - public function make_test_parts($modname, $assignmentid, $number_of_parts) { + public function make_test_parts($modname, $assignmentid, $number_of_parts, $tiiassignid = null) { global $DB; $modulevar = $modname.'id'; $part = new stdClass(); $part->$modulevar = $assignmentid; - $part->tiiassignid = 0; + $part->tiiassignid = is_null($tiiassignid) ? 0 : $tiiassignid; $part->dtstart = 0; $part->dtdue = 0; $part->dtpost = 0; @@ -103,6 +104,8 @@ public function make_test_module($courseid, $modname, $assignmentid, $addtocm = $DB->set_field("course_modules", "section", $sectionid, array("id" => $coursemodule->coursemodule)); + rebuild_course_cache($coursemodule->coursemodule); + return $coursemodule->coursemodule; } @@ -199,4 +202,29 @@ public function enrol_test_user($moodle_user, $course, $role) { $instance = $DB->get_record("enrol", array('courseid' => $course, 'enrol' => 'manual')); $enrol->enrol_user($instance, $moodle_user, $roleid); } + + /** + * Create a test submission. + * + * @param $turnitintooltwoassignment + * @param $author + * @param $partid + */ + public function create_test_submission($turnitintooltwoassignment, $author, $partid) { + $submission = new turnitintooltwo_submission(0, "moodle", $turnitintooltwoassignment, 1); + + $data = new stdClass(); + $data->userid = $author; + $data->turnitintooltwoid = $turnitintooltwoassignment->turnitintooltwo->id; + $data->submission_part = $partid; + $data->submission_title = "Submission title"; + $data->submission_type = 1; + $data->submission_objectid = null; + $data->submission_unanon = 0; + $data->submission_grade = null; + $data->submission_gmimaged = 0; + $data->submission_hash = $author.'_'.$turnitintooltwoassignment->turnitintooltwo->id.'_'.$partid; + + $submission->insert_submission($data); + } } diff --git a/tests/unit/lib_test.php b/tests/unit/lib_test.php index 1a29ada0..2e012ec3 100644 --- a/tests/unit/lib_test.php +++ b/tests/unit/lib_test.php @@ -32,6 +32,42 @@ public function test_turnitintooltwo_get_course_type() { $this->assertEquals($response, "TT"); } + /** + * Test that we have the correct repository depending on the config settings. + */ + public function test_turnitintooltwo_override_repository() { + $this->resetAfterTest(); + + // Note that $submitpapersto would only ever be 0, 1 or 2 but this is to illustrate + // that it won't be overridden by the turnitintooltwo_override_repository method. + $submitpapersto = 6; + + // Test that repository is not overridden for value of 0. + set_config('repositoryoption', ADMIN_REPOSITORY_OPTION_STANDARD, 'turnitintooltwo'); + $response = turnitintooltwo_override_repository($submitpapersto); + $this->assertEquals($response, $submitpapersto); + + // Test that repository is not overridden for value of 1. + set_config('repositoryoption', ADMIN_REPOSITORY_OPTION_EXPANDED, 'turnitintooltwo'); + $response = turnitintooltwo_override_repository($submitpapersto); + $this->assertEquals($response, $submitpapersto); + + // Standard Repository is being forced. + set_config('repositoryoption', ADMIN_REPOSITORY_OPTION_FORCE_STANDARD, 'turnitintooltwo'); + $response = turnitintooltwo_override_repository($submitpapersto); + $this->assertEquals($response, SUBMIT_TO_STANDARD_REPOSITORY); + + // No Repository is being forced. + set_config('repositoryoption', ADMIN_REPOSITORY_OPTION_FORCE_NO, 'turnitintooltwo'); + $response = turnitintooltwo_override_repository($submitpapersto); + $this->assertEquals($response, SUBMIT_TO_NO_REPOSITORY); + + // Institutional Repository is being forced. + set_config('repositoryoption', ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL, 'turnitintooltwo'); + $response = turnitintooltwo_override_repository($submitpapersto); + $this->assertEquals($response, SUBMIT_TO_INSTITUTIONAL_REPOSITORY); + } + /** * Test that the cron processes gradebook migrations. */ @@ -73,16 +109,16 @@ public function test_turnitintooltwo_cron_migrate_gradebook() { turnitintooltwo_cron_migrate_gradebook(); - /** + /** * Test that we migrate the gradebook when using the cron workflow. * There should be no grades that require a migration. */ $submissions = $DB->get_records('turnitintooltwo_submissions', array('turnitintooltwoid' => $v2assignment->id, 'migrate_gradebook' => 1)); $this->assertEquals(0, count($submissions)); - // Test that the title gets updated after the migration. + // Test that the V1 assignment has been deleted. $updatedassignment = $DB->get_record('turnitintool', array('id' => $v1assignment->id)); - $this->assertEquals("Test Assignment (Migrated)", $updatedassignment->name); + $this->assertFalse($updatedassignment); } /** @@ -114,13 +150,15 @@ public function test_turnitintooltwo_cron_migrate_gradebook_1000() { // Create V1 Assignment. $v1assignmenttitle = "Test Assignment (Migration in progress...)"; - $v1assignment = $v1migrationtest->make_test_assignment($course->id, 'turnitintool', $v1assignmenttitle); + $v1assignment = $v1migrationtest->make_test_assignment($course->id, 'turnitintool', $v1assignmenttitle, 1, 1); + $v1migrationtest->make_test_assignment($course->id, 'turnitintool', $v1assignmenttitle, 1, 2); + $v1migrationtest->make_test_assignment($course->id, 'turnitintool', $v1assignmenttitle, 1, 3); $v1migration = new v1migration($course->id, $v1assignment); // Create V2 Assignment. - $v2assignment1 = $v1migrationtest->make_test_assignment($course->id, 'turnitintooltwo', "Test Assignment 1", 400); - $v2assignment2 = $v1migrationtest->make_test_assignment($course->id, 'turnitintooltwo', "Test Assignment 2", 400); - $v2assignment3 = $v1migrationtest->make_test_assignment($course->id, 'turnitintooltwo', "Test Assignment 3", 400); + $v2assignment1 = $v1migrationtest->make_test_assignment($course->id, 'turnitintooltwo', "Test Assignment 1", 400, 1); + $v2assignment2 = $v1migrationtest->make_test_assignment($course->id, 'turnitintooltwo', "Test Assignment 2", 400, 2); + $v2assignment3 = $v1migrationtest->make_test_assignment($course->id, 'turnitintooltwo', "Test Assignment 3", 400, 3); // Set migrate gradebook to 1 so the assignments will get migrated when we call the function. $DB->set_field('turnitintooltwo_submissions', "migrate_gradebook", 1); @@ -203,7 +241,7 @@ public function test_turnitintooltwo_generate_part_dates() { $this->assertEquals(gmdate("Y-m-d\TH:i:s\Z", $turnitintooltwoassignment->turnitintooltwo->dtpost1), $response_post); // Check functionality with new dates. We won't know what the current time will be when the function is called so we check that new dates is not equal to the assignment date. - + $response_start = turnitintooltwo_generate_part_dates(1, "start", $turnitintooltwoassignment->turnitintooltwo, 1); $response_due = turnitintooltwo_generate_part_dates(1, "due", $turnitintooltwoassignment->turnitintooltwo, 1); $response_post = turnitintooltwo_generate_part_dates(1, "post", $turnitintooltwoassignment->turnitintooltwo, 1); diff --git a/turnitintooltwo_assignment.class.php b/turnitintooltwo_assignment.class.php index c7fe4c8f..cab2affb 100755 --- a/turnitintooltwo_assignment.class.php +++ b/turnitintooltwo_assignment.class.php @@ -763,7 +763,8 @@ public function create_moodle_assignment() { } $assignment->setAllowNonOrSubmissions($this->turnitintooltwo->allownonor); $assignment->setLateSubmissionsAllowed($this->turnitintooltwo->allowlate); - if ($config->repositoryoption == 1) { + if ($config->repositoryoption == ADMIN_REPOSITORY_OPTION_EXPANDED || + $config->repositoryoption == ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL) { $institutioncheck = (isset($this->turnitintooltwo->institution_check)) ? $this->turnitintooltwo->institution_check : 0; $assignment->setInstitutionCheck($institutioncheck); } @@ -1328,14 +1329,6 @@ public function edit_moodle_assignment($createevent = true, $restore = false) { $coursetype = turnitintooltwo_get_course_type($legacy); $course = $this->get_course_data($this->turnitintooltwo->course, $coursetype); - // Get the Turnitin owner of this this Course or make user the owner if none. - $ownerid = $this->get_tii_owner($course->id); - if (!empty($ownerid)) { - $owner = new turnitintooltwo_user($ownerid, 'Instructor'); - } else { - $owner = new turnitintooltwo_user($USER->id, 'Instructor'); - } - // Edit course in Turnitin. $this->edit_tii_course($course); $course->turnitin_ctl = $course->fullname . " (Moodle TT)"; @@ -1353,15 +1346,8 @@ public function edit_moodle_assignment($createevent = true, $restore = false) { } $partids = array_keys($parts); - // Override submitpapersto if necessary when admin is forcing standard/no repository. - switch ($config->repositoryoption) { - case 2; // Standard repository being forced. - $this->turnitintooltwo->submitpapersto = 1; - break; - case 3; // No repository being forced. - $this->turnitintooltwo->submitpapersto = 0; - break; - } + // Override submitpapersto if necessary when admin is forcing repository setting. + $this->turnitintooltwo->submitpapersto = turnitintooltwo_override_repository($this->turnitintooltwo->submitpapersto); // Update GradeMark setting depending on config setting. $this->turnitintooltwo->usegrademark = $config->usegrademark; @@ -1387,7 +1373,8 @@ public function edit_moodle_assignment($createevent = true, $restore = false) { $assignment->setSmallMatchExclusionType($this->turnitintooltwo->excludetype); $assignment->setSmallMatchExclusionThreshold((int) $this->turnitintooltwo->excludevalue); $assignment->setLateSubmissionsAllowed($this->turnitintooltwo->allowlate); - if ($config->repositoryoption == 1) { + if ($config->repositoryoption == ADMIN_REPOSITORY_OPTION_EXPANDED || + $config->repositoryoption == ADMIN_REPOSITORY_OPTION_FORCE_INSTITUTIONAL) { $institutioncheck = (isset($this->turnitintooltwo->institution_check)) ? $this->turnitintooltwo->institution_check : 0; $assignment->setInstitutionCheck($institutioncheck); } diff --git a/turnitintooltwo_submission.class.php b/turnitintooltwo_submission.class.php index 04bc55dc..6ef94f8f 100755 --- a/turnitintooltwo_submission.class.php +++ b/turnitintooltwo_submission.class.php @@ -319,7 +319,7 @@ public function delete_submission($action = 'delete') { // Delete Moodle submission first. if (!$DB->delete_records('turnitintooltwo_submissions', array('id' => $this->id))) { - $notice["type"] = "error"; + $notice["type"] = "danger"; $notice["message"] = get_string('submissiondeleteerror', 'turnitintooltwo'); return $notice; } @@ -389,7 +389,7 @@ public function delete_submission($action = 'delete') { $this->userid ); - $notice["type"] = "full-error"; + $notice["type"] = "danger"; $notice["message"] = get_string('submissiondeleted', 'turnitintooltwo'). ' ('.get_string('turnitinid', 'turnitintooltwo'). ': '.$this->submission_objectid.')'; @@ -811,7 +811,7 @@ public function save_updated_submission_data($tiisubmissiondata, $bulk = false, $sub->id = $DB->insert_record("turnitintooltwo_submissions", $sub, true, $bulk); } - //Update the Moodle gradebook. + // Update the Moodle gradebook. $this->update_gradebook($sub, $turnitintooltwoassignment); } } @@ -861,10 +861,12 @@ public function update_gradebook($sub, $turnitintooltwoassignment) { * @return boolean */ public function unanonymise_submission($reason) { + global $USER; + // Get user and part details. $turnitintooltwoassignment = new turnitintooltwo_assignment($this->turnitintooltwoid); $partdetails = $turnitintooltwoassignment->get_part_details($this->submission_part); - $user = new turnitintooltwo_user($this->userid); + $user = new turnitintooltwo_user($USER->id); // Initialise Comms Object. $turnitincomms = new turnitintooltwo_comms(); diff --git a/turnitintooltwo_user.class.php b/turnitintooltwo_user.class.php index e5d2006b..c58eaf28 100644 --- a/turnitintooltwo_user.class.php +++ b/turnitintooltwo_user.class.php @@ -620,7 +620,11 @@ public function get_accepted_user_agreement() { return false; } } catch (Exception $e) { - // User may not be joined to account so we'll join them and recall function. + // Avoid API calls when running unit tests. + if (defined('PHPUNIT_TEST') && PHPUNIT_TEST) { + return true; + } + $this->set_user_values_from_tii(); $this->get_accepted_user_agreement(); } diff --git a/turnitintooltwo_view.class.php b/turnitintooltwo_view.class.php index 2a39c93d..1bfde9fe 100755 --- a/turnitintooltwo_view.class.php +++ b/turnitintooltwo_view.class.php @@ -146,8 +146,7 @@ public function draw_settings_menu($cmd) { $module = $DB->get_record('config_plugins', array('plugin' => 'mod_turnitintool')); if ( $module ) { $tabs[] = new tabobject('v1migration', $CFG->wwwroot.'/mod/turnitintooltwo/settings_extras.php?cmd=v1migration', - get_string('v1migrationtitle', 'turnitintooltwo').' - '.get_string('v1migrationearlyaccess', 'turnitintooltwo'), - get_string('v1migrationtitle', 'turnitintooltwo'), false); + get_string('v1migrationtitle', 'turnitintooltwo'), get_string('v1migrationtitle', 'turnitintooltwo'), false); } $selected = ($cmd == 'activitylog') ? 'apilog' : $cmd; @@ -198,7 +197,7 @@ public function draw_tool_tab_menu($cm, $selected) { public function show_notice($notice) { global $OUTPUT; - return $OUTPUT->box($notice["message"], 'generalbox noticebox', $notice["type"]); + return $OUTPUT->box($notice["message"], 'alert alert-'.$notice["type"], "alert"); } public function show_digital_receipt($digitalreceipt) { @@ -1387,7 +1386,7 @@ public function get_submission_inbox_row($cm, $turnitintooltwoassignment, $parts // Has the student accepted the EULA? $eulaaccepted = $submissionuser->useragreementaccepted; - if ($submissionuser->useragreementaccepted == 0 && !$_SESSION["unit_test"]) { + if ($submissionuser->useragreementaccepted == 0 && !empty($_SESSION["unit_test"])) { $eulaaccepted = $submissionuser->get_accepted_user_agreement(); } } @@ -1986,43 +1985,4 @@ public function show_add_tii_tutors_form($cm, $tutors) { $output = $OUTPUT->box($form->display(), 'generalbox boxaligncenter', 'general'); return $output; } - - /** - * build_migration_activation_page - * Builds the visual page for activate_migration - * @return string $output - */ - public static function build_migration_activation_page() { - global $DB, $CFG, $OUTPUT; - $already_active = $DB->get_record('config_plugins', array( - 'plugin' => 'turnitintooltwo', - 'name' => 'migration_enabled' - )); - - if ($already_active && $already_active->value == 1) { - $urlparams = array('cmd' => 'v1migration'); - redirect(new moodle_url('/mod/turnitintooltwo/settings_extras.php', $urlparams)); - } - - $notice = html_writer::tag( - 'div', - get_string('activatemigrationnotice', 'turnitintooltwo'), - array('class'=>'alert alert-info') - ); - - $button = html_writer::link( - new moodle_url('/mod/turnitintooltwo/activate_migration.php', array('do_migration' => 1)), - get_string('activatemigration', 'turnitintooltwo'), - array('class' => 'btn btn-default', 'role' => 'button') - ); - - $output = $OUTPUT->header(); - $output .= html_writer::start_tag('div', array('class' => 'mod_turnitintooltwo')); - $output .= $OUTPUT->heading(get_string('pluginname', 'turnitintooltwo'), 2, 'main'); - $output .= $notice; - $output .= $button; - $output .= html_writer::end_tag("div"); - - return $output; - } } \ No newline at end of file diff --git a/version.php b/version.php index 71f36c77..a0f03764 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ $plugin = new StdClass(); } -$plugin->version = 2018011601; +$plugin->version = 2018052301; $plugin->release = "2.7+"; $plugin->requires = 2014051200; $plugin->component = 'mod_turnitintooltwo'; diff --git a/view.php b/view.php index 986b49f6..c03d5dc2 100755 --- a/view.php +++ b/view.php @@ -107,9 +107,9 @@ $PAGE->set_pagelayout('standard'); // Settings for page navigation. +$config = turnitintooltwo_admin_config(); if ($viewcontext == "window") { // Show navigation if required. - $config = turnitintooltwo_admin_config(); if ($config->inboxlayout == 1) { $PAGE->set_cm($cm); $PAGE->set_pagelayout('incourse'); @@ -132,10 +132,29 @@ $turnitintooltwoassignment = new turnitintooltwo_assignment($turnitintooltwo->id, $turnitintooltwo); -// Migration tool -if ($migrated === 1) { +if (isset($_SESSION["migrationtool"]["status"])) { + $notice = array(); + switch ($_SESSION["migrationtool"]["status"]) { + case "success": + $notice["type"] = "success"; + $notice["message"] = get_string('migrationtool:successful', 'turnitintooltwo'); + $error = false; + break; + case "cron": + $notice["type"] = "success"; + $notice["message"] = get_string('migrationtool:successfulcron', 'turnitintooltwo'); + $error = false; + break; + case "gradebookerror": + $notice["type"] = "danger"; + $notice["message"] = get_string('migrationtool:gradebookerror', 'turnitintooltwo'); + $error = true; + break; + } include_once("classes/v1migration/v1migration.php"); - v1migration::check_account($config->accountid); + v1migration::check_account($config->accountid, $error); + + unset($_SESSION["migrationtool"]["status"]); } // Define file upload options. @@ -406,12 +425,12 @@ $nonsubmittedusers = array_diff_key((array)$allusers, (array)$suspendedusers, (array)$submittedusers); foreach ($nonsubmittedusers as $nonsubmitteduser) { // Send a message to the user's Moodle inbox with the digital receipt. - $nonsubmitters->send_message($nonsubmitteduser->id, $subject, $message); + $nonsubmitters->send_message($nonsubmitteduser->id, $subject, $message, $cm->course); } // Send a copy of message to the instructor if appropriate. if (!empty($sendtoself)) { - $nonsubmitters->send_message($USER->id, $subject, $message); + $nonsubmitters->send_message($USER->id, $subject, $message, $cm->course); } $do = "emailsent"; @@ -468,7 +487,7 @@ echo html_writer::tag('noscript', $noscriptcss); } -if (!is_null($notice)) { +if (isset($notice["message"])) { echo $turnitintooltwoview->show_notice($notice); }