MDL-37393 SCORM: Fix existing AICC scoes to use correct parent/child relationships
authorDan Marsden <dan@danmarsden.com>
Fri, 11 Jan 2013 08:57:32 +0000 (21:57 +1300)
committerDan Marsden <dan@danmarsden.com>
Thu, 15 Aug 2013 21:28:40 +0000 (09:28 +1200)
also fix bad version used by patch in MDL-39239

mod/scorm/datamodels/aicclib.php
mod/scorm/db/upgrade.php
mod/scorm/version.php

index 3aecc7f..6a71741 100644 (file)
@@ -273,8 +273,10 @@ function scorm_parse_aicc($scorm) {
                     $sco->organization = $course->id;
                     $sco->title = $element->title;
 
-                    if (!isset($element->parent) || strtolower($element->parent) == 'root') {
+                    if (!isset($element->parent)) {
                         $sco->parent = '/';
+                    } else if (strtolower($element->parent) == 'root') {
+                        $sco->parent = $course->id;
                     } else {
                         $sco->parent = $element->parent;
                     }
index 13646ed..d6c1cff 100644 (file)
@@ -77,12 +77,15 @@ function xmldb_scorm_upgrade($oldversion) {
 
 
     // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
+    // Put any upgrade step following this.
+
+    // Moodle v2.5.0 release upgrade line.
+    // Put any upgrade step following this.
 
     // Remove old imsrepository type - convert any existing records to external type to help prevent major errors.
-    if ($oldversion < 2013050101) {
+    if ($oldversion < 2013081301) {
         $scorms = $DB->get_recordset('scorm', array('scormtype' => 'imsrepository'));
-        foreach($scorms as $scorm) {
+        foreach ($scorms as $scorm) {
             $scorm->scormtype = SCORM_TYPE_EXTERNAL;
             if (!empty($CFG->repository)) { // Fix path to imsmanifest if $CFG->repository is set.
                 $scorm->reference = $CFG->repository.substr($scorm->reference, 1).'/imsmanifest.xml';
@@ -91,13 +94,25 @@ function xmldb_scorm_upgrade($oldversion) {
             $scorm->revision++;
             $DB->update_record('scorm', $scorm);
         }
-        upgrade_mod_savepoint(true, 2013050101, 'scorm');
+        upgrade_mod_savepoint(true, 2013081301, 'scorm');
     }
 
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
+    // Fix AICC parent/child relationships (MDL-37394).
+    if ($oldversion < 2013081302) {
+        // Get all AICC packages.
+        $aiccpackages = $DB->get_recordset('scorm', array('version' => 'AICC'), '', 'id');
+        foreach ($aiccpackages as $aicc) {
+            $sql = "UPDATE {scorm_scoes}
+                       SET parent = organization
+                     WHERE scorm = ?
+                       AND " . $DB->sql_isempty('scorm_scoes', 'manifest', false, false) . "
+                       AND " . $DB->sql_isnotempty('scorm_scoes', 'organization', false, false) . "
+                       AND parent = '/'";
+            $DB->execute($sql, array($aicc->id));
+        }
+        $aiccpackages->close();
+        upgrade_mod_savepoint(true, 2013081302, 'scorm');
+    }
 
     return true;
 }
index ff309cc..9f2d6c1 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$module->version   = 2013050101;       // The current module version (Date: YYYYMMDDXX)
+$module->version   = 2013081302;       // The current module version (Date: YYYYMMDDXX)
 $module->requires  = 2013050100;    // Requires this Moodle version
 $module->component = 'mod_scorm'; // Full name of the plugin (used for diagnostics)
 $module->cron      = 300;