From 3fd25520c017f26edb5bec70d3c653e1de7533f4 Mon Sep 17 00:00:00 2001 From: piers Date: Wed, 13 Aug 2008 00:11:53 +0000 Subject: [PATCH] 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). --- mod/scorm/datamodels/scormlib.php | 33 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/mod/scorm/datamodels/scormlib.php b/mod/scorm/datamodels/scormlib.php index 529df8fb48..7938e4bf45 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 = $item->$standarddata; } - $id = 0; + // Insert the new SCO, and retain the link between the old and new for later adjustment + $id = $DB->insert_record('scorm_scoes',$newitem); if (!empty($olditems) && ($olditemid = scorm_array_search('identifier',$newitem->identifier,$olditems))) { - $newitem->id = $olditemid; - $id = $DB->update_record('scorm_scoes',$newitem); - unset($olditems[$olditemid]); - $DB->delete_records('scorm_scoes_data', array('scoid'=>$olditemid)); - } else { - $id = $DB->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) { - $DB->delete_records('scorm_scoes', array('id'=>$olditem->id)); - $DB->delete_records('scorm_scoes_data',array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_scoes_track',array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_seq_objective', array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_seq_mapinfo', array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_seq_ruleconds', array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_seq_rulecond', array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_seq_rolluprule', array('scoid'=>$olditem->id)); - $DB->delete_records('scorm_seq_rollupcond', array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_scoes', array('id'=>$olditem->id)); + $DB->delete_records('scorm_scoes_data',array('scoid'=>$olditem->id)); + if (isset($olditem->newid)) { + $DB->set_field('scorm_scoes_track', 'scoid', $olditem->newid, array('scoid' => $olditem->id)); + } + $DB->delete_records('scorm_scoes_track',array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_seq_objective', array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_seq_mapinfo', array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_seq_ruleconds', array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_seq_rulecond', array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_seq_rolluprule', array('scoid'=>$olditem->id)); + $DB->delete_records('scorm_seq_rollupcond', array('scoid'=>$olditem->id)); } } $DB->set_field('scorm','version',$scoes->version, array('id'=>$scormid)); -- 2.39.5