diff --git a/course/modlib.php b/course/modlib.php index 614ac8aabfb..daf6d9c11dc 100644 --- a/course/modlib.php +++ b/course/modlib.php @@ -438,7 +438,7 @@ function update_moduleinfo($cm, $moduleinfo, $course, $mform = null) { } $completion = new completion_info($course); - if ($completion->is_enabled()) { + if ($completion->is_enabled() && !empty($moduleinfo->completionunlocked)) { // Update completion settings. $cm->completion = $moduleinfo->completion; $cm->completiongradeitemnumber = $moduleinfo->completiongradeitemnumber; diff --git a/course/moodleform_mod.php b/course/moodleform_mod.php index dd5652a9e2e..f83bf790648 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 4a21eeec5a5..93f70b3797b 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -846,7 +846,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 59fce157bdc..59761bbcbdd 100644 --- a/mod/choice/mod_form.php +++ b/mod/choice/mod_form.php @@ -123,8 +123,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 3712367f262..144f6a902c7 100644 --- a/mod/feedback/mod_form.php +++ b/mod/feedback/mod_form.php @@ -197,14 +197,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 4403004daad..ae86d69023d 100644 --- a/mod/forum/mod_form.php +++ b/mod/forum/mod_form.php @@ -245,15 +245,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 50163f6e619..9576132c770 100644 --- a/mod/glossary/mod_form.php +++ b/mod/glossary/mod_form.php @@ -205,10 +205,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 be0636472c2..a26bcd0b04e 100644 --- a/mod/scorm/mod_form.php +++ b/mod/scorm/mod_form.php @@ -520,24 +520,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;