コード例 #1
0
 /**
  * Create the module as an assignment within Turnitin if it does not exist,
  * if we have a Turnitin id for the module then edit it
  */
 public function sync_tii_assignment($cm, $coursetiiid, $workflowcontext = "site", $submittoturnitin = false)
 {
     global $DB, $CFG;
     $config = turnitintooltwo_admin_config();
     $modulepluginsettings = $this->get_settings($cm->id);
     $moduledata = $DB->get_record($cm->modname, array('id' => $cm->instance));
     // Configure assignment object to send to Turnitin.
     $assignment = new TiiAssignment();
     $assignment->setClassId($coursetiiid);
     // We need to truncate the moodle assignment title to be compatible with a Turnitin
     // assignment title (max length 99) and account for non English multibyte strings.
     $title = "";
     if (mb_strlen($moduledata->name, 'UTF-8') > 80) {
         $title .= mb_substr($moduledata->name, 0, 80, 'UTF-8') . "...";
     } else {
         $title .= $moduledata->name;
     }
     $title .= " (Moodle PP)";
     $assignment->setTitle($title);
     $assignment->setSubmitPapersTo(isset($modulepluginsettings["plagiarism_submitpapersto"]) ? $modulepluginsettings["plagiarism_submitpapersto"] : 1);
     $assignment->setSubmittedDocumentsCheck($modulepluginsettings["plagiarism_compare_student_papers"]);
     $assignment->setInternetCheck($modulepluginsettings["plagiarism_compare_internet"]);
     $assignment->setPublicationsCheck($modulepluginsettings["plagiarism_compare_journals"]);
     if ($config->repositoryoption == 1) {
         $institutioncheck = isset($modulepluginsettings["plagiarism_compare_institution"]) ? $modulepluginsettings["plagiarism_compare_institution"] : 0;
         $assignment->setInstitutionCheck($institutioncheck);
     }
     $assignment->setAuthorOriginalityAccess($modulepluginsettings["plagiarism_show_student_report"]);
     $assignment->setResubmissionRule((int) $modulepluginsettings["plagiarism_report_gen"]);
     $assignment->setBibliographyExcluded($modulepluginsettings["plagiarism_exclude_biblio"]);
     $assignment->setQuotedExcluded($modulepluginsettings["plagiarism_exclude_quoted"]);
     $assignment->setSmallMatchExclusionType($modulepluginsettings["plagiarism_exclude_matches"]);
     $modulepluginsettings["plagiarism_exclude_matches_value"] = !empty($modulepluginsettings["plagiarism_exclude_matches_value"]) ? $modulepluginsettings["plagiarism_exclude_matches_value"] : 0;
     $assignment->setSmallMatchExclusionThreshold($modulepluginsettings["plagiarism_exclude_matches_value"]);
     // Don't set anonymous marking if there have been submissions.
     $previoussubmissions = $DB->record_exists('plagiarism_turnitin_files', array('cm' => $cm->id, 'statuscode' => 'success'));
     // Use Moodle's blind marking setting for anonymous marking.
     if ($config->useanon && !$previoussubmissions) {
         $anonmarking = !empty($moduledata->blindmarking) ? 1 : 0;
         $assignment->setAnonymousMarking($anonmarking);
     }
     $assignment->setAllowNonOrSubmissions(!empty($modulepluginsettings["plagiarism_allow_non_or_submissions"]) ? 1 : 0);
     $assignment->setTranslatedMatching(!empty($modulepluginsettings["plagiarism_transmatch"]) ? 1 : 0);
     // Moodle handles submissions and whether they are allowed so this should always be true.
     // Otherwise, the Turnitin setting is incompatible with Moodle due to multiple files and resubmission rules.
     $assignment->setLateSubmissionsAllowed(1);
     $assignment->setMaxGrade(0);
     $assignment->setRubricId(!empty($modulepluginsettings["plagiarism_rubric"]) ? $modulepluginsettings["plagiarism_rubric"] : '');
     if (!empty($moduledata->grade)) {
         $assignment->setMaxGrade($moduledata->grade < 0 ? 100 : (int) $moduledata->grade);
     }
     if (!empty($moduledata->allowsubmissionsfromdate)) {
         $dtstart = $moduledata->allowsubmissionsfromdate;
     } else {
         if (!empty($moduledata->timeavailable)) {
             $dtstart = $moduledata->timeavailable;
         } else {
             $dtstart = $cm->added;
         }
     }
     $dtstart = $dtstart <= strtotime('-1 year') ? strtotime('-11 months') : $dtstart;
     $assignment->setStartDate(gmdate("Y-m-d\\TH:i:s\\Z", $dtstart));
     // Set post date. If "hidden until" has been set in gradebook then we will use that value, otherwise we will
     // use start date. If the grades are to be completely hidden then we will set post date in the future.
     // From 2.6, if grading markflow is enabled and no grades have been released, we will use due date +4 weeks.
     $dtpost = 0;
     if ($cm->modname != "forum") {
         if ($gradeitem = $DB->get_record('grade_items', array('iteminstance' => $cm->instance, 'itemmodule' => $cm->modname, 'courseid' => $cm->course, 'itemnumber' => 0))) {
             switch ($gradeitem->hidden) {
                 case 1:
                     $dtpost = strtotime('+6 months');
                     break;
                 case 0:
                     $dtpost = $dtstart;
                     // If any grades have been released early via marking workflow, set post date to current time.
                     if ($cm->modname == 'assign' && !empty($moduledata->markingworkflow)) {
                         $gradesreleased = $DB->record_exists('assign_user_flags', array('assignment' => $cm->instance, 'workflowstate' => 'released'));
                         $dtpost = $gradesreleased ? time() : strtotime('+1 month');
                     }
                     break;
                 default:
                     $dtpost = $gradeitem->hidden;
                     break;
             }
         }
     }
     // If blind marking is being used and identities have not been revealed then push out post date.
     if ($cm->modname == 'assign' && !empty($moduledata->blindmarking) && empty($moduledata->revealidentities)) {
         $dtpost = strtotime('+6 months');
     }
     // If blind marking is being used for coursework then push out post date.
     if ($cm->modname == 'coursework' && !empty($moduledata->blindmarking)) {
         $dtpost = strtotime('+6 months');
     }
     // Ensure post date can't be before start date
     if ($dtpost < $dtstart) {
         $dtpost = $dtstart;
     }
     // Set due date, dependent on various things.
     $dtdue = !empty($moduledata->duedate) ? $moduledata->duedate : 0;
     // If the due date has been set more than a year ahead then restrict it to 1 year from now.
     if ($dtdue > strtotime('+1 year')) {
         $dtdue = strtotime('+1 year');
     }
     // Ensure due date can't be before start date
     if ($dtdue <= $dtstart) {
         $dtdue = strtotime('+1 month', $dtstart);
     }
     // Ensure due date is always in the future for submissions.
     if ($dtdue <= time() && $submittoturnitin) {
         $dtdue = strtotime('+1 day');
     }
     $assignment->setDueDate(gmdate("Y-m-d\\TH:i:s\\Z", $dtdue));
     // If the duedate is in the future then set any submission duedate_report_refresh flags that are 2 to 1 to make sure they are re-examined in the next cron run
     if ($dtdue > time()) {
         $DB->set_field('plagiarism_turnitin_files', 'duedate_report_refresh', 1, array('cm' => $cm->id, 'duedate_report_refresh' => 2));
     }
     $assignment->setFeedbackReleaseDate(gmdate("Y-m-d\\TH:i:s\\Z", $dtpost));
     // Erater settings.
     $assignment->setErater(isset($modulepluginsettings["plagiarism_erater"]) ? $modulepluginsettings["plagiarism_erater"] : 0);
     $assignment->setEraterSpelling(isset($modulepluginsettings["plagiarism_erater_spelling"]) ? $modulepluginsettings["plagiarism_erater_spelling"] : 0);
     $assignment->setEraterGrammar(isset($modulepluginsettings["plagiarism_erater_grammar"]) ? $modulepluginsettings["plagiarism_erater_grammar"] : 0);
     $assignment->setEraterUsage(isset($modulepluginsettings["plagiarism_erater_usage"]) ? $modulepluginsettings["plagiarism_erater_usage"] : 0);
     $assignment->setEraterMechanics(isset($modulepluginsettings["plagiarism_erater_mechanics"]) ? $modulepluginsettings["plagiarism_erater_mechanics"] : 0);
     $assignment->setEraterStyle(isset($modulepluginsettings["plagiarism_erater_style"]) ? $modulepluginsettings["plagiarism_erater_style"] : 0);
     $assignment->setEraterSpellingDictionary(isset($modulepluginsettings["plagiarism_erater_dictionary"]) ? $modulepluginsettings["plagiarism_erater_dictionary"] : 'en_US');
     $assignment->setEraterHandbook(isset($modulepluginsettings["plagiarism_erater_handbook"]) ? $modulepluginsettings["plagiarism_erater_handbook"] : 0);
     // If we have a turnitin id then edit the assignment otherwise create it.
     if ($tiiassignment = $DB->get_record('plagiarism_turnitin_config', array('cm' => $cm->id, 'name' => 'turnitin_assignid'), 'value')) {
         $assignment->setAssignmentId($tiiassignment->value);
         $turnitintooltwoassignment = new turnitintooltwo_assignment(0, '', 'PP');
         $return = $turnitintooltwoassignment->edit_tii_assignment($assignment, $workflowcontext);
         $return['errorcode'] = $return['success'] ? 0 : 6;
         return $return;
     } else {
         $turnitintooltwoassignment = new turnitintooltwo_assignment(0, '', 'PP');
         $turnitinassignid = $turnitintooltwoassignment->create_tii_assignment($assignment, 0, 0, 'plagiarism_plugin', $workflowcontext);
         if (!$turnitinassignid) {
             $return = array('success' => false, 'tiiassignmentid' => '', 'errorcode' => 5);
         } else {
             $moduleconfigvalue = new stdClass();
             $moduleconfigvalue->cm = $cm->id;
             $moduleconfigvalue->name = 'turnitin_assignid';
             $moduleconfigvalue->value = $turnitinassignid;
             $DB->insert_record('plagiarism_turnitin_config', $moduleconfigvalue);
             $return = array('success' => true, 'tiiassignmentid' => $assignment->getAssignmentId());
         }
         return $return;
     }
 }
コード例 #2
0
ファイル: lib.php プロジェクト: aolley/MoodleDirectV2
 /**
  * Create the module as an assignment within Turnitin if it does not exist,
  * if we have a Turnitin id for the module then edit it
  */
 public function sync_tii_assignment($cm, $coursetiiid, $workflowcontext = "site")
 {
     global $DB, $CFG;
     $config = turnitintooltwo_admin_config();
     $modulepluginsettings = $this->get_settings($cm->id);
     $moduledata = $DB->get_record($cm->modname, array('id' => $cm->instance));
     // Configure assignment object to send to Turnitin.
     $assignment = new TiiAssignment();
     $assignment->setClassId($coursetiiid);
     // Need to truncate the moodle assignment title to be compatible with a Turnitin class (max length 99)
     $assignment->setTitle(mb_strlen($moduledata->name) > 80 ? mb_substr($moduledata->name, 0, 80) . "... (Moodle PP)" : $moduledata->name . " (Moodle PP)");
     $assignment->setSubmitPapersTo(isset($modulepluginsettings["plagiarism_submitpapersto"]) ? $modulepluginsettings["plagiarism_submitpapersto"] : 1);
     $assignment->setSubmittedDocumentsCheck($modulepluginsettings["plagiarism_compare_student_papers"]);
     $assignment->setInternetCheck($modulepluginsettings["plagiarism_compare_internet"]);
     $assignment->setPublicationsCheck($modulepluginsettings["plagiarism_compare_journals"]);
     if ($config->repositoryoption == 1) {
         $institutioncheck = isset($modulepluginsettings["plagiarism_compare_institution"]) ? $modulepluginsettings["plagiarism_compare_institution"] : 0;
         $assignment->setInstitutionCheck($institutioncheck);
     }
     $assignment->setAuthorOriginalityAccess($modulepluginsettings["plagiarism_show_student_report"]);
     $assignment->setResubmissionRule($modulepluginsettings["plagiarism_report_gen"]);
     $assignment->setBibliographyExcluded($modulepluginsettings["plagiarism_exclude_biblio"]);
     $assignment->setQuotedExcluded($modulepluginsettings["plagiarism_exclude_quoted"]);
     $assignment->setSmallMatchExclusionType($modulepluginsettings["plagiarism_exclude_matches"]);
     $modulepluginsettings["plagiarism_exclude_matches_value"] = !empty($modulepluginsettings["plagiarism_exclude_matches_value"]) ? $modulepluginsettings["plagiarism_exclude_matches_value"] : 0;
     $assignment->setSmallMatchExclusionThreshold($modulepluginsettings["plagiarism_exclude_matches_value"]);
     if ($config->useanon) {
         $assignment->setAnonymousMarking($modulepluginsettings["plagiarism_anonymity"]);
     }
     $assignment->setAllowNonOrSubmissions(!empty($modulepluginsettings["plagiarism_allow_non_or_submissions"]) ? 1 : 0);
     $assignment->setTranslatedMatching(!empty($modulepluginsettings["plagiarism_transmatch"]) ? 1 : 0);
     // Moodle handles submissions and whether they are allowed so this should always be true.
     // Otherwise, the Turnitin setting is incompatible with Moodle due to multiple files and resubmission rules.
     $assignment->setLateSubmissionsAllowed(1);
     $assignment->setMaxGrade(0);
     $assignment->setRubricId(!empty($modulepluginsettings["plagiarism_rubric"]) ? $modulepluginsettings["plagiarism_rubric"] : '');
     if (!empty($moduledata->grade)) {
         $assignment->setMaxGrade($moduledata->grade < 0 ? 100 : (int) $moduledata->grade);
     }
     if (!empty($moduledata->allowsubmissionsfromdate)) {
         $dtstart = $moduledata->allowsubmissionsfromdate;
     } else {
         if (!empty($moduledata->timeavailable)) {
             $dtstart = $moduledata->timeavailable;
         } else {
             $dtstart = $cm->added;
         }
     }
     $dtstart = $dtstart <= strtotime('-1 year') ? strtotime('-11 months') : $dtstart;
     $assignment->setStartDate(gmdate("Y-m-d\\TH:i:s\\Z", $dtstart));
     $dtdue = 0;
     if (!empty($moduledata->duedate)) {
         $dtdue = $moduledata->duedate;
     } else {
         if (!empty($moduledata->timedue)) {
             $dtdue = $moduledata->timedue;
         }
     }
     // If the due date has been set more than a year ahead then restrict the
     // due date in Turnitin to 1 year from now.
     $nextyear = strtotime('+1 year');
     if ($dtdue > $nextyear) {
         $dtdue = $nextyear;
     }
     // Set post date. If "hidden until" has been set in gradebook then we will use that value, otherwise we will
     // use start date. If the grades are to be completely hidden then we will set post date in the future.
     // From 2.6, if grading markflow is enabled and no grades have been released, we will use due date +4 weeks.
     $dtpost = 0;
     if ($cm->modname != "forum") {
         if ($gradeitem = $DB->get_record('grade_items', array('iteminstance' => $cm->instance, 'itemmodule' => $cm->modname, 'courseid' => $cm->course))) {
             switch ($gradeitem->hidden) {
                 case 1:
                     $dtpost = strtotime('+6 months');
                     break;
                 case 0:
                     $dtpost = $dtstart;
                     // If any grades have been released early via marking workflow, set post date to current time.
                     if ($CFG->branch >= 26 && $cm->modname == 'assign' && !empty($moduledata->markingworkflow)) {
                         $gradesreleased = $DB->record_exists('assign_user_flags', array('assignment' => $cm->instance, 'workflowstate' => 'released'));
                         if ($gradesreleased) {
                             $dtpost = time();
                         } else {
                             $dtpost = strtotime('+4 weeks', $dtdue);
                         }
                     }
                     break;
                 default:
                     $dtpost = $gradeitem->hidden;
                     break;
             }
         }
     }
     // If a cut-off date has been set, use that as the Turnitin due date.
     if (!empty($moduledata->cutoffdate)) {
         $dtdue = $moduledata->cutoffdate;
     }
     // Ensure due date can't be before start date
     if ($dtdue <= $dtstart) {
         $dtdue = strtotime('+1 month', $dtstart);
     }
     // Ensure post date can't be before start date
     if ($dtpost < $dtstart) {
         $dtpost = $dtstart;
     }
     $assignment->setDueDate(gmdate("Y-m-d\\TH:i:s\\Z", $dtdue));
     $assignment->setFeedbackReleaseDate(gmdate("Y-m-d\\TH:i:s\\Z", $dtpost));
     // Erater settings.
     $assignment->setErater(isset($modulepluginsettings["plagiarism_erater"]) ? $modulepluginsettings["plagiarism_erater"] : 0);
     $assignment->setEraterSpelling(isset($modulepluginsettings["plagiarism_erater_spelling"]) ? $modulepluginsettings["plagiarism_erater_spelling"] : 0);
     $assignment->setEraterGrammar(isset($modulepluginsettings["plagiarism_erater_grammar"]) ? $modulepluginsettings["plagiarism_erater_grammar"] : 0);
     $assignment->setEraterUsage(isset($modulepluginsettings["plagiarism_erater_usage"]) ? $modulepluginsettings["plagiarism_erater_usage"] : 0);
     $assignment->setEraterMechanics(isset($modulepluginsettings["plagiarism_erater_mechanics"]) ? $modulepluginsettings["plagiarism_erater_mechanics"] : 0);
     $assignment->setEraterStyle(isset($modulepluginsettings["plagiarism_erater_style"]) ? $modulepluginsettings["plagiarism_erater_style"] : 0);
     $assignment->setEraterSpellingDictionary(isset($modulepluginsettings["plagiarism_erater_dictionary"]) ? $modulepluginsettings["plagiarism_erater_dictionary"] : 'en_US');
     $assignment->setEraterHandbook(isset($modulepluginsettings["plagiarism_erater_handbook"]) ? $modulepluginsettings["plagiarism_erater_handbook"] : 0);
     // If we have a turnitin id then edit the assignment otherwise create it.
     if ($tiiassignment = $DB->get_record('plagiarism_turnitin_config', array('cm' => $cm->id, 'name' => 'turnitin_assignid'), 'value')) {
         $assignment->setAssignmentId($tiiassignment->value);
         $turnitintooltwoassignment = new turnitintooltwo_assignment(0, '', 'PP');
         $turnitintooltwoassignment->edit_tii_assignment($assignment, $workflowcontext);
         $turnitinassignid = $tiiassignment->value;
     } else {
         $turnitintooltwoassignment = new turnitintooltwo_assignment(0, '', 'PP');
         $turnitinassignid = $turnitintooltwoassignment->create_tii_assignment($assignment, 0, 0, 'plagiarism_plugin', $workflowcontext);
         $moduleconfigvalue = new stdClass();
         $moduleconfigvalue->cm = $cm->id;
         $moduleconfigvalue->name = 'turnitin_assignid';
         $moduleconfigvalue->value = $turnitinassignid;
         $DB->insert_record('plagiarism_turnitin_config', $moduleconfigvalue);
     }
     // Save the post date we have stored in Turnitin
     $moduleconfigvalue = new stdClass();
     $moduleconfigvalue->cm = $cm->id;
     $moduleconfigvalue->name = 'plagiarism_post_date';
     $moduleconfigvalue->value = $dtpost;
     if ($plagiarism_post_date = $DB->get_record('plagiarism_turnitin_config', array('cm' => $cm->id, 'name' => 'plagiarism_post_date'), 'id')) {
         $moduleconfigvalue->id = $plagiarism_post_date->id;
         $DB->update_record('plagiarism_turnitin_config', $moduleconfigvalue);
     } else {
         $DB->insert_record('plagiarism_turnitin_config', $moduleconfigvalue);
     }
     return $turnitinassignid;
 }