ad_proc fs::copy_folder {
-source_folder_id
-destination_folder_id
} {
@author Malte Sussdorff (mailto:malte.sussdorff@cognovis.de)
@creation-date 2010-09-24
Copies the folder to another parent folder
Makes sure to copy the permissions as well
@param destination_folder_id Folder ID of the destination folder below which the folder will be copied
@param source_folder_id Folder ID of the folder to be copied
} {
set user_id [ad_conn user_id]
set peer_addr [ad_conn peeraddr]
# Make sure we have write permission on the destination folder
permission::require_permission \
-party_id $user_id \
-object_id $destination_folder_id \
-privilege "write"
permission::require_permission \
-party_id $user_id \
-object_id $source_folder_id \
-privilege "read"
# Make sure both are actually folders
if {![content::folder::is_folder -item_id $source_folder_id] || ![content::folder::is_folder -item_id $destination_folder_id]} {
return 0
}
set new_parent_folder_id [db_string copy_folder {}]
db_foreach folder_compare {
select source.item_id as old_folder_id, target.item_id as new_folder_id, security_inherit_p
from (select children.item_id, children.name, security_inherit_p
from cr_items children, cr_items parent, acs_objects o
where children.tree_sortkey between parent.tree_sortkey and tree_right(parent.tree_sortkey)
and parent.tree_sortkey <> children.tree_sortkey
and parent.item_id = :source_folder_id
and children.item_id = o.object_id
order by children.tree_sortkey) source,
(select children.item_id, children.name
from cr_items children, cr_items parent
where children.tree_sortkey between parent.tree_sortkey and tree_right(parent.tree_sortkey)
and parent.tree_sortkey <> children.tree_sortkey
and parent.item_id = :new_parent_folder_id
order by children.tree_sortkey) target
where source.name = target.name
} {
if {$security_inherit_p eq "t"} {
permission::copy -from_object_id $old_folder_id -to_object_id $new_folder_id -overwrite
} else {
permission::copy -from_object_id $old_folder_id -to_object_id $new_folder_id -overwrite -clean_inheritance
}
}
if {[permission::inherit_p -object_id $source_folder_id]} {
permission::copy -from_object_id [content::item::get_parent_folder -item_id $source_folder_id] -to_object_id $new_parent_folder_id -clean_inheritance -overwrite
} else {
permission::copy -from_object_id $source_folder_id -to_object_id $new_parent_folder_id -clean_inheritance -overwrite
}
}