MDL-13904 Scorm structure isn't respected after an update of the package. This is a large change to the handling of SCORM package update - all SCOes are issued with a new id, and all references to the old ones are deleted. The scorm_scoes_track data is preserved by being reattached to the new SCO ids (unless they have been deleted). backport to 1.8.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user