Index: openacs-4/packages/scorm-importer/catalog/scorm-importer.en_US.ISO-8859-1.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/scorm-importer/catalog/scorm-importer.en_US.ISO-8859-1.xml,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/scorm-importer/catalog/scorm-importer.en_US.ISO-8859-1.xml 13 May 2010 01:03:47 -0000 1.1
+++ openacs-4/packages/scorm-importer/catalog/scorm-importer.en_US.ISO-8859-1.xml 18 May 2010 02:00:23 -0000 1.2
@@ -6,6 +6,7 @@
Import failed
No
Normal
+The course is not a SCORM 2004 package.
Online
Select SCORM 2004 course to upload
The uploaded file does not exist.
Index: openacs-4/packages/scorm-importer/embed/admin/import-2.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/scorm-importer/embed/admin/import-2.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/scorm-importer/embed/admin/import-2.tcl 14 May 2010 16:59:29 -0000 1.2
+++ openacs-4/packages/scorm-importer/embed/admin/import-2.tcl 18 May 2010 02:00:23 -0000 1.3
@@ -33,19 +33,14 @@
ad_script_abort
}
-scorm_importer::import \
+if { [catch {scorm_importer::import \
-package_id [ad_conn package_id] \
-tmp_dir $tmp_dir \
-online $online \
- -default_lesson_mode $default_lesson_mode
-#if { [catch {scorm_importer::import \
-# -package_id [ad_conn package_id] \
-# -tmp_dir $tmp_dir \
-# -online $online \
-# -default_lesson_mode $default_lesson_mode} errMsg] } {
-# ad_return_complaint 1 "[_ scorm-importer.Import_failed]: $errMsg"
-# ad_script_abort
-#}
+ -default_lesson_mode $default_lesson_mode} errMsg] } {
+ ad_return_complaint 1 "[_ scorm-importer.Import_failed]: $errMsg"
+ ad_script_abort
+}
file delete -force $tmp_dir
Index: openacs-4/packages/scorm-importer/tcl/import-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/scorm-importer/tcl/import-procs.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/scorm-importer/tcl/import-procs.tcl 14 May 2010 23:30:31 -0000 1.3
+++ openacs-4/packages/scorm-importer/tcl/import-procs.tcl 18 May 2010 02:00:23 -0000 1.4
@@ -5,7 +5,7 @@
namespace eval scorm_importer {
}
-ad_proc -public scorm_importer::create_course {
+ad_proc scorm_importer::create_course {
-package_id:required
-manifest:required
-folder_id:required
@@ -16,24 +16,19 @@
Create a Scorm course skeleton based on a parsed manifest.
} {
- # build activity tree before we transform the document
- array set adl_info \
- [scorm_importer::rte_activity_tree::create -manifest [$manifest documentElement]]
+ # Version check. At the moment, it's scorm 2004 or or else it's an error.
+ set metadata [[$manifest documentElement] child 1 metadata]
+ set schemaversion [$metadata child 1 schemaversion]
+ if { $schemaversion eq "" ||
+ [string trim [string tolower [$schemaversion nodeValue]]] eq "adl scorm" &&
+ [string trim [string tolower [$schemaversion nodeValue]]] eq "2004 3rd edition" } {
+ return -code error [_ scorm-importer.NotSCORM2004]
+ }
- set activity_tree $adl_info(activity_tree)
- set global_to_system [expr { [string is true $adl_info(global)] ? "t" : "f" }]
+ set transform [scorm_importer::transform -manifest $manifest]
+ set transform_doc [$transform documentElement]
- # Ilias saves the transformed document in XML. We will store the original in order
- # to facilitate course export.
- set xmldata [$manifest asXML]
-
- # transform scorm xml using ilias's normalizing xsl
- set xsl_src "[acs_root_dir]/packages/scorm-importer/templates/xsl/op/op-scorm13.xsl"
- dom parse [::tDOM::xmlReadFile $xsl_src] transform
- $manifest xslt $transform manifest
- set document_element [$manifest documentElement]
-
- set organization_node [$document_element child all organization]
+ set organization_node [$transform_doc child all organization]
set title [$organization_node getAttribute title ""]
set var_list [subst {
@@ -50,22 +45,69 @@
# create row for package even though we don't have any info yet
db_dml insert_package {}
- import_node -cp_package_id $scorm_course_id -node $document_element
+ scorm_importer::update_rte_data \
+ -scorm_course_id $scorm_course_id \
+ -manifest $manifest \
+ -transform_doc $transform_doc
- set jsdata [scorm_importer::rte_jsdata::create -manifest $document_element]
+ $transform delete
+}
- db_dml update_package {}
+ad_proc scorm_importer::edit_course {
+ -manifest:required
+ -scorm_course_id:required
+} {
+ Edit the course information.
+} {
+ set transform [scorm_importer::transform -manifest $manifest]
+
+ scorm_importer::update_rte_data \
+ -scorm_course_id $scorm_course_id \
+ -manifest $manifest \
+ -transform_doc [$transform documentElement]
+
$transform delete
- $manifest delete
+}
+ad_proc scorm_importer::update_rte_data {
+ -scorm_course_id:required
+ -manifest:required
+ -transform_doc:required
+} {
+ Update the RTE data - activity tree, jsdata, xmldata
+} {
+ # build activity tree with the original document.
+ array set adl_info \
+ [scorm_importer::rte_activity_tree::create -manifest [$manifest documentElement]]
+
+ set activity_tree $adl_info(activity_tree)
+ set global_to_system [expr { [string is true $adl_info(global)] ? "t" : "f" }]
+
+ import_node -cp_package_id $scorm_course_id -node $transform_doc
+ set xmldata [$transform_doc asXML]
+
+ set jsdata [scorm_importer::rte_jsdata::create -manifest $transform_doc]
+
+ db_dml update_package {}
+
}
-ad_proc scorm_importer::create_subfolder {
+ad_proc scorm_importer::transform {
+ -manifest:required
+} {
+ Transfrom the manifest using ilias's normalizing xsl.
+} {
+ set xsl_src "[acs_root_dir]/packages/scorm-importer/templates/xsl/op/op-scorm13.xsl"
+ return [$manifest xslt [dom parse [::tDOM::xmlReadFile $xsl_src]]]
+}
+
+ad_proc scorm_importer::create_folder {
-name:required
-parent_id:required
-package_id:required
} {
+ Create a subr (or main) for a class with the necessary
} {
set folder_id [content::folder::new \
-name $name \
@@ -85,7 +127,7 @@
return $folder_id
}
-ad_proc -public scorm_importer::import {
+ad_proc scorm_importer::import {
-tmp_dir:required
-package_id:required
{-online f}
@@ -106,7 +148,7 @@
regsub -all { +} $cr_dir {_} name
set parent_folder_id [scorm_core::default_folder_id -package_id $package_id]
- set folder_id [scorm_importer::create_subfolder \
+ set folder_id [scorm_importer::create_folder \
-name $name \
-parent_id $parent_folder_id \
-package_id $package_id]
@@ -118,6 +160,7 @@
-manifest $manifest \
-online $online \
-default_lesson_mode $default_lesson_mode]
+ $manifest delete
# Copy the files into the course folder in the content repository.
@@ -128,17 +171,20 @@
}
+# This needs to be fixed to skip nodes that already exist, by selecting a unique node
+# for the package using the attributes ...
ad_proc scorm_importer::import_node {
{-node:required}
{-cp_package_id:required}
{-depth 1}
{-parent 0}
} {
- Import given node
+ Import a node and its children.
+
} {
set nodename [$node nodeName]
-
+
# create the node
set cp_node_id [db_nextval cp_node_seq]
set rgt $cp_node_id
@@ -158,10 +204,11 @@
# [lassign $a name namespace uri]
- # however, the uri may be empty and the name and namespace equal. In that case, the attribute appears
- # to be a definition of the uri for the namespace given by $name, although the uri thus defined is not
- # returned in the uri field, the uri-defining attribute is named as if it were $ns:$ns. Finally, the
- # {xmlns {} {}} form appears to be special, and to indicate that the xmlns namespace's uri is being defined.
+ # however, the uri may be empty and the name and namespace equal. In that case, the
+ # attribute appears to be a definition of the uri for the namespace given by $name,
+ # although the uri thus defined is not returned in the uri field, the uri-defining
+ #attribute is named as if it were $ns:$ns. Finally, the {xmlns {} {}} form appears
+ #to be special, and to indicate that the xmlns namespace's uri is being defined.
# build up generic attribute list for insertion
foreach attribute [$node attributes] {
@@ -195,7 +242,6 @@
-depth [expr $depth + 1] -parent $cp_node_id]
}
- # update cp_tree
db_dml update_rgt {}
return $rgt
@@ -206,14 +252,13 @@
-folder_id:required
-package_id:required
} {
-
foreach file_name [glob -directory $dir *] {
set cr_file_name [file tail $file_name]
if { [file isdirectory $file_name] } {
scorm_importer::import_files \
-dir $file_name \
-package_id $package_id \
- -folder_id [scorm_importer::create_subfolder \
+ -folder_id [scorm_importer::create_folder \
-name $cr_file_name \
-parent_id $folder_id \
-package_id $package_id]
Index: openacs-4/packages/scorm-importer/tcl/import-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/scorm-importer/tcl/Attic/import-procs.xql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/scorm-importer/tcl/import-procs.xql 14 May 2010 23:30:31 -0000 1.3
+++ openacs-4/packages/scorm-importer/tcl/import-procs.xql 18 May 2010 02:00:23 -0000 1.4
@@ -4,51 +4,56 @@
- insert into cp_package (cp_package_id) values (:scorm_course_id)
+ insert into cp_package
+ (cp_package_id)
+ values
+ (:scorm_course_id)
-
+
update cp_package
- set jsdata = :jsdata,
- xmldata = :xmldata,
- activitytree = :activity_tree,
- global_to_system = :global_to_system
- where cp_package_id = :scorm_course_id
+ set jsdata = :jsdata,
+ xmldata = :xmldata,
+ activitytree = :activity_tree,
+ global_to_system = :global_to_system
+ where cp_package_id = :scorm_course_id
insert into cp_node
- (cp_node_id, nodename, cp_package_id)
+ (cp_node_id, nodename, cp_package_id)
values
- (:cp_node_id, :nodename, :cp_package_id)
+ (:cp_node_id, :nodename, :cp_package_id)
insert into cp_tree
- (child, depth, cp_package_id, parent, rgt)
+ (child, depth, cp_package_id, parent, rgt)
values
- (:cp_node_id, :depth, :cp_package_id, :parent, '0')
+ (:cp_node_id, :depth, :cp_package_id, :parent, '0')
insert into cp_[string tolower ${nodename}]
- ([join $attributes ", "])
+ ([join $attributes ", "])
values
- (:[join $attributes ", :"])
+ (:[join $attributes ", :"])
- update cp_tree set rgt = :rgt where child = :cp_node_id
+ update cp_tree
+ set rgt = :rgt
+ where child = :cp_node_id