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 -N -r1.1 -r1.2 --- openacs-4/packages/scorm-importer/tcl/import-procs.tcl 13 May 2010 01:03:47 -0000 1.1 +++ openacs-4/packages/scorm-importer/tcl/import-procs.tcl 14 May 2010 16:59:29 -0000 1.2 @@ -5,21 +5,18 @@ namespace eval scorm_importer { } -ad_proc -public scorm_importer::import { - -tmp_dir:required +ad_proc -public scorm_importer::create_course { -package_id:required + -manifest:required + -folder_id:required + {-scorm_course_id ""} {-online f} - {-default_lesson_mode normal} + {-default_lesson_mode browse} {-verbose_p 0} } { - set up basic structure for content package + Create a Scorm course skeleton based on a parsed manifest. } { - if { $verbose_p } { ns_write "

SCORM Content Package import

Processing files from $tmp_dir
" } - - # grab manifest from tmp_dir and parse - dom parse [::tDOM::xmlReadFile $tmp_dir/imsmanifest.xml] manifest - # build activity tree before we transform the document array set adl_info \ [scorm_importer::rte_activity_tree::create \ @@ -39,26 +36,13 @@ set organization_node [$document_element child all organization] set title [$organization_node getAttribute title ""] - # The name should be the tail of the file, with the UI guarding against uploading - # dupe courses, with the admin UI giving the option to delete/update courses, of course. - - regexp {([^/\\]+)$} $tmp_dir match cr_dir - regsub -all { +} $cr_dir {_} name - - set parent_folder_id [scorm_core::default_folder_id -package_id $package_id] - set folder_id [scorm_importer::import_dir \ - -dir $tmp_dir \ - -name $name \ - -label $title \ - -parent_id $parent_folder_id \ - -package_id $package_id \ - -verbose_p $verbose_p] - set var_list [subst { {folder_id $folder_id} {context_id $package_id} {type scorm2004} {online $online} + {title "$title"} + {scorm_course_id $scorm_course_id} {default_lesson_mode $default_lesson_mode} }] set scorm_course_id [package_instantiate_object -var_list $var_list scorm_course] @@ -80,10 +64,75 @@ $transform delete $manifest delete - if { $verbose_p } { ns_write "

All Done!

" } +} +ad_proc scorm_importer::create_subfolder { + -name:required + -parent_id:required + -package_id:required +} { +} { + set folder_id [content::folder::new \ + -name $name \ + -parent_id $parent_id \ + -package_id $package_id] + + content::folder::register_content_type \ + -folder_id $folder_id \ + -content_type content_revision \ + -include_subtypes "t" + + content::folder::register_content_type \ + -folder_id $folder_id \ + -content_type content_item \ + -include_subtypes t + + return $folder_id } +ad_proc -public scorm_importer::import { + -tmp_dir:required + -package_id:required + {-online f} + {-default_lesson_mode normal} +} { + set up basic structure for content package +} { + + # Grab manifest from tmp_dir and parse. + dom parse [::tDOM::xmlReadFile $tmp_dir/imsmanifest.xml] manifest + + # Create the target folder for the course import. + + # The name should be the tail of the file, with the UI guarding against uploading + # dupe courses, with the admin UI giving the option to delete/update courses, of course. + + regexp {([^/\\]+)$} $tmp_dir match cr_dir + 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 \ + -name $name \ + -parent_id $parent_folder_id \ + -package_id $package_id] + + # Now create the course from the manifest. + set scorm_course_id [scorm_importer::create_course \ + -package_id $package_id \ + -folder_id $folder_id \ + -manifest $manifest \ + -online $online \ + -default_lesson_mode $default_lesson_mode] + + # Copy the files into the course folder in the content repository. + + scorm_importer::import_files \ + -dir $tmp_dir \ + -folder_id $folder_id \ + -package_id $package_id + +} + ad_proc scorm_importer::import_manifest { -cp_package_id:required -manifest:required @@ -184,41 +233,22 @@ return } -ad_proc scorm_importer::import_dir { +ad_proc scorm_importer::import_files { -dir:required - -name:required - -label:required - -parent_id:required + -folder_id:required -package_id:required - {-indb_p 0} - {-verbose_p 0} } { - set folder_id [content::folder::new \ - -name $name \ - -label $label \ - -parent_id $parent_id \ - -package_id $package_id] - - content::folder::register_content_type \ - -folder_id $folder_id \ - -content_type content_revision \ - -include_subtypes "t" - - content::folder::register_content_type \ - -folder_id $folder_id \ - -content_type content_item \ - -include_subtypes t - foreach file_name [glob -directory $dir *] { set cr_file_name [file tail $file_name] if { [file isdirectory $file_name] } { - scorm_importer::import_dir \ + scorm_importer::import_files \ -dir $file_name \ - -name $cr_file_name \ - -label $cr_file_name \ - -parent_id $folder_id \ - -package_id $package_id + -package_id $package_id \ + -folder_id [scorm_importer::create_subfolder \ + -name $cr_file_name \ + -parent_id $folder_id \ + -package_id $package_id] } else { content::item::new \ -name $cr_file_name \ @@ -228,5 +258,4 @@ -mime_type [cr_filename_to_mime_type $file_name] } } - return $folder_id }