diff --git a/mod/scorm/classes/completion/custom_completion.php b/mod/scorm/classes/completion/custom_completion.php index 6c2f7077059..33edbc955ff 100644 --- a/mod/scorm/classes/completion/custom_completion.php +++ b/mod/scorm/classes/completion/custom_completion.php @@ -67,18 +67,14 @@ class custom_completion extends activity_custom_completion { // Get available status list. $statuses = array_flip(\scorm_status_options()); - $statusbits = 0; $requiredcompletionstatusid = $this->cm->customdata['customcompletionrules']['completionstatusrequired'] ?? 0; + $isanystatus = ($requiredcompletionstatusid == array_sum($statuses)); // Check at least one track meets the required completion status value(s). foreach ($tracks as $track) { - if (array_key_exists($track->value, $statuses)) { - $statusbits |= $statuses[$track->value]; - } - - // All completion status requirements met. - if ($statusbits == $requiredcompletionstatusid) { + if (array_key_exists($track->value, $statuses) + && ($isanystatus || $statuses[$track->value] == $requiredcompletionstatusid)) { $status = COMPLETION_COMPLETE; break; } diff --git a/mod/scorm/tests/behat/scorm_activity_completion.feature b/mod/scorm/tests/behat/scorm_activity_completion.feature index 0e690f1c87f..15a6ca5ea3a 100644 --- a/mod/scorm/tests/behat/scorm_activity_completion.feature +++ b/mod/scorm/tests/behat/scorm_activity_completion.feature @@ -93,7 +93,7 @@ Feature: View activity completion in the SCORM activity And the "Receive a score of 3 or more" completion condition of "Music history" is displayed as "failed" And the "Do all parts of this activity" completion condition of "Music history" is displayed as "done" And the "Receive a grade" completion condition of "Music history" is displayed as "done" - And the "Complete and pass the activity" completion condition of "Music history" is displayed as "failed" + And the "Complete and pass the activity" completion condition of "Music history" is displayed as "done" @javascript Scenario: Use manual completion diff --git a/mod/scorm/tests/custom_completion_test.php b/mod/scorm/tests/custom_completion_test.php index 4f3b4a18a03..73bef324615 100644 --- a/mod/scorm/tests/custom_completion_test.php +++ b/mod/scorm/tests/custom_completion_test.php @@ -105,11 +105,17 @@ class custom_completion_test extends advanced_testcase { 'completionstatusrequired', 4, [$completioncompleted], 1, COMPLETION_COMPLETE, null ], 'Completion status Passed and Completed required, user has only completed, can make another attempt' => [ - 'completionstatusrequired', 6, [$completioncompleted], 0, COMPLETION_INCOMPLETE, null + 'completionstatusrequired', 6, [$completioncompleted], 0, COMPLETION_COMPLETE, null ], 'Completion status Passed and Completed required, user has completed and passed' => [ 'completionstatusrequired', 6, [$completionpassed, $completioncompleted], 0, COMPLETION_COMPLETE, null ], + 'Completion status Passed and Completed required, user has not passed or completed, but has another attempt' => [ + 'completionstatusrequired', 6, [$completionincomplete], 2, COMPLETION_INCOMPLETE, null + ], + 'Completion status Passed and Completed required, user has used all attempts, but not passed or completed' => [ + 'completionstatusrequired', 6, [$completionincomplete], 1, COMPLETION_COMPLETE_FAIL, null + ], 'Completion status Passed required, user has used all attempts and completed, but not passed' => [ 'completionstatusrequired', 2, [$completioncompleted], 1, COMPLETION_COMPLETE_FAIL, null ], @@ -117,7 +123,7 @@ class custom_completion_test extends advanced_testcase { 'completionstatusrequired', 4, [$completionincomplete], 1, COMPLETION_COMPLETE_FAIL, null ], 'Completion status Passed and Completed required, user has used all attempts, but not passed' => [ - 'completionstatusrequired', 6, [$completionincomplete, $completioncompleted], 2, COMPLETION_COMPLETE_FAIL, null + 'completionstatusrequired', 6, [$completionincomplete, $completioncompleted], 2, COMPLETION_COMPLETE, null ], 'Completion score required, user has no score' => [ 'completionscorerequired', 80, [], 0, COMPLETION_INCOMPLETE, null