MDL-71796 mod_scorm: fix custom completion logic
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user