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.
+} -
+