From 276d1134e2f2c547320ef6f8d9bd315b8a63c935 Mon Sep 17 00:00:00 2001 From: sam marshall Date: Tue, 5 Mar 2013 16:32:20 +0000 Subject: [PATCH] MDL-38315 Completion: Bugs with 'locked' status in activity form --- course/modedit.php | 2 +- course/moodleform_mod.php | 7 +++++-- mod/choice/mod_form.php | 6 ++++-- mod/feedback/mod_form.php | 15 +++++++-------- mod/forum/mod_form.php | 20 +++++++++++--------- mod/glossary/mod_form.php | 10 ++++++---- mod/scorm/mod_form.php | 31 ++++++++++++++++--------------- 7 files changed, 50 insertions(+), 41 deletions(-) diff --git a/course/modedit.php b/course/modedit.php index 00cc3181800..541ba59a341 100644 --- a/course/modedit.php +++ b/course/modedit.php @@ -335,7 +335,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 a62cb976944..1d80117db8d 100644 --- a/course/moodleform_mod.php +++ b/course/moodleform_mod.php @@ -303,8 +303,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/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 eb2d03ccb9c..0870a235d98 100644 --- a/mod/forum/mod_form.php +++ b/mod/forum/mod_form.php @@ -234,15 +234,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 4db6c90e3e9..1a1b2aed595 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 a9f61e67a7c..1d348ba44a9 100644 --- a/mod/scorm/mod_form.php +++ b/mod/scorm/mod_form.php @@ -498,24 +498,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;