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]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