Index: openacs-4/packages/assessment/lib/assessment.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/assessment.tcl,v diff -u -r1.32 -r1.33 --- openacs-4/packages/assessment/lib/assessment.tcl 17 Jul 2018 11:42:26 -0000 1.32 +++ openacs-4/packages/assessment/lib/assessment.tcl 17 Jul 2018 13:32:18 -0000 1.33 @@ -32,9 +32,9 @@ set url "" if { [info exists return_url] } { - + set url $return_url -} +} set return_url "$url" @@ -71,181 +71,180 @@ db_transaction { if {$session_id eq ""} { - # Check if there is an unfinished session lying around - set session_id [db_string unfinished_session_id {}] + # Check if there is an unfinished session lying around + set session_id [db_string unfinished_session_id {}] } - if {$session_id eq ""} { - # start new session - set session_id [as::session::new -assessment_id $assessment_rev_id -subject_id $user_id -package_id $assessment_package_id] - if {$assessment_data(consent_page) eq ""} { - # set the time when the subject initiated the Assessment - db_dml session_start {} - } else { - set consent_url [export_vars -base assessment-consent {assessment_id session_id password return_url next_asm single_section_id}] - } - } else { - # pick up old session - if {$section_order eq ""} { - db_1row unfinished_section_order {} - if {$section_order eq ""} { - # set consent_url [export_vars -base assessment-consent {assessment_id session_id password return_url next_asm single_section_id}] - } else { - db_1row unfinished_section_id {} - db_1row unfinished_item_order {} - if {$item_order ne ""} { - incr section_order -1 - if {$item_order eq ""} { - set item_order 0 - } else { - incr item_order -1 - } - } - } + if {$session_id eq ""} { + # start new session + set session_id [as::session::new -assessment_id $assessment_rev_id -subject_id $user_id -package_id $assessment_package_id] + if {$assessment_data(consent_page) eq ""} { + # set the time when the subject initiated the Assessment + db_dml session_start {} + } else { + set consent_url [export_vars -base assessment-consent {assessment_id session_id password return_url next_asm single_section_id}] + } + } else { + # pick up old session + if {$section_order eq ""} { + db_1row unfinished_section_order {} + if {$section_order eq ""} { + # set consent_url [export_vars -base assessment-consent {assessment_id session_id password return_url next_asm single_section_id}] + } else { + db_1row unfinished_section_id {} + db_1row unfinished_item_order {} + if {$item_order ne ""} { + incr section_order -1 + if {$item_order eq ""} { + set item_order 0 + } else { + incr item_order -1 + } + } + } + } + } - } - } - if {![info exists consent_url]} { - db_1row session_time {} - set assessment_data(elapsed_time) $elapsed_time - if {$assessment_data(time_for_response) ne ""} { - set assessment_data(time_for_response) [expr {60 * $assessment_data(time_for_response)}] - set assessment_data(pretty_remaining_time) [as::assessment::pretty_time -seconds [expr {$assessment_data(time_for_response) - $assessment_data(elapsed_time)}]] - } + db_1row session_time {} + set assessment_data(elapsed_time) $elapsed_time + if {$assessment_data(time_for_response) ne ""} { + set assessment_data(time_for_response) [expr {60 * $assessment_data(time_for_response)}] + set assessment_data(pretty_remaining_time) [as::assessment::pretty_time -seconds [expr {$assessment_data(time_for_response) - $assessment_data(elapsed_time)}]] + } - # get all sections of assessment in correct order - set section_list [as::assessment::sections -assessment_id $assessment_rev_id -session_id $session_id -sort_order_type $assessment_data(section_navigation) -random_p $assessment_data(random_p)] - if {$single_section_id eq ""} { - if {$section_order eq ""} { - # start at the first section - set section_order 0 - set section_id [lindex $section_list 0] - } else { - # continue with given section - set section_id [lindex $section_list $section_order] - # hang onto the section_id since we only want to do this one - # otherwise it'll go back to the first section. - } + # get all sections of assessment in correct order + set section_list [as::assessment::sections -assessment_id $assessment_rev_id -session_id $session_id -sort_order_type $assessment_data(section_navigation) -random_p $assessment_data(random_p)] + if {$single_section_id eq ""} { + if {$section_order eq ""} { + # start at the first section + set section_order 0 + set section_id [lindex $section_list 0] + } else { + # continue with given section + set section_id [lindex $section_list $section_order] + # hang onto the section_id since we only want to do this one + # otherwise it'll go back to the first section. + } - } else { - set section_id $single_section_id - # we check if the section order is greater than the current section, just in case we are presenting sections out of order - if {$section_order ne "" && $section_order > [lsearch $section_list $section_id]} { - # we had more than one section in the whole assessment - # but we are only doing one right now, so go to the next_url - # we need to funnel through feedback page, in case there is per page feedback. - ad_returnredirect [export_vars -base feedback {assessment_id session_id section_id return_url next_url {return_p 1} item_id_list:multiple }] - ad_script_abort - } - set section_list $single_section_id - set section_order 0 - } + } else { + set section_id $single_section_id + # we check if the section order is greater than the current section, just in case we are presenting sections out of order + if {$section_order ne "" && $section_order > [lsearch $section_list $section_id]} { + # we had more than one section in the whole assessment + # but we are only doing one right now, so go to the next_url + # we need to funnel through feedback page, in case there is per page feedback. + ad_returnredirect [export_vars -base feedback {assessment_id session_id section_id return_url next_url {return_p 1} item_id_list:multiple }] + ad_script_abort + } + set section_list $single_section_id + set section_order 0 + } - # check if we just wanted to do one section, if so go to the - # next_url - if {$section_id eq ""} { - # we had more than one section in the whole assessment - # but we are only doing one right now, so go to the next_url - ad_returnredirect $next_url - ad_script_abort - } + # check if we just wanted to do one section, if so go to the + # next_url + if {$section_id eq ""} { + # we had more than one section in the whole assessment + # but we are only doing one right now, so go to the next_url + ad_returnredirect $next_url + ad_script_abort + } - as::section_data::new -section_id $section_id -session_id $session_id -subject_id $user_id -package_id $assessment_package_id - db_1row section_data {} -column_array section - set display_type_id $section(display_type_id) - if {$display_type_id ne ""} { - db_1row display_data {} -column_array display - } else { - array set display [list num_items "" adp_chunk "" branched_p f back_button_p t submit_answer_p f sort_order_type order_of_entry] - } + as::section_data::new -section_id $section_id -session_id $session_id -subject_id $user_id -package_id $assessment_package_id + db_1row section_data {} -column_array section + set display_type_id $section(display_type_id) + if {$display_type_id ne ""} { + db_1row display_data {} -column_array display + } else { + array set display [list num_items "" adp_chunk "" branched_p f back_button_p t submit_answer_p f sort_order_type order_of_entry] + } - # get all items of section in correct order - set item_list [as::section::items -section_id $section_id -session_id $session_id -sort_order_type $display(sort_order_type) -num_items $section(num_items) -random_p $assessment_data(random_p)] - set item_id_list [list] + # get all items of section in correct order + set item_list [as::section::items -section_id $section_id -session_id $session_id -sort_order_type $display(sort_order_type) -num_items $section(num_items) -random_p $assessment_data(random_p)] + set item_id_list [list] - # get total number of items - set page_total_items [llength $item_list] - # get preference for number of display items per page - # since we are dividing here, we need to set per_page to the - # total number of questions if its an empty string or 0 - set page_display_per_page [expr {[string equal "" $display(num_items)] ? $page_total_items : $display(num_items)}] - # determine the total number of pages - set page_total [expr {$page_total_items == 0 ? 0 : $page_total_items / $page_display_per_page}] + # get total number of items + set page_total_items [llength $item_list] + # get preference for number of display items per page + # since we are dividing here, we need to set per_page to the + # total number of questions if its an empty string or 0 + set page_display_per_page [expr {[string equal "" $display(num_items)] ? $page_total_items : $display(num_items)}] + # determine the total number of pages + set page_total [expr {$page_total_items == 0 ? 0 : $page_total_items / $page_display_per_page}] - set section(num_sections) [llength $section_list] - set section(num_items) [llength $item_list] - if {$section(max_time_to_complete) ne ""} { - set section(pretty_remaining_time) [as::assessment::pretty_time -seconds [expr {$section(max_time_to_complete) - $section(elapsed_time)}]] - } + set section(num_sections) [llength $section_list] + set section(num_items) [llength $item_list] + if {$section(max_time_to_complete) ne ""} { + set section(pretty_remaining_time) [as::assessment::pretty_time -seconds [expr {$section(max_time_to_complete) - $section(elapsed_time)}]] + } - if {$item_order ne ""} { - # show next items on section page - if {$display(num_items) ne ""} { - # make sure to display correct section page - set item_order [expr {$item_order - ($item_order % $display(num_items))}] - } elseif {$display(submit_answer_p) == "t"} { - # show whole section when picking up a separate submit section - set item_order 0 - } - } + if {$item_order ne ""} { + # show next items on section page + if {$display(num_items) ne ""} { + # make sure to display correct section page + set item_order [expr {$item_order - ($item_order % $display(num_items))}] + } elseif {$display(submit_answer_p) == "t"} { + # show whole section when picking up a separate submit section + set item_order 0 + } + } - # determine on which page we are right now based on item_order - if { ![info exists item_order] || $item_order eq "" } { set item_order 0 } - # add 1 because we want to compare the 1 indexed display number - # to the current page - set current_page [expr {$item_order == 0 ? 0 : $item_order / $page_display_per_page + 1}] + # determine on which page we are right now based on item_order + if { ![info exists item_order] || $item_order eq "" } { set item_order 0 } + # add 1 because we want to compare the 1 indexed display number + # to the current page + set current_page [expr {$item_order == 0 ? 0 : $item_order / $page_display_per_page + 1}] - # strip away items on previous section pages - set item_list [lreplace $item_list 0 [expr {$item_order-1}]] + # strip away items on previous section pages + set item_list [lreplace $item_list 0 [expr {$item_order-1}]] - if {$display(num_items) ne ""} { - if {[llength $item_list] > $display(num_items)} { - # show only a few items per page - set item_list [lreplace $item_list $display(num_items) end] - # next page: more items of this section - set new_item_order $item_order - set new_section_order $section_order - if {$item_order eq ""} { - set new_item_order 0 - } - set new_item_order [expr {$new_item_order + $display(num_items)}] - } else { - # next page: next section - set new_item_order "" - set new_section_order [expr {$section_order + 1}] - } - } else { - # next page: next section - set new_section_order [expr {$section_order + 1}] - set new_item_order "" - } + if {$display(num_items) ne ""} { + if {[llength $item_list] > $display(num_items)} { + # show only a few items per page + set item_list [lreplace $item_list $display(num_items) end] + # next page: more items of this section + set new_item_order $item_order + set new_section_order $section_order + if {$item_order eq ""} { + set new_item_order 0 + } + set new_item_order [expr {$new_item_order + $display(num_items)}] + } else { + # next page: next section + set new_item_order "" + set new_section_order [expr {$section_order + 1}] + } + } else { + # next page: next section + set new_section_order [expr {$section_order + 1}] + set new_item_order "" + } - if {$new_section_order == [llength $section_list]} { - # last section - set new_section_order "" - } + if {$new_section_order == [llength $section_list]} { + # last section + set new_section_order "" + } - foreach one_item $item_list { - lappend item_id_list [lindex $one_item 0] - } + foreach one_item $item_list { + lappend item_id_list [lindex $one_item 0] + } - # let's generate the list of page numbers - # for sections with a limited number of items per page - if {$display(num_items) ne "" && $page_total > 1} { - set progress_bar_list [template::util::number_list $page_total 1] - set total_pages [llength $progress_bar_list] - } - if {![info exists show_progress]} { - set show_progress 0 - } - # if we have multiple sections - if {![info exists progress_bar_list] && [llength $section_list] > 1} { - set progress_bar_list [template::util::number_list [llength $section_list] 1] - set current_page [expr {[lsearch $section_list $section_id] +1 }] - set total_pages [llength $progress_bar_list] - } + # let's generate the list of page numbers + # for sections with a limited number of items per page + if {$display(num_items) ne "" && $page_total > 1} { + set progress_bar_list [template::util::number_list $page_total 1] + set total_pages [llength $progress_bar_list] + } + if {![info exists show_progress]} { + set show_progress 0 + } + # if we have multiple sections + if {![info exists progress_bar_list] && [llength $section_list] > 1} { + set progress_bar_list [template::util::number_list [llength $section_list] 1] + set current_page [expr {[lsearch $section_list $section_id] +1 }] + set total_pages [llength $progress_bar_list] + } } } @@ -261,71 +260,69 @@ # check if section or session time ran out if {($assessment_data(time_for_response) ne "" && $assessment_data(time_for_response) < $assessment_data(elapsed_time)) || ($section(max_time_to_complete) ne "" && $section(max_time_to_complete) < $section(elapsed_time))} { if {$assessment_data(time_for_response) eq "" || $assessment_data(time_for_response) >= $assessment_data(elapsed_time)} { - # skip to next section - set new_section_order [expr {$section_order + 1}] - set new_item_order "" - if {$new_section_order == [llength $section_list]} { - # last section - set new_section_order "" - } - # answer all remaining section items with empty string - db_transaction { - as::section::close -section_id $section_id -assessment_id $assessment_rev_id -session_id $session_id -subject_id $user_id - #immediate checks execution - as::assessment::check::eval_i_checks -session_id $session_id -section_id $section_id - set section_to_tmp [as::assessment::check::branch_checks -session_id $session_id -assessment_id $assessment_id -section_id $section_id] - if { $section_to_tmp != "f" && $section_to_tmp != "f"} { - set section_to $section_to_tmp - } - } - - + # skip to next section + set new_section_order [expr {$section_order + 1}] + set new_item_order "" + if {$new_section_order == [llength $section_list]} { + # last section + set new_section_order "" + } + # answer all remaining section items with empty string + db_transaction { + as::section::close -section_id $section_id -assessment_id $assessment_rev_id -session_id $session_id -subject_id $user_id + #immediate checks execution + as::assessment::check::eval_i_checks -session_id $session_id -section_id $section_id + set section_to_tmp [as::assessment::check::branch_checks -session_id $session_id -assessment_id $assessment_id -section_id $section_id] + if { $section_to_tmp != "f" && $section_to_tmp != "f"} { + set section_to $section_to_tmp + } + } } else { - # skip entire session - set new_section_order "" - set new_item_order "" - - db_transaction { - # answer all remaining section items with empty string - as::section::close -section_id $section_id -assessment_id $assessment_rev_id -session_id $session_id -subject_id $user_id - # immediate checks execution - as::assessment::check::eval_i_checks -session_id $session_id -section_id $section_id - set section_to_tmp [as::assessment::check::branch_checks -session_id $session_id -assessment_id $assessment_id -section_id $section_id] - if { $section_to_tmp != "f" && $section_to_tmp != "f"} { - set section_to $section_to_tmp - } + # skip entire session + set new_section_order "" + set new_item_order "" + db_transaction { + # answer all remaining section items with empty string + as::section::close -section_id $section_id -assessment_id $assessment_rev_id -session_id $session_id -subject_id $user_id + # immediate checks execution + as::assessment::check::eval_i_checks -session_id $session_id -section_id $section_id + set section_to_tmp [as::assessment::check::branch_checks -session_id $session_id -assessment_id $assessment_id -section_id $section_id] + if { $section_to_tmp != "f" && $section_to_tmp != "f"} { + set section_to $section_to_tmp + } - set section_list [lreplace $section_list 0 [expr {$section_order}]] - foreach section_id $section_list { - # skip remaining sections - as::section::skip -section_id $section_id -session_id $session_id -subject_id $user_id - } - } + + set section_list [lreplace $section_list 0 [expr {$section_order}]] + foreach section_id $section_list { + # skip remaining sections + as::section::skip -section_id $section_id -session_id $session_id -subject_id $user_id + } + } } if {$new_section_order ne ""} { - # go to next section - set section_order $new_section_order - set item_order $new_item_order -# ad_returnredirect [export_vars -base assessment {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id}] - ad_returnredirect [export_vars -base feedback {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple total_pages current_page}] - ad_script_abort + # go to next section + set section_order $new_section_order + set item_order $new_item_order + # ad_returnredirect [export_vars -base assessment {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id}] + ad_returnredirect [export_vars -base feedback {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple total_pages current_page}] + ad_script_abort } else { - # calculate session points at end of session - as::assessment::calculate -session_id $session_id -assessment_id $assessment_rev_id - db_dml session_finished {} - as::assessment::check::eval_aa_checks -session_id $session_id -assessment_id $assessment_id - # section based aa checks - as::assessment::check::eval_sa_checks -session_id $session_id -assessment_id $assessment_id + # calculate session points at end of session + as::assessment::calculate -session_id $session_id -assessment_id $assessment_rev_id + db_dml session_finished {} + as::assessment::check::eval_aa_checks -session_id $session_id -assessment_id $assessment_id + # section based aa checks + as::assessment::check::eval_sa_checks -session_id $session_id -assessment_id $assessment_id as::assessment::check::eval_m_checks -session_id $session_id -assessment_id $assessment_id - if {$assessment_data(return_url) eq ""} { - set return_url [export_vars -base finish {session_id assessment_id return_url next_asm total_pages current_page}] - } else { - set return_url $assessment_data(return_url) - } - ad_returnredirect [export_vars -base feedback {assessment_id session_id section_id return_url {return_p 1} item_id_list:multiple total_pages current_page}] - ad_script_abort + if {$assessment_data(return_url) eq ""} { + set return_url [export_vars -base finish {session_id assessment_id return_url next_asm total_pages current_page}] + } else { + set return_url $assessment_data(return_url) + } + ad_returnredirect [export_vars -base feedback {assessment_id session_id section_id return_url {return_p 1} item_id_list:multiple total_pages current_page}] + ad_script_abort } } @@ -345,120 +342,119 @@ lassign $one_item as_item_id name title description subtext required_p max_time_to_complete content_rev_id content_filename content_type as_item_type_id validate_block question_text foreach {check_expr check_message} [split $validate_block \n] { - regsub -all {%answer%} $check_expr \$response_to_item($as_item_id) check_expr - regsub -all {%answer%} [lang::util::localize $check_message] \$response_to_item($as_item_id) check_message - lappend validate_list "response_to_item.$as_item_id { $check_expr } { $check_message }" + regsub -all {%answer%} $check_expr \$response_to_item($as_item_id) check_expr + regsub -all {%answer%} [lang::util::localize $check_message] \$response_to_item($as_item_id) check_message + lappend validate_list "response_to_item.$as_item_id { $check_expr } { $check_message }" } set default_value "" set submitted_p f if {$display(submit_answer_p) != "t"} { - # no separate submit of each item - if {$assessment_data(reuse_responses_p) == "t"} { - set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -section_id $section_id] - } - set presentation_type [as::item_form::add_item_to_form -name show_item_form -session_id $session_id -section_id $section_id -item_id $as_item_id -default_value $default_value -required_p $required_p -random_p $assessment_data(random_p)] + # no separate submit of each item + if {$assessment_data(reuse_responses_p) == "t"} { + set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -section_id $section_id] + } + set presentation_type [as::item_form::add_item_to_form -name show_item_form -session_id $session_id -section_id $section_id -item_id $as_item_id -default_value $default_value -required_p $required_p -random_p $assessment_data(random_p)] if {$required_p == "t"} { # make sure that mandatory items are answered if {$presentation_type in {rbo sbo cbo}} { - lappend validate_list "response_to_item.$as_item_id {\$\{response_to_item.$as_item_id\} ne \"\" || \[ns_queryget response_to_item.${as_item_id}\.text\] ne \"\"} \"\[_ assessment.form_element_required\]\"" + lappend validate_list "response_to_item.$as_item_id {\$\{response_to_item.$as_item_id\} ne \"\" || \[ns_queryget response_to_item.${as_item_id}\.text\] ne \"\"} \"\[_ assessment.form_element_required\]\"" } else { - lappend validate_list "response_to_item.$as_item_id {\[exists_and_not_null response_to_item($as_item_id)\]} \"\[_ assessment.form_element_required\]\"" + lappend validate_list "response_to_item.$as_item_id {\[exists_and_not_null response_to_item($as_item_id)\]} \"\[_ assessment.form_element_required\]\"" } incr required_count } - } else { - # submit each item separately - set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -session_id $session_id -section_id $section_id] - if {$default_value ne ""} { - # value already submitted - set submitted_p t - set mode display - if {$required_p == "t"} { - # correct count of mandatory items not yet answered (to display next-button) - incr required_count -1 - } - } else { - # value not submitted yet. get older submitted value if necessary - set mode edit - if {$assessment_data(reuse_responses_p) == "t"} { - set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -section_id $section_id] - } - lappend unsubmitted_list $as_item_id - } - - # create separate submit form for each item - ad_form -name show_item_form_$as_item_id -mode $mode -action assessment -html {enctype multipart/form-data} -export {assessment_id section_id section_order item_order password return_url next_asm} -form { - {session_id:text(hidden) {value $session_id}} - {item_id:text(hidden) {value $as_item_id}} - } - set presentation_type [as::item_form::add_item_to_form -name show_item_form_$as_item_id -session_id $session_id -section_id $section_id -item_id $as_item_id -default_value $default_value -required_p $required_p] + # submit each item separately + set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -session_id $session_id -section_id $section_id] + if {$default_value ne ""} { + # value already submitted + set submitted_p t + set mode display + if {$required_p == "t"} { + # correct count of mandatory items not yet answered (to display next-button) + incr required_count -1 + } + } else { + # value not submitted yet. get older submitted value if necessary + set mode edit + if {$assessment_data(reuse_responses_p) == "t"} { + set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -section_id $section_id] + } + lappend unsubmitted_list $as_item_id + } + + # create separate submit form for each item + ad_form -name show_item_form_$as_item_id -mode $mode -action assessment -html {enctype multipart/form-data} -export {assessment_id section_id section_order item_order password return_url next_asm} -form { + {session_id:text(hidden) {value $session_id}} + {item_id:text(hidden) {value $as_item_id}} + } + set presentation_type [as::item_form::add_item_to_form -name show_item_form_$as_item_id -session_id $session_id -section_id $section_id -item_id $as_item_id -default_value $default_value -required_p $required_p] if {$required_p == "t"} { # make sure that mandatory items are answered if {$presentation_type in {rbo sbo cbo}} { - lappend validate_list "response_to_item.$as_item_id {\[exists_and_not_null response_to_item($as_item_id)\] || \[exists_and_not_null response_to_item($as_item_id)\.text\]} \"\[_ assessment.form_element_required\]\"" + lappend validate_list "response_to_item.$as_item_id {\[exists_and_not_null response_to_item($as_item_id)\] || \[exists_and_not_null response_to_item($as_item_id)\.text\]} \"\[_ assessment.form_element_required\]\"" } else { - lappend validate_list "response_to_item.$as_item_id {\[exists_and_not_null response_to_item($as_item_id)\]} \"\[_ assessment.form_element_required\]\"" + lappend validate_list "response_to_item.$as_item_id {\[exists_and_not_null response_to_item($as_item_id)\]} \"\[_ assessment.form_element_required\]\"" } incr required_count } - - # process single submit - set on_submit "{ - db_transaction { - db_dml session_updated {} - # save answer - set response_item_id \$item_id - - db_1row process_item_type {} - set item_type \[string range \$item_type end-1 end\] - if {!\[info exists response_to_item(\$response_item_id)\]} { - set response_to_item(\$response_item_id) \"\" - } else { - set section_to_tmp \[as::assessment::check::branch_checks -session_id $session_id -assessment_id $assessment_id\ -section_id $section_id] - if { \$section_to_tmp != \"f\" && \$section_to_tmp != \"f\"} { - set section_to \$section_to_tmp + # process single submit + set on_submit "{ + db_transaction { + db_dml session_updated {} + # save answer + set response_item_id \$item_id + + db_1row process_item_type {} + set item_type \[string range \$item_type end-1 end\] + if {!\[info exists response_to_item(\$response_item_id)\]} { + set response_to_item(\$response_item_id) \"\" + } else { + + set section_to_tmp \[as::assessment::check::branch_checks -session_id $session_id -assessment_id $assessment_id\ -section_id $section_id] + if { \$section_to_tmp != \"f\" && \$section_to_tmp != \"f\"} { + set section_to \$section_to_tmp } } - - set points \[ad_decode \$points \"\" 0 \$points\] + set points \[ad_decode \$points \"\" 0 \$points\] + set response \$response_to_item(\$response_item_id) if { \$item_type == \"fu\" } { set response \[list \$response_to_item(\$response_item_id) \$response_to_item(\${response_item_id}.tmpfile) \$response_to_item(\${response_item_id}.content-type)\] } - as::item_type_\$item_type\\::process -type_id \$item_type_id -session_id \$session_id -as_item_id \$response_item_id -section_id \$section_id -subject_id \$user_id -response \$response -max_points \$points -allow_overwrite_p \$display(back_button_p) -package_id \$assessment_package_id - } - }" - set after_submit "{ - -\# ad_returnredirect \[export_vars -base assessment {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id}\] - ad_returnredirect \[export_vars -base feedback {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id total_pages current_page}\] - ad_script_abort - }" - - eval ad_form -extend -name show_item_form_$as_item_id -validate "{$validate_list}" -on_submit $on_submit -after_submit $after_submit - set validate_list [list] + as::item_type_\$item_type\\::process -type_id \$item_type_id -session_id \$session_id -as_item_id \$response_item_id -section_id \$section_id -subject_id \$user_id -response \$response -max_points \$points -allow_overwrite_p \$display(back_button_p) -package_id \$assessment_package_id + } + }" + set after_submit "{ + + \# ad_returnredirect \[export_vars -base assessment {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id}\] + ad_returnredirect \[export_vars -base feedback {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id total_pages current_page}\] + ad_script_abort + }" + + eval ad_form -extend -name show_item_form_$as_item_id -validate "{$validate_list}" -on_submit $on_submit -after_submit $after_submit + set validate_list [list] } - + # Fill in the blank item. Replace all that appear in the title by an of type="text" if {$presentation_type == {tb}} { - regsub -all -line -nocase -- {