diff --git a/classes/observer.php b/classes/observer.php index 12ed4cb..0530c12 100644 --- a/classes/observer.php +++ b/classes/observer.php @@ -85,4 +85,32 @@ class plagiarism_pchkorg_observer { $plugin = new plagiarism_plugin_pchkorg(); $plugin->event_handler($eventdata); } + + /** + * Handle the quiz attempt_submitted event. + * @param \mod_quiz\event\attempt_submitted $event + */ + public static function quiz_submitted( + \mod_quiz\event\attempt_submitted $event) { + $eventdata = $event->get_data(); + $eventdata['eventtype'] = 'quiz_submitted'; + $eventdata['other']['modulename'] = 'quiz'; + + $plugin = new plagiarism_plugin_pchkorg(); + $plugin->event_handler($eventdata); + } + + /** + * Handle the quiz attempt_updated event. + * @param \mod_quiz\event\attempt_updated $event + */ + public static function quiz_updated( + \mod_quiz\event\attempt_submitted $event) { + $eventdata = $event->get_data(); + $eventdata['eventtype'] = 'quiz_submitted'; + $eventdata['other']['modulename'] = 'quiz'; + + $plugin = new plagiarism_plugin_pchkorg(); + $plugin->event_handler($eventdata); + } } diff --git a/classes/plagiarism_pchkorg_api_provider.php b/classes/plagiarism_pchkorg_api_provider.php index 89e686c..3d3a484 100644 --- a/classes/plagiarism_pchkorg_api_provider.php +++ b/classes/plagiarism_pchkorg_api_provider.php @@ -78,6 +78,61 @@ class plagiarism_pchkorg_api_provider { $this->endpoint = $endpoint; } + /** + * Send text for originality check. + * + * @param $authorhash + * @param $cousereid + * @param $assignmentid + * @param $assignmentname + * @param $submissionid + * @param $attachmentid + * @param $content + * @param $mime + * @param $filename + * + * @return |null + */ + public function general_send_check( + $authorhash, + $cousereid, + $assignmentid, + $assignmentname, + $submissionid, + $attachmentid, + $content, + $mime, + $filename, + $filters = array() + ) { + if ($this->is_group_token()) { + return $this->send_group_text( + $authorhash, + $cousereid, + $assignmentid, + $assignmentname, + $submissionid, + $attachmentid, + $content, + $mime, + $filename, + $filters + ); + } else { + return $this->send_text( + $cousereid, + $assignmentid, + $assignmentname, + $submissionid, + $attachmentid, + $content, + $mime, + $filename, + $filters + ); + } + } + /** * Send text for originality check. * diff --git a/classes/task/send_submissions.php b/classes/task/send_submissions.php index 5575634..c989c7d 100644 --- a/classes/task/send_submissions.php +++ b/classes/task/send_submissions.php @@ -26,7 +26,7 @@ namespace plagiarism_pchkorg\task; defined('MOODLE_INTERNAL') || die(); /** - * Send queued submissions to Turnitin. + * Send queued submissions. */ class send_submissions extends \core\task\scheduled_task { diff --git a/classes/task/update_reports.php b/classes/task/update_reports.php index 49881a5..108775d 100644 --- a/classes/task/update_reports.php +++ b/classes/task/update_reports.php @@ -26,7 +26,7 @@ namespace plagiarism_pchkorg\task; defined('MOODLE_INTERNAL') || die(); /** - * Update report Scores from Turnitin. + * Update report. */ class update_reports extends \core\task\scheduled_task { diff --git a/db/events.php b/db/events.php index 3a763a6..47e21ea 100644 --- a/db/events.php +++ b/db/events.php @@ -40,4 +40,12 @@ $observers = array ( 'eventname' => '\core\event\course_module_deleted', 'callback' => 'plagiarism_pchkorg_observer::course_module_deleted' ), + array( + 'eventname' => '\mod_quiz\event\attempt_submitted', + 'callback' => 'plagiarism_pchkorg_observer::quiz_submitted', + ), + array( + 'eventname' => '\mod_quiz\event\attempt_updated', + 'callback' => 'plagiarism_pchkorg_observer::quiz_updated', + ) ); diff --git a/form/plagiarism_pchkorg_setup_form.php b/form/plagiarism_pchkorg_setup_form.php index 0d8bd73..801c3a8 100644 --- a/form/plagiarism_pchkorg_setup_form.php +++ b/form/plagiarism_pchkorg_setup_form.php @@ -68,6 +68,13 @@ class plagiarism_pchkorg_setup_form extends moodleform { $mform->addRule('pchkorg_min_percent', get_string('pchkorg_min_percent_range', 'plagiarism_pchkorg'), 'check_pchkorg_min_percent'); $mform->setType('pchkorg_min_percent', PARAM_INT); + $mform->addElement( + 'select', + 'pchkorg_enable_quiz', + get_string('pchkorg_enable_quiz', 'plagiarism_pchkorg'), + array(get_string('no'), get_string('yes')) + ); + $this->add_action_buttons(true); } diff --git a/lang/en/plagiarism_pchkorg.php b/lang/en/plagiarism_pchkorg.php index f09034d..09f88c4 100644 --- a/lang/en/plagiarism_pchkorg.php +++ b/lang/en/plagiarism_pchkorg.php @@ -42,6 +42,7 @@ $string['pchkorg_min_percent_range'] = 'Must be between 0 and 99'; $string['pchkorg_exclude_self_plagiarism'] = 'Exclude self-plagiarism'; $string['pchkorg_include_referenced'] = 'Include References'; $string['pchkorg_include_citation'] = 'Include Quotes'; +$string['pchkorg_enable_quiz'] = 'Enable Quiz'; $string['pchkorg_disclosure'] = 'Submission will be sent to PlagiarismCheck.org for check.
By submitting assignment I agree with Terms & Conditions diff --git a/lib.php b/lib.php index 1156527..d3b1de6 100644 --- a/lib.php +++ b/lib.php @@ -39,10 +39,141 @@ function pchkorg_check_pchkorg_min_percent($value) return 0 <= $value && $value < 100; } +function plagiarism_pchkorg_coursemodule_standard_elements($formwrapper, $mform) +{ + $context = context_course::instance($formwrapper->get_course()->id); + $modulename = $formwrapper->get_current()->modulename; + $allowedmodules = array('assign', 'mod_assign'); + if (!$context || !isset($modulename)) { + return; + } + global $DB; + + $pchkorgconfigmodel = new plagiarism_pchkorg_config_model(); + + $config = $pchkorgconfigmodel->get_system_config('pchkorg_use'); + $isquizenabled = '1' === $pchkorgconfigmodel->get_system_config('pchkorg_enable_quiz'); + $enabled = has_capability(capability::ENABLE, $context); + if ($isquizenabled) { + $allowedmodules[] = 'quiz'; + } + if ('1' == $config && $enabled) { + if (!in_array($modulename, $allowedmodules, true)) { + return; + } + $defaultcmid = null; + $cm = optional_param('update', $defaultcmid, PARAM_INT); + $minpercent = $pchkorgconfigmodel->get_system_config('pchkorg_min_percent'); + + if (!isset($mform->exportValues()['pchkorg_exclude_self_plagiarism']) + || is_null($mform->exportValues()['pchkorg_exclude_self_plagiarism'])) { + $mform->setDefault('pchkorg_exclude_self_plagiarism', 1); + } + if (!isset($mform->exportValues()['pchkorg_include_referenced']) + || is_null($mform->exportValues()['pchkorg_include_referenced'])) { + $mform->setDefault('pchkorg_include_referenced', 0); + } + if (!isset($mform->exportValues()['pchkorg_include_citation']) + || is_null($mform->exportValues()['pchkorg_include_citation'])) { + $mform->setDefault('pchkorg_include_citation', 0); + } + + if (null === $cm) { + if (!isset($mform->exportValues()['pchkorg_module_use']) + || is_null($mform->exportValues()['pchkorg_module_use'])) { + $mform->setDefault('pchkorg_module_use', '1'); + } + } else { + $records = $DB->get_records('plagiarism_pchkorg_config', array( + 'cm' => $cm, + )); + if (!empty($records)) { + foreach ($records as $record) { + $mform->setDefault($record->name, $record->value); + } + } + } + $mform->addElement( + 'header', + 'plagiarism_pchkorg', + get_string('pluginname', 'plagiarism_pchkorg') + ); + $mform->addElement( + 'select', + 'pchkorg_module_use', + get_string('pchkorg_module_use', 'plagiarism_pchkorg'), + array(get_string('no'), get_string('yes')) + ); + $mform->addHelpButton('pchkorg_module_use', 'pchkorg_module_use', 'plagiarism_pchkorg'); + + $canchangeminpercent = has_capability(capability::CHANGE_MIN_PERCENT_FILTER, $context); + if ($canchangeminpercent) { + $dissabledattribute = ''; + } else { + $dissabledattribute = 'disabled="disabled"'; + } + $mform->registerRule( + 'check_pchkorg_min_percent', + 'callback', + 'pchkorg_check_pchkorg_min_percent' + ); + $label = get_string('pchkorg_min_percent', 'plagiarism_pchkorg'); + if (!empty($minpercent)) { + $label = \str_replace('X%', $minpercent . '%', $label); + } + + $mform->addElement( + 'text', + 'pchkorg_min_percent', + $label, + $dissabledattribute + ); + $mform->addHelpButton('pchkorg_min_percent', 'pchkorg_min_percent', 'plagiarism_pchkorg'); + $mform->addRule('pchkorg_min_percent', null, 'text', null, 'client'); + $mform->addRule( + 'pchkorg_min_percent', + get_string('pchkorg_min_percent_range', 'plagiarism_pchkorg'), + 'check_pchkorg_min_percent' + ); + $mform->setType('pchkorg_min_percent', PARAM_INT); + + $mform->addElement( + 'select', + 'pchkorg_exclude_self_plagiarism', + get_string('pchkorg_exclude_self_plagiarism', 'plagiarism_pchkorg'), + array(get_string('no'), get_string('yes')) + ); + + $mform->addElement( + 'select', + 'pchkorg_include_referenced', + get_string('pchkorg_include_referenced', 'plagiarism_pchkorg'), + array(get_string('no'), get_string('yes')) + ); + + $mform->addElement( + 'select', + 'pchkorg_include_citation', + get_string('pchkorg_include_citation', 'plagiarism_pchkorg'), + array(get_string('no'), get_string('yes')) + ); + } +} + +function plagiarism_pchkorg_coursemodule_edit_post_actions($data, $course) +{ + +} + + + + /** * Class plagiarism_plugin_pchkorg */ class plagiarism_plugin_pchkorg extends plagiarism_plugin { + + /** * hook to allow plagiarism specific information to be displayed beside a submission. * @@ -51,8 +182,7 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin { * */ public function get_links($linkarray) { - - global $DB, $USER; + global $DB, $USER, $PAGE; $pchkorgconfigmodel = new plagiarism_pchkorg_config_model(); $apitoken = $pchkorgconfigmodel->get_system_config('pchkorg_token'); @@ -78,6 +208,17 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin { } $context = null; + + $component = !empty($linkarray['component']) ? $linkarray['component'] : ''; + if ($cmid === null && $component == 'qtype_essay' && !empty($linkarray['area'])) { + $questions = question_engine::load_questions_usage_by_activity($linkarray['area']); + + $context = $questions->get_owning_context(); + if ($cmid === null && $context->contextlevel == CONTEXT_MODULE) { + $cmid = $context->instanceid; + } + } + if (!empty($cmid)) { $context = context_module::instance($cmid);// Get context of course. } @@ -96,6 +237,7 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin { return ''; } + // Only for some type of account, method will call a remote HTTP API. // The API will be called only once, because result is static. // Also, there is timeout 2 seconds for response. @@ -132,7 +274,6 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin { if ($filerecord->state == 5) { $action = $apiprovider->get_report_action($filerecord->textid); $reporttoken = $apiprovider->generate_api_token(); - $formid = 'plagiarism_pchkorg_report_id_' . $filerecord->id; $score = $filerecord->score; $title = sprintf(get_string('pchkorg_label_title', 'plagiarism_pchkorg'), $filerecord->textid, @@ -146,6 +287,31 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin { } else { $color = '#f04343'; } + $PAGE->requires->js_amd_inline(" +window.plagiarism_check_full_report = function (action, token) { + const form = document.createElement('form'); + const element1 = document.createElement('input'); + const element2 = document.createElement('input'); + + form.method = 'POST'; + form.target = '_blank'; + form.action = action; + + element1.value = 'moodle'; + element1.name = 'lms-type'; + element1.type = 'hidden'; + form.appendChild(element1); + + element2.value = token; + element2.name = 'token'; + element2.type = 'hidden'; + form.appendChild(element2); + + document.body.appendChild(form); + + form.submit(); +}; + "); return ' + onclick="window.plagiarism_check_full_report(\''.$action.'\', \''.$reporttoken.'\'); return false;"> logo ' . $label . ' -
- - -
'; + '; } else if ($filerecord->state == 10) { $label = get_string('pchkorg_label_queued', 'plagiarism_pchkorg'); return ' @@ -265,128 +428,6 @@ display: inline-block;" } } - /** - * - * Build plugin settings form. - * - * @param object $mform - * @param object $context - * @param string $modulename - * @throws coding_exception - * @throws dml_exception - */ - public function get_form_elements_module($mform, $context, $modulename = '') { - if (!$context || !isset($modulename) || 'mod_assign' !== $modulename) { - return; - } - global $DB; - - $pchkorgconfigmodel = new plagiarism_pchkorg_config_model(); - - $config = $pchkorgconfigmodel->get_system_config('pchkorg_use'); - $enabled = has_capability(capability::ENABLE, $context); - - if ('1' == $config && $enabled) { - $defaultcmid = null; - $cm = optional_param('update', $defaultcmid, PARAM_INT); - $minpercent = $pchkorgconfigmodel->get_system_config('pchkorg_min_percent'); - - if (!isset($mform->exportValues()['pchkorg_exclude_self_plagiarism']) - || is_null($mform->exportValues()['pchkorg_exclude_self_plagiarism'])) { - $mform->setDefault('pchkorg_exclude_self_plagiarism', 1); - } - if (!isset($mform->exportValues()['pchkorg_include_referenced']) - || is_null($mform->exportValues()['pchkorg_include_referenced'])) { - $mform->setDefault('pchkorg_include_referenced', 0); - } - if (!isset($mform->exportValues()['pchkorg_include_citation']) - || is_null($mform->exportValues()['pchkorg_include_citation'])) { - $mform->setDefault('pchkorg_include_citation', 0); - } - - if (null === $cm) { - if (!isset($mform->exportValues()['pchkorg_module_use']) - || is_null($mform->exportValues()['pchkorg_module_use'])) { - $mform->setDefault('pchkorg_module_use', '1'); - } - } else { - $records = $DB->get_records('plagiarism_pchkorg_config', array( - 'cm' => $cm, - )); - if (!empty($records)) { - foreach ($records as $record) { - $mform->setDefault($record->name, $record->value); - } - } - } - - $mform->addElement( - 'header', - 'plagiarism_pchkorg', - get_string('pluginname', 'plagiarism_pchkorg') - ); - $mform->addElement( - 'select', - 'pchkorg_module_use', - get_string('pchkorg_module_use', 'plagiarism_pchkorg'), - array(get_string('no'), get_string('yes')) - ); - $mform->addHelpButton('pchkorg_module_use', 'pchkorg_module_use', 'plagiarism_pchkorg'); - - $canchangeminpercent = has_capability(capability::CHANGE_MIN_PERCENT_FILTER, $context); - if ($canchangeminpercent) { - $dissabledattribute = ''; - } else { - $dissabledattribute = 'disabled="disabled"'; - } - $mform->registerRule( - 'check_pchkorg_min_percent', - 'callback', - 'pchkorg_check_pchkorg_min_percent' - ); - $label = get_string('pchkorg_min_percent', 'plagiarism_pchkorg'); - if (!empty($minpercent)) { - $label = \str_replace('X%', $minpercent . '%', $label); - } - - $mform->addElement( - 'text', - 'pchkorg_min_percent', - $label, - $dissabledattribute - ); - $mform->addHelpButton('pchkorg_min_percent', 'pchkorg_min_percent', 'plagiarism_pchkorg'); - $mform->addRule('pchkorg_min_percent', null, 'text', null, 'client'); - $mform->addRule( - 'pchkorg_min_percent', - get_string('pchkorg_min_percent_range', 'plagiarism_pchkorg'), - 'check_pchkorg_min_percent' - ); - $mform->setType('pchkorg_min_percent', PARAM_INT); - - $mform->addElement( - 'select', - 'pchkorg_exclude_self_plagiarism', - get_string('pchkorg_exclude_self_plagiarism', 'plagiarism_pchkorg'), - array(get_string('no'), get_string('yes')) - ); - - $mform->addElement( - 'select', - 'pchkorg_include_referenced', - get_string('pchkorg_include_referenced', 'plagiarism_pchkorg'), - array(get_string('no'), get_string('yes')) - ); - - $mform->addElement( - 'select', - 'pchkorg_include_citation', - get_string('pchkorg_include_citation', 'plagiarism_pchkorg'), - array(get_string('no'), get_string('yes')) - ); - } - } - /** * hook to allow a disclosure to be printed notifying users what will happen with their submission. * @@ -399,20 +440,26 @@ display: inline-block;" if (empty($cmid)) { return ''; } - // Get course details. $cm = get_coursemodule_from_id('', $cmid); - - if (!$cm || $cm->modname != 'assign') { + if (!$cm) { return ''; } $configmodel = new plagiarism_pchkorg_config_model(); - $enabled = $configmodel->get_system_config('pchkorg_use'); + $isquizenabled = '1' === $configmodel->get_system_config('pchkorg_enable_quiz'); if ($enabled !== '1') { return ''; } + $modulename = $cm->modname; + $allowedmodules = array('assign', 'mod_assign'); + if ($isquizenabled) { + $allowedmodules[] = 'quiz'; + } + if (!in_array($modulename, $allowedmodules, true)) { + return ''; + } if (!$configmodel->is_enabled_for_module($cmid)) { return ''; @@ -446,26 +493,30 @@ display: inline-block;" public function event_handler($eventdata) { global $USER, $DB; + $modulename = $eventdata['other']['modulename']; + $allowedmodules = array('assign', 'mod_assign'); // We support only assign module so just ignore all other. - if ($eventdata['other']['modulename'] !== 'assign') { - return true; - } - $pchkorgconfigmodel = new plagiarism_pchkorg_config_model(); // Token is needed for API auth. $apitoken = $pchkorgconfigmodel->get_system_config('pchkorg_token'); + $isquizenabled = '1' === $pchkorgconfigmodel->get_system_config('pchkorg_enable_quiz'); $apiprovider = new plagiarism_pchkorg_api_provider($apitoken); - // SQL will be called only once, result is static. $config = $pchkorgconfigmodel->get_system_config('pchkorg_use'); if ('1' !== $config) { return true; } - + if ($isquizenabled) { + $allowedmodules[] = 'quiz'; + } + if (!in_array($modulename, $allowedmodules, true)) { + return true; + } // Receive couser moudle id. $cmid = $eventdata['contextinstanceid']; // Remove the event if the course module no longer exists. $cm = get_coursemodule_from_id($eventdata['other']['modulename'], $cmid); + if (!$cm) { return true; } @@ -499,13 +550,60 @@ display: inline-block;" } } + if ($eventdata['other']['modulename'] === 'quiz' + && $eventdata['eventtype'] === 'quiz_submitted') { + + $attempt = quiz_attempt::create($eventdata['objectid']); + foreach ($attempt->get_slots() as $slot) { + $questionattempt = $attempt->get_question_attempt($slot); + $qtype = $questionattempt->get_question()->qtype; + if ($qtype instanceof qtype_essay) { + $content = $questionattempt->get_response_summary(); + if (strlen($content) < 80) { + continue; + } + $signature = sha1($content); + + $filesconditions = array( + 'signature' => $signature, + 'cm' => $cmid, + 'userid' => $USER->id, + 'itemid' => $eventdata['objectid'] + ); + + $oldfile = $DB->get_record('plagiarism_pchkorg_files', $filesconditions); + if ($oldfile) { + // There is the same check in database, so we can skip this one. + return true; + } + + $filerecord = new \stdClass(); + $filerecord->fileid = null; + $filerecord->cm = $cmid; + $filerecord->userid = $USER->id; + $filerecord->textid = null; + $filerecord->state = 10; + $filerecord->created_at = time(); + $filerecord->itemid = $eventdata['objectid']; + $filerecord->signature = $signature; + + $DB->insert_record('plagiarism_pchkorg_files', $filerecord); + } + } + } + // Get actual text content and files to be submitted for draft submissions. // As this won't be present in eventdata for certain event types. - if ($eventdata['other']['modulename'] == 'assign' && $eventdata['eventtype'] == "assessable_submitted") { + if ($eventdata['other']['modulename'] === 'assign' + && $eventdata['eventtype'] === 'assessable_submitted') { + // Get content. $moodlesubmission = $DB->get_record('assign_submission', array('id' => $eventdata['objectid']), 'id'); - if ($moodletextsubmission = $DB->get_record('assignsubmission_onlinetext', - array('submission' => $moodlesubmission->id), 'onlinetext')) { + + $moodletextsubmission = $DB->get_record('assignsubmission_onlinetext', + array('submission' => $moodlesubmission->id), 'onlinetext'); + + if ($moodletextsubmission) { $eventdata['other']['content'] = $moodletextsubmission->onlinetext; } @@ -586,7 +684,6 @@ display: inline-block;" $filerecord->textid = null; $filerecord->state = 10; $filerecord->created_at = time(); - $filerecord->itemid = $eventdata['objectid']; $filerecord->signature = $signature; @@ -639,10 +736,16 @@ display: inline-block;" if ('1' !== $config) { return true; } - $filesconditions = array('state' => 10); - $moodlefiles = $DB->get_records('plagiarism_pchkorg_files', $filesconditions, - 'id', '*', 0, 20); + $moodlefiles = $DB->get_records( + 'plagiarism_pchkorg_files', + $filesconditions, + 'id', + '*', + 0, + 20 + ); + if ($moodlefiles) { $fs = get_file_storage(); foreach ($moodlefiles as $filedb) { @@ -676,13 +779,56 @@ display: inline-block;" if ($minpercent) { $filters['source_min_percent'] = $minpercent; } + + $agreementwhere = array( + 'cm' => 0, + 'name' => 'accepted_agreement', + 'value' => '1', + ); + $agreementaccepted = $DB->get_records('plagiarism_pchkorg_config', $agreementwhere); + if (empty($agreementaccepted)) { + $apiprovider->save_accepted_agreement($user->email); + $DB->insert_record('plagiarism_pchkorg_config', $agreementwhere); + } if ($filedb->fileid === null) { - $moodletextsubmission = $DB->get_record('assignsubmission_onlinetext', - array('submission' => $filedb->itemid), '*'); - if ($moodletextsubmission) { - $content = $moodletextsubmission->onlinetext; - if ($apiprovider->is_group_token()) { - $textid = $apiprovider->send_group_text( + if ($cm->modname === 'quiz') { + $questionanswers = $DB->get_records_sql( + "SELECT {question_attempts}.responsesummary " + ." FROM {question_attempts} " + ." INNER JOIN {question} on {question}.id = {question_attempts}.questionid " + ." WHERE {question_attempts}.questionusageid = ? AND {question}.qtype = 'essay' ", array( + $filedb->itemid + ) + ); + + foreach ($questionanswers as $questionanswer) { + $content = $questionanswer->responsesummary; + $signature = sha1($content); + if ($signature === $filedb->signature) { + $textid = $apiprovider->general_send_check( + $apiprovider->user_email_to_hash($user->email), + $cm->course, + $cm->id, + $cm->name, + $filedb->itemid, + null, + html_to_text($content, 75, false), + 'plain/text', + sprintf('%s-quiz.txt', $filedb->itemid), + $filters, + ); + break; + } + } + } else { + $moodletextsubmission = $DB->get_record( + 'assignsubmission_onlinetext', + array('submission' => $filedb->itemid), + '*' + ); + if ($moodletextsubmission) { + $content = $moodletextsubmission->onlinetext; + $textid = $apiprovider->general_send_check( $apiprovider->user_email_to_hash($user->email), $cm->course, $cm->id, @@ -694,23 +840,14 @@ display: inline-block;" sprintf('%s-submussion.txt', $moodletextsubmission->id), $filters, ); - } else { - $textid = $apiprovider->send_text( - $cm->course, - $cm->id, - $cm->name, - $moodletextsubmission->id, - $moodletextsubmission->id, - html_to_text($content, 75, false), - 'plain/text', - sprintf('%s-submussion.txt', $moodletextsubmission->id), - $filters, - ); } } } else { - $moodlesubmission = $DB->get_record('assign_submission', array('assignment' => $cm->instance, - 'userid' => $filedb->userid, 'id' => $filedb->itemid), 'id'); + $moodlesubmission = $DB->get_record('assign_submission', array( + 'assignment' => $cm->instance, + 'userid' => $filedb->userid, + 'id' => $filedb->itemid, + ), 'id'); $file = $fs->get_file_by_id($filedb->fileid); // We can not receive file by id. @@ -726,46 +863,19 @@ display: inline-block;" continue; } - - if ($apiprovider->is_group_token()) { - $textid = $apiprovider->send_group_text( - $apiprovider->user_email_to_hash($user->email), - $cm->course, - $cm->id, - $cm->name, - $moodlesubmission->id, - $file->get_id(), - $file->get_content(), - $file->get_mimetype(), - $file->get_filename(), - $filters - ); - } else { - $agreementwhere = array( - 'cm' => 0, - 'name' => 'accepted_agreement', - 'value' => '1' - ); - $agreementaccepted = $DB->get_records('plagiarism_pchkorg_config', $agreementwhere); - if (empty($agreementaccepted)) { - $apiprovider->save_accepted_agreement($user->email); - $DB->insert_record('plagiarism_pchkorg_config', $agreementwhere); - } - - $textid = $apiprovider->send_text( - $cm->course, - $cm->id, - $cm->name, - $moodlesubmission->id, - $file->get_id(), - $file->get_content(), - $file->get_mimetype(), - $file->get_filename(), - $filters - ); - } + $textid = $apiprovider->general_send_check( + $apiprovider->user_email_to_hash($user->email), + $cm->course, + $cm->id, + $cm->name, + $moodlesubmission->id, + $file->get_id(), + $file->get_content(), + $file->get_mimetype(), + $file->get_filename(), + $filters + ); } - $filedbnew = new stdClass(); $filedbnew->id = $filedb->id; if ($textid) { diff --git a/version.php b/version.php index 6c20eec..7d1da3d 100644 --- a/version.php +++ b/version.php @@ -26,11 +26,11 @@ defined('MOODLE_INTERNAL') || die(); if (!isset($plugin)) { $plugin = new stdClass(); } -$plugin->version = 2022050519; -$plugin->requires = 2017051500; // Requires Moodle 3.3 . -$plugin->release = 'v3.8.4'; -$plugin->maturity = MATURITY_STABLE; +$plugin->version = 2022051619; +$plugin->requires = 2020061501; // Requires Moodle 3.9 . +$plugin->release = 'v3.9.1'; $plugin->component = 'plagiarism_pchkorg'; +$plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( 'mod_assign' => ANY_VERSION, );