ad_user_group_add db group_type group_name { approved_p "t" } { existence_public_p "f" } { new_member_policy "closed" } { multi_role_p "f" } { extra_values " " } { group_id " " }What it does:
Creates a new group. Returns: The groud_id of the group if created or it existed already (double click protection); 0 on failure.Defined in: /web/philip/packages/acs-core/user-groups-procs.tcl
Source code:
# PARAMETERS # db: database handle # group_type: type of group # group_name: pretty name # approved_p (optional): is this an approved group? # existence_public_p (optional): Is the existence of this group public? # new_member_policy (optional): How can members join? (wait, closed, open) # permission_system(optional): What type of permission system (basic, advanced) # extra_values (optional): A ns_set containing # extra values that should be stored for this # group. These are items that will go in the [set group_type]_info # tables. The keys of the ns_set contain the column names. The values # contain the values. # group_id (optional): Group_id. If this is null, one will be created if [empty_string_p $group_id] { set group_id [database_to_tcl_string $db "select user_group_sequence.nextval from dual"] } ns_db dml $db "begin transaction" if [catch { set short_name [database_to_tcl_string $db " select short_name_from_group_name('[DoubleApos $group_name]') from dual"] ns_db dml $db " insert into user_groups (group_id, group_type, group_name, short_name, approved_p, existence_public_p, new_member_policy, multi_role_p, creation_user, creation_ip_address, registration_date) values ($group_id, '[DoubleApos $group_type]', '[DoubleApos $group_name]', '[DoubleApos $short_name]', '$approved_p', '$existence_public_p', '[DoubleApos $new_member_policy]', '[DoubleApos $multi_role_p]', [ad_get_user_id], '[DoubleApos [peeraddr]]', sysdate)" } errmsg] { ns_db dml $db "abort transaction" ns_log Error "$errmsg in ad-user_groups.tcl - ad_user_group_add insertion into user groups" # see if this group is already defined set selection [ns_db 0or1row $db "select group_id from user_groups where group_id = $group_id"] if [empty_string_p $selection] { return 0 } else { set_variables_after_query return $group_id } } # insert the extra values if ![empty_string_p $extra_values] { set extra_values_i 0 lappend columns group_id lappend values $group_id set extra_values_limit [ns_set size $extra_values] while {$extra_values_i < $extra_values_limit} { set key [ns_set key $extra_values $extra_values_i] lappend columns $key lappend values '[DoubleApos [ns_set get $extra_values $key]]' incr extra_values_i } if [catch { ns_db dml $db "insert into [set group_type]_info ([join $columns ","]) values ([join $values ","])" } errmsg] { # There was an error inserting the extra information (most likely to this is an administration group # and the module and submodule are already there) ns_db dml $db "abort transaction" ns_log Error "$errmsg in ad-user_groups.tcl - ad_user_group_add extra values insertion" return 0 } } ns_db dml $db "end transaction" return $group_id