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:
piers
2008-08-13 23:20:35 +00:00
parent d2436bf26b
commit a9aaede659
2 changed files with 18 additions and 17 deletions
+16 -17
View File
@@ -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);
+2
View File
@@ -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);
}