From ee6484497bf681a5404f30dfb1657973536f1bbb Mon Sep 17 00:00:00 2001 From: Kathrin Osswald Date: Fri, 27 Apr 2018 10:39:48 +0200 Subject: [PATCH] MDL-62223 mod_assign: Improve submission statements --- mod/assign/externallib.php | 21 +++++- mod/assign/lang/en/assign.php | 9 ++- mod/assign/locallib.php | 126 ++++++++++++++++++++++++---------- mod/assign/settings.php | 20 ++++++ mod/assign/version.php | 2 +- 5 files changed, 138 insertions(+), 40 deletions(-) diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index 0c3b4bd02f9..1a0e550c37d 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -472,8 +472,25 @@ class mod_assign_external extends external_api { if ($module->requiresubmissionstatement) { // Submission statement is required, return the submission statement value. $adminconfig = get_config('assign'); - list($assignment['submissionstatement'], $assignment['submissionstatementformat']) = external_format_text( - $adminconfig->submissionstatement, FORMAT_MOODLE, $context->id, 'mod_assign', '', 0); + // Single submission. + if (!$module->teamsubmission) { + list($assignment['submissionstatement'], $assignment['submissionstatementformat']) = + external_format_text($adminconfig->submissionstatement, FORMAT_MOODLE, $context->id, + 'mod_assign', '', 0); + } else { // Team submission. + // One user can submit for the whole team. + if (!empty($adminconfig->submissionstatementteamsubmission) && !$module->requireallteammemberssubmit) { + list($assignment['submissionstatement'], $assignment['submissionstatementformat']) = + external_format_text($adminconfig->submissionstatementteamsubmission, + FORMAT_MOODLE, $context->id, 'mod_assign', '', 0); + } else if (!empty($adminconfig->submissionstatementteamsubmissionallsubmit) && + $module->requireallteammemberssubmit) { + // All team members must submit. + list($assignment['submissionstatement'], $assignment['submissionstatementformat']) = + external_format_text($adminconfig->submissionstatementteamsubmissionallsubmit, + FORMAT_MOODLE, $context->id, 'mod_assign', '', 0); + } + } } $assignmentarray[] = $assignment; diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 5722c1a8bfd..1c6ef4073c5 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -511,7 +511,14 @@ $string['submissionsclosed'] = 'Submissions closed'; $string['submissionsettings'] = 'Submission settings'; $string['submissionstatement'] = 'Submission statement'; $string['submissionstatement_help'] = 'Assignment submission confirmation statement'; -$string['submissionstatementdefault'] = 'This assignment is my own work, except where I have acknowledged the use of the works of other people.'; +$string['submissionstatementdefault'] = 'This submission is my own work, except where I have acknowledged the use of the works of other people.'; +$string['submissionstatement_help'] = 'Statement that student must accept in order to submit their work'; +$string['submissionstatementteamsubmission'] = 'Group submission statement'; +$string['submissionstatementteamsubmissiondefault'] = 'This submission is the work of my group, except where we have acknowledged the use of the works of other people.'; +$string['submissionstatementteamsubmission_help'] = 'Statement that student must accept in order to submit the work of their group.'; +$string['submissionstatementteamsubmissionallsubmit'] = 'Group submission statement where all group members submit'; +$string['submissionstatementteamsubmissionallsubmitdefault'] = 'This submission is my own work as a group member, except where I have acknowledged the use of the works of other people.'; +$string['submissionstatementteamsubmissionallsubmit_help'] = 'Statement that student must accept in order to submit their work as a group member.'; $string['submissionstatementacceptedlog'] = 'Submission statement accepted by user {$a}'; $string['submissionstatus_draft'] = 'Draft (not submitted)'; $string['submissionstatusheading'] = 'Submission status'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 52ee1121193..bab1bf2b60b 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -4906,18 +4906,17 @@ class assign { $data = new stdClass(); $adminconfig = $this->get_admin_config(); - $requiresubmissionstatement = $this->get_instance()->requiresubmissionstatement && - !empty($adminconfig->submissionstatement); - + $requiresubmissionstatement = $this->get_instance()->requiresubmissionstatement; $submissionstatement = ''; - if (!empty($adminconfig->submissionstatement)) { - // Format the submission statement before its sent. We turn off para because this is going within - // a form element. - $options = array( - 'context' => $this->get_context(), - 'para' => false - ); - $submissionstatement = format_text($adminconfig->submissionstatement, FORMAT_MOODLE, $options); + + if ($requiresubmissionstatement) { + $submissionstatement = $this->get_submissionstatement($adminconfig, $this->get_instance(), $this->get_context()); + } + + // If we get back an empty submission statement, we have to set $requiredsubmisisonstatement to false to prevent + // that the submission statement checkbox will be displayed. + if (empty($submissionstatement)) { + $requiresubmissionstatement = false; } if ($mform == null) { @@ -6300,21 +6299,20 @@ class assign { $notices[] = get_string('submissionsclosed', 'assign'); return false; } - $instance = $this->get_instance(); + $data = new stdClass(); $adminconfig = $this->get_admin_config(); - $requiresubmissionstatement = $instance->requiresubmissionstatement && - !empty($adminconfig->submissionstatement); + $requiresubmissionstatement = $this->get_instance()->requiresubmissionstatement; $submissionstatement = ''; - if (!empty($adminconfig->submissionstatement)) { - // Format the submission statement before its sent. We turn off para because this is going within - // a form element. - $options = array( - 'context' => $this->get_context(), - 'para' => false - ); - $submissionstatement = format_text($adminconfig->submissionstatement, FORMAT_MOODLE, $options); + if ($requiresubmissionstatement) { + $submissionstatement = $this->get_submissionstatement($adminconfig, $this->get_instance(), $this->get_context()); + } + + // If we get back an empty submission statement, we have to set $requiredsubmisisonstatement to false to prevent + // that the submission statement checkbox will be displayed. + if (empty($submissionstatement)) { + $requiresubmissionstatement = false; } if ($mform == null) { @@ -7618,25 +7616,23 @@ class assign { // Submission statement. $adminconfig = $this->get_admin_config(); - - $requiresubmissionstatement = $this->get_instance()->requiresubmissionstatement && - !empty($adminconfig->submissionstatement); + $requiresubmissionstatement = $this->get_instance()->requiresubmissionstatement; $draftsenabled = $this->get_instance()->submissiondrafts; + $submissionstatement = ''; + + if ($requiresubmissionstatement) { + $submissionstatement = $this->get_submissionstatement($adminconfig, $this->get_instance(), $this->get_context()); + } + + // If we get back an empty submission statement, we have to set $requiredsubmisisonstatement to false to prevent + // that the submission statement checkbox will be displayed. + if (empty($submissionstatement)) { + $requiresubmissionstatement = false; + } // Only show submission statement if we are editing our own submission. if ($requiresubmissionstatement && !$draftsenabled && $userid == $USER->id) { - - $submissionstatement = ''; - if (!empty($adminconfig->submissionstatement)) { - // Format the submission statement before its sent. We turn off para because this is going within - // a form element. - $options = array( - 'context' => $this->get_context(), - 'para' => false - ); - $submissionstatement = format_text($adminconfig->submissionstatement, FORMAT_MOODLE, $options); - } $mform->addElement('checkbox', 'submissionstatement', '', $submissionstatement); $mform->addRule('submissionstatement', get_string('required'), 'required', null, 'client'); } @@ -8870,6 +8866,64 @@ class assign { public function set_most_recent_team_submission($submission) { $this->mostrecentteamsubmission = $submission; } + + /** + * Get the correct submission statement depending on single submisison, team submission or team submission + * where all team memebers must submit. + * + * @param array $adminconfig + * @param assign $instance + * @param context $context + * + * @return string + */ + protected function get_submissionstatement($adminconfig, $instance, $context) { + $submissionstatement = ''; + + if (!($context instanceof context)) { + return $submissionstatement; + } + + // Single submission. + if (!$instance->teamsubmission) { + // Single submission statement is not empty. + if (!empty($adminconfig->submissionstatement)) { + // Format the submission statement before its sent. We turn off para because this is going within + // a form element. + $options = array( + 'context' => $context, + 'para' => false + ); + $submissionstatement = format_text($adminconfig->submissionstatement, FORMAT_MOODLE, $options); + } + } else { // Team submission. + // One user can submit for the whole team. + if (!empty($adminconfig->submissionstatementteamsubmission) && !$instance->requireallteammemberssubmit) { + // Format the submission statement before its sent. We turn off para because this is going within + // a form element. + $options = array( + 'context' => $context, + 'para' => false + ); + $submissionstatement = format_text($adminconfig->submissionstatementteamsubmission, + FORMAT_MOODLE, $options); + } else if (!empty($adminconfig->submissionstatementteamsubmissionallsubmit) && + $instance->requireallteammemberssubmit) { + // All team members must submit. + // Format the submission statement before its sent. We turn off para because this is going within + // a form element. + $options = array( + 'context' => $context, + 'para' => false + ); + $submissionstatement = format_text($adminconfig->submissionstatementteamsubmissionallsubmit, + FORMAT_MOODLE, $options); + } + } + + return $submissionstatement; + } + } /** diff --git a/mod/assign/settings.php b/mod/assign/settings.php index b0f9effd1d9..b72c97f9bdc 100644 --- a/mod/assign/settings.php +++ b/mod/assign/settings.php @@ -72,6 +72,26 @@ if ($ADMIN->fulltree) { $setting->set_force_ltr(false); $settings->add($setting); + $name = new lang_string('submissionstatementteamsubmission', 'mod_assign'); + $description = new lang_string('submissionstatement_help', 'mod_assign'); + $default = get_string('submissionstatementteamsubmissiondefault', 'mod_assign'); + $setting = new admin_setting_configtextarea('assign/submissionstatementteamsubmission', + $name, + $description, + $default); + $setting->set_force_ltr(false); + $settings->add($setting); + + $name = new lang_string('submissionstatementteamsubmissionallsubmit', 'mod_assign'); + $description = new lang_string('submissionstatement_help', 'mod_assign'); + $default = get_string('submissionstatementteamsubmissionallsubmitdefault', 'mod_assign'); + $setting = new admin_setting_configtextarea('assign/submissionstatementteamsubmissionallsubmit', + $name, + $description, + $default); + $setting->set_force_ltr(false); + $settings->add($setting); + $name = new lang_string('maxperpage', 'mod_assign'); $options = array( -1 => get_string('unlimitedpages', 'mod_assign'), diff --git a/mod/assign/version.php b/mod/assign/version.php index 913c87e7020..7925af64058 100644 --- a/mod/assign/version.php +++ b/mod/assign/version.php @@ -25,6 +25,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'mod_assign'; // Full name of the plugin (used for diagnostics). -$plugin->version = 2018120300; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2018120301; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2018112800; // Requires this Moodle version. $plugin->cron = 60;