Index: openacs-4/packages/lorsm/www/delivery/record-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lorsm/www/delivery/record-view.tcl,v
diff -u -r1.11.2.1 -r1.11.2.2
--- openacs-4/packages/lorsm/www/delivery/record-view.tcl 8 Feb 2007 10:48:51 -0000 1.11.2.1
+++ openacs-4/packages/lorsm/www/delivery/record-view.tcl 10 Jul 2007 16:33:58 -0000 1.11.2.2
@@ -1,4 +1,5 @@
# packages/lorsm/www/delivery4/record-view.tcl
+
ad_page_contract {
records a view for this ims_cp_item and redirects to its url
@@ -9,74 +10,64 @@
@arch-tag: a7aba567-c4c1-4f1c-b5f3-ebc1ab277515
@cvs-id $Id$
} {
- item_id:notnull
- man_id:notnull
+ item_id:integer,notnull
+ man_id:integer,notnull
+ lmsfinish:integer,optional
} -properties {
} -validate {
} -errors {
}
+if { ! [info exists lmsfinish] } {
+ set lmsfinish 0
+}
set viewer_id [ad_conn user_id]
-
set views [views::record_view -object_id $item_id -viewer_id $viewer_id]
-
set ns_item_id $item_id
set revision_id $item_id
+#we check for those "escaping" sessions without doing LMSFINISH
+set currenttrackid [ad_get_client_property lorsm currenttrackid]
+set lorsmstudenttrack [ad_get_client_property lorsm studenttrack]
+set initedonpage [ad_get_client_property lorsm initedonpage]
-ad_set_client_property lorsm ims_id $item_id
-ad_set_client_property lorsm man_id $man_id
-set item_id [lorsm::delivery::get_item_id -revision_id $revision_id]
+if { $initedonpage!=0 && $initedonpage!="" } {
+ if { $lmsfinish > 0 } {
+ ns_log warning "SCORM : back to record view after lms finish, but it hasn't worked!"
+ ns_log warning "SCORM : resetting all visiting parameters."
+ ad_set_client_property lorsm studenttrack 0
+ ad_set_client_property lorsm studenttrack ""
+ ad_set_client_property lorsm currenttrackid ""
+ ad_set_client_property lorsm initedonpage ""
+ } else {
+ ad_set_client_property lorsm studenttrack 0
+ ns_log warning "SCORM : new content item with still open course ???"
+ ns_log warning "SCORM : we call for LMSFinish in place of the content!!!!!!???"
+ ad_returnredirect [export_vars -base lmsfinish {item_id man_id initedonpage} ]
+ }
+}
+#set item_id [lorsm::delivery::get_item_id -revision_id $revision_id]
+
set folder_id [lorsm::delivery::get_folder_id_from_man_id -man_id $man_id]
set lors_root [lorsm::get_root_folder_id]
set folder_name [lorsm::delivery::get_folder_name -folder_id $folder_id]
set content_root [lorsm::delivery::get_item_id_from_name_parent -name $folder_name -parent_id $lors_root]
-#ns_log notice "record-view folder_id='${folder_id}' lors_root='${lors_root}' folder_name='${folder_name}' content_root='${content_root}'"
+
if {[empty_string_p $content_root]} {
# This was uploaded with lorsm so we use the folder_id from the table
set content_root [lorsm::delivery::get_folder_id_from_man_id -man_id $man_id]
}
-#ns_log notice "record-view content_root='${content_root}'"
set url2 $folder_name
# Get the href of the item
set href [lorsm::delivery::get_href -ims_item_id $revision_id]
-# handle regular acs_object here since it's not stored in the CR
-set type [db_string get_type "select type from ims_cp_resources r, ims_cp_items_to_resources i2r where i2r.ims_item_id=:revision_id and i2r.res_id=r.res_id" -default webcontent]
-
# Get the item title
set item_title [lorsm::delivery::get_ims_item_title -ims_item_id $revision_id]
-ns_log notice "lorsm record-viw.tcl type='${type}'"
-switch -glob -- $type {
- as_sections {
- # FIXME stupidly assume that a section can only be in one assessment
- set section_item_id [string trimleft $href "/o/"]
- db_1row get_assessment_id "select ci.item_id as assessment_id, m.section_id from as_assessment_section_map m, cr_items ci, cr_items ci2 where ci.latest_revision = m.assessment_id and m.section_id=ci2.latest_revision and ci2.item_id=:section_item_id"
-# rp_form_put assessment_id $assessment_id
-# ad_return_complaint 1 "assessment_id = '${assessment_id}' section_id='${section_id}'"
- ad_returnredirect [export_vars -base ../../assessment/assessment {assessment_id {single_section_id $section_id}}]
- ad_script_abort
- }
- ::xowiki::* {
- set form [rp_getform]
- ns_set delkey $form item_id
- rp_form_put template_file view-plain
- rp_form_put __include_vars [list item_id [string trimleft $href "/o/"] css ""]
- rp_form_put __include /packages/xowiki/lib/view
- db_1row get_format "select folder_name as delivery_folder_name, isscorm from lorsm_course_presentation_formats f, ims_cp_manifests m where f.format_id=m.course_presentation_format and m.man_id=:man_id"
- if {$isscorm} {
- set delivery_folder_name delivery-scorm
- }
- rp_internal_redirect "/packages/lorsm/www/delivery/${delivery_folder_name}"
- }
- default {
set cr_item_id [lors::cr::get_item_id -folder_id $content_root -name $href]
-
-
if { [empty_string_p $cr_item_id] } {
set res_id [lorsm::delivery::get_res_id -ims_item_id $revision_id]
if { ![empty_string_p $res_id] } {
@@ -101,48 +92,182 @@
# Else deliver the page
if { ![empty_string_p $cr_item_id] } {
+ # we check if the user has access right to the item
+ #we analize now prerequisites. - the logic is identical to menu.
+ set community_id [dotlrn_community::get_community_id]
+ set user_id [ad_conn user_id]
+
+ db_1row getitemattributes "select i.parent_item,
+ i.ims_item_id,
+ i.item_title as item_title,
+ i.prerequisites_s as prerequisites,
+ cr.mime_type
+ FROM
+ acs_objects o, ims_cp_items i, cr_items ci, cr_revisions cr,
+ ims_cp_manifest_class im, ims_cp_organizations org
+ WHERE
+ o.object_type = 'ims_item_object'
+ AND
+ i.org_id = org.org_id
+ AND
+ o.object_id = i.ims_item_id
+ AND
+ im.man_id=:man_id
+ and
+ i.ims_item_id=:revision_id
+ and im.isenabled='t'
+ and im.community_id=:community_id
+ and ci.item_id=cr.item_id
+ and cr.revision_id=i.ims_item_id
+ "
+
+ #regsub -all {&} $prerequisites " " prerequisites
+ regsub -all {[\{\}]} $prerequisites "" prerequisites
+ regsub -all { & } $prerequisites " " prerequisites
+ set prerequisites_list [split $prerequisites]
+
+ foreach prer $prerequisites_list {
+ if { ! [empty_string_p $prer] } {
+ ns_log warning "MENU prerequisites for $item_id are $prer "
+ #in the following query we disregard the organization
+ if { ! [ db_0or1row givemeid "select i.ims_item_id as id_from_ref, i.item_title as id_from_ref_title
+ from
+ ims_cp_items i,
+ ims_cp_manifest_class im,
+ ims_cp_organizations o
+ WHERE
+ i.identifier=:prer
+ AND
+ o.org_id = i.org_id
+ AND
+ o.man_id = :man_id
+ AND
+ im.man_id= :man_id
+ AND
+ im.isenabled='t'
+ AND
+ im.community_id=:community_id"
+ ] } {
+ ns_log warning "RECORD_VIEW: prerequisites not found comm: $community_id, man: $man_id, item: $item_id"
+ continue
+ } else {
+ ns_log debug "RECORD_VIEW: THE REQUIRED ITEM IS $id_from_ref "
+ }
+ }
+ if { ! [empty_string_p $id_from_ref] } {
+ ns_log warning "RECORD_VIEW: prerequisites for $item_id are $id_from_ref"
+ if { ! [ db_0or1row isanysuspendedsession "
+ select lorsm.track_id as track_id, cmi.lesson_status as lex_status
+ from lorsm_student_track lorsm, lorsm_cmi_core cmi
+ where
+ lorsm.user_id = $user_id
+ and
+ lorsm.community_id = $community_id
+ and
+ lorsm.course_id = $man_id
+ and
+ lorsm.track_id = cmi.track_id
+ and
+ cmi.man_id = $man_id
+ and
+ cmi.item_id = $id_from_ref
+ order by
+ lorsm.track_id desc
+ " ] } {
+ ns_log warning "RECORD_VIEW: NOT FOUND TRACK"
+ append errormessage "Not attempted : $id_from_ref_title ($id_from_ref)"
+ append errormessage "
"
+ ns_log warning $errormessage
+ } else {
+ switch -regexp $lex_status {
+ "^passed$" { ns_log warning "ITEM ID $id_from_ref HAS A TRACK WITH $lex_status"}
+ "^completed$" { ns_log warning "ITEM ID $id_from_ref HAS A TRACK WITH $lex_status" }
+ default {
+ ns_log warning "ITEM ID $id_from_ref HAS A TRACK WITH $lex_status"
+ append errormessage "$lex_status : $id_from_ref_title ($id_from_ref)"
+ append errormessage "
"
+ ns_log warning $errormessage
+ }
+ }
+ }
+ #if found session for id_from_ref
+ }
+ #if found id_from_ref
+ }
+ #foreach close
+
+ if { [info exists errormessage] } {
+ ns_log warning $errormessage
+ append message "
+