Index: openacs-4/packages/assessment/www/asm-admin/item-add-mc-choices.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-add-mc-choices.tcl,v diff -u -N -r1.13 -r1.14 --- openacs-4/packages/assessment/www/asm-admin/item-add-mc-choices.tcl 7 Aug 2017 23:48:04 -0000 1.13 +++ openacs-4/packages/assessment/www/asm-admin/item-add-mc-choices.tcl 25 Apr 2018 09:26:33 -0000 1.14 @@ -57,65 +57,63 @@ set folder_id [as::assessment::folder_id -package_id $package_id] db_transaction { - set count 0 - foreach choice_id [array names feedback] { - set feedback_text $feedback($choice_id) - set selected_p [ad_decode [info exists selected($choice_id)] 0 f t] - set percent_score $percent($choice_id) - set fixed_position $fixed_pos($choice_id) - set answer_value $answer_val($choice_id) + set count 0 + foreach choice_id [array names feedback] { + set feedback_text $feedback($choice_id) + set selected_p [ad_decode [info exists selected($choice_id)] 0 f t] + set percent_score $percent($choice_id) + set fixed_position $fixed_pos($choice_id) + set answer_value $answer_val($choice_id) - eval set content "\$content_$choice_id" - if {$content ne ""} { - set filename [lindex $content 0] - set tmp_filename [lindex $content 1] - set file_mimetype [lindex $content 2] - set n_bytes [file size $tmp_filename] + eval set content "\$content_$choice_id" + if {$content ne ""} { + lassign $content filename tmp_filename file_mimetype + set n_bytes [file size $tmp_filename] - if { $n_bytes > $max_file_size && $max_file_size > 0 } { - ad_return_complaint 1 "[_ assessment.file_too_large]" - return - } - if { $n_bytes == 0 } { - ad_return_complaint 1 "[_ assessment.file_zero_size]" - return - } - set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] - } else { - set content_rev_id "" - } + if { $n_bytes > $max_file_size && $max_file_size > 0 } { + ad_return_complaint 1 "[_ assessment.file_too_large]" + return + } + if { $n_bytes == 0 } { + ad_return_complaint 1 "[_ assessment.file_zero_size]" + return + } + set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] + } else { + set content_rev_id "" + } - db_dml update_choice_data {} - } + db_dml update_choice_data {} + } } ad_returnredirect [export_vars -base "item-add-display-$display_type" {assessment_id section_id as_item_id after}] ad_script_abort } db_foreach get_choices {} { if {$correct_answer_p == "t"} { - append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" + append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" } else { - append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" + append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" } append ad_form_code "\{selected.$choice_id:text(checkbox),optional \{label \"[_ assessment.Default_Selected]\"\} \{options \$selected_options\} \{help_text \"[_ assessment.Default_Selected_help]\"\}\}\n" append ad_form_code "\{fixed_pos.$choice_id:text,optional,nospell \{label \"[_ assessment.Fixed_Position]\"\} \{html \{size 5 maxlength 5\}\} \{help_text \"[_ assessment.choice_Fixed_Position_help]\"\}\}\n" append ad_form_code "\{answer_val.$choice_id:text,optional,nospell \{label \"[_ assessment.Answer_Value]\"\} \{html \{size 80 maxlength 500\}\} \{help_text \"[_ assessment.Answer_Value_help]\"\}\}\n" append ad_form_code "\{content_$choice_id:file,optional \{label \"[_ assessment.choice_Content]\"\} \{help_text \"[_ assessment.choice_Content_help]\"\}\}\n" append ad_form_code "\{feedback.$choice_id:text(textarea),optional,nospell \{label \"[_ assessment.Feedback]\"\} \{html \{rows 8 cols 80\}\} \{help_text \"[_ assessment.choice_Feedback_help]\"\}\}\n" if {$correct_answer_p == "t"} { - set default_percent "\$percentage" - incr count_correct + set default_percent "\$percentage" + incr count_correct } else { - set default_percent 0 + set default_percent 0 } append ad_form_code "\{percent.$choice_id:text,nospell \{label \"[_ assessment.Percent_Score]\"\} \{value \"$default_percent\"\} \{html \{size 5 maxlength 5\}\} \{help_text \"[_ assessment.Percent_Score_help]\"\}\}\n" } append ad_form_code "\}" # Check if we have at least one correct answer. If not set the percentage to 0 # (apparently the author does not want the respondee to give a correct answer. - + if {$count_correct > 0} { set percentage [expr {100 / $count_correct}] } else { @@ -133,36 +131,34 @@ set folder_id [as::assessment::folder_id -package_id $package_id] db_transaction { - set count 0 - foreach choice_id [array names feedback] { - set feedback_text $feedback($choice_id) - set selected_p [ad_decode [info exists selected($choice_id)] 0 f t] - set percent_score $percent($choice_id) - set fixed_position $fixed_pos($choice_id) - set answer_value $answer_val($choice_id) + set count 0 + foreach choice_id [array names feedback] { + set feedback_text $feedback($choice_id) + set selected_p [ad_decode [info exists selected($choice_id)] 0 f t] + set percent_score $percent($choice_id) + set fixed_position $fixed_pos($choice_id) + set answer_value $answer_val($choice_id) - eval set content "\$content_$choice_id" - if {$content ne ""} { - set filename [lindex $content 0] - set tmp_filename [lindex $content 1] - set file_mimetype [lindex $content 2] - set n_bytes [file size $tmp_filename] + eval set content "\$content_$choice_id" + if {$content ne ""} { + lassign $content filename tmp_filename file_mimetype + set n_bytes [file size $tmp_filename] - if { $n_bytes > $max_file_size && $max_file_size > 0 } { - ad_return_complaint 1 "[_ assessment.file_too_large]" - return - } - if { $n_bytes == 0 } { - ad_return_complaint 1 "[_ assessment.file_zero_size]" - return - } - set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] - } else { - set content_rev_id "" - } + if { $n_bytes > $max_file_size && $max_file_size > 0 } { + ad_return_complaint 1 "[_ assessment.file_too_large]" + return + } + if { $n_bytes == 0 } { + ad_return_complaint 1 "[_ assessment.file_zero_size]" + return + } + set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] + } else { + set content_rev_id "" + } - db_dml update_choice_data {} - } + db_dml update_choice_data {} + } } } -after_submit { # now go to display-type specific form (i.e. textbox) Index: openacs-4/packages/assessment/www/asm-admin/item-add.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-add.tcl,v diff -u -N -r1.25 -r1.26 --- openacs-4/packages/assessment/www/asm-admin/item-add.tcl 7 Aug 2017 23:48:04 -0000 1.25 +++ openacs-4/packages/assessment/www/asm-admin/item-add.tcl 25 Apr 2018 09:26:33 -0000 1.26 @@ -91,20 +91,20 @@ {points:text(hidden),optional {value ""}} {data_type:text(hidden),optional {value ""}} {validate_block:text(textarea),optional \ - {label "[_ assessment.Validation_Block]"} \ - {help_text "[_ assessment.lt_This_field_is_used_to]"} \ - {html {cols 70 rows 6}}} + {label "[_ assessment.Validation_Block]"} \ + {help_text "[_ assessment.lt_This_field_is_used_to]"} \ + {html {cols 70 rows 6}}} } } if { $type ne "survey"} { #ad_form -extend -name item-add -form { # {data_type:text(select) {label "[_ assessment.Data_Type]"} {options $data_types} {help_text "[_ assessment.Data_Type_help]"}}} -} +} ad_form -extend -name item-add -form { {item_type:text(radio) {label "[_ assessment.Item_Type]"} {options $item_types} {help_text "[_ assessment.Item_Type_help]"}} - # {validate_block:text(textarea),optional {label "[_ assessment.Validation_Block]"} {help_text "[_ assessment.lt_This_field_is_used_to]"} {html {cols 70 rows 6}}} + # {validate_block:text(textarea),optional {label "[_ assessment.Validation_Block]"} {help_text "[_ assessment.lt_This_field_is_used_to]"} {html {cols 70 rows 6}}} {num_choices:text(hidden)} } @@ -117,30 +117,30 @@ if {[llength $choice_sets]} { set choice_sets [concat [list [list "--" ""]] $choice_sets] ad_form -extend -name item-add -form { - {add_existing_mc_id:text(select),optional {label "[_ assessment.Choice_Sets]"} {options $choice_sets} {help_text "[_ assessment.Choice_Sets_help]"}} + {add_existing_mc_id:text(select),optional {label "[_ assessment.Choice_Sets]"} {options $choice_sets} {help_text "[_ assessment.Choice_Sets_help]"}} } } else { ad_form -extend -name item-add -form { - {add_existing_mc_id:text(hidden),optional} + {add_existing_mc_id:text(hidden),optional} } } ad_form -extend -name item-add -form { - {save_answer_set:text(checkbox),optional + {save_answer_set:text(checkbox),optional {options {{"#assessment.Save_this_set_of_answers_for_reuse_later#" t}}} } {formbutton_add_another_choice:text(submit) {label "[_ assessment.Add_another_choice]"}} } if {[template::form::is_submission item-add] \ - && [template::element::get_value item-add formbutton_add_another_choice] \ - eq [_ assessment.Add_another_choice]} { + && [template::element::get_value item-add formbutton_add_another_choice] \ + eq [_ assessment.Add_another_choice]} { set num_choices [element::get_value item-add num_choices] incr num_choices element::set_value item-add num_choices $num_choices -} +} if {![template::form::is_submission item-add] \ - && ![info exists num_choices]} { + && ![info exists num_choices]} { set num_choices 5 } else { set num_choices [template::element::get_value item-add num_choices] @@ -185,171 +185,169 @@ } -on_submit { set category_ids [category::ad_form::get_categories -container_object_id $package_id] if {$points eq ""} { - set points 0 + set points 0 } if {(![info exists formbutton_add_another_choice] || $formbutton_add_another_choice eq "")} { # map display types to data types switch -exact $item_type { sa { - set data_type "varchar" - set display_type "tb" + set data_type "varchar" + set display_type "tb" } oq { - set data_type "text" - set display_type "ta" + set data_type "text" + set display_type "ta" } mc { - set data_type "varchar" - set display_type "rb" + set data_type "varchar" + set display_type "rb" } ms { #multiple select is just multiple choice with checkboxes - set item_type "mc" - set data_type "varchar" - set display_type "cb" + set item_type "mc" + set data_type "varchar" + set display_type "cb" } fu { - set data_type "file" - set display_type "fu" + set data_type "file" + set display_type "fu" } } set question_text [template::util::richtext::get_property content $question_text] set feedback_right [template::util::richtext::get_property content $feedback_right] set feedback_wrong [template::util::richtext::get_property content $feedback_wrong] db_transaction { - if {![db_0or1row item_exists {}]} { + if {![db_0or1row item_exists {}]} { - set as_item_id [as::item::new \ - -item_item_id $as_item_id \ - -title $question_text \ - -description $description \ - -field_name $field_name \ - -field_code $field_code \ - -required_p $required_p \ - -data_type $data_type \ - -feedback_right $feedback_right \ - -feedback_wrong $feedback_wrong \ - -max_time_to_complete $max_time_to_complete \ - -points $points \ - -validate_block $validate_block] - } else { - set as_item_id [as::item::edit \ - -as_item_id $as_item_id \ - -title $question_text \ - -description $description \ - -field_name $field_name \ - -field_code $field_code \ - -required_p $required_p \ - -data_type $data_type \ - -feedback_right $feedback_right \ - -feedback_wrong $feedback_wrong \ - -max_time_to_complete $max_time_to_complete \ - -points $points \ - -validate_block $validate_block] + set as_item_id [as::item::new \ + -item_item_id $as_item_id \ + -title $question_text \ + -description $description \ + -field_name $field_name \ + -field_code $field_code \ + -required_p $required_p \ + -data_type $data_type \ + -feedback_right $feedback_right \ + -feedback_wrong $feedback_wrong \ + -max_time_to_complete $max_time_to_complete \ + -points $points \ + -validate_block $validate_block] + } else { + set as_item_id [as::item::edit \ + -as_item_id $as_item_id \ + -title $question_text \ + -description $description \ + -field_name $field_name \ + -field_code $field_code \ + -required_p $required_p \ + -data_type $data_type \ + -feedback_right $feedback_right \ + -feedback_wrong $feedback_wrong \ + -max_time_to_complete $max_time_to_complete \ + -points $points \ + -validate_block $validate_block] - db_dml delete_files {} - } + db_dml delete_files {} + } - if {([info exists category_ids] && $category_ids ne "")} { - category::map_object -object_id $as_item_id $category_ids - } + if {([info exists category_ids] && $category_ids ne "")} { + category::map_object -object_id $as_item_id $category_ids + } - if {$content ne ""} { - set filename [lindex $content 0] - set tmp_filename [lindex $content 1] - set file_mimetype [lindex $content 2] - set n_bytes [file size $tmp_filename] - set max_file_size 10000000 - # [parameter::get -parameter MaxAttachmentSize] - set pretty_max_size [util_commify_number $max_file_size] + if {$content ne ""} { + lassign $content filename tmp_filename file_mimetype + set n_bytes [file size $tmp_filename] + set max_file_size 10000000 + # [parameter::get -parameter MaxAttachmentSize] + set pretty_max_size [util_commify_number $max_file_size] - if { $n_bytes > $max_file_size && $max_file_size > 0 } { - ad_return_complaint 1 "[_ assessment.file_too_large]" - return - } - if { $n_bytes == 0 } { - ad_return_complaint 1 "[_ assessment.file_zero_size]" - return - } + if { $n_bytes > $max_file_size && $max_file_size > 0 } { + ad_return_complaint 1 "[_ assessment.file_too_large]" + return + } + if { $n_bytes == 0 } { + ad_return_complaint 1 "[_ assessment.file_zero_size]" + return + } - set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] - as::item_rels::new -item_rev_id $as_item_id -target_rev_id $content_rev_id -type as_item_content_rel - } + set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] + as::item_rels::new -item_rev_id $as_item_id -target_rev_id $content_rev_id -type as_item_content_rel + } # check question type - set title [string range $question_text 0 999] + set title [string range $question_text 0 999] switch -exact $item_type { mc { - # title for MC is the name of a saved answer set - # always set to empty on a new question and - # ask for the title separately in save-answer-set page + # title for MC is the name of a saved answer set + # always set to empty on a new question and + # ask for the title separately in save-answer-set page set new_mc_id [as::item_type_mc::add_to_assessment \ - -assessment_id $assessment_id \ - -section_id $section_id \ - -as_item_id $as_item_id \ - -choices [array get choice] \ - -correct_choices [array get correct] \ - -after $after \ - -title "" \ - -display_type $display_type] + -assessment_id $assessment_id \ + -section_id $section_id \ + -as_item_id $as_item_id \ + -choices [array get choice] \ + -correct_choices [array get correct] \ + -after $after \ + -title "" \ + -display_type $display_type] - if {[info exists add_existing_mc_id] && $add_existing_mc_id ne ""} { - set add_existing_mc_id [as::item_type_mc::copy -type_id $add_existing_mc_id -copy_correct_answer_p "f" -new_title ""] - if {![db_0or1row item_type {}] || $object_type ne "as_item_type_mc"} { - if {![info exists object_type]} { - # first item type mapped - as::item_rels::new -item_rev_id $as_item_id -target_rev_id $add_existing_mc_id -type as_item_type_rel - } else { - # old item type existing - db_dml update_item_type {} - } - } else { - # old mc item type existing - db_dml update_item_type {} - } - } - } + if {[info exists add_existing_mc_id] && $add_existing_mc_id ne ""} { + set add_existing_mc_id [as::item_type_mc::copy -type_id $add_existing_mc_id -copy_correct_answer_p "f" -new_title ""] + if {![db_0or1row item_type {}] || $object_type ne "as_item_type_mc"} { + if {![info exists object_type]} { + # first item type mapped + as::item_rels::new -item_rev_id $as_item_id -target_rev_id $add_existing_mc_id -type as_item_type_rel + } else { + # old item type existing + db_dml update_item_type {} + } + } else { + # old mc item type existing + db_dml update_item_type {} + } + } + } oq { as::item_type_oq::add_to_assessment \ -assessment_id $assessment_id \ -section_id $section_id \ -as_item_id $as_item_id \ -after $after \ - -title $title + -title $title } sa { as::item_type_sa::add_to_assessment \ -assessment_id $assessment_id \ -section_id $section_id \ -as_item_id $as_item_id \ -after $after \ - -title $title + -title $title } fu { as::item_type_fu::add_to_assessment \ -assessment_id $assessment_id \ -section_id $section_id \ -as_item_id $as_item_id \ -after $after \ - -title $title + -title $title } } } } } -after_submit { if {(![info exists formbutton_add_another_question] || $formbutton_add_another_question eq "") \ - && (![info exists formbutton_add_another_choice] || $formbutton_add_another_choice eq "")} { - set return_url "[export_vars -base questions {assessment_id}]\&#Q$as_item_id" + && (![info exists formbutton_add_another_choice] || $formbutton_add_another_choice eq "")} { + set return_url "[export_vars -base questions {assessment_id}]\&#Q$as_item_id" } elseif {([info exists formbutton_add_another_question] && $formbutton_add_another_question ne "")} { - set after [expr {$after + 1}] - set return_url "[export_vars -base item-add {after assessment_id section_id}]\#Q$as_item_id" + set after [expr {$after + 1}] + set return_url "[export_vars -base item-add {after assessment_id section_id}]\#Q$as_item_id" } if {[info exists return_url] && $return_url ne ""} { - if {[info exists save_answer_set] && $save_answer_set eq "on" && (![info exists add_existing_mc_id] || $add_existing_mc_id eq "")} { - set return_url [export_vars -base save-answer-set {assessment_id as_item_id return_url {mc_id $new_mc_id}}] - } - ad_returnredirect $return_url - ad_script_abort + if {[info exists save_answer_set] && $save_answer_set eq "on" && (![info exists add_existing_mc_id] || $add_existing_mc_id eq "")} { + set return_url [export_vars -base save-answer-set {assessment_id as_item_id return_url {mc_id $new_mc_id}}] + } + ad_returnredirect $return_url + ad_script_abort } } Index: openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl,v diff -u -N -r1.24 -r1.25 --- openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl 30 Sep 2017 18:12:52 -0000 1.24 +++ openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl 25 Apr 2018 09:26:33 -0000 1.25 @@ -46,24 +46,24 @@ set display_type [string range [db_string get_display_type {}] end-1 end] if { $item_type eq "mc" } { - ad_form -extend -name item_edit_general -form { - {display_type:text(radio),optional - {label "[_ assessment.singleanswermultipleanswer]"} - {options {{"[_ assessment.item_type_mc]" "rb"} {"[_ assessment.item_type_ms]" "cb"}}} - } + ad_form -extend -name item_edit_general -form { + {display_type:text(radio),optional + {label "[_ assessment.singleanswermultipleanswer]"} + {options {{"[_ assessment.item_type_mc]" "rb"} {"[_ assessment.item_type_ms]" "cb"}}} + } } } else { - ad_form -extend -name item_edit_general -form { - {display_type:text(hidden),optional} - } + ad_form -extend -name item_edit_general -form { + {display_type:text(hidden),optional} + } } set display_types [list] foreach display_type [db_list display_types {}] { lappend display_types [list "[_ assessment.item_display_$display_type]" $display_type] } -if { $type ne "survey"} { +if { $type ne "survey"} { ad_form -extend -name item_edit_general -form { {points:float,optional,nospell {label "[_ assessment.points_item]"} {html {size 10 maxlength 10}} {help_text "[_ assessment.points_item_help]"}} {feedback_right:richtext,optional,nospell {label "[_ assessment.Feedback_right]"} {html {rows 12 cols 80 style {width:95%}}} {help_text "[_ assessment.Feedback_right_help]"}} @@ -92,127 +92,127 @@ switch -- $item_type { "mc" { - set folder_id [as::assessment::folder_id -package_id $package_id] - set choice_sets [list [list "--" ""]] -db_foreach existing_choice_sets {} { - set set_title [string trim [regsub {\[.*?\]} [ad_html_to_text -- $title] {}]] - lappend choice_sets [list [expr {$set_title eq "" ? $section_title : $set_title}] $revision_id] -} -if {[llength $choice_sets]} { - ad_form -extend -name item_edit_general -form { - {add_existing_mc_id:text(select),optional {label "[_ assessment.Choice_Sets]"} {options $choice_sets} {help_text "[_ assessment.Choice_Sets_help]"}} - } -} else { - ad_form -extend -name item_edit_general -form { - {add_existing_mc_id:text(hidden),optional} - } -} - ad_form -extend -name item_edit_general -form { - {num_choices:text(hidden)} - {save_answer_set:text(checkbox),optional {label "[_ assessment.Save_this_set_of_answers_for_reuse_later]"} {options {{"" t}}}} - {add_another_choice:text(submit) {label "[_ assessment.Add_another_choice]"}} - } -ns_log notice "Add Another = '[template::element::get_value item_edit_general add_another_choice]' == '[_ assessment.Add_another_choice]'" - if {[template::form::is_submission item_edit_general] \ + set folder_id [as::assessment::folder_id -package_id $package_id] + set choice_sets [list [list "--" ""]] + db_foreach existing_choice_sets {} { + set set_title [string trim [regsub {\[.*?\]} [ad_html_to_text -- $title] {}]] + lappend choice_sets [list [expr {$set_title eq "" ? $section_title : $set_title}] $revision_id] + } + if {[llength $choice_sets]} { + ad_form -extend -name item_edit_general -form { + {add_existing_mc_id:text(select),optional {label "[_ assessment.Choice_Sets]"} {options $choice_sets} {help_text "[_ assessment.Choice_Sets_help]"}} + } + } else { + ad_form -extend -name item_edit_general -form { + {add_existing_mc_id:text(hidden),optional} + } + } + ad_form -extend -name item_edit_general -form { + {num_choices:text(hidden)} + {save_answer_set:text(checkbox),optional {label "[_ assessment.Save_this_set_of_answers_for_reuse_later]"} {options {{"" t}}}} + {add_another_choice:text(submit) {label "[_ assessment.Add_another_choice]"}} + } + ns_log notice "Add Another = '[template::element::get_value item_edit_general add_another_choice]' == '[_ assessment.Add_another_choice]'" + if {[template::form::is_submission item_edit_general] \ && [template::element::get_value item_edit_general add_another_choice] eq [_ assessment.Add_another_choice]} { - set num_choices [element::get_value item_edit_general num_choices] - incr num_choices - element::set_value item_edit_general num_choices $num_choices - } + set num_choices [element::get_value item_edit_general num_choices] + incr num_choices + element::set_value item_edit_general num_choices $num_choices + } -##### - if {$display_type eq "cb"} { - ad_form -extend -name item_edit_general -form { - {ms_label:text,optional {label "Multiple Selection Instruction"}} - } - } -##### - set as_item_type_id [as::item::get_item_type_id -as_item_id $as_item_id] - if {[array exists move_up]} { - foreach n [array names move_up] { - array set new_array [as::item_type_mc::choices_swap \ - -assessment_id $assessment_id \ - -section_id $section_id \ - -as_item_id $as_item_id \ - -mc_id $as_item_type_id \ - -sort_order [db_string get_sort_order {}] \ - -direction up] - foreach var {as_item_id section_id} { - set $var $new_array($var) - template::element::set_value item_edit_general $var [set $var] + ##### + if {$display_type eq "cb"} { + ad_form -extend -name item_edit_general -form { + {ms_label:text,optional {label "Multiple Selection Instruction"}} } } - } - if {[array exists move_down]} { - foreach n [array names move_down] { - array set new_array [as::item_type_mc::choices_swap \ - -assessment_id $assessment_id \ - -section_id $section_id \ - -as_item_id $as_item_id \ - -mc_id $as_item_type_id \ - -sort_order [db_string get_sort_order {}] \ - -direction down] + ##### + set as_item_type_id [as::item::get_item_type_id -as_item_id $as_item_id] + if {[array exists move_up]} { + foreach n [array names move_up] { + array set new_array [as::item_type_mc::choices_swap \ + -assessment_id $assessment_id \ + -section_id $section_id \ + -as_item_id $as_item_id \ + -mc_id $as_item_type_id \ + -sort_order [db_string get_sort_order {}] \ + -direction up] + foreach var {as_item_id section_id} { + set $var $new_array($var) + template::element::set_value item_edit_general $var [set $var] + } + } } + if {[array exists move_down]} { + foreach n [array names move_down] { + array set new_array [as::item_type_mc::choices_swap \ + -assessment_id $assessment_id \ + -section_id $section_id \ + -as_item_id $as_item_id \ + -mc_id $as_item_type_id \ + -sort_order [db_string get_sort_order {}] \ + -direction down] + } foreach var {as_item_id section_id} { set $var $new_array($var) template::element::set_value item_edit_general $var [set $var] } - } - if {[array exists delete]} { - foreach n [array names delete] { - array set new_array [as::item_type_mc::choice_delete \ - -assessment_id $assessment_id \ - -section_id $section_id \ - -as_item_id $as_item_id \ - -choice_id $n] } + if {[array exists delete]} { + foreach n [array names delete] { + array set new_array [as::item_type_mc::choice_delete \ + -assessment_id $assessment_id \ + -section_id $section_id \ + -as_item_id $as_item_id \ + -choice_id $n] + } foreach var {as_item_id section_id} { set $var $new_array($var) } - } + } -####### -####### + ####### + ####### - set existing_choices [as::item_type_mc::existing_choices $as_item_id] - if {[llength $existing_choices] && ![info exists num_choices]} { - set num_choices [llength $existing_choices] - template::element::set_value item_edit_general num_choices $num_choices - } - if {![template::form::is_submission item_edit_general] \ + set existing_choices [as::item_type_mc::existing_choices $as_item_id] + if {[llength $existing_choices] && ![info exists num_choices]} { + set num_choices [llength $existing_choices] + template::element::set_value item_edit_general num_choices $num_choices + } + if {![template::form::is_submission item_edit_general] \ && ![info exists num_choices]} { - set num_choices 5 - } elseif {![info exists num_choices]} { + set num_choices 5 + } elseif {![info exists num_choices]} { set num_choices [expr {[set num_choices [template::element::get_value item_edit_general num_choices]] eq "" ? $num_choices : 5}] - } + } - template::multirow create choice_elements id new_p - foreach c $existing_choices { - set id [lindex $c 1] - template::multirow append choice_elements $id f - if {[lindex $c 2] == "t" && ![template::form::is_submission item_edit_general]} { - set correct($id) t + template::multirow create choice_elements id new_p + foreach c $existing_choices { + set id [lindex $c 1] + template::multirow append choice_elements $id f + if {[lindex $c 2] == "t" && ![template::form::is_submission item_edit_general]} { + set correct($id) t + } } - } - if {$num_choices > [llength $existing_choices]} { - set new_choices [expr {$num_choices - [llength $existing_choices] }] - for {set i 1} {$i <= $new_choices} {incr i} { - set id __new_${i} - set correct_p f - if {[info exists correct($id)]} { - set correct_p t + if {$num_choices > [llength $existing_choices]} { + set new_choices [expr {$num_choices - [llength $existing_choices] }] + for {set i 1} {$i <= $new_choices} {incr i} { + set id __new_${i} + set correct_p f + if {[info exists correct($id)]} { + set correct_p t + } + lappend existing_choices [list "" $id $correct_p] + template::multirow append choice_elements $id t } - lappend existing_choices [list "" $id $correct_p] - template::multirow append choice_elements $id t } - } - as::item_type_mc::add_existing_choices_to_edit_form \ - -form_id item_edit_general \ - -existing_choices $existing_choices \ - -choice_array_name choice \ - -correct_choice_array_name correct + as::item_type_mc::add_existing_choices_to_edit_form \ + -form_id item_edit_general \ + -existing_choices $existing_choices \ + -choice_array_name choice \ + -correct_choice_array_name correct } "oq" { @@ -223,45 +223,45 @@ "sa" { } } - + ad_form -extend -name item_edit_general -edit_request { db_1row general_item_data {} if {$data_type eq ""} { - set data_type varchar + set data_type varchar } - set data_type_disp "[_ assessment.data_type_$data_type]" + set data_type_disp "[_ assessment.data_type_$data_type]" set question_text [template::util::richtext::create $question_text $mime_type] set feedback_right [template::util::richtext::create $feedback_right $mime_type] set feedback_wrong [template::util::richtext::create $feedback_wrong $mime_type] - # FIXME fill in reference answer + # FIXME fill in reference answer } -on_request { - set display_type [string range [db_string get_display_type {}] end-1 end] + set display_type [string range [db_string get_display_type {}] end-1 end] } -on_submit { set category_ids [category::ad_form::get_categories -container_object_id $package_id] if {$points eq ""} { - set points 0 + set points 0 } } -edit_data { if {([info exists formbutton_ok] && $formbutton_ok ne "") || ([info exists formbutton_add_another_question] && $formbutton_add_another_question ne "")} { set question_text [template::util::richtext::get_property contents $question_text] set feedback_right [template::util::richtext::get_property content $feedback_right] set feedback_wrong [template::util::richtext::get_property content $feedback_wrong] - # strip full urls when saving, due to bug in Firefox and workaround - # in Xinha - # we want to make sure the URL is formatted EXACTLY as we want - # for the following regsub - # in case the ad_url is https we strip https and then we - # add it back in for the https url just in case - set site_url [string trimright [string map {https http} "[ad_url]"] /] - set site_https_url [string map {http https} $site_url] - foreach var {question_text feedback_right feedback_wrong} { - # find leading quote so we can make sure its not in the - # text, its in a tag href or src - set $var [regsub -all "\"$site_url" [set $var] {"}] - set $var [regsub -all "\"$site_https_url" [set $var] {"}] - } + # strip full urls when saving, due to bug in Firefox and workaround + # in Xinha + # we want to make sure the URL is formatted EXACTLY as we want + # for the following regsub + # in case the ad_url is https we strip https and then we + # add it back in for the https url just in case + set site_url [string trimright [string map {https http} "[ad_url]"] /] + set site_https_url [string map {http https} $site_url] + foreach var {question_text feedback_right feedback_wrong} { + # find leading quote so we can make sure its not in the + # text, its in a tag href or src + set $var [regsub -all "\"$site_url" [set $var] {"}] + set $var [regsub -all "\"$site_https_url" [set $var] {"}] + } db_transaction { set old_display_type [string range [db_string get_display_type {}] end-1 end] @@ -284,9 +284,7 @@ category::map_object -object_id $new_item_id $category_ids } if {$content ne ""} { - set filename [lindex $content 0] - set tmp_filename [lindex $content 1] - set file_mimetype [lindex $content 2] + lassign $content filename tmp_filename file_mimetype set n_bytes [file size $tmp_filename] set max_file_size 10000000 # [parameter::get -parameter MaxAttachmentSize] @@ -320,125 +318,125 @@ -old_section_id $section_id \ -new_section_id $new_section_id \ -new_assessment_rev_id $new_assessment_rev_id - - ns_log notice "HAM : $old_display_type : $display_type **********" - if { ![string match $old_display_type $display_type] } { - as::item_display_${display_type}::set_item_display_type -assessment_id $assessment_id \ - -section_id $section_id \ - -as_item_id $as_item_id - } - - set title [string range $question_text 0 999] + ns_log notice "HAM : $old_display_type : $display_type **********" + if { ![string match $old_display_type $display_type] } { + as::item_display_${display_type}::set_item_display_type -assessment_id $assessment_id \ + -section_id $section_id \ + -as_item_id $as_item_id + } + + set title [string range $question_text 0 999] + db_dml update_item_in_section {} switch -- $item_type { mc { - if {[info exists add_existing_mc_id] && $add_existing_mc_id ne ""} { - set new_item_type_id [as::item_type_mc::copy -type_id $add_existing_mc_id -copy_correct_answer_p "f" -new_title ""] - if {![db_0or1row get_item_type {}] || $object_type ne "as_item_type_mc"} { - if {![info exists object_type]} { - # first item type mapped - as::item_rels::new -item_rev_id $as_item_id -target_rev_id $add_existing_mc_id -type as_item_type_rel - } else { - # old item type existing - db_dml update_item_type {} - } - } else { - # old mc item type existing - db_dml update_item_type {} - } - } else { + if {[info exists add_existing_mc_id] && $add_existing_mc_id ne ""} { + set new_item_type_id [as::item_type_mc::copy -type_id $add_existing_mc_id -copy_correct_answer_p "f" -new_title ""] + if {![db_0or1row get_item_type {}] || $object_type ne "as_item_type_mc"} { + if {![info exists object_type]} { + # first item type mapped + as::item_rels::new -item_rev_id $as_item_id -target_rev_id $add_existing_mc_id -type as_item_type_rel + } else { + # old item type existing + db_dml update_item_type {} + } + } else { + # old mc item type existing + db_dml update_item_type {} + } + } else { - set num_answers 0 - set num_correct_answers 0 - foreach c [array names choice] { - if {$choice($c) ne ""} { - incr num_answers - } - } - foreach c [array names correct] { - if {$correct($c) == "t"} { - incr num_correct_answers - } - } - # set title to blank for mc answer set - # if they unchecked save for reuse - # we don't ask for a title, if they did check it - # we set it on save-answer-set - # with each revision of the mc we decide if its - # reusable or not + set num_answers 0 + set num_correct_answers 0 + foreach c [array names choice] { + if {$choice($c) ne ""} { + incr num_answers + } + } + foreach c [array names correct] { + if {$correct($c) == "t"} { + incr num_correct_answers + } + } + # set title to blank for mc answer set + # if they unchecked save for reuse + # we don't ask for a title, if they did check it + # we set it on save-answer-set + # with each revision of the mc we decide if its + # reusable or not - set new_item_type_id [as::item_type_mc::edit \ - -as_item_type_id $as_item_type_id \ - -title "" \ - -increasing_p f \ - -allow_negative_p f \ - -num_correct_answers $num_correct_answers \ - -num_answers $num_answers] - db_dml update_item_type {} - # edit existing choices - set count 0 - foreach i [lsort [array names choice]] { - if {[string index $i 0] ne "_" && $choice($i) ne ""} { - incr count - set new_choice_id [as::item_choice::new_revision -choice_id $i -mc_id $new_item_type_id] - set title $choice($i) - set correct_answer_p [ad_decode [info exists correct($i)] 0 f t] + set new_item_type_id [as::item_type_mc::edit \ + -as_item_type_id $as_item_type_id \ + -title "" \ + -increasing_p f \ + -allow_negative_p f \ + -num_correct_answers $num_correct_answers \ + -num_answers $num_answers] + db_dml update_item_type {} + # edit existing choices + set count 0 + foreach i [lsort [array names choice]] { + if {[string index $i 0] ne "_" && $choice($i) ne ""} { + incr count + set new_choice_id [as::item_choice::new_revision -choice_id $i -mc_id $new_item_type_id] + set title $choice($i) + set correct_answer_p [ad_decode [info exists correct($i)] 0 f t] - db_dml update_title {} - db_dml update_correct {} - } - } + db_dml update_title {} + db_dml update_correct {} + } + } - # add new choices - foreach i [lsort [array names choice]] { - - if {[string index $i 0] eq "_" && $choice($i) ne ""} { - incr count - set new_choice_id [as::item_choice::new -mc_id $new_item_type_id \ - -title $choice($i) \ - -numeric_value "" \ - -text_value "" \ - -content_value "" \ - -feedback_text "" \ - -selected_p "" \ - -correct_answer_p [ad_decode [info exists correct($i)] 0 f t] \ - -sort_order $count \ - -percent_score ""] - } - } - } - } + # add new choices + foreach i [lsort [array names choice]] { + + if {[string index $i 0] eq "_" && $choice($i) ne ""} { + incr count + set new_choice_id [as::item_choice::new -mc_id $new_item_type_id \ + -title $choice($i) \ + -numeric_value "" \ + -text_value "" \ + -content_value "" \ + -feedback_text "" \ + -selected_p "" \ + -correct_answer_p [ad_decode [info exists correct($i)] 0 f t] \ + -sort_order $count \ + -percent_score ""] + } + } + } + } "oq" { set new_item_type_id [as::item_type_oq::edit \ - -as_item_type_id $as_item_type_id \ - -title $title \ - -default_value "" \ - -feedback_text "" \ - -reference_answer $reference_answer \ - -keywords ""] + -as_item_type_id $as_item_type_id \ + -title $title \ + -default_value "" \ + -feedback_text "" \ + -reference_answer $reference_answer \ + -keywords ""] db_dml update_item_type {} } "fu" { set new_item_type_id [as::item_type_fu::edit \ - -as_item_type_id $as_item_type_id \ - -title $title] + -as_item_type_id $as_item_type_id \ + -title $title] db_dml update_item_type {} } "sa" { set new_item_type_id [as::item_type_sa::edit \ - -as_item_type_id $as_item_type_id \ - -title $title \ - -increasing_p f\ - -allow_negative_p f] + -as_item_type_id $as_item_type_id \ + -title $title \ + -increasing_p f\ + -allow_negative_p f] db_dml update_item_type {} } } - + } - + set as_item_id $new_item_id set section_id $new_section_id @@ -448,12 +446,12 @@ } } -after_submit { if {([info exists formbutton_ok] && $formbutton_ok ne "")} { - set return_url [export_vars -base "questions" {assessment_id section_id }]&\#${as_item_id} - if {[info exists save_answer_set] && $save_answer_set eq "on" && (![info exists add_existing_mc_id] || $add_existing_mc_id eq "")} { - set return_url [export_vars -base save-answer-set {assessment_id as_item_id return_url {mc_id $new_item_type_id}}] - } - ad_returnredirect $return_url - ad_script_abort + set return_url [export_vars -base "questions" {assessment_id section_id }]&\#${as_item_id} + if {[info exists save_answer_set] && $save_answer_set eq "on" && (![info exists add_existing_mc_id] || $add_existing_mc_id eq "")} { + set return_url [export_vars -base save-answer-set {assessment_id as_item_id return_url {mc_id $new_item_type_id}}] + } + ad_returnredirect $return_url + ad_script_abort } } Index: openacs-4/packages/assessment/www/asm-admin/item-edit-mc-choices.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-edit-mc-choices.tcl,v diff -u -N -r1.11 -r1.12 --- openacs-4/packages/assessment/www/asm-admin/item-edit-mc-choices.tcl 7 Aug 2017 23:48:04 -0000 1.11 +++ openacs-4/packages/assessment/www/asm-admin/item-edit-mc-choices.tcl 25 Apr 2018 09:26:33 -0000 1.12 @@ -48,28 +48,28 @@ foreach one_choice $choices { lassign $one_choice choice_id title correct_answer_p feedback_text selected_p percent_score fixed_position answer_value content_rev_id content_filename content_name if {$correct_answer_p == "t"} { - append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" + append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" } else { - append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" + append ad_form_code "\{infotxt.$choice_id:text(inform) \{label \"[_ assessment.Choice] $title\"\} \{value \"\"\}\}\n" } if {$selected_p == "t"} { - append ad_form_code "\{selected.$choice_id:text(checkbox),optional \{label \"[_ assessment.Default_Selected]\"\} \{options \$selected_options\} \{value \"t\"\} \{help_text \"[_ assessment.Default_Selected_help]\"\}\}\n" + append ad_form_code "\{selected.$choice_id:text(checkbox),optional \{label \"[_ assessment.Default_Selected]\"\} \{options \$selected_options\} \{value \"t\"\} \{help_text \"[_ assessment.Default_Selected_help]\"\}\}\n" } else { - append ad_form_code "\{selected.$choice_id:text(checkbox),optional \{label \"[_ assessment.Default_Selected]\"\} \{options \$selected_options\} \{help_text \"[_ assessment.Default_Selected_help]\"\}\}\n" + append ad_form_code "\{selected.$choice_id:text(checkbox),optional \{label \"[_ assessment.Default_Selected]\"\} \{options \$selected_options\} \{help_text \"[_ assessment.Default_Selected_help]\"\}\}\n" } append ad_form_code "\{fixed_pos.$choice_id:text,optional,nospell \{label \"[_ assessment.Fixed_Position]\"\} \{html \{size 5 maxlength 5\}\} \{value \"$fixed_position\"\} \{help_text \"[_ assessment.choice_Fixed_Position_help]\"\}\}\n" append ad_form_code "\{answer_val.$choice_id:text,optional,nospell \{label \"[_ assessment.Answer_Value]\"\} \{html \{size 80 maxlength 500\}\} \{value \"$answer_value\"\} \{help_text \"[_ assessment.Answer_Value_help]\"\}\}\n" if {$content_rev_id ne ""} { - append ad_form_code "\{delete_content.$choice_id:text(checkbox),optional \{label \"[_ assessment.choice_Delete_Content]\"\} \{options \{\{\{$content_name\} t\}\} \}\}\n" + append ad_form_code "\{delete_content.$choice_id:text(checkbox),optional \{label \"[_ assessment.choice_Delete_Content]\"\} \{options \{\{\{$content_name\} t\}\} \}\}\n" } append ad_form_code "\{content_$choice_id:file,optional \{label \"[_ assessment.choice_Content]\"\} \{help_text \"[_ assessment.choice_Content_help]\"\}\}\n" append ad_form_code "\{feedback.$choice_id:text(textarea),optional,nospell \{label \"[_ assessment.Feedback]\"\} \{html \{rows 8 cols 80\}\} \{value \{$feedback_text\}\} \{help_text \"[_ assessment.choice_Feedback_help]\"\}\}\n" if {$correct_answer_p == "t"} { - set default_percent "\$percentage" - incr count_correct + set default_percent "\$percentage" + incr count_correct } else { - set default_percent $percent_score + set default_percent $percent_score } append ad_form_code "\{percent.$choice_id:text,nospell \{label \"[_ assessment.Percent_Score]\"\} \{value \"$default_percent\"\} \{html \{size 5 maxlength 5\}\} \{help_text \"[_ assessment.Percent_Score_help]\"\}\}\n" } @@ -84,52 +84,50 @@ ad_form -extend -name item_edit_mc_choices -edit_request { foreach one_choice $choices { - lassign $one_choice choice_id title correct_answer_p feedback_text selected_p percent_score fixed_position answer_value - set feedback($choice_id) $feedback_text - set percent($choice_id) $percent_score - set fixed_pos($choice_id) $fixed_position - set answer_val($choice_id) $answer_value - if {$selected_p == "t"} { - set selected($choice_id) t - } + lassign $one_choice choice_id title correct_answer_p feedback_text selected_p percent_score fixed_position answer_value + set feedback($choice_id) $feedback_text + set percent($choice_id) $percent_score + set fixed_pos($choice_id) $fixed_position + set answer_val($choice_id) $answer_value + if {$selected_p == "t"} { + set selected($choice_id) t + } } } -edit_data { db_transaction { - set max_file_size 10000000 - # [parameter::get -parameter MaxAttachmentSize] - set pretty_max_size [util_commify_number $max_file_size] - set folder_id [as::assessment::folder_id -package_id $package_id] + set max_file_size 10000000 + # [parameter::get -parameter MaxAttachmentSize] + set pretty_max_size [util_commify_number $max_file_size] + set folder_id [as::assessment::folder_id -package_id $package_id] - set count 0 - foreach choice_id [array names feedback] { - set feedback_text $feedback($choice_id) - set selected_p [ad_decode [info exists selected($choice_id)] 0 f t] - set percent_score $percent($choice_id) - set fixed_position $fixed_pos($choice_id) - set answer_value $answer_val($choice_id) - db_dml update_choice_data {} + set count 0 + foreach choice_id [array names feedback] { + set feedback_text $feedback($choice_id) + set selected_p [ad_decode [info exists selected($choice_id)] 0 f t] + set percent_score $percent($choice_id) + set fixed_position $fixed_pos($choice_id) + set answer_value $answer_val($choice_id) + db_dml update_choice_data {} - eval set content "\$content_$choice_id" - if {$content ne ""} { - set filename [lindex $content 0] - set tmp_filename [lindex $content 1] - set file_mimetype [lindex $content 2] - set n_bytes [file size $tmp_filename] + eval set content "\$content_$choice_id" + if {$content ne ""} { + lassign $content filename tmp_filename file_mimetype + set n_bytes [file size $tmp_filename] - if { $n_bytes > $max_file_size && $max_file_size > 0 } { - ad_return_complaint 1 "[_ assessment.file_too_large]" - return - } - if { $n_bytes == 0 } { - ad_return_complaint 1 "[_ assessment.file_zero_size]" - return - } - set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] - db_dml update_choice_content {} - } elseif {[info exists delete_content($choice_id)]} { - db_dml delete_choice_content {} - } - } + if { $n_bytes > $max_file_size && $max_file_size > 0 } { + ad_return_complaint 1 "[_ assessment.file_too_large]" + return + } + if { $n_bytes == 0 } { + ad_return_complaint 1 "[_ assessment.file_zero_size]" + return + } + set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]] + db_dml update_choice_content {} + } elseif {[info exists delete_content($choice_id)]} { + db_dml delete_choice_content {} + } + } } } -after_submit { ad_returnredirect [export_vars -base "item-edit" {assessment_id section_id as_item_id}]