diff --git a/mod/scorm/datamodels/scormlib.php b/mod/scorm/datamodels/scormlib.php index 13adc61242e..820dd177320 100644 --- a/mod/scorm/datamodels/scormlib.php +++ b/mod/scorm/datamodels/scormlib.php @@ -488,16 +488,12 @@ function scorm_parse_scorm($pkgdir,$scormid) { $newitem->$standarddata = addslashes($item->$standarddata); } - $id = 0; + // Insert the new SCO, and retain the link between the old and new for later adjustment + $id = insert_record('scorm_scoes',$newitem); if (!empty($olditems) && ($olditemid = scorm_array_search('identifier',$newitem->identifier,$olditems))) { - $newitem->id = $olditemid; - $id = update_record('scorm_scoes',$newitem); - unset($olditems[$olditemid]); - delete_records('scorm_scoes_data','scoid',$olditemid); - } else { - $id = insert_record('scorm_scoes',$newitem); + $olditems[$olditemid]->newid = $id; } - + if ($optionaldatas = scorm_optionals_data($item,$standarddatas)) { $data = new stdClass(); $data->scoid = $id; @@ -590,15 +586,18 @@ function scorm_parse_scorm($pkgdir,$scormid) { } if (!empty($olditems)) { foreach($olditems as $olditem) { - delete_records('scorm_scoes','id',$olditem->id); - delete_records('scorm_scoes_data','scoid',$olditem->id); - delete_records('scorm_scoes_track','scoid',$olditem->id); - delete_records('scorm_seq_objective','scoid',$olditem->id); - delete_records('scorm_seq_mapinfo','scoid',$olditem->id); - delete_records('scorm_seq_ruleconds','scoid',$olditem->id); - delete_records('scorm_seq_rulecond','scoid',$olditem->id); - delete_records('scorm_seq_rolluprule','scoid',$olditem->id); - delete_records('scorm_seq_rollupcond','scoid',$olditem->id); + delete_records('scorm_scoes','id',$olditem->id); + delete_records('scorm_scoes_data','scoid',$olditem->id); + if (isset($olditem->newid)) { + set_field('scorm_scoes_track', 'scoid', $olditem->newid, 'scoid', $olditem->id); + } + delete_records('scorm_scoes_track','scoid',$olditem->id); + delete_records('scorm_seq_objective','scoid',$olditem->id); + delete_records('scorm_seq_mapinfo','scoid',$olditem->id); + delete_records('scorm_seq_ruleconds','scoid',$olditem->id); + delete_records('scorm_seq_rulecond','scoid',$olditem->id); + delete_records('scorm_seq_rolluprule','scoid',$olditem->id); + delete_records('scorm_seq_rollupcond','scoid',$olditem->id); } } set_field('scorm','version',$scoes->version,'id',$scormid); diff --git a/mod/scorm/locallib.php b/mod/scorm/locallib.php index 325b390049f..47bd247c6b7 100755 --- a/mod/scorm/locallib.php +++ b/mod/scorm/locallib.php @@ -536,6 +536,8 @@ function scorm_view_display ($user, $scorm, $action, $cm, $boxwidth='') { global $CFG; if ($scorm->updatefreq == UPDATE_EVERYTIME){ + require_once($CFG->dirroot.'/mod/scorm/lib.php'); + $scorm->instance = $scorm->id; scorm_update_instance($scorm); }