Index: openacs-4/packages/acs-subsite/www/admin/rel-types/delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/admin/rel-types/delete-2.tcl,v diff -u -r1.7 -r1.8 --- openacs-4/packages/acs-subsite/www/admin/rel-types/delete-2.tcl 19 Jan 2018 14:09:48 -0000 1.7 +++ openacs-4/packages/acs-subsite/www/admin/rel-types/delete-2.tcl 3 Sep 2024 15:37:34 -0000 1.8 @@ -1,5 +1,3 @@ -# /packages/mbryzek-subsite/www/admin/rel-types/delete-2.tcl - ad_page_contract { Deletes the relationship type @@ -17,45 +15,55 @@ if { $operation ne "Yes, I really want to delete this relationship type" } { # set the return_url to something useful if we are not deleting if { $return_url eq "" } { - set return_url [export_vars -base one rel_type] + set return_url [export_vars -base one rel_type] } } else { db_1row select_type_info { - select t.table_name - from acs_object_types t - where t.object_type = :rel_type + select t.table_name + from acs_object_types t + where t.object_type = :rel_type } set user_id [ad_conn user_id] - set rel_id_list [db_list select_rel_ids {}] + set rel_id_list [db_list select_rel_ids { + select r.rel_id + from acs_rels r + where acs_permission.permission_p(r.rel_id, :user_id, 'delete') + and r.rel_type = :rel_type + }] - set segment_id [db_string select_segment_id {} -default ""] - + set segment_id [db_string select_segment_id { + select s.segment_id + from rel_segments s + where acs_permission.permission_p(s.segment_id, :user_id, 'delete') + and s.rel_type = :rel_type + } -default ""] + # delete all relations, all segments, and drop the relationship # type. This will fail if a relation / segment for this type is created # after we select out the list of rels/segments to delete but before we # finish dropping the type. db_transaction { - foreach rel_id $rel_id_list { - relation_remove $rel_id - } - - if { $segment_id ne "" } { - rel_segments_delete $segment_id - } - - db_exec_plsql drop_relationship_type {} + foreach rel_id $rel_id_list { + relation_remove $rel_id + } + + if { $segment_id ne "" } { + rel_segment::delete $segment_id + } + + db_exec_plsql drop_relationship_type {} } on_error { - ad_return_error "Error deleting relationship type" "We got the following error trying to delete this relationship type:
$errmsg
" - ad_script_abort + ad_return_error "Error deleting relationship type" "We got the following error trying to delete this relationship type:
$errmsg
" + ad_script_abort } # If we successfully dropped the relationship type, drop the table. # Note that we do this outside the transaction as it commits all # transactions anyway if { [db_table_exists $table_name] } { - db_exec_plsql drop_type_table "drop table $table_name" + db_dml drop_type_table "drop table $table_name" } }