From d444af3d7453c5e0ac670535350a1419d2daa3ea Mon Sep 17 00:00:00 2001 From: Dan Marsden Date: Thu, 14 Aug 2014 20:06:27 +1200 Subject: [PATCH] MDL-46805 SCORM: AICC restricts allowed characters in the username --- mod/scorm/datamodels/aicclib.php | 8 ++++++-- mod/scorm/db/upgrade.php | 18 ++++++++++++++++++ mod/scorm/lang/en/scorm.php | 3 +++ mod/scorm/settings.php | 3 +++ mod/scorm/version.php | 2 +- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/mod/scorm/datamodels/aicclib.php b/mod/scorm/datamodels/aicclib.php index b3c5a3718a3..dfd4e4e9fb4 100644 --- a/mod/scorm/datamodels/aicclib.php +++ b/mod/scorm/datamodels/aicclib.php @@ -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)) { diff --git a/mod/scorm/db/upgrade.php b/mod/scorm/db/upgrade.php index 08a83ed419e..122567b77d4 100644 --- a/mod/scorm/db/upgrade.php +++ b/mod/scorm/db/upgrade.php @@ -297,6 +297,24 @@ function xmldb_scorm_upgrade($oldversion) { // Moodle v2.8.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2014111001) { + + // 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, 2014111001, 'scorm'); + } + return true; } diff --git a/mod/scorm/lang/en/scorm.php b/mod/scorm/lang/en/scorm.php index 326767430ca..69ffd4f1833 100644 --- a/mod/scorm/lang/en/scorm.php +++ b/mod/scorm/lang/en/scorm.php @@ -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'; diff --git a/mod/scorm/settings.php b/mod/scorm/settings.php index e1e0f679196..5287a3754b0 100644 --- a/mod/scorm/settings.php +++ b/mod/scorm/settings.php @@ -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)); diff --git a/mod/scorm/version.php b/mod/scorm/version.php index 7732c4dded6..3414deb7939 100644 --- a/mod/scorm/version.php +++ b/mod/scorm/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014111000; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2014111001; // 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;