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.24 -r1.25
--- openacs-4/packages/imsld/tcl/imsld-procs.tcl 2 Feb 2006 13:52:31 -0000 1.24
+++ openacs-4/packages/imsld/tcl/imsld-procs.tcl 3 Feb 2006 10:18:53 -0000 1.25
@@ -1627,9 +1627,7 @@
and content_revision__is_live(resource_id) = 't'
}
set files_urls ""
-
- if { ![string eq $resource_type "webcontent"] } {
-###[string eq $resource_type "imsqti_xmlv1p0"] || [string eq $resource_type "imsqti_xmlv1p1"] || [string eq $resource_type "imsqti_item_xmlv2p0"]
+ if { ![string eq $resource_type "webcontent"] && ![string eq $acs_object_id ""] } {
if { [db_0or1row is_cr_item {
select live_revision from cr_items where item_id = :acs_object_id
}] } {
@@ -1647,8 +1645,6 @@
set image_path [imsld::object_type_image_path -object_type $object_type]
append files_urls " "
} else {
-
-###[string eq $resource_type "webcontent"] || [string eq $files_urls ""]
# Get file-storage root folder_id
set fs_package_id [site_node_apm_integration::get_child_package_id \
-package_id [dotlrn_community::get_package_id $community_id] \
@@ -2055,9 +2051,6 @@
append environments "[join [lindex [lindex $activities_list 2] 1] " "] "
append environments "[join [lindex [lindex $activities_list 2] 2] " "] "
append environments "[join [lindex [lindex $activities_list 2] 3] " "]"
- # foreach nested_environment {
- # append environments_files [expr { [llength [lindex [lindex $activities_list 2] 3]] ? [join [lindex [lindex $activities_list 2] 2] "
"] : "" }]
- # }
}
set activities "$activity_title
[join [lindex $activities_list 3] " "]"
@@ -2346,122 +2339,171 @@
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.
+ @return The a list of the activity_id, activity_item_id and activity_type from which the resource is being referenced
} {
-#set a flag. while 1, keep trying
- #if the resource is an activities_list
- set element_flag [ db_0or1row 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 a flag. while 1, keep trying
+
+ # Case 1: check if it is referenced from a learning activity (trhough the activity_description)
+ set activity_item_id ""
+ if { [db_0or1row learning_activity_resource {
+ select ila.activity_id,
+ ila.item_id as activity_item_id
+ from imsld_cp_resourcesi icri,
+ acs_rels ar1,
+ acs_rels ar2,
+ imsld_learning_activitiesi 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
+ }] } {
+ # found it, it's referenced from a learning activity
+ return [list $activity_id $activity_item_id learning]
+ }
-#if the resource is not into a learning activity
- if { $element_flag =="0" } {
- #if is a service
-#get the imsld_item_id
+ # Case 2: check if it is referenced from a support activity (trhough the activity_description)
+ set activity_item_id ""
+ if { [db_0or1row support_activity_resource {
+ select isa.activity_id,
+ isa.item_id as activity_item_id
+ from imsld_cp_resourcesi icri,
+ acs_rels ar1,
+ acs_rels ar2,
+ imsld_support_activitiesi isa
+ where ar2.object_id_two=icri.item_id
+ and ar1.object_id_two=ar2.object_id_one
+ and isa.activity_description_id=ar1.object_id_one
+ and icri.resource_id= :resource_id
+ }] } {
+ # found it, it's referenced from a support activity
+ return [list $activity_id $activity_item_id support]
+ }
- 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 threeoptions: a service, a conference service or a learning object
+ # Case 3: check if it is referenced from a service
-#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} ] } {
- set element_flag 1
- 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
- }
- db_1row get_learning_activity_from_environment {
- select ila.activity_id as activity_item_id
+ # first 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
+ }
+
+ # there are three options: a service, a conference service or a learning object
+
+ # 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} ] } {
+ # conference service
+ # get the environment_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
+ }
+
+ # evironment referenced from learning activity ?
+ if { [db_0or1row get_learning_activity_from_environment {
+ select ila.activity_id,
+ ila.item_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;
- }
+ and ar.object_id_two=:environment_item_id
+ }] } {
+ return [list $activity_id $activity_item_id learning]
}
+ # evironment referenced from support activity ?
+ if { [db_0or1row get_support_activity_from_environment {
+ select isa.activity_id,
+ isa.item_id as activity_item_id
+ from acs_rels ar,
+ imsld_support_activitiesi isa
+ where isa.item_id=ar.object_id_one
+ and ar.object_id_two=:environment_item_id
+ }] } {
+ return [list $activity_id $activity_item_id support]
+ }
+ }
+
-#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 } ] } {
- set element_flag 1
-
- db_1row get_environment_id_from_lo {
+ # Case 4: 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
- }
+ }
- db_1row get_learning_activity_from_environment {
- select ila.activity_id as activity_item_id
+ # learning object referenced from a learning activity ?
+ if { [db_0or1row get_learning_activity_from_environment {
+ select ila.activity_id,
+ ila.item_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;
- }
+ and ar.object_id_two=:environment_item_id
+ }] } {
+ return [list $activity_id $activity_item_id learning]
}
-#get the learning_activity_id
-
+ # learning object referenced from a support activity ?
+ if { [db_0or1row get_support_activity_from_environment {
+ select isa.activity_id,
+ isa.item_id as activity_item_id
+ from acs_rels ar,
+ imsld_support_activitiesi isa
+ where isa.item_id=ar.object_id_one
+ and ar.object_id_two=:environment_item_id
+ }] } {
+ return [list $activity_id $activity_item_id support]
+ }
}
+ # Case 5: the last one. it has to be referenced fron a learning objective or prerequisite,
+ # which is referenced from a larning activity
- if {$element_flag =="0"} {
-
-#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;
- }
+ #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_prerequisitesi where item_id=:resource_element_id }] } {
-
- db_1row get_activity_id_from_prerequisite {
- 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_objectivesi where item_id=:resource_element_id } ] } {
-
- db_1row get_activity_id_from_objective {
- select activity_id as activity_item_id
- from imsld_learning_activitiesi
- where learning_objective_id=:resource_element_id
- }
- } else {
-
+ # prerequisite ?
+ if { [db_0or1row is_prerequisite { select 1 from imsld_prerequisitesi where item_id=:resource_element_id }] } {
+ db_1row get_activity_id_from_prerequisite {
+ select activity_id,
+ item_id as activity_item_id
+ from imsld_learning_activitiesi
+ where prerequisite_id=:resource_element_id
}
- set element_flag 1
- }
- return $activity_item_id
+ return [list $activity_id $activity_item_id learning]
+ } elseif { [db_0or1row is_learning_objective { select 1 from imsld_learning_objectivesi where item_id=:resource_element_id } ] } {
+ # learning objective?
+ db_1row get_activity_id_from_objective {
+ select activity_id,
+ item_id as activity_item_id
+ from imsld_learning_activitiesi
+ where learning_objective_id=:resource_element_id
+ }
+ return [list $activity_id $activity_item_id support]
+ }
+ return -code error "IMSLD::imsld::get_activity_from_resource no activity_id found for resource"
}
ad_proc -public imsld::get_imsld_from_activity {
@@ -2509,101 +2551,82 @@
#look for the asociated activity
- set activity_id [imsld::get_activity_from_resource -resource_id $resource_id]
+ # get the activity_id, activity_item_id and activity_type
+ set activity_list [imsld::get_activity_from_resource -resource_id $resource_id]
+ set activity_id [lindex $activity_list 0]
+ set activity_item_id [lindex $activity_list 1]
+ set activity_type [lindex $activity_list 2]
-
- 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_role_part_from_activity -activity_type learning -leaf_id $activity_item_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_string check_completed_resource {
- select count(*)
- from imsld_status_user
- where completed_id=:resource_id
- }] } {
- db_transaction {
- db_dml insert_completed_resource {
- insert into imsld_status_user (
- imsld_id,
- role_part_id,
- completed_id,
- user_id,
- type,
- finished_date
- )
- (
- select :imsld_id,
- :role_part_id,
- :resource_id,
- :user_id,
- 'resource',
- now()
- )
- }
+ if { ![db_string check_completed_resource {
+ select count(*)
+ from imsld_status_user
+ where completed_id=:resource_id
+ and user_id = :user_id
+ }] } {
+ db_dml insert_completed_resource {
+ insert into imsld_status_user (
+ imsld_id,
+ role_part_id,
+ completed_id,
+ user_id,
+ type,
+ finished_date
+ )
+ (
+ select :imsld_id,
+ :role_part_id,
+ :resource_id,
+ :user_id,
+ 'resource',
+ now()
+ )
}
#find all the resouces in the same activity
- set first_resources_item_list [imsld::process_learning_activity -activity_item_id $activity_item_id -resource_mode "t"]
+ set first_resources_item_list [imsld::process_learning_activity -activity_item_id $activity_item_id -resource_mode "t"]
#only the learning_activities must be finished
- set resources_item_list [lindex $first_resources_item_list 3]
- if { [llength $resources_item_list] == 0 } {
- set resources_item_list [lindex $first_resources_item_list 2]
- }
-
- set resource_list [list]
+ set resources_item_list [lindex $first_resources_item_list 3]
+ if { [llength $resources_item_list] == 0 } {
+ set resources_item_list [lindex $first_resources_item_list 2]
+ }
+
+ set all_finished_p 1
foreach resource_item_id $resources_item_list {
foreach res_id $resource_item_id {
- db_1row get_activity_item {
- select resource_id as rid
- from imsld_cp_resourcesi
- where item_id =:res_id
+ if { ![db_0or1row resource_finished_p {
+ select 1
+ from imsld_status_user stat, imsld_cp_resourcesi icr
+ where icr.item_id = :res_id
+ and icr.resource_id = stat.completed_id
+ and user_id = :user_id
+ }] } {
+ # if the resource is not in the imsld_status_user, then the resource is not finished
+ set all_finished_p 0
+ break
}
- 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=:activity_id)=1
- then 'learning'
- when (select 1 from imsld_support_activities where activity_id=:activity_id)=1
- then 'support'
- else 'none'
- end as type
+ if { $all_finished_p } {
+ imsld::finish_component_element -imsld_id $imsld_id \
+ -role_part_id $role_part_id \
+ -element_id $activity_id \
+ -type $activity_type\
+ -code_call
}
- imsld::finish_component_element -imsld_id $imsld_id \
- -role_part_id $role_part_id \
- -element_id $activity_id \
- -type $type\
- -code_call
- }
}
-}
+}
+
ad_register_proc GET /finish-component-element* imsld::finish_component_element
ad_register_proc POST /finish-component-element* imsld::finish_component_element