Index: openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl 25 May 2006 11:46:14 -0000 1.2 +++ openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl 8 Aug 2006 21:26:48 -0000 1.3 @@ -1,12 +1,62 @@ +# packages/file-storage/tcl/file-storage-callback-procs.tcl + ad_library { - Callbacks for the search package. + + Callback procs for file storage + + @author Malte Sussdorff (sussdorff@sussdorff.de) + @creation-date 2005-06-15 + @arch-tag: 921a2c2a-5593-495b-9a60-9d815d80a39d + @cvs-id $Id$ +} +namespace eval fs::folder_chunk {} + @author Dirk Gomez @creation-date 2005-06-16 @cvs-id $Id$ } +# Define file storage callbacks +ad_proc -public -callback fs::folder_chunk::add_bulk_actions { + {-bulk_variable:required} + {-folder_id:required} + {-var_export_list:required} +} { +} + +ad_proc -public -callback fs::file_delete { + {-package_id:required} + {-file_id:required} +} { +} + +# this can be used to check for confirmation before upload to folder +ad_proc -public -callback fs::before_file_new { + {-package_id:required} + {-folder_id:required} + {-cancel_url:required} + {-return_url:required} +} { +} + +ad_proc -public -callback fs::file_new { + {-package_id:required} + {-file_id:required} +} { +} + +ad_proc -public -callback fs::file_revision_new { + {-package_id:required} + {-file_id:required} + {-parent_id:required} +} { +} + + +# Our callback implementations + ad_proc -public -callback search::datasource -impl file_storage_object {} { @author Dirk Gomez (openacs@dirkgomez.de) @@ -64,27 +114,53 @@ storage_type text \ mime text/plain ] } - -ad_proc -public -callback search::url -impl file_storage_object {} { - @author Dirk Gomez (openacs@dirkgomez.de) - @author Jowell S. Sabino (jowellsabino@netscape.net) - @creation_date 2005-06-13 - returns a url for a file-storage item to the search package +ad_proc -public -callback datamanager::copy_folder -impl datamanager { + -object_id:required + -selected_community:required + {-mode: "both"} +} { + Copy a folder to another class or community +} { +#get the destiny's root folder + set parent_id [dotlrn_fs::get_community_root_folder -community_id $selected_community] + set new_folder_id [fs_folder_copy -old_folder_id $object_id -new_parent_id $parent_id -mode $mode] + return $new_folder_id + +} + +ad_proc -public -callback fs::folder_new { + {-package_id:required} + {-folder_id:required} } { - set revision_id $object_id +} - db_1row fs_get_package_id { } -hurz +ad_proc -public -callback pm::project_new -impl file_storage { + {-package_id:required} + {-project_id:required} +} { + create a new folder for each new project +} { + set pm_name [pm::project::name -project_item_id $project_id] - db_1row fs_get_url_stub { } + foreach fs_package_id [application_link::get_linked -from_package_id $package_id -to_package_key "file-storage"] { + set root_folder_id [fs::get_root_folder -package_id $fs_package_id] - return "${url_stub}download/index?version_id=$revision_id" + set folder_id [fs::new_folder \ + -name $root_folder_id \ + -pretty_name $pm_name \ + -parent_id $root_folder_id \ + -no_callback] + + application_data_link::new -this_object_id $project_id -target_object_id $folder_id + } } - ad_proc -callback application-track::getApplicationName -impl file_storage {} { +#Callbacks for application-track + +ad_proc -callback application-track::getApplicationName -impl file_storage {} { callback implementation } { return "file_storage" @@ -95,27 +171,25 @@ } { db_1row my_query { - SELECT count(1) as result - FROM fs_files f,dotlrn_communities_full com,acs_objects o, acs_objects o2 - WHERE f.file_id = o.object_id - and com.community_id=:comm_id - and o.package_id= o2.object_id - and o2.context_id=com.package_id + select count(1) as result + from acs_objects a, acs_objects b + where b.object_id = :comm_id + and a.tree_sortkey between b.tree_sortkey + and tree_right(b.tree_sortkey) + and a.object_type = 'file_storage_object' } return "$result" } - ad_proc -callback application-track::getSpecificInfo -impl file_storage {} { callback implementation } { upvar $query_name my_query upvar $elements_name my_elements - set my_query { SELECT f.name as name, f.file_id, f.type as type, f.content_size as size, @@ -128,13 +202,11 @@ com.community_id as class_id FROM fs_files f,fs_folders fo,dotlrn_communities_full com,acs_objects o, acs_objects o2 WHERE f.file_id = o.object_id - and com.community_id=:class_instance_id - and o.package_id= o2.object_id - and o2.context_id=com.package_id + and com.community_id=:class_instance_id + and o2.object_id= file_storage__get_package_id(f.parent_id) + and o2.context_id=com.package_id and fo.folder_id = f.parent_id - - } @@ -178,4 +250,3 @@ } -