diff --git a/course/modedit.php b/course/modedit.php index c08108abe4a..8bc116e671b 100644 --- a/course/modedit.php +++ b/course/modedit.php @@ -336,7 +336,7 @@ if ($mform->is_cancelled()) { $cm->groupmembersonly = $fromform->groupmembersonly; $completion = new completion_info($course); - if ($completion->is_enabled()) { + if ($completion->is_enabled() && !empty($fromform->completionunlocked)) { // Update completion settings $cm->completion = $fromform->completion; $cm->completiongradeitemnumber = $fromform->completiongradeitemnumber; diff --git a/course/moodleform_mod.php b/course/moodleform_mod.php index b4feb9d3f56..3facb230654 100644 --- a/course/moodleform_mod.php +++ b/course/moodleform_mod.php @@ -312,8 +312,11 @@ abstract class moodleform_mod extends moodleform { } // Completion: Don't let them choose automatic completion without turning - // on some conditions - if (array_key_exists('completion', $data) && $data['completion']==COMPLETION_TRACKING_AUTOMATIC) { + // on some conditions. Ignore this check when completion settings are + // locked, as the options are then disabled. + if (array_key_exists('completion', $data) && + $data['completion'] == COMPLETION_TRACKING_AUTOMATIC && + !empty($data['completionunlocked'])) { if (empty($data['completionview']) && empty($data['completionusegrade']) && !$this->completion_rule_enabled($data)) { $errors['completion'] = get_string('badautocompletion', 'completion'); diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index d821ebcfc96..ea786296efc 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -759,7 +759,9 @@ class assign { $update->cutoffdate = $formdata->cutoffdate; $update->allowsubmissionsfromdate = $formdata->allowsubmissionsfromdate; $update->grade = $formdata->grade; - $update->completionsubmit = !empty($formdata->completionsubmit); + if (!empty($formdata->completionunlocked)) { + $update->completionsubmit = !empty($formdata->completionsubmit); + } $update->teamsubmission = $formdata->teamsubmission; $update->requireallteammemberssubmit = $formdata->requireallteammemberssubmit; $update->teamsubmissiongroupingid = $formdata->teamsubmissiongroupingid; diff --git a/mod/choice/mod_form.php b/mod/choice/mod_form.php index 70812f68b41..da2db430559 100644 --- a/mod/choice/mod_form.php +++ b/mod/choice/mod_form.php @@ -139,8 +139,10 @@ class mod_choice_mod_form extends moodleform_mod { return false; } // Set up completion section even if checkbox is not ticked - if (empty($data->completionsection)) { - $data->completionsection=0; + if (!empty($data->completionunlocked)) { + if (empty($data->completionsubmit)) { + $data->completionsubmit = 0; + } } return $data; } diff --git a/mod/feedback/mod_form.php b/mod/feedback/mod_form.php index 6256de76c10..e8cf5497185 100644 --- a/mod/feedback/mod_form.php +++ b/mod/feedback/mod_form.php @@ -202,14 +202,13 @@ class mod_feedback_mod_form extends moodleform_mod { $data->page_after_submitformat = $data->page_after_submit_editor['format']; $data->page_after_submit = $data->page_after_submit_editor['text']; - // Turn off completion settings if the checkboxes aren't ticked - $autocompletion = !empty($data->completion) AND - $data->completion==COMPLETION_TRACKING_AUTOMATIC; - if (empty($data->completion) || !$autocompletion) { - $data->completionsubmit=0; - } - if (empty($data->completionsubmit)) { - $data->completionsubmit=0; + if (!empty($data->completionunlocked)) { + // Turn off completion settings if the checkboxes aren't ticked + $autocompletion = !empty($data->completion) && + $data->completion == COMPLETION_TRACKING_AUTOMATIC; + if (!$autocompletion || empty($data->completionsubmit)) { + $data->completionsubmit=0; + } } } diff --git a/mod/forum/mod_form.php b/mod/forum/mod_form.php index 9d6af25029b..741df9aed8d 100644 --- a/mod/forum/mod_form.php +++ b/mod/forum/mod_form.php @@ -237,15 +237,17 @@ class mod_forum_mod_form extends moodleform_mod { return false; } // Turn off completion settings if the checkboxes aren't ticked - $autocompletion = !empty($data->completion) && $data->completion==COMPLETION_TRACKING_AUTOMATIC; - if (empty($data->completiondiscussionsenabled) || !$autocompletion) { - $data->completiondiscussions = 0; - } - if (empty($data->completionrepliesenabled) || !$autocompletion) { - $data->completionreplies = 0; - } - if (empty($data->completionpostsenabled) || !$autocompletion) { - $data->completionposts = 0; + if (!empty($data->completionunlocked)) { + $autocompletion = !empty($data->completion) && $data->completion==COMPLETION_TRACKING_AUTOMATIC; + if (empty($data->completiondiscussionsenabled) || !$autocompletion) { + $data->completiondiscussions = 0; + } + if (empty($data->completionrepliesenabled) || !$autocompletion) { + $data->completionreplies = 0; + } + if (empty($data->completionpostsenabled) || !$autocompletion) { + $data->completionposts = 0; + } } return $data; } diff --git a/mod/glossary/mod_form.php b/mod/glossary/mod_form.php index 67456061340..fa81bf740ab 100644 --- a/mod/glossary/mod_form.php +++ b/mod/glossary/mod_form.php @@ -195,10 +195,12 @@ class mod_glossary_mod_form extends moodleform_mod { if (!$data) { return false; } - // Turn off completion settings if the checkboxes aren't ticked - $autocompletion = !empty($data->completion) && $data->completion==COMPLETION_TRACKING_AUTOMATIC; - if (empty($data->completionentriesenabled) || !$autocompletion) { - $data->completionentries = 0; + if (!empty($data->completionunlocked)) { + // Turn off completion settings if the checkboxes aren't ticked + $autocompletion = !empty($data->completion) && $data->completion==COMPLETION_TRACKING_AUTOMATIC; + if (empty($data->completionentriesenabled) || !$autocompletion) { + $data->completionentries = 0; + } } return $data; } diff --git a/mod/scorm/mod_form.php b/mod/scorm/mod_form.php index b9a79174ec2..249bc14a1f4 100644 --- a/mod/scorm/mod_form.php +++ b/mod/scorm/mod_form.php @@ -521,24 +521,25 @@ class mod_scorm_mod_form extends moodleform_mod { return false; } - // Turn off completion settings if the checkboxes aren't ticked - $autocompletion = isset($data->completion) && $data->completion == COMPLETION_TRACKING_AUTOMATIC; + if (!empty($data->completionunlocked)) { + // Turn off completion settings if the checkboxes aren't ticked + $autocompletion = isset($data->completion) && $data->completion == COMPLETION_TRACKING_AUTOMATIC; - if (isset($data->completionstatusrequired) && is_array($data->completionstatusrequired)) { - $total = 0; - foreach (array_keys($data->completionstatusrequired) as $state) { - $total |= $state; + if (isset($data->completionstatusrequired) && + is_array($data->completionstatusrequired) && $autocompletion) { + $total = 0; + foreach (array_keys($data->completionstatusrequired) as $state) { + $total |= $state; + } + + $data->completionstatusrequired = $total; + } else { + $data->completionstatusrequired = null; } - $data->completionstatusrequired = $total; - } - - if (!$autocompletion) { - $data->completionstatusrequired = null; - } - - if (!empty($data->completionscoredisabled) || !$autocompletion) { - $data->completionscorerequired = null; + if (!empty($data->completionscoredisabled) || !$autocompletion) { + $data->completionscorerequired = null; + } } return $data;