From ba8bc239068dce91e02f941724c5443ec76c2663 Mon Sep 17 00:00:00 2001 From: Andreas Grabs Date: Tue, 25 Jun 2019 22:04:14 +0200 Subject: [PATCH] MDL-66009 mod_feedback: Nested dependency fails again --- mod/feedback/classes/completion.php | 6 +++++- mod/feedback/lib.php | 21 +++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/mod/feedback/classes/completion.php b/mod/feedback/classes/completion.php index 7c27de8f148..f492e3ce51b 100644 --- a/mod/feedback/classes/completion.php +++ b/mod/feedback/classes/completion.php @@ -178,7 +178,11 @@ class mod_feedback_completion extends mod_feedback_structure { } return null; } - return $itemobj->compare_value($ditem, $value, $item->dependvalue) ? true : false; + $check = $itemobj->compare_value($ditem, $value, $item->dependvalue) ? true : false; + if ($check) { + return $this->can_see_item($ditem); + } + return false; } /** diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php index 85959693cc5..e2a45875b40 100644 --- a/mod/feedback/lib.php +++ b/mod/feedback/lib.php @@ -1925,10 +1925,23 @@ function feedback_save_tmp_values($feedbackcompletedtmp, $feedbackcompleted) { //check if there are depend items $item = $DB->get_record('feedback_item', array('id'=>$value->item)); if ($item->dependitem > 0 && isset($allitems[$item->dependitem])) { - $check = feedback_compare_item_value($tmpcplid, - $allitems[$item->dependitem], - $item->dependvalue, - true); + $ditem = $allitems[$item->dependitem]; + while ($ditem !== null) { + $check = feedback_compare_item_value($tmpcplid, + $ditem, + $item->dependvalue, + true); + if (!$check) { + break; + } + if ($ditem->dependitem > 0 && isset($allitems[$ditem->dependitem])) { + $item = $ditem; + $ditem = $allitems[$ditem->dependitem]; + } else { + $ditem = null; + } + } + } else { $check = true; }