diff --git a/mod/scorm/datamodels/aicclib.php b/mod/scorm/datamodels/aicclib.php
index 4c6faa5e2d4..1753e1d78c9 100644
--- a/mod/scorm/datamodels/aicclib.php
+++ b/mod/scorm/datamodels/aicclib.php
@@ -333,6 +333,8 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
}
$result->attemptleft = $scorm->maxattempt - $attempt;
if ($scoes = get_records_select('scorm_scoes',"scorm='$scorm->id' $organizationsql order by id ASC")){
+ // drop keys so that we can access array sequentially
+ $scoes = array_values($scoes);
//
// Retrieve user tracking data for each learning object
//
@@ -355,7 +357,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
$findnext = false;
$parents[$level]='/';
- foreach ($scoes as $sco) {
+ foreach ($scoes as $pos=>$sco) {
$isvisible = false;
$sco->title = stripslashes($sco->title);
if ($optionaldatas = scorm_get_sco($sco->id, SCO_DATA)) {
@@ -395,7 +397,11 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
if ($isvisible) {
$result->toc .= "\t\t
";
}
- $nextsco = next($scoes);
+ if (isset($scoes[$pos+1])) {
+ $nextsco = $scoes[$pos+1];
+ } else {
+ $nextsco = false;
+ }
$nextisvisible = false;
if (($nextsco !== false) && ($optionaldatas = scorm_get_sco($nextsco->id, SCO_DATA))) {
if (!isset($optionaldatas->isvisible) || (isset($optionaldatas->isvisible) && ($optionaldatas->isvisible == 'true'))) {
diff --git a/mod/scorm/datamodels/scorm_12lib.php b/mod/scorm/datamodels/scorm_12lib.php
index 83235e230fd..d001e7d834a 100644
--- a/mod/scorm/datamodels/scorm_12lib.php
+++ b/mod/scorm/datamodels/scorm_12lib.php
@@ -189,9 +189,11 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
}
$result->attemptleft = $scorm->maxattempt - $attempt;
if ($scoes = get_records_select('scorm_scoes',"scorm='$scorm->id' $organizationsql order by id ASC")){
+ // drop keys so that we can access array sequentially
+ $scoes = array_values($scoes);
//
// Retrieve user tracking data for each learning object
- //
+ //
$usertracks = array();
foreach ($scoes as $sco) {
if (!empty($sco->launch)) {
@@ -211,7 +213,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
$findnext = false;
$parents[$level]='/';
- foreach ($scoes as $sco) {
+ foreach ($scoes as $pos=>$sco) {
$isvisible = false;
$sco->title = stripslashes($sco->title);
if ($optionaldatas = scorm_get_sco($sco->id, SCO_DATA)) {
@@ -252,7 +254,11 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
if ($isvisible) {
$result->toc .= "\t\t";
}
- $nextsco = next($scoes);
+ if (isset($scoes[$pos+1])) {
+ $nextsco = $scoes[$pos+1];
+ } else {
+ $nextsco = false;
+ }
$nextisvisible = false;
if (($nextsco !== false) && ($optionaldatas = scorm_get_sco($nextsco->id, SCO_DATA))) {
if (!isset($optionaldatas->isvisible) || (isset($optionaldatas->isvisible) && ($optionaldatas->isvisible == 'true'))) {
diff --git a/mod/scorm/datamodels/scorm_13lib.php b/mod/scorm/datamodels/scorm_13lib.php
index 4ddf69ff364..376266505a2 100644
--- a/mod/scorm/datamodels/scorm_13lib.php
+++ b/mod/scorm/datamodels/scorm_13lib.php
@@ -35,6 +35,8 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
}
$result->attemptleft = $scorm->maxattempt - $attempt;
if ($scoes = get_records_select('scorm_scoes',"scorm='$scorm->id' $organizationsql order by id ASC")){
+ // drop keys so that we can access array sequentially
+ $scoes = array_values($scoes);
//
// Retrieve user tracking data for each learning object
//
@@ -61,7 +63,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
$nextid = 0;
$findnext = false;
$parents[$level]='/';
- foreach ($scoes as $sco) {
+ foreach ($scoes as $pos=>$sco) {
$isvisible = false;
$sco->title = stripslashes($sco->title);
if (isset($optionaldatas[$sco->identifier])) {
@@ -97,7 +99,11 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
$parents[$level]=$sco->parent;
}
}
- $nextsco = next($scoes);
+ if (isset($scoes[$pos+1])) {
+ $nextsco = $scoes[$pos+1];
+ } else {
+ $nextsco = false;
+ }
$nextisvisible = false;
if (($nextsco !== false) && (isset($optionaldatas[$nextsco->identifier]))) {
if (!isset($optionaldatas[$nextsco->identifier]->isvisible) ||
diff --git a/mod/scorm/lib.php b/mod/scorm/lib.php
index 0c9c75075b5..3361e65aa3f 100755
--- a/mod/scorm/lib.php
+++ b/mod/scorm/lib.php
@@ -257,10 +257,12 @@ function scorm_user_complete($course, $user, $mod, $scorm) {
}
$report .= "";
if ($scoes = get_records_select('scorm_scoes',"scorm='$scorm->id' $organizationsql order by id ASC")){
+ // drop keys so that we can access array sequentially
+ $scoes = array_values($scoes);
$level=0;
$sublist=1;
$parents[$level]='/';
- foreach ($scoes as $sco) {
+ foreach ($scoes as $pos=>$sco) {
if ($parents[$level]!=$sco->parent) {
if ($level>0 && $parents[$level-1]==$sco->parent) {
$report .= "\t\t
\n";
@@ -283,7 +285,11 @@ function scorm_user_complete($course, $user, $mod, $scorm) {
}
}
$report .= "\t\t";
- $nextsco = next($scoes);
+ if (isset($scoes[$pos+1])) {
+ $nextsco = $scoes[$pos+1];
+ } else {
+ $nextsco = false;
+ }
if (($nextsco !== false) && ($sco->parent != $nextsco->parent) && (($level==0) || (($level>0) && ($nextsco->parent == $sco->identifier)))) {
$sublist++;
} else {