From 5a24e2177eda7b2a5f19d8005804ee923cbc2e6a Mon Sep 17 00:00:00 2001 From: Jake Dallimore Date: Thu, 2 Mar 2017 14:34:37 +0800 Subject: [PATCH] MDL-57583 completion: fix bug with advcheckbox in course completion form Added the appropriate checks to handle the advcheckbox post data. --- .../criteria/completion_criteria_activity.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/completion/criteria/completion_criteria_activity.php b/completion/criteria/completion_criteria_activity.php index 28437dea598..29c570b5f95 100644 --- a/completion/criteria/completion_criteria_activity.php +++ b/completion/criteria/completion_criteria_activity.php @@ -84,13 +84,17 @@ class completion_criteria_activity extends completion_criteria { $this->course = $data->id; - foreach (array_keys($data->criteria_activity) as $activity) { - - $module = $DB->get_record('course_modules', array('id' => $activity)); - $this->module = self::get_mod_name($module->module); - $this->moduleinstance = $activity; - $this->id = NULL; - $this->insert(); + // Data comes from advcheckbox, so contains keys for all activities. + // A value of 0 is 'not checked' whereas 1 is 'checked'. + foreach ($data->criteria_activity as $activity => $val) { + // Only update those which are checked. + if (!empty($val)) { + $module = $DB->get_record('course_modules', array('id' => $activity)); + $this->module = self::get_mod_name($module->module); + $this->moduleinstance = $activity; + $this->id = null; + $this->insert(); + } } } }