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.9 -r1.10 --- openacs-4/packages/assessment/tcl/as-session-procs.tcl 22 Feb 2008 23:42:33 -0000 1.9 +++ openacs-4/packages/assessment/tcl/as-session-procs.tcl 29 Aug 2008 19:03:52 -0000 1.10 @@ -61,6 +61,18 @@ } } # } + callback as::session::update \ + -assessment_id [content::revision::item_id -revision_id $assessment_id] \ + -session_id $as_session_id \ + -user_id $subject_id \ + -start_time $creation_datetime \ + -end_time "" \ + -percent_score "" \ + -elapsed_time "" \ + -package_id $package_id \ + -session_points "" \ + -assessment_points "" + return $as_session_id } @@ -120,4 +132,111 @@ -subject_id:required } { return [db_string unfinished_session_id {} -default ""] -} \ No newline at end of file +} + + +ad_proc as::session::response_as_email { + -session_id + {-mime_type "text/html"} +} { + Format the session results as an email + + @param session_id + @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]" + + # get all the results questions/answers + db_multirow items session_items {} { + array set default_value [as::item_data::get -subject_id $subject_id -as_item_id $as_item_id -session_id $session_id] + array set item [as::item::item_data -as_item_id $as_item_id] + 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"] + append html_email "CHOICE: [join $choices "
\n"]\n" + } + default { + append html_email "TEXT: ${default_value(text_answer)}\n" + } + } + append html_email "

\n" + } + if {$mime_type eq "text/html"} { + return $html_email + } + return [ad_html_text_convert -from text/html -to text/plain $html_email] + + +} + +ad_proc as::session::call_update_callback { + -session_id + {-session_ref ""} +} { + 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 + +} { + 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 we can't find the session just return without doing anything + # there's nothing we can do from here + return + } + } + foreach var {assessment_item_id subject_id creation_datetime completed_datetime percent_score elapsed_seconds package_id} { + if {![info exists session_array($var)]} { + set session_array($var) "" + } + } + set session_points [db_string get_session_score "select sum(coalesce(points,0)) from as_item_data where session_id=:session_id" -default ""] + 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 +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 +} + +ad_proc -callback as::session::update { + -assessment_id + -session_id + -user_id + -start_time + -end_time + -percent_score + -elapsed_time + -package_id + -session_points + -assessment_points +} { + Notify listeners that something interesting happend with this assessment session. +} - +