Merge branch 'master_MDL-41434' of https://github.com/danmarsden/moodle
authorSam Hemelryk <sam@moodle.com>
Mon, 16 Sep 2013 03:07:57 +0000 (15:07 +1200)
committerSam Hemelryk <sam@moodle.com>
Mon, 16 Sep 2013 03:07:57 +0000 (15:07 +1200)
1  2 
mod/scorm/lib.php
mod/scorm/locallib.php

diff --combined mod/scorm/lib.php
@@@ -388,7 -388,7 +388,7 @@@ function scorm_user_complete($course, $
      if ($orgs = $DB->get_records_select('scorm_scoes', 'scorm = ? AND '.
                                           $DB->sql_isempty('scorm_scoes', 'launch', false, true).' AND '.
                                           $DB->sql_isempty('scorm_scoes', 'organization', false, false),
-                                          array($scorm->id), 'id', 'id,identifier,title')) {
+                                          array($scorm->id), 'sortorder, id', 'id, identifier, title')) {
          if (count($orgs) <= 1) {
              unset($orgs);
              $orgs = array();
              }
              $report .= "<ul id='0' class='$liststyle'>";
                  $conditions['scorm'] = $scorm->id;
-             if ($scoes = $DB->get_records('scorm_scoes', $conditions, "id ASC")) {
+             if ($scoes = $DB->get_records('scorm_scoes', $conditions, "sortorder, id")) {
                  // drop keys so that we can access array sequentially
                  $scoes = array_values($scoes);
                  $level=0;
@@@ -1370,37 -1370,3 +1370,37 @@@ function scorm_validate_package($file) 
      }
      return $errors;
  }
- }
 +
 +/**
 + * Check and set the correct mode and attempt when entering a SCORM package.
 + *
 + * @param object $scorm object
 + * @param string $newattempt should a new attempt be generated here.
 + * @param int $attempt the attempt number this is for.
 + * @param int $userid the userid of the user.
 + * @param string $mode the current mode that has been selected.
 + */
 +function scorm_check_mode($scorm, $newattempt, &$attempt, $userid, &$mode) {
 +    global $DB;
 +    if (($newattempt == 'on') && (($attempt < $scorm->maxattempt) || ($scorm->maxattempt == 0))) {
 +        $attempt++;
 +        $mode = 'normal';
 +    } else if ($mode != 'browse') { // Check if review mode should be set.
 +        $mode = 'normal'; // Set to normal mode by default.
 +
 +        // If all tracks == passed, failed or completed then use review mode.
 +        $tracks = $DB->get_recordset('scorm_scoes_track', array('scormid' => $scorm->id, 'userid' => $userid,
 +            'attempt' => $attempt, 'element' => 'cmi.core.lesson_status'));
 +        foreach ($tracks as $track) {
 +            if (($track->value == 'completed') || ($track->value == 'passed') || ($track->value == 'failed')) {
 +                $mode = 'review';
 +            } else { // Found an incomplete sco so exit and use normal mode.
 +                $mode = 'normal';
 +                break;
 +            }
 +        }
 +        $tracks->close();
 +    } else if (($mode == 'browse') && ($scorm->hidebrowse == 1)) { // Prevent Browse mode if hidebrowse is set.
 +        $mode = 'normal';
 +    }
++}
diff --combined mod/scorm/locallib.php
@@@ -367,13 -367,12 +367,12 @@@ function scorm_get_sco($id, $what=SCO_A
  function scorm_get_scoes($id, $organisation=false) {
      global $DB;
  
-     $organizationsql = '';
      $queryarray = array('scorm'=>$id);
      if (!empty($organisation)) {
          $queryarray['organization'] = $organisation;
      }
-     if ($scoes = $DB->get_records('scorm_scoes', $queryarray, 'id ASC')) {
-         // drop keys so that it is a simple array as expected
+     if ($scoes = $DB->get_records('scorm_scoes', $queryarray, 'sortorder, id')) {
+         // Drop keys so that it is a simple array as expected.
          $scoes = array_values($scoes);
          foreach ($scoes as $sco) {
              if ($scodatas = $DB->get_records('scorm_scoes_data', array('scoid'=>$sco->id))) {
@@@ -627,7 -626,7 +626,7 @@@ function scorm_grade_user_attempt($scor
      $attemptscore->sum = 0;
      $attemptscore->lastmodify = 0;
  
-     if (!$scoes = $DB->get_records('scorm_scoes', array('scorm'=>$scorm->id))) {
+     if (!$scoes = $DB->get_records('scorm_scoes', array('scorm' => $scorm->id), 'sortorder, id')) {
          return null;
      }
  
@@@ -814,7 -813,7 +813,7 @@@ function scorm_view_display ($user, $sc
      if ($orgs = $DB->get_records_select_menu('scorm_scoes', 'scorm = ? AND '.
                                           $DB->sql_isempty('scorm_scoes', 'launch', false, true).' AND '.
                                           $DB->sql_isempty('scorm_scoes', 'organization', false, false),
-                                          array($scorm->id), 'id', 'id,title')) {
+                                          array($scorm->id), 'sortorder, id', 'id,title')) {
          if (count($orgs) > 1) {
              $select = new single_select(new moodle_url($action), 'organization', $orgs, $organization, null);
              $select->label = get_string('organizations', 'scorm');
@@@ -900,7 -899,8 +899,8 @@@ function scorm_simple_play($scorm, $use
      if ($scorm->scormtype != SCORM_TYPE_LOCAL && $scorm->updatefreq == SCORM_UPDATE_EVERYTIME) {
          scorm_parse($scorm, false);
      }
-     $scoes = $DB->get_records_select('scorm_scoes', 'scorm = ? AND '.$DB->sql_isnotempty('scorm_scoes', 'launch', false, true), array($scorm->id), 'id', 'id');
+     $scoes = $DB->get_records_select('scorm_scoes', 'scorm = ? AND '.
+         $DB->sql_isnotempty('scorm_scoes', 'launch', false, true), array($scorm->id), 'sortorder, id', 'id');
  
      if ($scoes) {
          $orgidentifier = '';
@@@ -1338,8 -1338,8 +1338,8 @@@ function scorm_get_toc_object($user, $s
      global $CFG, $DB, $PAGE, $OUTPUT;
  
      $modestr = '';
 -    if ($mode == 'browse') {
 -        $modestr = '&amp;mode='.$mode;
 +    if ($mode != 'normal') {
 +        $modestr = '&mode='.$mode;
      }
  
      $result = array();
@@@ -1461,7 -1461,6 +1461,6 @@@ function scorm_get_toc_get_parent_child
      $final = array();
      $level = 0;
      $prevparent = '/';
-     ksort($result);
  
      foreach ($result as $sco) {
          if ($sco->parent == '/') {
@@@ -1751,8 -1750,8 +1750,8 @@@ function scorm_get_toc($user, $scorm, $
          $tocmenu = scorm_format_toc_for_droplist($scorm, $scoes['scoes'][0]->children, $scoes['usertracks'], $currentorg, $organizationsco);
  
          $modestr = '';
 -        if ($mode == 'browse') {
 -            $modestr = '&amp;mode='.$mode;
 +        if ($mode != 'normal') {
 +            $modestr = '&mode='.$mode;
          }
  
          $url = new moodle_url('/mod/scorm/player.php?a='.$scorm->id.'&currentorg='.$currentorg.$modestr);