MDL-46805 SCORM: AICC restricts allowed characters in the username
authorDan Marsden <dan@danmarsden.com>
Thu, 14 Aug 2014 08:06:27 +0000 (20:06 +1200)
committerDan Marsden <dan@danmarsden.com>
Mon, 30 Mar 2015 21:38:16 +0000 (10:38 +1300)
mod/scorm/datamodels/aicclib.php
mod/scorm/db/upgrade.php
mod/scorm/lang/en/scorm.php
mod/scorm/settings.php
mod/scorm/version.php

index b3c5a37..dfd4e4e 100644 (file)
@@ -491,8 +491,12 @@ function scorm_aicc_generate_simple_sco($scorm) {
  */
 function get_scorm_default (&$userdata, $scorm, $scoid, $attempt, $mode) {
     global $USER;
-
-    $userdata->student_id = $USER->username;
+    $aiccuserid = get_config('scorm', 'aiccuserid');
+    if (!empty($aiccuserid)) {
+        $userdata->student_id = $USER->id;
+    } else {
+        $userdata->student_id = $USER->username;
+    }
     $userdata->student_name = $USER->lastname .', '. $USER->firstname;
 
     if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) {
index 08a83ed..58ef11b 100644 (file)
@@ -297,6 +297,24 @@ function xmldb_scorm_upgrade($oldversion) {
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
 
+    if ($oldversion < 2015031800) {
+
+        // Check to see if this site has any AICC packages - if so set the aiccuserid to pass the username
+        // so that the data remains consistent with existing packages.
+        $alreadyset = $DB->record_exists('config_plugins', array('plugin' => 'scorm', 'name' => 'aiccuserid'));
+        if (!$alreadyset) {
+            $hasaicc = $DB->record_exists('scorm', array('version' => 'AICC'));
+            if ($hasaicc) {
+                set_config('aiccuserid', 0, 'scorm');
+            } else {
+                // We set the config value to hide this from upgrades as most users will not know what AICC is anyway.
+                set_config('aiccuserid', 1, 'scorm');
+            }
+        }
+        // Scorm savepoint reached.
+        upgrade_mod_savepoint(true, 2015031800, 'scorm');
+    }
+
     return true;
 }
 
index 3267674..69ffd4f 100644 (file)
@@ -27,6 +27,9 @@ $string['aicchacptimeout'] = 'AICC HACP timeout';
 $string['aicchacptimeout_desc'] = 'Length of time in minutes that an external AICC HACP session can remain open';
 $string['aicchacpkeepsessiondata'] = 'AICC HACP session data';
 $string['aicchacpkeepsessiondata_desc'] = 'Length of time in days to keep the external AICC HACP session data (a high setting will fill up the table with old data but may be useful when debugging)';
+$string['aiccuserid'] = 'AICC pass numeric user id';
+$string['aiccuserid_desc'] = 'The AICC standard for usernames is very restrictive compared with Moodle so we pass the user->id instead. If disabled this passes the moodle username to the AICC package.
+The AICC standard allows for alpha-numeric characters with the two additional characters dash(-) and the underscore(_). Periods, spaces and the @ symbol are not permitted.';
 $string['activation'] = 'Activation';
 $string['activityloading'] = 'You will be automatically redirected to the activity in';
 $string['activityoverview'] = 'You have SCORM packages that need attention';
index e1e0f67..5287a37 100644 (file)
@@ -147,6 +147,9 @@ if ($ADMIN->fulltree) {
         get_string('aicchacpkeepsessiondata', 'scorm'), get_string('aicchacpkeepsessiondata_desc', 'scorm'),
         1, PARAM_INT));
 
+    $settings->add(new admin_setting_configcheckbox('scorm/aiccuserid', get_string('aiccuserid', 'scorm'),
+                                                    get_string('aiccuserid_desc', 'scorm'), 1));
+
     $settings->add(new admin_setting_configcheckbox('scorm/forcejavascript', get_string('forcejavascript', 'scorm'),
                                                     get_string('forcejavascript_desc', 'scorm'), 1));
 
index 7732c4d..7dc4ca8 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2014111000;    // The current module version (Date: YYYYMMDDXX).
+$plugin->version   = 2015031800;    // The current module version (Date: YYYYMMDDXX).
 $plugin->requires  = 2014110400;    // Requires this Moodle version.
 $plugin->component = 'mod_scorm';   // Full name of the plugin (used for diagnostics).
 $plugin->cron      = 300;