Merge branch 'master_MDL-45821' of git://github.com/danmarsden/moodle
authorDan Poltawski <dan@moodle.com>
Mon, 16 Jan 2017 08:57:52 +0000 (08:57 +0000)
committerDan Poltawski <dan@moodle.com>
Mon, 16 Jan 2017 08:57:52 +0000 (08:57 +0000)
mod/scorm/lib.php
mod/scorm/tests/behat/multisco_review_mode.feature [new file with mode: 0644]

index 2f740e5..0f2b752 100644 (file)
@@ -1438,8 +1438,13 @@ function scorm_check_mode($scorm, &$newattempt, &$attempt, $userid, &$mode) {
     }
     // Check if the scorm module is incomplete (used to validate user request to start a new attempt).
     $incomplete = true;
-    $tracks = $DB->get_recordset('scorm_scoes_track', array('scormid' => $scorm->id, 'userid' => $userid,
-        'attempt' => $attempt, 'element' => 'cmi.core.lesson_status'));
+    $sql = "SELECT sc.id, t.value
+              FROM {scorm_scoes} sc
+         LEFT JOIN {scorm_scoes_track} t ON sc.scorm = t.scormid AND sc.id = t.scoid
+                   AND t.element = 'cmi.core.lesson_status' AND t.userid = ? AND t.attempt = ?
+             WHERE sc.scormtype = 'sco' AND sc.scorm = ?";
+    $tracks = $DB->get_recordset_sql($sql, array($userid, $attempt, $scorm->id));
+
     foreach ($tracks as $track) {
         if (($track->value == 'completed') || ($track->value == 'passed') || ($track->value == 'failed')) {
             $incomplete = false;
diff --git a/mod/scorm/tests/behat/multisco_review_mode.feature b/mod/scorm/tests/behat/multisco_review_mode.feature
new file mode 100644 (file)
index 0000000..4195df1
--- /dev/null
@@ -0,0 +1,172 @@
+@mod @mod_scorm @_file_upload @_switch_iframe
+Feature: Scorm multi-sco review mode.
+  In order to let students access a scorm package
+  As a teacher
+  I need to add scorm activity to a course
+  Background:
+    Given the following "users" exist:
+      | username | firstname | lastname | email |
+      | teacher1 | Teacher | 1 | teacher1@example.com |
+      | student1 | Student | 1 | student1@example.com |
+    And the following "courses" exist:
+      | fullname | shortname | category |
+      | Course 1 | C1 | 0 |
+    And the following "course enrolments" exist:
+      | user | course | role |
+      | teacher1 | C1 | editingteacher |
+      | student1 | C1 | student |
+
+  @javascript
+  Scenario: Test review mode with a single sco completion.
+    When I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I navigate to "Edit settings" in current page administration
+    And I set the following fields to these values:
+      | Enable completion tracking | Yes |
+    And I press "Save and display"
+    And I add a "SCORM package" to section "1"
+    And I set the following fields to these values:
+      | Name | Basic Multi-sco SCORM package |
+      | Description | Description |
+    And I set the field "Completed" to "1"
+    And I upload "mod/scorm/tests/packages/RuntimeMinimumCalls_SCORM12.zip" file to "Package file" filemanager
+    And I click on "Save and display" "button"
+    And I should see "Basic Multi-sco SCORM package"
+    And I log out
+    And I log in as "student1"
+    And I follow "Course 1"
+    And I follow "Basic Multi-sco SCORM package"
+    And I should see "Normal"
+    And I press "Enter"
+    And I switch to "scorm_object" iframe
+    And I should see "Play of the game"
+    And I switch to the main frame
+    And I follow "Exit activity"
+    And I wait until the page is ready
+    And I should see "Basic Multi-sco SCORM package"
+    And I follow "Basic Multi-sco SCORM package"
+    And I should see "Normal"
+    And I press "Enter"
+    Then I should not see "Review mode"
+
+  @javascript
+  Scenario: Test review mode with all scos completed.
+    When I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I navigate to "Edit settings" in current page administration
+    And I set the following fields to these values:
+      | Enable completion tracking | Yes |
+    And I press "Save and display"
+    And I add a "SCORM package" to section "1"
+    And I set the following fields to these values:
+      | Name | ADV Multi-sco SCORM package |
+      | Description | Description |
+      | Completion tracking | Show activity as complete when conditions are met |
+      | Require all scos to return completion status | 1 |
+    And I set the field "Completed" to "1"
+    And I upload "mod/scorm/tests/packages/RuntimeMinimumCalls_SCORM12.zip" file to "Package file" filemanager
+    And I click on "Save and display" "button"
+    And I should see "ADV Multi-sco SCORM package"
+    And I log out
+    And I log in as "student1"
+    And I follow "Course 1"
+    And I follow "ADV Multi-sco SCORM package"
+    And I should see "Normal"
+    And I press "Enter"
+    And I switch to "scorm_object" iframe
+    And I should see "Play of the game"
+
+    And I switch to the main frame
+    And I click on "Par?" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Par"
+
+    And I switch to the main frame
+    And I click on "Keeping Score" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Scoring"
+
+    And I switch to the main frame
+    And I click on "Other Scoring Systems" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Other Scoring Systems"
+
+    And I switch to the main frame
+    And I click on "The Rules of Golf" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "The Rules of Golf"
+
+    And I switch to the main frame
+    And I click on "Playing Golf Quiz" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Knowledge Check"
+
+    And I switch to the main frame
+    And I click on "Taking Care of the Course" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Etiquette - Care For the Course"
+
+    And I switch to the main frame
+    And I click on "Avoiding Distraction" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Etiquette - Avoiding Distraction"
+
+    And I switch to the main frame
+    And I click on "Playing Politely" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Etiquette - Playing the Game"
+
+    And I switch to the main frame
+    And I click on "Etiquette Quiz" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Knowledge Check"
+
+    And I switch to the main frame
+    And I click on "Handicapping Overview" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Handicapping"
+
+    And I switch to the main frame
+    And I click on "Calculating a Handicap" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Calculating a Handicap"
+
+    And I switch to the main frame
+    And I click on "Calculating a Handicapped Score" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Calculating a Score"
+
+    And I switch to the main frame
+    And I click on "Handicapping Example" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Calculating a Score"
+
+    And I switch to the main frame
+    And I click on "Handicapping Quiz" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Knowledge Check"
+
+    And I switch to the main frame
+    And I click on "How to Have Fun Playing Golf" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "How to Have Fun Golfing"
+
+    And I switch to the main frame
+    And I click on "How to Make Friends Playing Golf" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "How to Make Friends on the Golf Course"
+
+    And I switch to the main frame
+    And I click on "Having Fun Quiz" "list_item"
+    And I switch to "scorm_object" iframe
+    And I should see "Knowledge Check"
+    And I switch to the main frame
+    And I follow "Exit activity"
+    And I wait until the page is ready
+    And I should see "ADV Multi-sco SCORM package"
+    And I follow "ADV Multi-sco SCORM package"
+    And I should see "Normal"
+    And I press "Enter"
+    Then I should see "Review mode"