Index: openacs-4/packages/imsld/tcl/apm-callback-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/apm-callback-procs.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/imsld/tcl/apm-callback-procs.tcl 19 Sep 2005 17:20:15 -0000 1.3 +++ openacs-4/packages/imsld/tcl/apm-callback-procs.tcl 30 Mar 2006 15:48:39 -0000 1.4 @@ -21,6 +21,11 @@ # create default relationships imsld::install::init_rels + imsld::install::create_group_types + + # create default relationships with non IMSLD objects + imsld::install::init_rels2 + return 1 } Index: openacs-4/packages/imsld/tcl/imsld-install-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-install-procs.tcl,v diff -u -r1.19 -r1.20 --- openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 30 Mar 2006 15:16:31 -0000 1.19 +++ openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 30 Mar 2006 15:48:39 -0000 1.20 @@ -347,7 +347,25 @@ # content::type::attribute::new -content_type imsld_property_instance -attribute_name value -datatype string -pretty_name "<#_ Value #>" -column_spec "varchar(4000)" } +ad_proc -public imsld::install::create_group_types { +} { + create groups needed to manage imsld-roles +} { + group_type::new -group_type imsld_role_group -supertype group "Role defined by IMS-LD" "Roles defined by IMS-LD" + +} +ad_proc -public imsld::install::init_rels2 { +} { + create default rels between imsld items and acs objects +} { + # ims-ld roles - oacs groups + rel_types::new imsld_role_group_rel "ims-ld role - imsld_role_group" "ims-ld roles - imsld_role_groups" \ + content_item 0 {} \ + imsld_role_group 0 {} + +} + ad_proc -public imsld::install::init_rels { } { Create default rels between imsld items Index: openacs-4/packages/imsld/tcl/imsld-roles-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-roles-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/imsld/tcl/imsld-roles-procs.tcl 30 Mar 2006 15:49:45 -0000 1.1 @@ -0,0 +1,156 @@ +# /packages/imsld/tcl/imsld-cp-procs.tcl + +ad_library { + Procedures in the imsld namespace that have to do with Roles Management + + @creation-date Mar 2006 + @author lfuente@inv.it.uc3m.es +} + +namespace eval imsld {} +namespace eval imsld::roles {} + + # IMS CP database transaction functions + +ad_proc -public imsld::roles::create_instance { + -role_id:required + -parent_group_id +} { + Create a instance of a role (a party) for the role and for all the subroles with the "create-new" attribute set to true. + @param role_id identifier of the role to be instanciated +} { + db_1row get_role_name {} + set role_name [join [list imsld $role_type $role_id] "_"] + set names_counter [db_string name_already_exist {}] + set role_name [join [list $role_name $names_counter] "_"] + set user_id [ad_conn user_id] + set peeraddr [ad_conn peeraddr] + +#create the party + db_transaction { + set group_id [db_exec_plsql create_new_group {}] + } + +#map role with group + set rel_id [relation_add imsld_role_group_rel $role_item_id $group_id] +#map group with his parent (composition_rel) + if {[info exist parent_group_id] } { + relation_add composition_rel $parent_group_id $group_id + } + +#check for subroles + set subroles_list [imsld::roles::get_subroles -role_id $role_id] + + if {[llength $subroles_list]} { + foreach role $subroles_list { + if {[string eq "t" [db_string get_create_new_p {}] ]} { + set sub_instance [imsld::roles::create_instance -role_id $role -parent_group_id $group_id] + } + } + } + return $group_id +} + +ad_proc -public imsld::roles::delete_instance { + -group_id +} { + @param group_id identifier of the group instance to be deleted +} { + set children_list [db_list check_children {}] + + foreach group_to_remove $children_list { + db_exec_plsql delete_group {} + } + set group_to_remove $group_id + db_exec_plsql delete_group {} +} + + + + +ad_proc -public imsld::roles::get_subroles { + -role_id +} { + @param role_id identifier of the role to be explored +} { + set role_list [db_list get_subroles_list {}] + return $role_list +} + +ad_proc -public imsld::roles::get_depth { + -role_id + {-depth "0"} +} { + @param role_id the role to calcule depth +} { + if {[db_0or1row has_parent {}]} { + incr depth + imsld::roles::get_depth -role_id $parent_role_id -depth $depth + } else { + return $depth + } +} + +ad_proc -public imsld::roles::get_list_of_roles { + -imsld_id:required +} { + @param imsld_id identifier of the imsld from wich roles will be searched +} { + set main_roles [db_list roles_list {}] + set roles_list [list] + foreach role $main_roles { + set depth [imsld::roles::get_depth -role_id $role] + lappend roles_list [list $role $depth] + + } + return $roles_list +} + +ad_proc -public imsld::roles::get_roles_names { + -roles_list +} { + @param roles_list the list of roles to get the name +} { + + set roles_names [list] + foreach role_item_par $roles_list { + + set role_item [lindex $role_item_par 0] + set depth [lindex $role_item_par 1] + + db_1row get_role_name {} + set name "[string repeat "    " $depth] $name" + lappend roles_names $name + } + return $roles_names +} + + +ad_proc -private imsld::roles::get_role_info { + -role_id +} { + @param roles_id the role from which the info is obtained +} { + db_1row get_imsld_role_info {} + return [list $max_persons $min_persons $create_new_p $match_persons_p] +} + +ad_proc -private imsld::roles::get_role_instances { + -role_id +} { + @param roles_list the list of roles to get the name +} { + db_1row get_related_groups {} + return $groups +} + +ad_proc -private imsld::roles::get_parent_role { + -role_id +} { + @param roles_list the list of roles to get the name +} { + db_1row get_parent_role {} + return $parent_role +} + + Index: openacs-4/packages/imsld/tcl/imsld-roles-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-roles-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/imsld/tcl/imsld-roles-procs.xql 30 Mar 2006 15:49:45 -0000 1.1 @@ -0,0 +1,145 @@ + + + + + select role_type,item_id as role_item_id + from imsld_rolesi + where role_id=:role_id + + + + + + + select create_new_p + from imsld_roles + where role_id=:role_id + + + + + + select iri1.role_id + from imsld_rolesi iri1, + imsld_rolesi iri2 + where iri1.parent_role_id=iri2.item_id + and iri2.role_id=:role_id + + + + + + select acs_group__new( null, + 'imsld_role_group', + now(), + :user_id, + :peeraddr, + null, + null, + :role_name, + null, + null + ); + + + + + + select count(*) as names_counter + from groups + where group_name like (:role_name || '%') + + + + + + + select acs_group__delete(:group_to_remove); + + + + + + select object_id_two as children_list + from acs_rels + where object_id_one=:group_id + and rel_type='composition_rel' + + + + + + + select ir.role_id + from imsld_roles ir, + imsld_imsldsi iii, + imsld_componentsi ici + where ir.component_id=ici.item_id + and ici.imsld_id=iii.item_id + and iii.imsld_id=:imsld_id + order by ir.role_id + + + + + + + select parent_role_id + from imsld_roles + where role_id=:role_id + and parent_role_id > 0 + + + + + + + select title as name + from imsld_rolesi + where role_id=:role_item + + + + + + select title as name + from imsld_rolesi + where role_id=:role_item + + + + + + select max_persons,min_persons,create_new_p,match_persons_p + from imsld_roles + where role_id=:role_id + + + + + + select ar.object_id_two as groups + from acs_rels ar, + imsld_rolesi iri + where ar.object_id_one=iri.item_id + and iri.role_id=:role_id + and ar.rel_type='imsld_role_group_rel' + + + + + + select iri.role_id as parent_role + from imsld_rolesi iri, + imsld_rolesi iri1 + where iri1.parent_role_id=iri.item_id + and iri1.role_id=:role_id + + + + + + + + +