Index: openacs-4/packages/assessment/tcl/as-session-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-session-procs.tcl,v diff -u -r1.13 -r1.14 --- openacs-4/packages/assessment/tcl/as-session-procs.tcl 25 Jan 2018 12:23:47 -0000 1.13 +++ openacs-4/packages/assessment/tcl/as-session-procs.tcl 3 Sep 2024 15:37:35 -0000 1.14 @@ -20,10 +20,10 @@ {-consent_timestamp ""} {-package_id ""} } { + New as_session to the database + @author Eduardo Perez (eperez@it.uc3m.es) @creation-date 2004-09-12 - - New as_session to the database } { if {$package_id eq ""} { set package_id [ad_conn package_id] @@ -33,14 +33,18 @@ # # Check to see if there's a session already to not submit another one # db_0or1row as_session_last {SELECT session_id AS as_session_id FROM as_sessionsx WHERE subject_id = :subject_id AND assessment_id = :assessment_id} -# if { ! [info exists as_session_id] } { +# if { ! [info exists as_session_id] } { # Insert as_session in the CR (and as_sessions table) getting the revision_id (session_id) set transaction_successful_p 0 while { ! $transaction_successful_p } { db_transaction { - set session_id [content::item::new -parent_id $folder_id -content_type {as_sessions} -name "$subject_id-$assessment_id-[as::item::generate_unique_name]" -title "$subject_id-$assessment_id-[as::item::generate_unique_name]" ] + set session_id [content::item::new \ + -parent_id $folder_id \ + -content_type {as_sessions} \ + -name "$subject_id-$assessment_id-[as::item::generate_unique_name]" \ + -title "$subject_id-$assessment_id-[as::item::generate_unique_name]"] set as_session_id [content::revision::new \ -item_id $session_id \ -content_type {as_sessions} \ @@ -142,22 +146,29 @@ based on how long the user took to submit the specified section @author Dave Bauer (dave@solutiongrove.com) - + @param session_id - @param section_id + @param section_id } { set last_viewed "" set last_mod_datetime "" - db_0or1row get_last_viewed "select to_char(last_viewed,'YYYY-MM-DD HH24:MI:SS') as last_viewed, to_char(last_mod_datetime, 'YYYY-MM-DD HH24:MI:SS') as last_mod_datetime from views_views, as_sessions where subject_id = viewer_id and session_id = :session_id and object_id = :section_id" + db_0or1row get_last_viewed { + select to_char(last_viewed,'YYYY-MM-DD HH24:MI:SS') as last_viewed, + to_char(last_mod_datetime, 'YYYY-MM-DD HH24:MI:SS') as last_mod_datetime + from views_views, as_sessions + where subject_id = viewer_id + and session_id = :session_id + and object_id = :section_id + } if {$last_viewed eq ""} { if {$last_mod_datetime ne ""} { set last_viewed $last_mod_datetime } else { set elapsed_seconds 600 } - } + } if {$last_viewed ne ""} { set last_seconds [clock scan $last_viewed] @@ -176,7 +187,11 @@ } - db_dml update_elapsed_time "update as_sessions set elapsed_seconds = coalesce(elapsed_seconds,0) + :elapsed_seconds where session_id = :session_id" + db_dml update_elapsed_time { + update as_sessions set + elapsed_seconds = coalesce(elapsed_seconds,0) + :elapsed_seconds + where session_id = :session_id + } as::session::call_update_callback \ -session_id $session_id return $elapsed_seconds @@ -193,7 +208,7 @@ @param mime_type text/html or text/plain @return list in array list format of html html_email text text_email } { - set html_email "[_ assessment.session_email_introduction]" + set html_email [_ assessment.session_email_introduction] # get all the results questions/answers db_multirow items session_items {} { @@ -202,7 +217,16 @@ append html_email "
${title}
\n"
switch -- $item(item_type) {
"mc" {
- set choices [db_list get_choices "select title from cr_revisions r, as_item_data d, as_item_data_choices dc where d.session_id=:session_id and d.as_item_id = :as_item_id and d.item_data_id = dc.item_data_id and dc.choice_id = revision_id"]
+ set choices [db_list get_choices {
+ select title
+ from cr_revisions r,
+ as_item_data d,
+ as_item_data_choices dc
+ where d.session_id=:session_id
+ and d.as_item_id = :as_item_id
+ and d.item_data_id = dc.item_data_id
+ and dc.choice_id = revision_id
+ }]
append html_email "CHOICE: [join $choices "
\n"]\n"
}
default {
@@ -226,19 +250,20 @@
Call session callback
@param session_id session_id to update
- @param session_ref reference to array containing session data in caller, if not specified we fill it with a query on the database
-
+ @param session_ref reference to array containing session data in
+ caller, if not specified we fill it with a
+ query on the database
} {
if {$session_ref ne ""} {
upvar $session_ref session_array
}
if {![array exists session_array]} {
-
- if {![db_0or1row get_session "
-
-select s.*, a.item_id as assessment_item_id, o.package_id from as_sessions s, as_assessmentsi a, acs_objects o where a.item_id = o.object_id and s.session_id = :session_id and a.assessment_id = s.assessment_id
-" -column_array session_array]} {
+ if {![db_0or1row get_session {
+ select s.*, a.item_id as assessment_item_id, o.package_id
+ from as_sessions s, as_assessmentsi a, acs_objects o
+ where a.item_id = o.object_id and s.session_id = :session_id and a.assessment_id = s.assessment_id
+ } -column_array session_array]} {
# if we can't find the session just return without doing anything
# there's nothing we can do from here
return
@@ -253,24 +278,24 @@
set assessment_points [db_string get_max_points "select sum(coalesce(i.points,0)) from as_items i, as_item_data d where d.session_id = :session_id and i.as_item_id = d.as_item_id" -default ""]
if {$assessment_points ne "" && $session_points ne "" && $assessment_points > 0} {
set session_array(percent_score) "[format "%3.2f" [expr {$session_points / ($assessment_points + 0.0) * 100}]]"
-}
+ }
-ns_log notice "AS SESSION CALLBACK UPDATE
+ ns_log notice "AS SESSION CALLBACK UPDATE
session_id = '${session_id}'
session_points = '${session_points}'
assessment_points = '${assessment_points}'"
- callback as::session::update \
- -assessment_id $session_array(assessment_item_id) \
- -session_id $session_array(session_id) \
- -user_id $session_array(subject_id) \
- -start_time $session_array(creation_datetime) \
- -end_time $session_array(completed_datetime) \
- -percent_score $session_array(percent_score) \
- -elapsed_time $session_array(elapsed_seconds) \
- -package_id $session_array(package_id) \
- -session_points $session_points \
- -assessment_points $assessment_points
+ callback as::session::update \
+ -assessment_id $session_array(assessment_item_id) \
+ -session_id $session_array(session_id) \
+ -user_id $session_array(subject_id) \
+ -start_time $session_array(creation_datetime) \
+ -end_time $session_array(completed_datetime) \
+ -percent_score $session_array(percent_score) \
+ -elapsed_time $session_array(elapsed_seconds) \
+ -package_id $session_array(package_id) \
+ -session_points $session_points \
+ -assessment_points $assessment_points
}
ad_proc -callback as::session::update {