Index: openacs-4/packages/assessment/tcl/as-checks-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-checks-procs.tcl,v diff -u -r1.31 -r1.32 --- openacs-4/packages/assessment/tcl/as-checks-procs.tcl 9 May 2018 15:33:29 -0000 1.31 +++ openacs-4/packages/assessment/tcl/as-checks-procs.tcl 3 Sep 2024 15:37:35 -0000 1.32 @@ -1,54 +1,56 @@ -ad_library { Assessment Checks procs +ad_library { + + Assessment Checks procs + @author Anny Flores (annyflores@viaro.net) Viaro Networks (www.viaro.net) @creation-date 2005-01-13 + } namespace eval as::assessment::check {} -ad_proc -public as::assessment::check::get_types { -} { +ad_proc -public as::assessment::check::get_types {} { Return the checks types } { set types [list [list "\#assessment.action\#" "t"] [list "\#assessment.branch\#" "f"]] return $types } -ad_proc -public as::assessment::check::get_assessments { +ad_proc -public as::assessment::check::get_assessments {} { + @return list of assessments the currently connected user can + administrate. } { - -} { set package_id [ad_conn package_id] set user_id [ad_conn user_id] set permission "" if {![acs_user::site_wide_admin_p -user_id $user_id]} { - set permission "and ci.item_id in (select object_id from acs_permissions where grantee_id=:user_id and privilege='admin')"} + set permission "and ci.item_id in (select object_id from acs_permissions where grantee_id=:user_id and privilege='admin')" + } set assessment_list [list [list "[_ assessment.all]" "all"]] set assessments [db_list_of_lists assessment {}] - foreach assessment $assessments { - lappend assessment_list [list [lindex $assessment 0] [lindex $assessment 1]] + foreach assessment $assessments { + lappend assessment_list [list [lindex $assessment 0] [lindex $assessment 1]] } - + return $assessment_list } -ad_proc -public as::assessment::check::state_options { +ad_proc -public as::assessment::check::state_options {} { + @return the list of possible options for the state of an assessment } { - -} { set approved_options [list [list "[_ assessment.approved]" "t"] [list "[_ assessment.approved_with]" "ae"] [list "[_ assessment.not_approved]" "f"] ] return $approved_options } -ad_proc -public as::assessment::check::intervals { -} { +ad_proc -public as::assessment::check::intervals {} { Return the time intervals } { set today [clock format [clock seconds] -format %Y-%m-%d] set yesterday [clock format [clock scan yesterday] -format %Y-%m-%d] set two_days [clock format [clock scan "2 days ago"] -format %Y-%m-%d] set last_week [clock format [clock scan "1 week ago"] -format %Y-%m-%d] set last_month [clock format [clock scan "1 month ago"] -format %Y-%m-%d] - + return [list [list [_ assessment.all] "all"] \ [list [_ assessment.today] $today] \ [list [_ assessment.yesterday] $yesterday] \ @@ -63,7 +65,7 @@ Return the url } { if { $action_p == "t"} { - return "action-select" + return "action-select" } else { return "section-select" } @@ -77,7 +79,7 @@ } { set order [db_string get_max_order {} -default 1] if { $order eq ""} { - set order 1 + set order 1 } else { incr order } @@ -92,461 +94,457 @@ Return the parameter_value } { if { $type eq "n"} { - return [db_string get_param_n {} -default " "] + return [db_string get_param_n {} -default " "] } else { - return [db_string get_param_q {} -default " "] - + return [db_string get_param_q {} -default " "] } } - ad_proc -public as::assessment::check::set_parameter_value { {-parameter_id} {-value} {-check_id} {-type} } { - + Sets the value of the parameter } { set exists_p [db_string get_check_id {} -default 0] - + if { $type eq "n"} { - if {$exists_p != 0} { - db_dml param_value_update_n {} - } else { - db_dml param_value_insert_n {} - } + if {$exists_p != 0} { + db_dml param_value_update_n {} + } else { + db_dml param_value_insert_n {} + } } else { - if { $exists_p != 0} { - db_dml param_value_update_q {} - } else { - db_dml param_value_insert_q {} - } - + if { $exists_p != 0} { + db_dml param_value_update_q {} + } else { + db_dml param_value_insert_q {} + } } - } ad_proc -public as::assessment::check::re_order_actions { {-check_id} {-action_perform} {-section_id} } { - + Re-orders the actions } { set order_by [db_string get_order_by {}] set count 0 db_foreach next_order {} { - set order [expr {$order_by+$count}] - db_dml update_order {} - incr count + set order [expr {$order_by+$count}] + db_dml update_order {} + incr count } - + } ad_proc -public as::assessment::check::get_sql { {-item_id} {-condition} } { - + @return a SQL snippet } { set as_item_id [db_string get_item_id {select item_id from cr_revisions where revision_id=:item_id}] - + set check_sql "select (case when idc.choice_id in (select revision_id from cr_revisions where item_id=$condition) then \'1\' else \'0\' end) as perform_p from as_item_data id, as_item_data_choices idc where id.as_item_id in (select revision_id from cr_revisions where item_id=$as_item_id) and id.item_data_id=idc.item_data_id and id.session_id=:session_id" - + return $check_sql } - ad_proc -public as::assessment::check::swap_actions { {-check_id} {-action_perform} {-section_id} {-direction} {-order_by} } { - + Swaps actions } { if { $direction eq "d"} { - set order_p [expr {$order_by + 1}] - set swap_check_id [db_string get_swap_check {}] - db_dml update_1 {} - db_dml update_2 {} + set order_p [expr {$order_by + 1}] + set swap_check_id [db_string get_swap_check {}] + db_dml update_1 {} + db_dml update_2 {} } else { - set order_p [expr {$order_by - 1}] - set swap_check_id [db_string get_swap_check_e {}] - db_dml update_1_e {} - db_dml update_2_e {} - + set order_p [expr {$order_by - 1}] + set swap_check_id [db_string get_swap_check_e {}] + db_dml update_1_e {} + db_dml update_2_e {} } - } + ad_proc -public as::assessment::check::action_log { {-session_id} {-check_id} {-failed } } { - + Log action } { set user_id [ad_conn user_id] set log_id [db_string get_next_val {}] set action_id [db_string action_id {}] set message " " if { $failed == "f" } { - set message "This action failed." + set message "This action failed." } db_transaction { - db_dml insert_action {} + db_dml insert_action {} } - + } ad_proc -public as::assessment::check::manual_action_log { {-session_id} {-check_id} - } { - + Manual action log } { set user_id [ad_conn user_id] set log_id [db_string get_next_val {}] set action_id [db_string action_id {}] set message " " db_transaction { - db_dml insert_action {} - + db_dml insert_action {} } } - ad_proc -public as::assessment::check::action_exec { {-inter_item_check_id} {-session_id} -} { - } { + Execute an action +} { set error_txt "" db_foreach get_check_params {} { - set parameter_name [db_1row select_name {}] - - set $varname "" - - if {$value eq ""} { - set choice [db_list_of_lists get_item_choice {}] - set answer [db_0or1row get_answer {}] - if {([info exists choice_id] && $choice_id ne "")} { - set $varname "$choice_id" - } else { - if { [info exists boolean_answer] } { - append $varname $boolean_answer - } - if { [info exists numeric_answer] } { - append $varname $numeric_answer - } - if { [info exists integer_answer] } { - append $varname $integer_answer - } - if { [info exists text_answer] } { - append $varname $text_answer - } - if { [info exists clob_answer] } { - append $varname $clob_answer - } - if { [info exists content_answer] } { - append $varname $content_answer - } - } - } else { - set $varname $value - } + set parameter_name [db_1row select_name {}] + set $varname "" + if {$value eq ""} { + set choice [db_list_of_lists get_item_choice {}] + set answer [db_0or1row get_answer {}] + if {[info exists choice_id] && $choice_id ne ""} { + set $varname $choice_id + } else { + if { [info exists boolean_answer] } { + append $varname $boolean_answer + } + if { [info exists numeric_answer] } { + append $varname $numeric_answer + } + if { [info exists integer_answer] } { + append $varname $integer_answer + } + if { [info exists text_answer] } { + append $varname $text_answer + } + if { [info exists clob_answer] } { + append $varname $clob_answer + } + if { [info exists content_answer] } { + append $varname $content_answer + } + } + } else { + set $varname $value + } } - + set tcl_code_p [db_1row select_tcl {}] set failed_p "f" if {[catch $tcl_code errorMsg]} { - set failed_p "t" - ns_log error "Error running assessment action $action_name '${errorMsg}'" + set failed_p "t" + ns_log error "Error running assessment action $action_name '${errorMsg}'" } set admin [db_list_of_lists get_assessment_admin {}] - + set to [list] foreach notify_user $admin { - lappend to $notify_user + lappend to $notify_user } - + if {$failed_p} { - notification::new -type_id [notification::type::get_type_id -short_name inter_item_check_notif] -object_id $inter_item_check_id -notif_subject "$action_name has been executed" -notif_text "The action $action_name has encountered an error: $errorMsg" -subset $to -force -action_id $inter_item_check_id + notification::new \ + -type_id [notification::type::get_type_id -short_name inter_item_check_notif] \ + -object_id $inter_item_check_id \ + -notif_subject "$action_name has been executed" \ + -notif_text "The action $action_name has encountered an error: $errorMsg" \ + -subset $to \ + -force \ + -action_id $inter_item_check_id } - - - as::assessment::check::action_log -session_id $session_id -check_id $inter_item_check_id -failed $failed_p - + as::assessment::check::action_log \ + -session_id $session_id \ + -check_id $inter_item_check_id \ + -failed $failed_p } - ad_proc -public as::assessment::check::manual_action_exec { {-inter_item_check_id} {-session_id} {-action_log_id} -} { - } { + Execute manual action +} { db_0or1row subject_id {select subject_id from as_sessions where session_id=:session_id} db_foreach get_check_params {} { - set parameter_name [db_1row select_name {}] - - set $varname "" - - if {$value eq ""} { - set choice [db_list_of_lists get_item_choice {}] - set answer [db_0or1row get_answer {}] - if {([info exists choice_id] && $choice_id ne "")} { - set $varname "$choice_id" - } else { - if { [info exists boolean_answer] } { - append $varname $boolean_answer - } - if { [info exists numeric_answer] } { - append $varname $numeric_answer - } - if { [info exists integer_answer] } { - append $varname $integer_answer - } - if { [info exists text_answer] } { - append $varname $text_answer - } - if { [info exists clob_answer] } { - append $varname $clob_answer - } - if { [info exists content_answer] } { - append $varname $content_answer - } - - } - } else { - set $varname $value - } + set parameter_name [db_1row select_name {}] + set $varname "" + if {$value eq ""} { + set choice [db_list_of_lists get_item_choice {}] + set answer [db_0or1row get_answer {}] + if {[info exists choice_id] && $choice_id ne ""} { + set $varname $choice_id + } else { + if { [info exists boolean_answer] } { + append $varname $boolean_answer + } + if { [info exists numeric_answer] } { + append $varname $numeric_answer + } + if { [info exists integer_answer] } { + append $varname $integer_answer + } + if { [info exists text_answer] } { + append $varname $text_answer + } + if { [info exists clob_answer] } { + append $varname $clob_answer + } + if { [info exists content_answer] } { + append $varname $content_answer + } + } + } else { + set $varname $value + } } - + set tcl_code_p [db_1row select_tcl {}] set failed_p "t" set failed [catch $tcl_code] if { $failed > 0 } { - set failed_p "f" + set failed_p "f" } - + set user_id [ad_conn user_id] db_dml update_actions_log {} - set admin [db_list_of_lists get_assessment_admin {}] - + set admin [db_list_of_lists get_assessment_admin {}] + set to [list] foreach notify_user $admin { - lappend to $notify_user + lappend to $notify_user } - if { [parameter::get -package_id [ad_conn package_id] -parameter NotifyAdminOfActions -default 1] } { - notification::new -type_id [notification::type::get_type_id -short_name inter_item_check_notif] -object_id $inter_item_check_id -notif_subject "$action_name has been executed" -notif_text "The action $action_name has been executed. This message has been showed to the user: $user_message" -subset $to -force -action_id $inter_item_check_id + if { [parameter::get -package_id [ad_conn package_id] \ + -parameter NotifyAdminOfActions -default 1] } { + notification::new \ + -type_id [notification::type::get_type_id -short_name inter_item_check_notif] \ + -object_id $inter_item_check_id \ + -notif_subject "$action_name has been executed" \ + -notif_text "The action $action_name has been executed. This message has been showed to the user: $user_message" \ + -subset $to \ + -force \ + -action_id $inter_item_check_id } - - } - - ad_proc -public as::assessment::check::eval_i_checks { {-session_id} {-section_id} } { - + Evaluate section } { - set section_checks [db_list_of_lists section_checks {}] foreach check $section_checks { - set check_sql [lindex $check 1] - set perform [db_string check_sql $check_sql -default 0] - if {[lindex $check 2] == "t"} { - if {$perform == 1} { - as::assessment::check::action_exec -inter_item_check_id [lindex $check 0] -session_id $session_id - } - } + set check_sql [lindex $check 1] + set perform [db_string check_sql $check_sql -default 0] + if {[lindex $check 2] == "t"} { + if {$perform == 1} { + as::assessment::check::action_exec \ + -inter_item_check_id [lindex $check 0] \ + -session_id $session_id + } + } } } - ad_proc -public as::assessment::check::branch_checks { {-session_id} {-section_id} {-assessment_id} } { - + Branch checks } { set order "f" set perform 0 set checks [db_list_of_lists section_checks {}] - + foreach check $checks { - as::assessment::data -assessment_id $assessment_id - set new_assessment_revision $assessment_data(assessment_rev_id) - set section_id_to [lindex $check 2] - set perform [db_string check_sql "[lindex $check 0]" -default 0] - - if {$perform == 1} { - set order [db_string get_order {}] - } - + as::assessment::data -assessment_id $assessment_id + set new_assessment_revision $assessment_data(assessment_rev_id) + set section_id_to [lindex $check 2] + set perform [db_string check_sql [lindex $check 0] -default 0] + + if {$perform == 1} { + set order [db_string get_order {}] + } + } - + if {$order == "f"} { - return $order + return $order } { - return [expr {$order -1}] + return [expr {$order -1}] } } - - - ad_proc -public as::assessment::check::eval_aa_checks { {-session_id} {-assessment_id} } { - + Eval AA checks } { + # This value is not used anywhere, except, maybe, in tcl code + # stored in as_actions.tcl_code column where people was brave + # enough to use an upvar... One can never know in this package, so + # I just comment it out. + # set assessment_rev_id [db_string get_assessment_id {}] - set assessment_rev_id [db_string get_assessment_id {}] + set checks [db_list_of_lists section_checks {}] + foreach check_id $checks { - set checks [db_list_of_lists section_checks {}] - foreach check_id $checks { - - set info [db_0or1row check_info {}] - set perform [db_string check_sql $check_sql -default 0] - if {$action_p == "t"} { - if {$perform == 1} { - as::assessment::check::action_exec -inter_item_check_id $inter_item_check_id -session_id $session_id - } - } - } - + set info [db_0or1row check_info {}] + set perform [db_string check_sql $check_sql -default 0] + if {$action_p == "t"} { + if {$perform == 1} { + as::assessment::check::action_exec \ + -inter_item_check_id $inter_item_check_id \ + -session_id $session_id + } + } + } } - ad_proc -public as::assessment::check::eval_m_checks { {-session_id} {-assessment_id} } { - + Eval m checks } { + db_foreach assessment_checks {} { + if {$action_p == "t"} { + set perform [db_string check_sql $check_sql -default 0] - db_foreach assessment_checks {} { - if {$action_p == "t"} { - set perform [db_string check_sql $check_sql -default 0] - - - if {$perform == 1} { - set failed "" - as::assessment::check::manual_action_log -check_id $inter_item_check_id -session_id $session_id - } - } - - } - + if {$perform == 1} { + set failed "" + as::assessment::check::manual_action_log \ + -check_id $inter_item_check_id \ + -session_id $session_id + } + } + } } ad_proc -public as::assessment::check::eval_or_checks { {-session_id} {-section_id} } { - + Eval or checks } { - set section_checks [db_list_of_lists section_checks {}] - + foreach check $section_checks { set check_sql [lindex $check 1] set perform [db_string check_sql $check_sql -default 0] if {[lindex $check 2] == "t"} { if {$perform == 1} { - as::assessment::check::action_exec -inter_item_check_id [lindex $check 0] -session_id $session_id + as::assessment::check::action_exec \ + -inter_item_check_id [lindex $check 0] \ + -session_id $session_id } } } } - ad_proc -public as::assessment::check::eval_sa_checks { {-session_id} {-assessment_id} } { - + Eval sa checks } { + # This value is not used anywhere, except, maybe, in tcl code + # stored in as_actions.tcl_code column where people was brave + # enough to use an upvar... One can never know in this package, so + # I just comment it out. + # set assessment_rev_id [db_string get_assessment_id {}] - set assessment_rev_id [db_string get_assessment_id {}] + set checks [db_list_of_lists section_checks {}] + foreach check_id $checks { - set checks [db_list_of_lists section_checks {}] - foreach check_id $checks { - - set info [db_0or1row check_info {}] - set perform [db_string check_sql $check_sql -default 0] - if {$action_p == "t"} { - if {$perform == 1} { - as::assessment::check::action_exec -inter_item_check_id $inter_item_check_id -session_id $session_id - } - } - } - + set info [db_0or1row check_info {}] + set perform [db_string check_sql $check_sql -default 0] + if {$action_p == "t"} { + if {$perform == 1} { + as::assessment::check::action_exec \ + -inter_item_check_id $inter_item_check_id \ + -session_id $session_id + } + } + } } - ad_proc -public as::assessment::check::confirm_display { {-check_id} {-index} } { - + @return HTML } { set show_check_info "" set mod "" - + set info [db_0or1row get_check_info {}] - - + + set mod [expr {$index%2}] - + if {$mod==0} { - set class "odd" + set class "odd" } else { - set class "even" + set class "even" } - + set action "" set parameter_list "" if { $action_p=="t"} { - set info [db_0or1row get_check_info_a {}] - - db_foreach parameters {} { - append parameter_list "
  • $varname: " - if {$type eq "q"} { - append parameter_list "$value" - } else { - append parameter_list "$item_id" - } - } - - set action "$name$action_name" + set info [db_0or1row get_check_info_a {}] + + db_foreach parameters {} { + append parameter_list "
  • $varname: " + if {$type eq "q"} { + append parameter_list "$value" + } else { + append parameter_list "$item_id" + } + } + + set action "$name$action_name" } else { - set section_name_to [db_string get_section_name {} ] - set action "$name$section_name_to" + set section_name_to [db_string get_section_name {} ] + set action "$name$section_name_to" } - - + set display_info $action return $display_info } @@ -556,14 +554,13 @@ {-new_section_id:required} {-assessment_id:required} } { - + Copy checks from one section to another. } { set user_id [ad_conn user_id] set checks [db_list_of_lists get_checks {}] foreach check $checks { - - set inter_item_check_id [lindex $check 0] - db_dml update_checks {} + set inter_item_check_id [lindex $check 0] + db_dml update_checks {} } #update other checks update_checks -section_id $section_id -new_section_id $new_section_id @@ -573,39 +570,40 @@ {-section_id:required} {-new_section_id:required} } { - + Update checks } { set checks [db_list_of_lists checks {}] foreach check_id $checks { - db_dml update_check {} + db_dml update_check {} } } ad_proc -public as::assessment::check::delete_assessment_checks { {-assessment_id:required} } { - + Delete checks } { set checks [db_list_of_lists assessment_checks {}] foreach check_id $checks { - set delete_p [db_exec_plsql delete_checks {}] + set delete_p [db_exec_plsql delete_checks {}] } } + ad_proc -public as::assessment::check::delete_item_checks { {-assessment_id:required} {-section_id} {-as_item_id} } { - + Delete item checks } { set checks [db_list_of_lists related_checks {}] foreach check $checks { - set cond_list [split [lindex $check 1] "="] - set item_id [lindex [split [lindex $cond_list 2] ")"] 0] - if {$item_id == $as_item_id} { - set check_id [lindex $check 0] - db_exec_plsql delete_check {} - } + set cond_list [split [lindex $check 1] "="] + set item_id [lindex [split [lindex $cond_list 2] ")"] 0] + if {$item_id == $as_item_id} { + set check_id [lindex $check 0] + db_exec_plsql delete_check {} + } } } @@ -616,60 +614,61 @@ {-as_item_id} {-new_item_id} } { - + Copy item checks from one item to another. } { set checks [db_list_of_lists related_checks {}] set user_id [ad_conn user_id] foreach check $checks { - - set cond_list [split [lindex $check 1] "="] - set item_id [lindex [split [lindex $cond_list 2] ")"] 0] - set condition [lindex [split [lindex $cond_list 1] ")"] 0] - - if {$item_id == $as_item_id} { - set inter_item_check_id [lindex $check 0] - set check_sql [as::assessment::check::get_sql -item_id $new_item_id -condition $condition] - - db_dml update_checks {} - - } + set cond_list [split [lindex $check 1] "="] + set item_id [lindex [split [lindex $cond_list 2] ")"] 0] + set condition [lindex [split [lindex $cond_list 1] ")"] 0] + + if {$item_id == $as_item_id} { + set inter_item_check_id [lindex $check 0] + set check_sql [as::assessment::check::get_sql -item_id $new_item_id -condition $condition] + + db_dml update_checks {} + } } } - ad_proc -public as::assessment::check::eval_single_check { {-session_id} {-assessment_id} {-inter_item_check_id} } { - + Eval single check } { - db_1row get_check_info {} - + db_1row get_check_info {} + set perform [db_string check_sql $check_sql -default 0] ns_log notice "$check_sql $perform" if {$perform == 1} { - set failed "" - as::assessment::check::manual_action_log -check_id $inter_item_check_id -session_id $session_id + set failed "" + as::assessment::check::manual_action_log \ + -check_id $inter_item_check_id \ + -session_id $session_id } } - ad_proc -public as::assessment::check::add_manual_check { {-assessment_id:required} {-inter_item_check_id:required} } { - + Add manual check } { - set sessions [db_list_of_lists get_sessions {select session_id from as_sessions where assessment_id=:assessment_id}] + set sessions [db_list_of_lists get_sessions { + select session_id from as_sessions where assessment_id=:assessment_id + }] foreach session_id $sessions { - as::assessment::check::eval_single_check -session_id $session_id -assessment_id $assessment_id -inter_item_check_id $inter_item_check_id + as::assessment::check::eval_single_check \ + -session_id $session_id \ + -assessment_id $assessment_id \ + -inter_item_check_id $inter_item_check_id } } - - # Local variables: # mode: tcl # tcl-indent-level: 4