Index: openacs-4/packages/imsld/sql/postgresql/imsld-status-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/sql/postgresql/Attic/imsld-status-create.sql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/imsld/sql/postgresql/imsld-status-create.sql 18 Nov 2005 08:44:50 -0000 1.4 +++ openacs-4/packages/imsld/sql/postgresql/imsld-status-create.sql 12 Jan 2006 14:55:25 -0000 1.5 @@ -25,7 +25,7 @@ references users not null, type varchar(20) - check (type in ('learning','support','structure')), + check (type in ('learning','support','structure','resource')), finished_date timestamptz default current_timestamp not null Index: openacs-4/packages/imsld/tcl/imsld-callback-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-callback-procs.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/imsld/tcl/imsld-callback-procs.tcl 17 Nov 2005 15:41:51 -0000 1.1 +++ openacs-4/packages/imsld/tcl/imsld-callback-procs.tcl 12 Jan 2006 14:55:26 -0000 1.2 @@ -18,3 +18,15 @@ @author Eduardo P�rez Ureta (eduardo.perez@uc3m.es) } - + +ad_proc -public -callback imsld::finish_object -impl ld_resource { + -object_id +} { +

Tag a resource as finished into an activity.

+ + @author Luis de la Fuente Valent�n (lfuente@it.uc3m.es) +} { + + set resource_id [imsld::get_resource_from_object -object_id $object_id] + imsld::finish_resource -resource_id $resource_id +} 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 -r1.14 -r1.15 --- openacs-4/packages/imsld/tcl/imsld-procs.tcl 14 Dec 2005 17:02:49 -0000 1.14 +++ openacs-4/packages/imsld/tcl/imsld-procs.tcl 12 Jan 2006 14:55:26 -0000 1.15 @@ -418,6 +418,7 @@ ad_proc -public imsld::process_service { -service_item_id:required + {-resource_mode "f"} } { returns a list of the associated resources referenced from the given service. } { @@ -460,6 +461,9 @@ and tree_right((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) or ii.imsld_item_id = :imsld_item_id) } { + if {[string eq "t" $resource_mode]} { + lappend resource_item_list $resource_item_id + } append one_service_url "[imsld::process_resource -resource_item_id $resource_item_id]" if { [string eq "" $one_service_url] } { lappend services_list "[_ imsld.lt_li_desc_no_file_assoc]" @@ -474,12 +478,18 @@ return "not_implemented_yet" } } - return "$services_list" + if {[string eq "t" $resource_mode]} { + return [list $services_list $resource_item_list] + } else { + return "$services_list" + } + } ad_proc -public imsld::process_environment { -environment_item_id:required {-community_id ""} + {-resource_mode "f"} } { returns a list of the associated resources, files and environments referenced from the given environment. } { @@ -531,7 +541,10 @@ and (imsld_tree_sortkey between tree_left((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) and tree_right((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) or ii.imsld_item_id = :imsld_item_id) - } { + } { + if { [string eq "t" $resource_mode] } { + lappend resource_item_list $resource_item_id + } set one_learning_object_list [imsld::process_resource -resource_item_id $resource_item_id] if { [string eq "" $one_learning_object_list] } { lappend environment_learning_objects_list "[_ imsld.lt_li_desc_no_file_assoc]" @@ -555,7 +568,7 @@ where environment_id = :environment_item_id and content_revision__is_live(service_id) = 't' }] } { - set environment_services_list [imsld::process_service -service_item_id $service_item_id] + set environment_services_list [imsld::process_service -service_item_id $service_item_id -resource_mode $resource_mode] } set nested_environment_list [list] @@ -580,6 +593,7 @@ {-imsld_item_id ""} {-activity_item_id ""} {-community_id ""} + {-resource_mode "f"} } { returns a list with the objective title and the associated resources, files and environments referenced from the learning objective of the given activity or ims-ld } { @@ -646,6 +660,9 @@ and tree_right((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) or ii.imsld_item_id = :imsld_item_id) } { + if { [string eq "t" $resource_mode] } { + lappend resouce_item_list $resource_item_id + } set one_objective_urls "[imsld::process_resource -resource_item_id $resource_item_id]" if { [string eq "" $one_objective_urls] } { lappend objective_items_list "[_ imsld.lt_li_desc_no_file_assoc]" @@ -656,13 +673,20 @@ ns_log notice "[_ imsld.lt_li_desc_no_file_assoc]" } } - return [list $objective_title $objective_items_list] + if { [string eq "t" $resource_mode] } { + return [list $objective_title $objective_items_list $resource_item_list] + } else { + return [list $objective_title $objective_items_list] + } + + } ad_proc -public imsld::process_prerequisite { {-imsld_item_id ""} {-activity_item_id ""} {-community_id ""} + {-resource_mode "f"} } { returns a list of the associated resources, files and environments referenced from the prerequisite of the given ims-ld or activity } { @@ -729,18 +753,26 @@ and (imsld_tree_sortkey between tree_left((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) and tree_right((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) or ii.imsld_item_id = :imsld_item_id) - } { + } { + if { [string eq "t" $resource_mode] } { + lappend resource_item_list $resource_item_id + } set one_prerequisite_urls "[imsld::process_resource -resource_item_id $resource_item_id]" if { [string eq "" $one_prerequisite_urls] } { lappend prerequisite_items_list "[_ imsld.lt_li_desc_no_file_assoc]" } else { - set prerequisite_items_list [concat [list $prerequisite_items_list] [list $one_prerequisite_urls]] + set prerequisite_items_list [concat [list $prerequisite_items_list] [list $one_prerequisite_urls] ] } } if_no_rows { ns_log notice "[_ imsld.lt_li_desc_no_file_assoc]" } } - return [list $prerequisite_title $prerequisite_items_list] + if { [string eq "t" $resource_mode] } { + return [list $prerequisite_title $prerequisite_items_list $resource_item_list] + } else { + return [list $prerequisite_title $prerequisite_items_list] + } + } ad_proc -public imsld::process_feedback { @@ -896,6 +928,7 @@ ad_proc -public imsld::process_learning_activity { -activity_item_id:required {-community_id ""} + {-resource_mode "f"} } { @param @option user_id default [ad_conn user_id] @@ -924,22 +957,21 @@ foreach environment_item_id $associated_environments_list { if { [llength $environments_list] } { set environments_list [concat [list $environments_list] \ - [list [imsld::process_environment -environment_item_id $environment_item_id]]] + [list [imsld::process_environment -environment_item_id $environment_item_id -resource_mode $resource_mode]]] } else { - set environments_list [imsld::process_environment -environment_item_id $environment_item_id] + set environments_list [imsld::process_environment -environment_item_id $environment_item_id -resource_mode $resource_mode] } } # prerequisites set prerequisites_list [list] if { ![string eq "" $prerequisite_item_id] } { - set prerequisites_list [imsld::process_prerequisite -activity_item_id $activity_item_id] + set prerequisites_list [imsld::process_prerequisite -activity_item_id $activity_item_id -resource_mode $resource_mode] } - # learning objectives set objectives_list [list] if { ![string eq "" $learning_objective_item_id] } { - set objectives_list [imsld::process_learning_objective -activity_item_id $activity_item_id] + set objectives_list [imsld::process_learning_objective -activity_item_id $activity_item_id -resource_mode $resource_mode] } set activity_items_list [list] @@ -970,6 +1002,10 @@ and tree_right((select imsld_tree_sortkey from imsld_items where imsld_item_id = :imsld_item_id)) or ii.imsld_item_id = :imsld_item_id) } { + if {[string eq "t" $resource_mode] } { + lappend la_resource_item_list $resource_item_id + } + set one_activity_urls "[imsld::process_resource -resource_item_id $resource_item_id]" if { [string eq "" $one_activity_urls] } { lappend activity_items_list "[_ imsld.lt_li_desc_no_file_assoc]" @@ -980,6 +1016,10 @@ set activity_items_list [list $one_activity_urls] } } + if {[string eq "t" $resource_mode] } { + lappend activity_items_list $resource_item_id + } + } if_no_rows { ns_log notice "[_ imsld.lt_li_desc_no_file_assoc]" } @@ -990,11 +1030,19 @@ if { ![string eq "" $on_completion_item_id] } { set feedbacks_list [imsld::process_feedback -on_completion_item_id $on_completion_item_id] } - return [list $prerequisites_list \ - $objectives_list \ - $environments_list \ - $activity_items_list \ - $feedbacks_list] + if {[string eq "t" $resource_mode]} { + return [list [lindex $prerequisites_list [expr [llength $prerequisites_list] - 1]] \ + [lindex $objectives_list [expr [llength $objectives_list ] - 1]]\ + [lindex $environments_list [expr [llength $environments_list ] - 1]]\ + [lindex $activity_items_list [expr [llength $activity_items_list ] - 1]]\ + [lindex $feedbacks_list [expr [llength $feedbacks_list ] - 1]]] + } else { + return [list $prerequisites_list \ + $objectives_list \ + $environments_list \ + $activity_items_list \ + $feedbacks_list] + } } ad_proc -public imsld::process_support_activity { @@ -1145,6 +1193,7 @@ set prerequisites "[lindex $prerequisites_list 0]
" append prerequisites "[join [lindex $prerequisites_list 1] " "]" } + set objectives_list [imsld::process_learning_objective -imsld_item_id $imsld_item_id] set objectives "" if { [llength $objectives_list] } { @@ -1222,7 +1271,6 @@ set objectives "[lindex [lindex $activities_list 1] 0]
" append objectives "[join [lindex [lindex $activities_list 1] 1] " "]" } - if { [llength [lindex $activities_list 2]] } { set environments "[lindex [lindex $activities_list 2] 0]
" append environments "[join [lindex [lindex $activities_list 2] 1] " "] " @@ -1235,6 +1283,7 @@ set activities "$activity_title
[join [lindex $activities_list 3] " "]" + set feedbacks "" if { [llength [lindex $activities_list 4]] } { set feedbacks "[lindex [lindex $activities_list 4] 0]
" @@ -1507,5 +1556,252 @@ return [template::multirow size imsld_multirow] } + +ad_proc -public imsld::get_activity_from_resource { + -resource_id +} { + @return The activity_id from which the resource is being used. +} { +#set a flag. while 1, keep trying + set element_flag 1 + + +#if the resource is into an environment + if { $element_flag =="0" } { + #if is a service +#get the imsld_item_id + db_1row get_imsld_item_id { + select ar1.object_id_one as imsld_item_item_id + from imsld_cp_resourcesi icri, + acs_rels ar1 + where icri.item_id=ar1.object_id_two + and icri.resource_id= :resource_id + } +#here, there are three options: a service, a conference service or a learning object + +#conference service +#get the environment_id +#FIX ME: VALID ONLY FOR CONFERENCE_SERVICES!!! + if { [db_0or1row is_conference_service {select 1 from imsld_conference_services where imsld_item_id=:imsld_item_item_id} ] } { + db_1row get_environment_id_from_cs { + select isi.environment_id as environment_item_id + from imsld_conference_services ics, + imsld_servicesi isi + where isi.item_id=ics.service_id + and ics.imsld_item_id=:imsld_item_item_id + } + } + +#learning objects + if { [db_0or1row is_learning_object {select 1 from acs_rels where rel_type='imsld_l_object_item_rel' and object_id_two=:imsld_item_item_id } ] } { + db_1row get_environment_id_from_lo { + select iloi.environment_id as environment_item_id + from imsld_learning_objectsi iloi, + acs_rels ar + where iloi.item_id=ar.object_id_one + and ar.object_id_two=:imsld_item_item_id + } + } + +#default service + + +#get the learning_activity_id + db_1row get_learning_activity_from_environment { + select ila.activity_id as activity_item_id + from acs_rels ar, + imsld_learning_activitiesi ila + where ila.item_id=ar.object_id_one + and ar.object_id_two=:environment_item_id; + } + set element_flag 0 + } +#if the resource is an activities_list + if { $element_flag =="1" } { + db_1row is_learning_activity { + select ila.activity_id as activity_item_id + from imsld_cp_resourcesi icri, + acs_rels ar1, + acs_rels ar2, + imsld_learning_activities ila + where ar2.object_id_two=icri.item_id + and ar1.object_id_two=ar2.object_id_one + and ila.activity_description_id=ar1.object_id_one + and icri.resource_id= :resource_id + } + set element_flag 0 + } + + if {$element_flag =="1"} { +#get the element with which the resource is asociated (prerequisite,learning objective,environment or learning activity) + db_1row get_activity_from_resource { + select ar1.object_id_one as resource_element_id + from acs_rels ar1, + acs_rels ar2, + imsld_cp_resourcesi icr + where ar1.object_id_two=ar2.object_id_one + and ar2.object_id_two=icr.item_id + and icr.resource_id = : resource_id; + } + +#choose if the resource is a prerequisite or a learning objective + if { [db_0or1row is_prerequisite { select 1 from imsld_prerequisites where prerequisite_id=:resource_id }] } { + db_1row { + select activity_id as activity_item_id + from imsld_learning_activitiesi + where prerequisite_id=:resource_element_id + } + } elseif {[db_0or1row is_learning_objective { select 1 from imsld_learning_objectives where objective_id=:resource_element_id } ] } { + db_1row { + select activity_id as activity_item_id + from imsld_learning_activitiesi + where learning_objective_id=:resource_element_id + } + } + set element_flag 0 + } + return $activity_item_id +} + +ad_proc -public imsld::get_rolepart_from_activity { + -activity_id +} { + @return The role_part_id from which the activity is being used. +} { + db_1row get_role_part_from_activity { + select irp.role_part_id as role_part_id + from imsld_role_parts irp, + imsld_learning_activitiesi ilai, + acs_rels ar + where ilai.activity_id=:activity_id + and ar.object_id_two=ilai.item_id + and irp.activity_structure_id=ar.object_id_one + } + return $role_part_id +} + +ad_proc -public imsld::get_imsld_from_activity { + -activity_id +} { + @return The imsld_id from which the activity is being used. +} { + db_1row get_imsld_from_activity { + select iii.imsld_id as imsld_id + from imsld_imsldsi iii, + cr_items cr, + cr_items cr2, + imsld_learning_activitiesi ilai + where ilai.activity_id=:activity_id + and ilai.item_id=cr.item_id + and cr2.parent_id=cr.parent_id + and cr2.content_type='imsld_imsld' + and iii.item_id=cr2.item_id + + } + return $imsld_id +} + +ad_proc -public imsld::get_resource_from_object { + -object_id +} { +

Get the object which is asociated with an acs_object_id

+ @author Luis de la Fuente Valent�n (lfuente@it.uc3m.es) +} { + db_1row get_resource { + select resource_id + from imsld_cp_resources + where acs_object_id = :object_id + } + return $resource_id +} + +ad_proc -public imsld::finish_resource { + -resource_id +} { +

Tag a resource as finished into an activity. Return true if success, false otherwise

+ + @author Luis de la Fuente Valent�n (lfuente@it.uc3m.es) +} { +#look for the asociated activity + set activity_id [imsld::get_activity_from_resource -resource_id $resource_id] + db_1row get_activity_item_id { + select item_id as activity_item_id + from imsld_learning_activitiesi + where activity_id=:activity_id + } +#get info + set role_part_id [imsld::get_rolepart_from_activity -activity_id $activity_id] + set imsld_id [imsld::get_imsld_from_activity -activity_id $activity_id] + set user_id [ad_conn user_id] + +#if not done yet, tag the resource as finished + if {![db_0or1row check_completed_resource { + select 1 + from imsld_status_user + where completed_id=:resource_id + }] } { + db_transaction { + db_dml insert_completed_resource { + insert into imsld_status_user + values ( + :imsld_id, + :role_part_id, + :resource_id, + :user_id, + 'resource', + now() + ) + } + } + + +#find all the resouces in the same activity + set resources_item_list [imsld::process_learning_activity -activity_item_id $activity_item_id -resource_mode "t"] + + set resource_list [list] + foreach resource_item_id $resources_item_list { + if {$resource_item_id ne ""} { + db_1row get_activity_item { + select resource_id as rid + from imsld_cp_resourcesi + where item_id = :resource_item_id + } + lappend resource_list $rid + } + } + +#check if all the resources are finished + set all_finished_p "t" + foreach resource_id $resource_list { + if { ![db_string check_completed_resource { + select count(*) + from imsld_status_user + where completed_id = :resource_id + } ] } { + set all_finished_p "f" + } + } + +#if all are finished, tag the activity as finished + if { [string eq "t" $all_finished_p]} { + + db_1row get_activity_type { + select case + when (select 1 from imsld_learning_activities where activity_id=2909)=1 + then 'learning' + when (select 1 from imsld_support_activities where activity_id=2909)=1 + then 'support' + else 'none' + end as type + } + + imsld::finish_component_element -imsld_id $imsld_id \ + -role_part_id $role_part_id \ + -element_id $activity_id \ + -type $type + } + } +} + ad_register_proc GET /finish-component-element* imsld::finish_component_element ad_register_proc POST /finish-component-element* imsld::finish_component_element