Index: openacs-4/packages/acs-subsite/tcl/group-type-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/group-type-procs-oracle.xql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-subsite/tcl/group-type-procs-oracle.xql 3 Aug 2001 21:09:20 -0000 1.2 +++ openacs-4/packages/acs-subsite/tcl/group-type-procs-oracle.xql 11 Dec 2018 14:14:41 -0000 1.3 @@ -66,5 +66,38 @@ - + + + select case when exists (select 1 + from user_objects o + where o.object_type='PACKAGE' + and o.object_name = upper(:package_name)) + then 1 else 0 end + from dual + + + + + + drop package [DoubleApos $group_type] + + + + + + begin acs_object_type.drop_type(:group_type); end; + + + + + + select distinct o.object_id + from acs_objects o, acs_object_party_privilege_map perm + where perm.object_id = o.object_id + and perm.party_id = :user_id + and perm.privilege = 'delete' + and o.object_type = :group_type + + + Index: openacs-4/packages/acs-subsite/tcl/group-type-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/group-type-procs-postgresql.xql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-subsite/tcl/group-type-procs-postgresql.xql 14 Jun 2018 09:16:48 -0000 1.4 +++ openacs-4/packages/acs-subsite/tcl/group-type-procs-postgresql.xql 11 Dec 2018 14:14:41 -0000 1.5 @@ -72,5 +72,35 @@ - + + + + select case when exists (select 1 + from pg_proc + where proname like :package_name || '%') + then 1 else 0 end + + + + + + select drop_package(:group_type) + + + + + + select acs_object_type__drop_type(:group_type, 'f') + + + + + + select o.object_id + from acs_objects o + where o.object_type = :group_type + and acs_permission__permission_p(o.object_id, :user_id, 'delete') + + + Index: openacs-4/packages/acs-subsite/tcl/group-type-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/group-type-procs.tcl,v diff -u -r1.11 -r1.12 --- openacs-4/packages/acs-subsite/tcl/group-type-procs.tcl 14 Jun 2018 09:18:13 -0000 1.11 +++ openacs-4/packages/acs-subsite/tcl/group-type-procs.tcl 11 Dec 2018 14:14:41 -0000 1.12 @@ -179,6 +179,76 @@ } + ad_proc -public delete { + -group_type:required + } { + Deletes a group type + + @param group_type type to be deleted + } { + # How do we handle the situation where we delete the groups we can, + # but there are groups that we do not have permission to delete? For + # now, we check in advance if there is a group that must be deleted + # that this user can't delete, and if there is, we return an error + # message (in the validate block of page contract). If another group + # is added while we're deleting, then it's possible that we'll fail + # when actually dropping the type, but that seems reasonable to me. + # - mbryzek (famous last words...) + + set user_id [ad_conn user_id] + + if { ![db_0or1row select_type_info { + select t.table_name, t.package_name + from acs_object_types t + where t.object_type=:group_type + }] } { + set table_name "" + set package_name $group_type + } + + if { ![db_string package_exists {}] } { + set package_name "" + } + + db_transaction { + # First delete the groups + if { $package_name ne "" } { + foreach group_id [db_list select_group_ids {}] { + group::delete $group_id + } + + db_exec_plsql package_drop {} + } + + # Remove the specified rel_types + db_dml delete_rel_types { + delete from group_type_rels where group_type = :group_type + } + + # Remove the group_type + db_dml delete_group_type { + delete from group_types where group_type = :group_type + } + + if { [db_string type_exists { + select exists (select 1 from acs_object_types t where t.object_type = :group_type) + from dual + }] } { + db_exec_plsql drop_type {} + } + + # Make sure we drop the table last + if { $table_name ne "" && [db_table_exists $table_name] } { + db_dml drop_table [subst { + drop table $table_name + }] + } + } + + # Reset the attribute view for objects of this type + package_object_view_reset $group_type + } + } # Local variables: Fisheye: Tag 1.5 refers to a dead (removed) revision in file `openacs-4/packages/acs-subsite/www/admin/group-types/delete-2-oracle.xql'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.6 refers to a dead (removed) revision in file `openacs-4/packages/acs-subsite/www/admin/group-types/delete-2-postgresql.xql'. Fisheye: No comparison available. Pass `N' to diff? Index: openacs-4/packages/acs-subsite/www/admin/group-types/delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/admin/group-types/delete-2.tcl,v diff -u -r1.11 -r1.12 --- openacs-4/packages/acs-subsite/www/admin/group-types/delete-2.tcl 9 May 2018 15:33:28 -0000 1.11 +++ openacs-4/packages/acs-subsite/www/admin/group-types/delete-2.tcl 11 Dec 2018 14:14:41 -0000 1.12 @@ -31,70 +31,14 @@ ad_script_abort } -set plsql [list] - -if { ![db_0or1row select_type_info { - select t.table_name, t.package_name - from acs_object_types t - where t.object_type=:group_type -}] } { - set table_name "" - set package_name $group_type -} - -if { [db_string package_exists {}] } { - lappend plsql [list "package_drop" [db_map package_drop]] -} else { - set package_name "" -} - -# Remove the specified rel_types -lappend plsql [list "delete_rel_types" [db_map delete_rel_types]] - -# Remove the group_type -lappend plsql [list "delete_group_type" [db_map delete_group_type]] - -if { [db_string type_exists {}] } { - lappend plsql [list "drop_type" [db_map drop_type]] -} - -# Make sure we drop the table last -if { $table_name ne "" && [db_table_exists $table_name] } { - lappend plsql [list "drop_table" [db_map drop_table]] -} - -# How do we handle the situation where we delete the groups we can, -# but there are groups that we do not have permission to delete? For -# now, we check in advance if there is a group that must be deleted -# that this user can't delete, and if there is, we return an error -# message (in the validate block of page contract). If another group -# is added while we're deleting, then it's possible that we'll fail -# when actually dropping the type, but that seems reasonable to me. -# - mbryzek (famous last words...) - -set user_id [ad_conn user_id] - -db_transaction { - # First delete the groups - if { $package_name ne "" } { - - foreach group_id [db_list select_group_ids {}] { - group::delete $group_id - } - } - - foreach pair $plsql { - db_exec_plsql [lindex $pair 0] [lindex $pair 1] - } -} on_error { +if {[catch { + group_type::delete -group_type $group_type +} errmsg]} { ad_return_error "Error deleting group type" "We got the following error trying to delete this group type:
$errmsg
" - return + ad_script_abort } -# Reset the attribute view for objects of this type -package_object_view_reset $group_type - -ad_returnredirect $return_url +ad_returnredirect $return_url ad_script_abort # Local variables: Fisheye: Tag 1.5 refers to a dead (removed) revision in file `openacs-4/packages/acs-subsite/www/admin/group-types/delete-2.xql'. Fisheye: No comparison available. Pass `N' to diff?