From be335eb8dbefdac7a028b7eecf1eb9954c4efccc Mon Sep 17 00:00:00 2001 From: Dan Marsden Date: Tue, 19 Nov 2013 13:20:34 +1300 Subject: [PATCH] MDL-40223 SCORM: pass limit into function instead of hardcoding to allow cross-db --- mod/scorm/backup/moodle2/restore_scorm_stepslib.php | 8 +++++--- mod/scorm/db/upgrade.php | 9 ++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mod/scorm/backup/moodle2/restore_scorm_stepslib.php b/mod/scorm/backup/moodle2/restore_scorm_stepslib.php index a58786cb048..dbe52c47103 100644 --- a/mod/scorm/backup/moodle2/restore_scorm_stepslib.php +++ b/mod/scorm/backup/moodle2/restore_scorm_stepslib.php @@ -197,9 +197,11 @@ class restore_scorm_activity_structure_step extends restore_activity_structure_s $scorm->launch = $this->get_mappingid('scorm_sco', $scorm->launch, ''); if (empty($scorm->launch)) { // This scorm has an invalid launch param - we need to calculate it and get the first launchable sco. - $sqlselect = 'scorm = ? AND '.$DB->sql_isnotempty('scorm_scoes', 'launch', false, true). ' ORDER BY sortorder LIMIT 1'; - $sco = $DB->get_record_select('scorm_scoes', $sqlselect, array($scorm->id)); - if (!empty($sco)) { + $sqlselect = 'scorm = ? AND '.$DB->sql_isnotempty('scorm_scoes', 'launch', false, true); + // We use get_records here as we need to pass a limit in the query that works cross db. + $scoes = $DB->get_records_select('scorm_scoes', $sqlselect, array($scormid), 'sortorder', 'id', 0, 1); + if (!empty($scoes)) { + $sco = reset($scoes); // We only care about the first record - the above query only returns one. $scorm->launch = $sco->id; } } diff --git a/mod/scorm/db/upgrade.php b/mod/scorm/db/upgrade.php index e3ba1494b2f..33de0b38b26 100644 --- a/mod/scorm/db/upgrade.php +++ b/mod/scorm/db/upgrade.php @@ -185,9 +185,12 @@ function xmldb_scorm_upgrade($oldversion) { $scorms = $DB->get_recordset_sql($sql); foreach ($scorms as $scorm) { // Find the first launchable sco for this SCORM. - $sqlselect = 'scorm = ? AND '.$DB->sql_isnotempty('scorm_scoes', 'launch', false, true). ' ORDER BY sortorder LIMIT 1'; - $sco = $DB->get_record_select('scorm_scoes', $sqlselect, array($scorm->id)); - if (!empty($sco)) { + // This scorm has an invalid launch param - we need to calculate it and get the first launchable sco. + $sqlselect = 'scorm = ? AND '.$DB->sql_isnotempty('scorm_scoes', 'launch', false, true); + // We use get_records here as we need to pass a limit in the query that works cross db. + $scoes = $DB->get_records_select('scorm_scoes', $sqlselect, array($scorm->id), 'sortorder', 'id', 0, 1); + if (!empty($scoes)) { + $sco = reset($scoes); // We only care about the first record - the above query only returns one. $scorm->launch = $sco->id; $DB->update_record('scorm', $scorm); }