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 -N -r1.22 -r1.23
--- openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 16 May 2006 09:24:35 -0000 1.22
+++ openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 18 May 2006 11:13:00 -0000 1.23
@@ -370,11 +370,18 @@
content_item 0 {} \
imsld_role_group 0 {}
+
+ rel_types::new imsld_roleinstance_club_rel "imsld role instance - dotlrn club" "imsld role groups - dotlrn clubs" \
+ imsld_role_group 0 {} \
+ dotlrn_club 0 {}
+
+
# ims-ld run - oacs users
rel_types::new imsld_run_users_group_rel "ims_ld_run_group - acs_users" "ims_ld_run_group - acs_users" \
imsld_run_users_group 0 {} \
party 0 {}
+
}
ad_proc -public imsld::install::init_rels {
Index: openacs-4/packages/imsld/tcl/imsld-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-procs.tcl,v
diff -u -N -r1.62 -r1.63
--- openacs-4/packages/imsld/tcl/imsld-procs.tcl 16 May 2006 09:24:35 -0000 1.62
+++ openacs-4/packages/imsld/tcl/imsld-procs.tcl 18 May 2006 11:13:00 -0000 1.63
@@ -822,6 +822,7 @@
set completed_act_p 1
set rel_defined_p 0
+ set user_roles_list [imsld::roles::get_user_roles -user_id $user_id -imsld_id $imsld_id]
db_foreach referenced_role_part {
select ar.object_id_two as role_part_item_id,
rp.role_part_id
@@ -1360,7 +1361,7 @@
}
send-mail {
- # FIX ME: when roles be supported, fix it so the mail is sent to the propper role
+ # FIX ME: when roles are supported, fix it so the mail is sent to the propper role
set resource_item_list ""
db_1row get_send_mail_info {
select sm.title as send_mail_title
@@ -1369,9 +1370,12 @@
and content_revision__is_live(sm.mail_id) = 't'
}
+
+ db_1row get_sendmail_id {}
set send_mail_node_li [$dom_doc createElement li]
set a_node [$dom_doc createElement a]
- $a_node setAttribute href "[export_vars -base "[dotlrn_community::get_community_url [dotlrn_community::get_community_id]]spam-recipients" {referer one-community-admin}]"
+
+ $a_node setAttribute href "[export_vars -base "[dotlrn_community::get_community_url [dotlrn_community::get_community_id]]imsld/imsld-sendmail" {{send_mail_id $sendmail_id}}]"
set service_title [$dom_doc createTextNode "$send_mail_title"]
$a_node setAttribute target "content"
$a_node appendChild $service_title
@@ -1448,9 +1452,10 @@
}
send-mail {
- # FIX ME: when roles be supported, fix it so the mail is sent to the propper role
+
+ db_1row get_sendmail_id {}
set image_path [imsld::object_type_image_path -object_type $service_type]
- set services_list ""
+ set services_list ""
set resource_item_list $service_item_id
}
@@ -1605,6 +1610,7 @@
set identifier [lindex $services_list 2]
set service_type [lindex $services_list 3]
set service_title [lindex $services_list 4]
+
set class_name [lindex $services_list 5]
if { ![imsld::class_visible_p -run_id $run_id -owner_id $service_id -class_name $class_name] } {
continue
@@ -2950,6 +2956,8 @@
@return The list of items (resources, feedback, environments, using tdom) associated with the support activity
} {
+
+ set user_id [ad_conn user_id]
if { ![db_0or1row activity_info {
select on_completion_id as on_completion_item_id,
activity_id,
@@ -3091,7 +3099,6 @@
where item_id = :activity_item_id
and content_revision__is_live(activity_id) = 't'
}
-
# get environments
set environments_list [list]
set associated_environments_list [db_list sa_associated_environments {
@@ -3456,6 +3463,8 @@
where run_id = :run_id
}
# start with the role parts
+ set user_roles_list [imsld::roles::get_user_roles -user_id $user_id -imsld_id $imsld_id]
+
foreach role_part_list [db_list_of_lists referenced_role_parts { *SQL* }] {
set type [lindex $role_part_list 0]
set activity_id [lindex $role_part_list 1]
@@ -3660,6 +3669,7 @@
}
}
+
# 1. for each act in the next_act_id_list
# 1.2. for each role_part in the act
# 1.2.1 find the next activity referenced by the role_part
@@ -3668,14 +3678,18 @@
# 2.2.1.2 if it is an activity structure we have verify which activities are already completed and return the next
# activity in the activity structure, handling the case when the next activity is also an activity structure
+ set user_roles_list [imsld::roles::get_user_roles -user_id $user_id -imsld_id $imsld_id]
set next_activity_id_list [list]
foreach act_item_id $next_act_item_id_list {
- foreach role_part_id [db_list act_role_parts {
- select role_part_id
- from imsld_role_parts
- where act_id = :act_item_id
- and content_revision__is_live(role_part_id) = 't'
- }] {
+ foreach role_part_id [db_list act_role_parts "
+ select irp.role_part_id
+ from imsld_role_parts irp,
+ imsld_rolesi iri
+ where content_revision__is_live(irp.role_part_id)='t'
+ and irp.act_id=:act_item_id
+ and irp.role_id=iri.item_id
+ and iri.role_id in ([join $user_roles_list ","])
+ "] {
db_1row get_role_part_activity {
select case
when learning_activity_id is not null
Index: openacs-4/packages/imsld/tcl/imsld-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-procs.xql,v
diff -u -N -r1.20 -r1.21
--- openacs-4/packages/imsld/tcl/imsld-procs.xql 16 May 2006 09:24:35 -0000 1.20
+++ openacs-4/packages/imsld/tcl/imsld-procs.xql 18 May 2006 11:13:00 -0000 1.21
@@ -591,12 +591,15 @@
- select irp.role_part_id
- from imsld_role_parts irp
- where irp.act_id = :act_item_id
- and content_revision__is_live(irp.role_part_id) = 't'
-
-
+
+ select irp.role_part_id
+ from imsld_role_parts irp,
+ imsld_rolesi iri
+ where content_revision__is_live(irp.role_part_id)='t'
+ and irp.act_id=:act_item_id
+ and irp.role_id=iri.item_id
+ and iri.role_id in ([join $user_roles_list ","])
+
@@ -848,7 +851,6 @@
from imsld_servicesi serv
where serv.item_id = :service_item_id
and content_revision__is_live(serv.service_id) = 't'
-
@@ -885,7 +887,33 @@
+
+
+ select mail_id as sendmail_id
+ from imsld_send_mail_servicesi isms
+ where isms.service_id=:service_item_id
+
+
+
+
+
+ select mail_id as sendmail_id
+ from imsld_send_mail_servicesi isms
+ where isms.service_id=:service_item_id
+
+
+
+
+
+ select role_id as role_destination_ref
+ from imsld_send_mail_servicesi isms,
+ imsld_send_mail_data ismd
+ where isms.service_id=:service_item_id
+ and isms.item_id=ismd.send_mail_id
+
+
+
select env.title as environment_title,
@@ -1491,12 +1519,14 @@
ia.act_id,
ip.play_id
from imsld_role_partsi rp, imsld_actsi ia, imsld_playsi ip, imsld_imsldsi ii, imsld_attribute_instances attr,
- imsld_methodsi im
+ imsld_methodsi im,imsld_rolesi iri
where rp.act_id = ia.item_id
and ia.play_id = ip.item_id
and ip.method_id = im.item_id
and im.imsld_id = ii.item_id
and ii.imsld_id = :imsld_id
+ and rp.role_id = iri.item_id
+ and iri.role_id in ([join $user_roles_list ","])
and content_revision__is_live(rp.role_part_id) = 't'
and attr.owner_id = ip.play_id
and attr.run_id = :run_id
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 -N -r1.1 -r1.2
--- openacs-4/packages/imsld/tcl/imsld-roles-procs.tcl 30 Mar 2006 15:49:45 -0000 1.1
+++ openacs-4/packages/imsld/tcl/imsld-roles-procs.tcl 18 May 2006 11:13:00 -0000 1.2
@@ -36,7 +36,10 @@
#map group with his parent (composition_rel)
if {[info exist parent_group_id] } {
relation_add composition_rel $parent_group_id $group_id
- }
+ }
+#map group with the community or class
+ set club_id [dotlrn_community::get_community_id]
+ relation_add imsld_roleinstance_club_rel $group_id $club_id
#check for subroles
set subroles_list [imsld::roles::get_subroles -role_id $role_id]
@@ -137,20 +140,128 @@
ad_proc -private imsld::roles::get_role_instances {
-role_id
+ -community_id
} {
@param roles_list the list of roles to get the name
} {
- db_1row get_related_groups {}
+ if {[info exist community_id]} {
+ set groups [db_list get_community_related_groups {}]
+ } else {
+ set groups [db_list get_related_groups {}]
+ }
return $groups
}
+ad_proc -private imsld::roles::get_parent_role_instance {
+ -group_id
+ -root_parent:boolean
+} {
+ @param group_id the role instance to get the parent from
+} {
+ if {[db_0or1row get_parent_role_instance {}]} {
+ if {$root_parent} {
+ set group_id $parent_group_id
+ while {[db_0or1row get_parent_role_instance {}]} {
+ set group_id $parent_group_id
+ }
+ return $parent_group_id
+ } else {
+ return $parent_group_id
+ }
+ } else {
+ return 0
+ }
+}
+
ad_proc -private imsld::roles::get_parent_role {
-role_id
+ -root_parent:boolean
} {
@param roles_list the list of roles to get the name
} {
- db_1row get_parent_role {}
- return $parent_role
+ set role $role_id
+ if {[db_0or1row get_parent_role {}]} {
+ if {$root_parent} {
+ set role $parent_role
+ while {[db_0or1row get_parent_role {}]} {
+ set role $parent_role
+ }
+ return $parent_role
+ } else {
+ return $parent_role
+ }
+ } else {
+ return 0
+ }
}
+ad_proc -private imsld::roles::get_mail_recipients {
+ -role_destination_ref
+ -role_source_id
+} {
+ Get the list of recipients of a send-mail service. Its called from a user belonging to a role into an specific imsld run and must get a list of users from the destination role.
+} {
+#FIX ME: when runs are supported, here may be included
+
+#find relationship between source and destination.
+# set root_source_parent_role [imsld::roles::get_parent_role -role_id $role_source_id -root_parent]
+ set root_destination_parent_role [imsld::roles::get_parent_role -role_id $role_destination_ref]
+
+ set community_id [dotlrn_community::get_community_id]
+ set list_of_groups [imsld::roles::get_role_instances -role_id $role_destination_ref -community_id $community_id]
+# if { $root_source_parent_role == $root_destination_parent_role } {
+ #get community_id
+# set group_id
+#
+# }
+ set users_list [list]
+ foreach group $list_of_groups {
+ lappend users_list [group::get_members -group_id $group]
+ }
+ return $users_list
+}
+ad_proc -public imsld::roles::get_user_roles {
+ -user_id
+ -imsld_id
+} {
+ Returns a list with all the roles_id from which the user are member. If imsld_id is given, restrict the list to the roles of the imsld.
+} {
+ set roles_list [db_list get_user_roles_list {}]
+
+ if {[info exist imsld_id]} {
+ set new_roles_list [list]
+ foreach role $roles_list {
+ set role_imsld_id [imsld::roles::get_imsld_from_role -role_id $role]
+ if { $role_imsld_id == $imsld_id } {
+ lappend new_roles_list $role
+ }
+ }
+ set roles_list $new_roles_list
+ }
+ return $roles_list
+}
+
+ad_proc -public imsld::roles::get_imsld_from_role {
+ -role_id
+} {
+ get the imsld_id of the given role
+} {
+ return [db_string get_imsld {}]
+}
+
+ad_proc -public imsld::roles::get_role_instances {
+ -role_id
+ -community_id
+} {
+ get all the instances of a given role. If community_id is given, restrict the output to the groups of this community
+} {
+ set groups_list [db_list get_list_of_groups {}]
+#
+# if {[info exist community_id]} {
+# set groups_list [db_list get_list_of_community_groups ""]
+# }
+ return $groups_list
+}
+
+
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 -N -r1.1 -r1.2
--- openacs-4/packages/imsld/tcl/imsld-roles-procs.xql 30 Mar 2006 15:49:45 -0000 1.1
+++ openacs-4/packages/imsld/tcl/imsld-roles-procs.xql 18 May 2006 11:13:00 -0000 1.2
@@ -116,9 +116,24 @@
+
+
+ select ar.object_id_two
+ from acs_rels ar,
+ acs_rels ar2,
+ imsld_rolesi iri
+ where ar.object_id_one=iri.item_id
+ and ar.rel_type='imsld_role_group_rel'
+ and ar.object_id_two=ar2.object_id_one
+ and ar2.rel_type='imsld_roleinstance_club_rel'
+ and ar2.object_id_two=:community_id
+ and iri.role_id=:role_id
+
+
+
- select ar.object_id_two as groups
+ select ar.object_id_two
from acs_rels ar,
imsld_rolesi iri
where ar.object_id_one=iri.item_id
@@ -133,13 +148,69 @@
from imsld_rolesi iri,
imsld_rolesi iri1
where iri1.parent_role_id=iri.item_id
- and iri1.role_id=:role_id
+ and iri1.role_id=:role
+
+
+ select object_id_one as parent_group_id
+ from acs_rels
+ where object_id_two=:group_id
+ and rel_type='composition_rel'
+
+
+
+
+ select ir.role_id
+ from imsld_rolesi ir,
+ group_member_map gmm,
+ acs_objects ao,
+ acs_rels ar
+ where ao.object_id = gmm.group_id
+ and ao.object_type = 'imsld_role_group'
+ and ar.object_id_two = gmm.group_id
+ and ir.item_id = ar.object_id_one
+ and gmm.member_id = :user_id
+
+
+
+
+ select iii.imsld_id
+ from imsld_imsldsi iii,
+ imsld_roles ir,
+ imsld_componentsi ici
+ where iii.item_id = ici.imsld_id
+ and ici.item_id = ir.component_id
+ and ir.role_id = :role_id
+
+
+
+
+
+ select ar1.object_id_two as group
+ from imsld_rolesi iri,
+ acs_rels ar1
+ where ar1.rel_type='imsld_role_group_rel'
+ and ar1.object_id_one=iri.item_id
+ and iri.role_id=:role_id
+
+
+
+
+
+ select object_id_one
+ from acs_rels
+ where rel_type='imsld_roleinstance_club_rel'
+ and object_id_one in ([join $groups_list ","])
+ and object_id_two = :community_id
+
+
+
+
Index: openacs-4/packages/imsld/www/activity-frame.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/activity-frame.adp,v
diff -u -N -r1.5 -r1.6
--- openacs-4/packages/imsld/www/activity-frame.adp 5 Apr 2006 18:39:57 -0000 1.5
+++ openacs-4/packages/imsld/www/activity-frame.adp 18 May 2006 11:13:01 -0000 1.6
@@ -4,6 +4,7 @@
+
@@ -23,8 +24,11 @@
-@activities;noquote@
+
+
+
+@activities;noquote@
@@ -56,4 +60,10 @@
document.getElementById('object').src = as[0].getAttribute('href');
+
+
+
+
Index: openacs-4/packages/imsld/www/activity-frame.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/activity-frame.tcl,v
diff -u -N -r1.5 -r1.6
--- openacs-4/packages/imsld/www/activity-frame.tcl 16 May 2006 09:24:35 -0000 1.5
+++ openacs-4/packages/imsld/www/activity-frame.tcl 18 May 2006 11:13:01 -0000 1.6
@@ -11,6 +11,20 @@
set user_id [ad_conn user_id]
+set supported_roles [db_list supported_roles_list { select iri.role_id
+ from imsld_rolesi iri,
+ acs_rels ar,
+ imsld_support_activitiesi isai
+ where iri.item_id=ar.object_id_two
+ and ar.rel_type='imsld_sa_role_rel'
+ and ar.object_id_one=isai.item_id
+ and isai.activity_id =:activity_id }]
+
+if {[llength $supported_roles]} {
+ set flag 1
+}
+
+
dom createDocument div doc
set dom_root [$doc documentElement]
$dom_root setAttribute class "tabber"
Index: openacs-4/packages/imsld/www/imsld-sendmail-2.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/imsld-sendmail-2.adp,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/imsld/www/imsld-sendmail-2.adp 18 May 2006 11:13:01 -0000 1.1
@@ -0,0 +1,12 @@
+
+
+
+ @page_title;noquote@
+ @context;noquote@
+
+
+
+
+
+
+
Index: openacs-4/packages/imsld/www/imsld-sendmail-2.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/imsld-sendmail-2.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/imsld/www/imsld-sendmail-2.tcl 18 May 2006 11:13:01 -0000 1.1
@@ -0,0 +1,40 @@
+ad_page_contract {
+} {
+ recipients
+ role_recipient
+}
+
+set users_list [imsld::roles::get_mail_recipients -role_destination_ref $role_recipient]
+set users_list [lindex $users_list 0]
+
+if {[string eq $recipients all-in-role]} {
+ #todos los miembros del role: calcula destinatarios, redirige y punto
+
+
+ ad_returnredirect [export_vars -base ../spam {{recipients:multiple $users_list} {referer one-community-admin}}]
+ ad_script_abort
+} else {
+ #se puede seleccionar los miembros. hay que hacer un template::list
+ set page_title "Role members"
+ set context {}
+ set bulk_actions "{Compose mail} {../spam} {Send mail to selected members}"
+
+ template::list::create \
+ -name find_recipients \
+ -multirow find_recipients \
+ -key recipients \
+ -elements {
+ user_id {
+ label {Role member name}
+ display_col full_name
+ }
+ } \
+ -bulk_actions "$bulk_actions" \
+ -bulk_action_export_vars "{referer one-community}"
+
+ db_multirow -extend { recipients full_name} find_recipients get_recipients_info {} {
+ set recipients $user_id
+ set full_name [concat $first_names $last_name]
+ }
+}
+
Index: openacs-4/packages/imsld/www/imsld-sendmail-2.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/imsld-sendmail-2.xql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/imsld/www/imsld-sendmail-2.xql 18 May 2006 11:13:01 -0000 1.1
@@ -0,0 +1,15 @@
+
+
+
+
+
+ select person_id as user_id,
+ first_names,
+ last_name
+ from persons
+ where person_id in ([join $users_list ","])
+
+
+
+
+
Index: openacs-4/packages/imsld/www/imsld-sendmail.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/imsld-sendmail.adp,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/imsld/www/imsld-sendmail.adp 18 May 2006 11:13:01 -0000 1.1
@@ -0,0 +1,12 @@
+
+ @page_title;noquote@
+ @context;noquote@
+