Merge branch 'MDL-44677_scorm_commit' of git://github.com/davosmith/moodle

This commit is contained in:
Marina Glancy
2014-04-08 11:14:52 +08:00
2 changed files with 21 additions and 7 deletions
+5 -1
View File
@@ -54,11 +54,15 @@ if (confirm_sesskey() && (!empty($scoid))) {
$result = true;
$request = null;
if (has_capability('mod/scorm:savetrack', context_module::instance($cm->id))) {
// Preload all current tracking data.
$trackdata = $DB->get_records('scorm_scoes_track', array('userid' => $USER->id, 'scormid' => $scorm->id, 'scoid' => $scoid,
'attempt' => $attempt), '', 'element, id, value, timemodified');
foreach (data_submitted() as $element => $value) {
$element = str_replace('__', '.', $element);
if (substr($element, 0, 3) == 'cmi') {
$netelement = preg_replace('/\.N(\d+)\./', "\.\$1\.", $element);
$result = scorm_insert_track($USER->id, $scorm->id, $scoid, $attempt, $element, $value, $scorm->forcecompleted) && $result;
$result = scorm_insert_track($USER->id, $scorm->id, $scoid, $attempt, $element, $value, $scorm->forcecompleted,
$trackdata) && $result;
}
if (substr($element, 0, 15) == 'adl.nav.request') {
// SCORM 2004 Sequencing Request
+16 -6
View File
@@ -415,7 +415,7 @@ function scorm_get_scoes($id, $organisation=false) {
}
}
function scorm_insert_track($userid, $scormid, $scoid, $attempt, $element, $value, $forcecompleted=false) {
function scorm_insert_track($userid, $scormid, $scoid, $attempt, $element, $value, $forcecompleted=false, $trackdata = null) {
global $DB, $CFG;
$id = null;
@@ -497,15 +497,25 @@ function scorm_insert_track($userid, $scormid, $scoid, $attempt, $element, $valu
}
if ($track = $DB->get_record('scorm_scoes_track', array('userid' => $userid,
$track = null;
if ($trackdata !== null) {
if (isset($trackdata[$element])) {
$track = $trackdata[$element];
}
} else {
$track = $DB->get_record('scorm_scoes_track', array('userid' => $userid,
'scormid' => $scormid,
'scoid' => $scoid,
'attempt' => $attempt,
'element' => $element))) {
'element' => $element));
}
if ($track) {
if ($element != 'x.start.time' ) { // Don't update x.start.time - keep the original value.
$track->value = $value;
$track->timemodified = time();
$DB->update_record('scorm_scoes_track', $track);
if ($track->value != $value) {
$track->value = $value;
$track->timemodified = time();
$DB->update_record('scorm_scoes_track', $track);
}
$id = $track->id;
}
} else {