Index: openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl,v diff -u -r1.30 -r1.31 --- openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl 31 Jul 2011 23:11:46 -0000 1.30 +++ openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl 27 Oct 2014 16:40:08 -0000 1.31 @@ -26,9 +26,8 @@ @see doc_set_page_documentation_mode } { - global ad_conn - if { [info exists ad_conn(api_page_documentation_mode_p)] } { - return $ad_conn(api_page_documentation_mode_p) + if { [info exists ::ad_conn(api_page_documentation_mode_p)] } { + return $::ad_conn(api_page_documentation_mode_p) } return 0 } @@ -42,8 +41,7 @@ or false to clear it. @see api_page_documentation_mode_p } { - global ad_conn - set ad_conn(api_page_documentation_mode_p) $page_documentation_mode_p + set ::ad_conn(api_page_documentation_mode_p) $page_documentation_mode_p } #################### @@ -66,9 +64,8 @@ @author Lars Pind (lars@pinds.com) @creation-date 24 July 2000 } { - global ad_page_contract_complaints ad_page_contract_errorkeys - set ad_page_contract_complaints [list] - set ad_page_contract_errorkeys [list] + set ::ad_page_contract_complaints [list] + set ::ad_page_contract_errorkeys [list] } ad_proc -public ad_complain { @@ -88,18 +85,16 @@ @author Lars Pind (lars@pinds.com) @creation-date 24 July 2000 } { - global ad_page_contract_complaints ad_page_contract_errorkeys ad_page_contract_error_string - # if no key was specified, grab one from the internally kept stack - if { $key eq "" && [info exists ad_page_contract_errorkeys] } { - set key [lindex $ad_page_contract_errorkeys 0] + if { $key eq "" && [info exists ::ad_page_contract_errorkeys] } { + set key [lindex $::ad_page_contract_errorkeys 0] } - if { [info exists ad_page_contract_error_string($key)] } { - lappend ad_page_contract_complaints $ad_page_contract_error_string($key) + if { [info exists ::ad_page_contract_error_string($key)] } { + lappend ::ad_page_contract_complaints $::ad_page_contract_error_string($key) } elseif { $message eq "" } { - lappend ad_page_contract_complaints "[_ acs-tcl.lt_Validation_key_compla]" + lappend ::ad_page_contract_complaints "[_ acs-tcl.lt_Validation_key_compla]" } else { - lappend ad_page_contract_complaints $message + lappend ::ad_page_contract_complaints $message } } @@ -111,10 +106,9 @@ @author Lars Pind @creation-date 25 July 2000 } { - global ad_page_contract_errorkeys - set ad_page_contract_errorkeys [concat $errorkey $ad_page_contract_errorkeys] + set ::ad_page_contract_errorkeys [concat $errorkey $::ad_page_contract_errorkeys] uplevel 1 $code - set ad_page_contract_errorkeys [lrange $ad_page_contract_errorkeys 1 end] + set ::ad_page_contract_errorkeys [lrange $::ad_page_contract_errorkeys 1 end] } ad_proc -private ad_complaints_count {} { @@ -123,8 +117,7 @@ @author Lars Pind @creation-date 25 July 2000 } { - global ad_page_contract_complaints - return [llength $ad_page_contract_complaints] + return [llength $::ad_page_contract_complaints] } ad_proc -private ad_complaints_get_list {} { @@ -133,8 +126,7 @@ @author Lars Pind (lars@pinds.com) @creation-date 24 July 2000 } { - global ad_page_contract_complaints - return $ad_page_contract_complaints + return $::ad_page_contract_complaints } ad_proc -private ad_complaints_parse_error_strings { errorstrings } { @@ -144,8 +136,7 @@ @author Lars Pind (lars@pinds.com) @creation-date 25 July 2000 } { - global ad_page_contract_error_string - array set ad_page_contract_error_string [list] + array set ::ad_page_contract_error_string [list] foreach { errorkeys text } $errorstrings { foreach errorkey $errorkeys { @@ -156,13 +147,13 @@ set name [lindex $errorkeyv 0] set flags [lindex $errorkeyv 1] if { $flags eq "" } { - set ad_page_contract_error_string($name) $text + set ::ad_page_contract_error_string($name) $text } else { foreach flag [split $flags ","] { if { $flag ne "" } { - set ad_page_contract_error_string($name:$flag) $text + set ::ad_page_contract_error_string($name:$flag) $text } else { - set ad_page_contract_error_string($name) $text + set ::ad_page_contract_error_string($name) $text } } } @@ -190,8 +181,7 @@ @author Lars Pind (lars@pinds.com) @creation-date 24 July 2000 } { - global ad_page_contract_validations_passed - set ad_page_contract_validations_passed($key) 1 + set ::ad_page_contract_validations_passed($key) 1 } ad_proc -private ad_page_contract_get_validation_passed_p { key } { @@ -202,8 +192,7 @@ @author Lars Pind (lars@pinds.com) @creation-date 24 July 2000 } { - global ad_page_contract_validations_passed - return [info exists ad_page_contract_validations_passed($key)] + return [info exists ::ad_page_contract_validations_passed($key)] } #################### @@ -628,8 +617,8 @@ if { [string index $flag end] ne ")" } { return -code error "Missing or misplaced end parenthesis for flag '$flag' on argument '$name'" } - set flag_parameters [string range $flag [expr {$left_paren + 1}] [expr {[string length $flag]-2}]] - set flag [string range $flag 0 [expr {$left_paren - 1}]] + set flag_parameters [string range $flag $left_paren+1 [string length $flag]-2] + set flag [string range $flag 0 $left_paren-1] lappend flag_list $flag foreach flag_parameter [split $flag_parameters "|"] { @@ -715,8 +704,8 @@ set root_dir [nsv_get acs_properties root_directory] set script [info script] set root_length [string length $root_dir] - if { ![string compare $root_dir [string range $script 0 [expr { $root_length - 1 }]]] } { - set script [string range $script [expr { $root_length + 1 }] end] + if { $root_dir eq [string range $script 0 $root_length-1 ] } { + set script [string range $script $root_length+1 end] } error [array get doc_elements] "ad_page_contract documentation" @@ -792,7 +781,7 @@ return -code error "[_ acs-tcl.lt_The_-requires_element_1]" } set req_filter [lindex $parts_v 1] - if { $req_filter eq "array" || $req_filter eq "multiple" } { + if { $req_filter in {array multiple} } { return -code error "You can't require \"$req_name:$req_filter\" for block \"$name\"." } } @@ -880,7 +869,7 @@ set formal_name [join [lrange $actual_name_v 0 $i] "."] if { [info exists apc_internal_filter($formal_name:array)] } { set found_p 1 - set variable_to_set var([join [lrange $actual_name_v [expr {$i+1}] end] "."]) + set variable_to_set var([join [lrange $actual_name_v $i+1 end] "."]) break } } @@ -892,7 +881,9 @@ } } - if { [info exists apc_internal_filter($formal_name:multiple)] && $actual_value eq "" } { + if { [info exists apc_internal_filter($formal_name:multiple)] + && $actual_value eq "" + } { # LARS: # If you lappend an emptry_string, it'll actually add the empty string to the list as an element # which is not what we want @@ -920,21 +911,20 @@ ad_page_contract_set_validation_passed $formal_name:notnull } } else { - global ad_page_contract_errorkeys ad_page_contract_validations_passed - set ad_page_contract_validations_passed($formal_name:notnull) 1 + set ::ad_page_contract_validations_passed($formal_name:notnull) 1 foreach filter $apc_filters($formal_name) { - set ad_page_contract_errorkeys [concat $formal_name:$filter $ad_page_contract_errorkeys] + set ::ad_page_contract_errorkeys [concat $formal_name:$filter $::ad_page_contract_errorkeys] if { ![info exists apc_filter_parameters($formal_name:$filter)] } { set filter_ok_p [[ad_page_contract_filter_proc $filter] $formal_name actual_value] } else { set filter_ok_p [[ad_page_contract_filter_proc $filter] $formal_name actual_value \ $apc_filter_parameters($formal_name:$filter)] } - set ad_page_contract_errorkeys [lrange $ad_page_contract_errorkeys 1 end] + set ::ad_page_contract_errorkeys [lrange $::ad_page_contract_errorkeys 1 end] if { $filter_ok_p } { - set ad_page_contract_validations_passed($formal_name:$filter) 1 + set ::ad_page_contract_validations_passed($formal_name:$filter) 1 } else { break } @@ -977,17 +967,21 @@ upvar 1 $formal_name var if { [info exists apc_internal_filter($formal_name:cached)] } { - if { ![ad_page_contract_get_validation_passed_p $formal_name] && ![info exists apc_internal_filter($formal_name:notnull)] && (![info exists apc_default_value($formal_name)] || $apc_default_value($formal_name) eq "") } { + if { ![ad_page_contract_get_validation_passed_p $formal_name] + && ![info exists apc_internal_filter($formal_name:notnull)] + && (![info exists apc_default_value($formal_name)] + || $apc_default_value($formal_name) eq "") + } { if { [info exists apc_internal_filter($formal_name:array)] } { # This is an array variable, so we need to loop through each name.* variable for this package we have ... set array_list "" foreach arrayvar [ns_cache names util_memoize] { if [regexp [list [ad_conn session_id] [ad_conn package_id] "$formal_name."] $arrayvar] { - set arrayvar [lindex $arrayvar [expr {[llength $arrayvar] - 1}]] + set arrayvar [lindex $arrayvar [llength $arrayvar]-1] if { $array_list ne "" } { append array_list " " } - set arrayvar_formal [string range $arrayvar [expr {[string first "." $arrayvar] + 1}] [string length $arrayvar]] + set arrayvar_formal [string range $arrayvar [string first "." $arrayvar]+1 [string length $arrayvar]] append array_list "{$arrayvar_formal} {[ad_get_client_property [ad_conn package_id] $arrayvar]}" } } @@ -1003,15 +997,17 @@ if { [info exists apc_internal_filter($formal_name:verify)] } { if { ![info exists apc_internal_filter($formal_name:array)] } { # This is not an array, verify the variable - if { ![info exists apc_signatures($formal_name)] || \ - ![ad_verify_signature $var $apc_signatures($formal_name)] } { + if { ![info exists apc_signatures($formal_name)] + || ![ad_verify_signature $var $apc_signatures($formal_name)] + } { ad_complain -key $formal_name:verify "[_ acs-tcl.lt_The_signature_for_the]" continue } } else { # This is an array: verify the [array get] form of the array - if { ![info exists apc_signatures($formal_name)] || \ - ![ad_verify_signature [lsort [array get var]] $apc_signatures($formal_name)] } { + if { ![info exists apc_signatures($formal_name)] + || ![ad_verify_signature [lsort [array get var]] $apc_signatures($formal_name)] + } { ad_complain -key $formal_name:verify "[_ acs-tcl.lt_The_signature_for_the]" continue } @@ -1067,7 +1063,6 @@ #################### set done_p 0 - global ad_page_contract_validations_passed ad_page_contract_errorkeys while { !$done_p } { set done_p 1 @@ -1076,13 +1071,27 @@ set code [lindex $apc_validation_blocks($validation_name) 1] set dependencies_met_p 1 + # + # Check, of the variables of the dependencies were provided. + # foreach dependency $dependencies { - if { ![info exists ad_page_contract_validations_passed($dependency)] } { + set varName [lindex [split $dependency ":"] 0] + if { ![ad_page_contract_get_validation_passed_p $varName] } { + # var $varName was not provided set dependencies_met_p 0 break } } + # + # Check, whether the earlier section haven't returned + # errors, in which case the detailed validation is not + # necessary. + # + if { $dependencies_met_p && [ad_complaints_count] > 0} { + set dependencies_met_p 0 + } + if { $dependencies_met_p } { # remove from validation blocks array, so we don't execute the same block twice @@ -1091,17 +1100,18 @@ set no_complaints_before [ad_complaints_count] # Execute the validation block with an environment with a default error key set - set ad_page_contract_errorkeys [concat $validation_name $ad_page_contract_errorkeys] + set ::ad_page_contract_errorkeys [concat $validation_name $::ad_page_contract_errorkeys] set validation_ok_p [ad_page_contract_eval uplevel 1 $code] - set ad_page_contract_errorkeys [lrange $ad_page_contract_errorkeys 1 end] + set ::ad_page_contract_errorkeys [lrange $::ad_page_contract_errorkeys 1 end] - if { $validation_ok_p eq "" || \ - ($validation_ok_p ne "1" && $validation_ok_p ne "0" )} { + if { $validation_ok_p eq "" + || ($validation_ok_p ne "1" && $validation_ok_p ne "0" ) + } { set validation_ok_p [expr {[ad_complaints_count] == $no_complaints_before}] } if { $validation_ok_p } { - set ad_page_contract_validations_passed($validation_name) 1 + set ::ad_page_contract_validations_passed($validation_name) 1 # more stuff to process still set done_p 0 } @@ -1117,8 +1127,7 @@ #################### # Initialize the list of page variables for other scripts to use - global ad_page_contract_variables - set ad_page_contract_variables $apc_formals + set ::ad_page_contract_variables $apc_formals if { [ad_complaints_count] > 0 } { if { [info exists return_errors] } { @@ -1135,7 +1144,10 @@ } # Set the __submit_button_variable. This is used in double click protection. - if {[exists_and_not_null __submit_button_name] && [info exists __submit_button_value]} { + if {[info exists __submit_button_name] + && $__submit_button_name ne "" + && [info exists __submit_button_value] + } { uplevel 1 [list set $__submit_button_name $__submit_button_value] } @@ -1147,9 +1159,8 @@ ad_page_contract. If no variables have been specified, returns an empty list. } { - global ad_page_contract_variables - if { [exists_and_not_null ad_page_contract_variables] } { - return $ad_page_contract_variables + if { [info exists ::ad_page_contract_variables] && $::ad_page_contract_variables ne "" } { + return $::ad_page_contract_variables } return [list] } @@ -1494,15 +1505,17 @@ @author Lars Pind (lars@pinds.com) @creation-date 25 July 2000 } { - # first simple a quick check avoiding the slow regexp - if {[string is integer $value]} { + + # First simple a quick check avoiding the slow regexp + if {[string is integer -strict $value]} { return 1 } + if { [regexp {^(-)?(0*)([1-9][0-9]*|0)$} $value match sign zeros value] } { # Trim the value for any leading zeros set value $sign$value # the string might be still to large, so check again... - if {[string is integer $value]} { + if {[string is integer -strict $value]} { return 1 } } @@ -1517,19 +1530,29 @@ @author Lars Pind (lars@pinds.com) @creation-date 25 July 2000 } { + + # First a simple quick check to avoid the slow regexp + if {[string is integer -strict $value] && $value >= 0} { + return 1 + } + + # Check with leading zeros, but no "-" allowed, so it must be positive if { [regexp {^(0*)([1-9][0-9]*|0)$} $value match zeros value] } { - if {[string is integer $value]} { + if {[string is integer -strict $value]} { return 1 } } - ad_complain "[_ acs-tcl.lt_name_is_not_a_natural]" - return 0 + + ad_complain "[_ acs-tcl.lt_name_is_not_a_natural]" + return 0 } ad_page_contract_filter range { name value range } { Checks whether the value falls between the specified range. Range must be a list of two elements: min and max. + Example spec: w:range(3|7) + @author Yonatan Feldman (yon@arsdigita.com) @creation-date August 18, 2000 } { @@ -1631,7 +1654,7 @@ } # check if all elements are blank - if { [empty_string_p "$date(day)$date(month)$date(year)"] } { + if { "$date(day)$date(month)$date(year)" eq ""} { set date(date) {} return 1 } @@ -1657,18 +1680,18 @@ } if { - "" eq $date(month) \ - || "" eq $date(day) \ - || "" eq $date(year) \ - || $date(month) < 1 || $date(month) > 12 \ - || $date(day) < 1 || $date(day) > 31 \ - || $date(year) < 1 \ - || ($date(month) == 2 && $date(day) > 29) \ - || (($date(year) % 4) != 0 && $date(month) == 2 && $date(day) > 28) \ - || ($date(month) == 4 && $date(day) > 30) \ - || ($date(month) == 6 && $date(day) > 30) \ - || ($date(month) == 9 && $date(day) > 30) \ - || ($date(month) == 11 && $date(day) > 30) + "" eq $date(month) + || "" eq $date(day) + || "" eq $date(year) + || $date(month) < 1 || $date(month) > 12 + || $date(day) < 1 || $date(day) > 31 + || $date(year) < 1 + || ($date(month) == 2 && $date(day) > 29) + || (($date(year) % 4) != 0 && $date(month) == 2 && $date(day) > 28) + || ($date(month) == 4 && $date(day) > 30) + || ($date(month) == 6 && $date(day) > 30) + || ($date(month) == 9 && $date(day) > 30) + || ($date(month) == 11 && $date(day) > 30) } { ad_complain "[_ acs-tcl.lt_Invalid_date_datemont]" return 0 @@ -1692,7 +1715,7 @@ } # check if all elements are blank - if { [empty_string_p "$time(time)$time(ampm)"] } { + if { "$time(time)$time(ampm)" eq "" } { return 1 } @@ -1709,13 +1732,13 @@ } if { - "" eq $time(hours) \ - || "" eq $time(minutes) \ - || "" eq $time(seconds) \ - || (![string equal -nocase "pm" $time(ampm)] && ![string equal -nocase "am" $time(ampm)]) - || $time(hours) < 1 || $time(hours) > 12 \ - || $time(minutes) < 0 || $time(minutes) > 59 \ - || $time(seconds) < 0 || $time(seconds) > 59 + "" eq $time(hours) + || "" eq $time(minutes) + || "" eq $time(seconds) + || (![string equal -nocase "pm" $time(ampm)] && ![string equal -nocase "am" $time(ampm)]) + || $time(hours) < 1 || $time(hours) > 12 + || $time(minutes) < 0 || $time(minutes) > 59 + || $time(seconds) < 0 || $time(seconds) > 59 } { ad_complain "[_ acs-tcl.lt_Invalid_time_timetime_1]" return 0 @@ -1736,7 +1759,7 @@ } # check if all elements are blank - if { [empty_string_p "$time(time)"] } { + if { "$time(time)" eq "" } { return 1 } @@ -1774,11 +1797,14 @@ @author Randy Beggs (randyb@arsdigita.com) @creation-date August 2000 } { - if { [string length $value] < [lindex $range 0] } { - ad_complain "[_ acs-tcl.lt_name_is_too_short__Pl]" + set actual_length [string length $value] + if { $actual_length < [lindex $range 0] } { + set binding [list name $name actual_length $actual_length min_length [lindex $range 0]] + ad_complain [_ acs-tcl.lt_name_is_too_short__Pl $binding] return 0 - } elseif { [string length $value] > [lindex $range 1] } { - ad_complain "[_ acs-tcl.lt_name_is_too_long__Ple]" + } elseif { $actual_length > [lindex $range 1] } { + set binding [list name $name actual_length $actual_length max_length [lindex $range 1]] + ad_complain [_ acs-tcl.lt_name_is_too_long__Ple $binding] return 0 } return 1 @@ -1793,14 +1819,17 @@ @author Randy Beggs (randyb@arsdigita.com) @creation-date August 2000 } { + set actual_length [string length $value] if { [lindex $length 0] eq "min" } { - if { [string length $value] < [lindex $length 1] } { - ad_complain "[_ acs-tcl.lt_name_is_too_short__Pl_1]" + if { $actual_length < [lindex $length 1] } { + set binding [list name $name actual_length $actual_length min_length [lindex $length 1]] + ad_complain [_ acs-tcl.lt_name_is_too_short__Pl_1] return 0 } } else { - if { [string length $value] > [lindex $length 1] } { - ad_complain "[_ acs-tcl.lt_name_is_too_long__Ple_1]" + if { $actual_length > [lindex $length 1] } { + set binding [list name $name actual_length $actual_length max_length [lindex $length 1]] + ad_complain [_ acs-tcl.lt_name_is_too_long__Ple_1 $binding] return 0 } } @@ -1912,7 +1941,7 @@ @author Randy Beggs (randyb@arsdigita.com) @creation-date August 2000 } { - if { ![empty_string_p [string trim $value]] } { + if { [string trim $value] ne "" } { if { ![regexp {^\(?([1-9][0-9]{2})\)?(-|\.|\ )?([0-9]{3})(-|\.|\ )?([0-9]{4})} $value] } { ad_complain "[_ acs-tcl.lt_value_does_not_appear]" return 0 @@ -1930,7 +1959,8 @@ @author Randy Beggs (randyb@arsdigita.com) @creation-date 22 August 2000 } { - if {![empty_string_p [string trim $value]] && ![regexp {[1-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]} $value]} { + if { [string trim $value] ne "" + && ![regexp {[1-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]} $value]} { ad_complain "[_ acs-tcl.lt_name_does_not_appear__1]" return 0 } @@ -1946,22 +1976,20 @@ @creation-date 23 August 2000 } { - set lcase_value [string tolower $value] - if {[string match $value "0"] || \ - [string match $value "1"] || \ - [string match $lcase_value "f"] || \ - [string match $lcase_value "t"] || \ - [string match $lcase_value "true"] || \ - [string match $lcase_value "false"] || \ - [string match $lcase_value "y"] || \ - [string match $lcase_value "n"] || \ - [string match $lcase_value "yes"] || \ - [string match $lcase_value "no"] } { + if {[string is boolean -strict $value]} { return 1 - } else { - ad_complain "[_ acs-tcl.lt_name_does_not_appear__2]" - return 0 } + # set lcase_value [string tolower $value] + # if {$value eq "0" || $value eq "1" + # || $lcase_value eq "f" || $lcase_value eq "t" + # || $lcase_value eq "y" || $lcase_value eq "n" || + # || $lcase_value eq "true" || $lcase_value eq "false" + # || $lcase_value eq "yes" || $lcase_value eq "no" + # } { + # return 1 + # } + ad_complain "[_ acs-tcl.lt_name_does_not_appear__2]" + return 0 } @@ -2029,25 +2057,14 @@ @author Chrisitan Brechbuehler @creation-date 13 Aug 2000 } { - # copied from defs-procs.tcl: ad_return_complaint - - doc_return 200 text/html "[ad_header_with_extra_stuff \ - "[_ acs-tcl.lt_Problem_with_a_Templa]" "" ""] - -

[_ acs-tcl.lt_Problem_with_a_Page_o]

- -
- -[_ acs-tcl.lt_We_had_a_problem_proc] - - - -

- -[_ acs-tcl.Sorry] - -[ad_footer] -" + set complaint_template [parameter::get_from_package_key \ + -package_key "acs-tcl" \ + -parameter "ReturnComplaint" \ + -default "/packages/acs-admin/www/apm/apm.adpacs-tcl/lib/ad-return-complaint"] + set exception_count 1 + set exception_text $error + ns_return 200 text/html [ad_parse_template \ + -params [list [list exception_count $exception_count] \ + [list exception_text $exception_text]] \ + $complaint_template] }