Index: openacs-4/packages/dotlrn-fs/tcl/dotlrn-fs-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-fs/tcl/dotlrn-fs-procs.tcl,v diff -u -N -r1.27 -r1.28 --- openacs-4/packages/dotlrn-fs/tcl/dotlrn-fs-procs.tcl 21 Feb 2002 18:48:32 -0000 1.27 +++ openacs-4/packages/dotlrn-fs/tcl/dotlrn-fs-procs.tcl 21 Feb 2002 19:00:38 -0000 1.28 @@ -1,6 +1,4 @@ - ad_library { - Procs to set up the dotLRN fs applet Copyright 2001 OpenForce, inc. @@ -78,15 +76,19 @@ $package_key \ ] - # set up a forum inside that instance - set folder_id [fs::new_root_folder -package_id $package_id] - set community_name [dotlrn_community::get_community_name $community_id] + # set up a forum inside that instance + set folder_id [fs::new_root_folder \ + -package_id $package_id \ + -pretty_name "${community_name}'s Files" \ + -description "${community_name}'s Files" \ + ] + # Set up public folder set public_folder_id [fs::new_folder \ -name "public" \ - -pretty_name [concat " " $community_name " Public"] \ + -pretty_name "${community_name}'s Public Files" \ -parent_id $folder_id \ ] @@ -111,9 +113,7 @@ # Make public-folder the only one available at non-member page fs_portlet::add_self_to_page \ - $non_member_portal_id \ - $package_id \ - $public_folder_id + $non_member_portal_id $package_id $public_folder_id # portal template stuff # get the portal_template_id by callback @@ -163,32 +163,67 @@ }] # get the root folder of this package instance - set package_id [apm_package_id_from_key [package_key]] + set package_key [package_key] + set package_id [db_string select_min_package_id { + select min(package_id) + from apm_packages + where package_key = :package_key + }] + # set package_id [apm_package_id_from_key [package_key]] set root_folder_id [fs::get_root_folder -package_id $package_id] - # create the user's root folder - set folder_id [fs::new_folder \ - -name [concat $user_id "_folder"] \ - -pretty_name [concat $user_name "'s Files"] \ - -parent_id $parent_id \ - -creation_user $user_id \ + # does this user already have a root folder? + set user_root_folder_id [fs::get_folder \ + -name "${user_id}_folder" \ + -parent_id $root_folder_id \ ] - # set the permissions for this folder; only the user has access to it - ad_permission_grant $user_id $folder_id "read" - ad_permission_grant $user_id $folder_id "write" - ad_permission_grant $user_id $folder_id "admin" + if {[empty_string_p $user_root_folder_id]} { - # create the user's shared folder - set folder_id [fs::new_folder \ - -name [concat $user_id "_folder"] \ - -pretty_name [concat $user_name "'s Shared Files" \ - -parent_id $folder_id \ - -creation_user $user_id \ + # create the user's root folder + set user_root_folder_id [fs::new_folder \ + -name "${user_id}_folder" \ + -parent_id $root_folder_id \ + -pretty_name "${user_name}'s Files" \ + -creation_user $user_id \ + ] + + # set the permissions for this folder; only the user has access to it + ad_permission_grant $user_id $user_root_folder_id "read" + ad_permission_grant $user_id $user_root_folder_id "write" + ad_permission_grant $user_id $user_root_folder_id "admin" + + } + + # get the user's portal + set portal_id [dotlrn::get_workspace_portal_id $user_id] + + # add the portlet here + if {![empty_string_p $portal_id]} { + fs_portlet::add_self_to_page \ + -page_id $page_id $portal_id $package_id $user_root_folder_id + } + + # does this user already have a root folder? + set user_shared_folder_id [fs::get_folder \ + -name "${user_id}_shared_folder" \ + -parent_id $user_root_folder_id \ ] - # set the permissions for this folder; only the user has access to it - ad_permission_grant [dotlrn::get_full_users_rel_segment_id] $folder_id "read" + if {[empty_string_p $user_shared_folder_id]} { + + # create the user's shared folder + set user_shared_folder_id [fs::new_folder \ + -name "${user_id}_shared_folder" \ + -parent_id $user_root_folder_id \ + -pretty_name "${user_name}'s Shared Files" \ + -creation_user $user_id \ + ] + + # set the permissions for this folder; only the user has access to it + ad_permission_grant [dotlrn::get_full_users_rel_segment_id] $user_shared_folder_id "read" + + } } ad_proc -public add_user_to_community { @@ -206,32 +241,27 @@ "dotlrn_fs" \ ] - # Allow user to see the fs folders - # nothing for now - # Call the portal element to be added correctly # fs portlet needs folder_id too set folder_id [fs::get_root_folder -package_id $package_id] # Make file storage available at community-user page level fs_portlet::add_self_to_page $portal_id $package_id $folder_id - # Now for the user workspace - set workspace_portal_id [dotlrn::get_workspace_portal_id $user_id] + # get the user's portal + set portal_id [dotlrn::get_workspace_portal_id $user_id] set page_id [portal::get_page_id \ - -portal_id $workspace_portal_id \ + -portal_id $portal_id \ -page_name [get_user_default_page] \ ] - # Add the portlet here - if { $workspace_portal_id != "" } { + # add the portlet here + if {![empty_string_p $portal_id]} { fs_portlet::add_self_to_page \ - -page_id $page_id \ - $workspace_portal_id \ - $package_id \ - $folder_id + -page_id $page_id $portal_id $package_id $folder_id } + } ad_proc -public remove_user { @@ -259,7 +289,7 @@ set workspace_portal_id [dotlrn::get_workspace_portal_id $user_id] # Add the portlet here - if { $workspace_portal_id != "" } { + if {![empty_string_p $workspace_portal_id]} { fs_portlet::remove_self_from_page \ $workspace_portal_id \ $package_id \ Index: openacs-4/packages/fs-portlet/sql/oracle/fs-portlet-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/fs-portlet/sql/oracle/fs-portlet-create.sql,v diff -u -N -r1.8 -r1.9 --- openacs-4/packages/fs-portlet/sql/oracle/fs-portlet-create.sql 16 Jan 2002 21:46:41 -0000 1.8 +++ openacs-4/packages/fs-portlet/sql/oracle/fs-portlet-create.sql 21 Feb 2002 19:00:21 -0000 1.9 @@ -1,201 +1,160 @@ -- --- /fs-portlet/sql/oracle/fs-portlet-create.sql +-- Creates the file-storage portlet -- --- Creates fs portlet --- Copyright (C) 2001 OpenForce, Inc. --- @author Arjun Sanyal (arjun@openforce.net) +-- @author Arjun Sanyal(arjun@openforce.net) -- @creation-date 2001-30-09 +-- @version $Id$ -- --- $Id$ --- --- This is free software distributed under the terms of the GNU Public --- License version 2 or higher. Full text of the license is available --- from the GNU Project: http://www.fsf.org/copyleft/gpl.html declare - ds_id portal_datasources.datasource_id%TYPE; + ds_id portal_datasources.datasource_id%TYPE; + foo integer; begin - ds_id := portal_datasource.new( - name => 'fs_portlet', - description => 'Displays the given folder_id' - ); + ds_id := portal_datasource.new( + name => 'fs_portlet', + description => 'Displays the given folder_id' + ); - -- the standard 4 params + -- the standard 4 params + -- shadeable_p + portal_datasource.set_def_param( + datasource_id => ds_id, + config_required_p => 't', + configured_p => 't', + key => 'shadeable_p', + value => 't' + ); - -- shadeable_p - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 't', - key => 'shadeable_p', - value => 't' -); + -- hideable_p + portal_datasource.set_def_param( + datasource_id => ds_id, + config_required_p => 't', + configured_p => 't', + key => 'hideable_p', + value => 't' + ); + -- user_editable_p + portal_datasource.set_def_param( + datasource_id => ds_id, + config_required_p => 't', + configured_p => 't', + key => 'user_editable_p', + value => 'f' + ); - -- hideable_p - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 't', - key => 'hideable_p', - value => 't' -); + -- shaded_p + portal_datasource.set_def_param( + datasource_id => ds_id, + config_required_p => 't', + configured_p => 't', + key => 'shaded_p', + value => 'f' + ); - -- user_editable_p - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 't', - key => 'user_editable_p', - value => 'f' -); + -- link_hideable_p + portal_datasource.set_def_param( + datasource_id => ds_id, + config_required_p => 't', + configured_p => 't', + key => 'link_hideable_p', + value => 't' + ); - -- shaded_p - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 't', - key => 'shaded_p', - value => 'f' -); + -- fs-specific params + portal_datasource.set_def_param( + datasource_id => ds_id, + config_required_p => 't', + configured_p => 'f', + key => 'folder_id', + value => '' + ); + -- create the implementation + foo := acs_sc_impl.new( + 'portal_datasource', + 'fs_portlet', + 'fs_portlet' + ); - -- link_hideable_p - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 't', - key => 'link_hideable_p', - value => 't' -); + -- add all the hooks + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'MyName', + 'fs_portlet::my_name', + 'TCL' + ); - -- fs-specific params + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'GetPrettyName', + 'fs_portlet::get_pretty_name', + 'TCL' + ); - -- community_id must be configured - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 'f', - key => 'community_id', - value => '' -); + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'Link', + 'fs_portlet::link', + 'TCL' + ); + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'AddSelfToPage', + 'fs_portlet::add_self_to_page', + 'TCL' + ); - portal_datasource.set_def_param ( - datasource_id => ds_id, - config_required_p => 't', - configured_p => 'f', - key => 'folder_id', - value => '' -); + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'Show', + 'fs_portlet::show', + 'TCL' + ); + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'Edit', + 'fs_portlet::edit', + 'TCL' + ); -end; -/ -show errors + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'RemoveSelfFromPage', + 'fs_portlet::remove_self_from_page', + 'TCL' + ); -declare - foo integer; -begin - -- create the implementation - foo := acs_sc_impl.new ( - 'portal_datasource', - 'fs_portlet', - 'fs_portlet' - ); + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'MakeSelfAvailable', + 'fs_portlet::make_self_available', + 'TCL' + ); -end; -/ -show errors + foo := acs_sc_impl.new_alias( + 'portal_datasource', + 'fs_portlet', + 'MakeSelfUnavailable', + 'fs_portlet::make_self_unavailable', + 'TCL' + ); -declare - foo integer; -begin - -- add all the hooks - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'MyName', - 'fs_portlet::my_name', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'GetPrettyName', - 'fs_portlet::get_pretty_name', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'Link', - 'fs_portlet::link', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'AddSelfToPage', - 'fs_portlet::add_self_to_page', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'Show', - 'fs_portlet::show', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'Edit', - 'fs_portlet::edit', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'RemoveSelfFromPage', - 'fs_portlet::remove_self_from_page', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'MakeSelfAvailable', - 'fs_portlet::make_self_available', - 'TCL' - ); - - foo := acs_sc_impl.new_alias ( - 'portal_datasource', - 'fs_portlet', - 'MakeSelfUnavailable', - 'fs_portlet::make_self_unavailable', - 'TCL' - ); + -- Add the binding + acs_sc_binding.new( + contract_name => 'portal_datasource', + impl_name => 'fs_portlet' + ); end; / show errors - -declare - foo integer; -begin - -- Add the binding - acs_sc_binding.new ( - contract_name => 'portal_datasource', - impl_name => 'fs_portlet' - ); -end; -/ -show errors - Index: openacs-4/packages/fs-portlet/tcl/fs-portlet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/fs-portlet/tcl/fs-portlet-procs.tcl,v diff -u -N -r1.27 -r1.28 --- openacs-4/packages/fs-portlet/tcl/fs-portlet-procs.tcl 23 Jan 2002 07:58:35 -0000 1.27 +++ openacs-4/packages/fs-portlet/tcl/fs-portlet-procs.tcl 21 Feb 2002 19:00:21 -0000 1.28 @@ -48,7 +48,6 @@ @return element_id The new element's id @param portal_id The page to add self to - @param community_id The community with the folder @param folder_id The folder to show @author arjun@openforce.net @creation-date Sept 2001 @@ -68,14 +67,14 @@ Removes a fs PE from the given page @param portal_id The page to remove self from - @param community_id @author arjun@openforce.net @creation-date Sept 2001 } { - portal::remove_element_or_remove_id -portal_id $portal_id \ - -portlet_name [my_name] \ - -value_id $folder_id \ - -key "folder_id" + portal::remove_element_or_remove_id \ + -portal_id $portal_id \ + -portlet_name [my_name] \ + -value_id $folder_id \ + -key "folder_id" } ad_proc -public make_self_available { Index: openacs-4/packages/fs-portlet/www/fs-portlet-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/fs-portlet/www/fs-portlet-oracle.xql,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/fs-portlet/www/fs-portlet-oracle.xql 16 Jan 2002 01:36:19 -0000 1.1 +++ openacs-4/packages/fs-portlet/www/fs-portlet-oracle.xql 21 Feb 2002 19:00:21 -0000 1.2 @@ -4,38 +4,20 @@ oracle8.1.6 - - select - i.item_id as file_id, - r.title as name, - i.live_revision file_live_rev, - r.mime_type as type, - 1 as ordering_key, - 0 as num - from - cr_items i, cr_revisions r, acs_objects o - where - i.item_id = o.object_id - and i.live_revision = r.revision_id (+) - and i.parent_id in (:my_folder_id) - and acs_permission.permission_p(i.item_id, :user_id, 'read') = 't' - and i.content_type = 'content_revision' - UNION - select - i.item_id as file_id, - f.label as name, - 0 as file_live_rev, - 'Folder', - 0 as ordering_key, - (select count(*) from cr_items where parent_id = i.item_id) as num - from - cr_items i, cr_folders f - where - i.item_id = f.folder_id - and i.parent_id in (:my_folder_id) - and acs_permission.permission_p(i.item_id, :user_id, 'read') = 't' - order by ordering_key,name - + + select cr_items.item_id as file_id, + cr_folders.label as name, + 0 as file_live_rev, + 'Folder' as type, + 0 as ordering_key, + (select count(*) from cr_items i where i.parent_id = cr_items.item_id) as num + from cr_items, + cr_folders + where cr_items.item_id = :my_folder_id + and cr_items.item_id = cr_folders.folder_id + and 't' = acs_permission.permission_p(cr_items.item_id, :user_id, 'read') + order by ordering_key, name + Index: openacs-4/packages/fs-portlet/www/fs-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/fs-portlet/www/fs-portlet.adp,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/fs-portlet/www/fs-portlet.adp 16 Jan 2002 21:46:41 -0000 1.2 +++ openacs-4/packages/fs-portlet/www/fs-portlet.adp 21 Feb 2002 19:00:21 -0000 1.3 @@ -1,37 +1,38 @@ - - - - - - - - -
@foo.name@ + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
+ +  @folders.name@ + @foo.type@@foo.num@ items@foo.num@ item @foo.name@File\[download\]
@folders.type@@folders.num@ items@folders.num@ item + +  @folders.name@ + + File + + \[ download \] + +
- - - + +   + Index: openacs-4/packages/fs-portlet/www/fs-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/fs-portlet/www/fs-portlet.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/fs-portlet/www/fs-portlet.tcl 16 Jan 2002 21:46:41 -0000 1.2 +++ openacs-4/packages/fs-portlet/www/fs-portlet.tcl 21 Feb 2002 19:00:21 -0000 1.3 @@ -1,11 +1,12 @@ -# www/fs-portlet.tcl +# fs-portlet/www/fs-portlet.tcl + ad_page_contract { The display logic for the fs portlet @author Arjun Sanyal (arjun@openforce.net) @cvs_id $Id$ } -properties { - + folders:multirow } array set config $cf @@ -15,20 +16,24 @@ # set up the multirow datasource using the db_multirow proc and 1 id set my_folder_id [lindex $list_of_folder_ids 0] -db_multirow -local foo select_files_and_folders {} { +db_multirow -local folders select_files_and_folders {} { # we can set array vars for this row - set foo(url) [dotlrn_community::get_url_from_package_id \ - -package_id [db_string select_package_id {}]] + set folders(url) [site_nodes::get_url_from_package_id \ + -package_id [db_string select_package_id {}] \ + ] + } foreach my_folder_id [lrange $list_of_folder_ids 1 end] { # use the append switch to add rows to the datasource - db_multirow -local -append foo select_files_and_folders {} { - set foo(url) [dotlrn_community::get_url_from_package_id \ - -package_id [db_string select_package_id {}]] + db_multirow -local -append folders select_files_and_folders {} { + set folders(url) [site_nodes::get_url_from_package_id \ + -package_id [db_string select_package_id {}] \ + ] } + } ad_return_template Index: openacs-4/packages/new-portal/tcl/portal-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/tcl/portal-procs.tcl,v diff -u -N -r1.115 -r1.116 --- openacs-4/packages/new-portal/tcl/portal-procs.tcl 18 Feb 2002 21:21:06 -0000 1.115 +++ openacs-4/packages/new-portal/tcl/portal-procs.tcl 21 Feb 2002 19:01:11 -0000 1.116 @@ -1470,9 +1470,10 @@ db_transaction { foreach element_id $element_ids { - remove_element_param_value -element_id $element_id \ - -key $key \ - -value $value_id + remove_element_param_value \ + -element_id $element_id \ + -key $key \ + -value $value_id if {![empty_string_p $extra_params]} { check_key_value_list $extra_params