Index: openacs-4/packages/assessment/tcl/as-item-data-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-item-data-procs.tcl,v diff -u -r1.9 -r1.9.2.1 --- openacs-4/packages/assessment/tcl/as-item-data-procs.tcl 21 Feb 2005 14:32:56 -0000 1.9 +++ openacs-4/packages/assessment/tcl/as-item-data-procs.tcl 31 Jan 2006 22:11:24 -0000 1.9.2.1 @@ -35,43 +35,51 @@ set new_p 1 # Insert as_item_data in the CR (and as_item_data table) getting the revision_id (item_data_id) - db_transaction { - if {[db_0or1row old_item_id {}]} { - if {$allow_overwrite_p == "f"} { - return + set transaction_successful_p 0 + + while { ! $transaction_successful_p } { + db_transaction { + if {[db_0or1row old_item_id {}]} { + if {$allow_overwrite_p == "f"} { + return + } + set new_p 0 + } else { + set item_data_id [content::item::new -parent_id $folder_id -content_type {as_item_data} -name $name] } - set new_p 0 - } else { - set item_data_id [content::item::new -parent_id $folder_id -content_type {as_item_data} -name $name] - } - set as_item_data_id [content::revision::new \ - -item_id $item_data_id \ - -content_type {as_item_data} \ - -title $name \ - -attributes [list [list session_id $session_id] \ - [list subject_id $subject_id] \ - [list staff_id $staff_id] \ - [list as_item_id $as_item_id] \ - [list section_id $section_id] \ - [list boolean_answer $boolean_answer] \ - [list clob_answer $clob_answer] \ - [list numeric_answer $numeric_answer] \ - [list integer_answer $integer_answer] \ - [list text_answer $text_answer] \ - [list timestamp_answer $timestamp_answer] \ - [list content_answer $content_answer] \ - [list signed_data $signed_data] \ - [list points $points ] ] ] + set as_item_data_id [content::revision::new \ + -item_id $item_data_id \ + -content_type {as_item_data} \ + -title $name \ + -attributes [list [list session_id $session_id] \ + [list subject_id $subject_id] \ + [list staff_id $staff_id] \ + [list as_item_id $as_item_id] \ + [list section_id $section_id] \ + [list boolean_answer $boolean_answer] \ + [list clob_answer $clob_answer] \ + [list numeric_answer $numeric_answer] \ + [list integer_answer $integer_answer] \ + [list text_answer $text_answer] \ + [list timestamp_answer $timestamp_answer] \ + [list content_answer $content_answer] \ + [list signed_data $signed_data] \ + [list points $points ] ] ] - foreach choice_id $choice_answer { - db_dml save_choice_answer {} - } + foreach choice_id $choice_answer { + db_dml save_choice_answer {} + } - if {$new_p} { - db_dml insert_session_map {} - } else { - db_dml update_session_map {} + if {$new_p} { + db_dml insert_session_map {} + } else { + db_dml update_session_map {} + } + + set transaction_successful_p 1 + } on_error { + ns_log notice "as::item_data::new: Transaction Error: $errmsg" } } 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.3.2.1 -r1.3.2.2 --- openacs-4/packages/assessment/tcl/as-session-procs.tcl 31 May 2005 23:13:01 -0000 1.3.2.1 +++ openacs-4/packages/assessment/tcl/as-session-procs.tcl 31 Jan 2006 22:11:24 -0000 1.3.2.2 @@ -31,21 +31,31 @@ # 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] } { # Insert as_session in the CR (and as_sessions table) getting the revision_id (session_id) - 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} \ - -title "$subject_id-$assessment_id-[as::item::generate_unique_name]" \ - -attributes [list [list assessment_id $assessment_id] \ - [list subject_id $subject_id] \ - [list staff_id $staff_id] \ - [list target_datetime $target_datetime] \ - [list creation_datetime $creation_datetime] \ - [list first_mod_datetime $first_mod_datetime] \ - [list last_mod_datetime $last_mod_datetime] \ - [list completed_datetime $completed_datetime] \ - [list percent_score $percent_score] \ - [list consent_timestamp $consent_timestamp] ] ] + + 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 as_session_id [content::revision::new \ + -item_id $session_id \ + -content_type {as_sessions} \ + -title "$subject_id-$assessment_id-[as::item::generate_unique_name]" \ + -attributes [list [list assessment_id $assessment_id] \ + [list subject_id $subject_id] \ + [list staff_id $staff_id] \ + [list target_datetime $target_datetime] \ + [list creation_datetime $creation_datetime] \ + [list first_mod_datetime $first_mod_datetime] \ + [list last_mod_datetime $last_mod_datetime] \ + [list completed_datetime $completed_datetime] \ + [list percent_score $percent_score] \ + [list consent_timestamp $consent_timestamp] ] ] + set transaction_successful_p 1 + } on_error { + ns_log notice "as::session::new: Transaction Error: $errmsg" + } + } # } return $as_session_id } Index: openacs-4/packages/assessment/tcl/as-session-results-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-session-results-procs.tcl,v diff -u -r1.1.2.1 -r1.1.2.2 --- openacs-4/packages/assessment/tcl/as-session-results-procs.tcl 31 May 2005 23:13:01 -0000 1.1.2.1 +++ openacs-4/packages/assessment/tcl/as-session-results-procs.tcl 31 Jan 2006 22:11:24 -0000 1.1.2.2 @@ -21,17 +21,24 @@ set folder_id [as::assessment::folder_id -package_id $package_id] # Insert as_session_results in the CR (and as_session_results table) getting the revision_id - db_transaction { - if {![db_0or1row result_exists {}]} { - set result_item_id [content::item::new -parent_id $folder_id -content_type {as_session_results} -name [as::item::generate_unique_name]] + set transaction_successful_p 0 + + while { ! $transaction_successful_p } { + db_transaction { + if {![db_0or1row result_exists {}]} { + set result_item_id [content::item::new -parent_id $folder_id -content_type {as_session_results} -name [as::item::generate_unique_name]] } - set result_id [content::revision::new \ - -item_id $result_item_id \ - -content_type {as_session_results} \ - -title $title \ - -description $description \ - -attributes [list [list target_id $target_id] \ - [list points $points] ] ] + set result_id [content::revision::new \ + -item_id $result_item_id \ + -content_type {as_session_results} \ + -title $title \ + -description $description \ + -attributes [list [list target_id $target_id] \ + [list points $points] ] ] + set transaction_successful_p 1 + } on_error { + ns_log notice "as::session_results::new: Transaction Error: $errmsg" + } } return $result_id