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 {