| ### |
| ## debug ?-option value? ?-option value?... |
| ## A command to make debugging more convenient. Print strings, arrays |
| ## and the values of variables as specified by the arguments. |
| ## |
| ## Also allows the setting of an array called debug which will pick up |
| ## options for all debug commands. |
| ## |
| ## We create this command in the ::request namespace because we want the |
| ## user to be able to use the debug array without actually having to set |
| ## it at the global level. |
| ## |
| ## Options: |
| ## |
| ## -subst <on|off> - Each word should be considered a variable and subst'd. |
| ## -separator <string> - A text string that goes between each variable. |
| ## -ip <ip address> - A list of IP addresses to display to. |
| ## |
| ## $Id$ |
| ## |
| ### |
| |
| namespace eval ::rivet { |
| |
| proc debug {args} { |
| |
| # starting with 2.1.0 ::RivetUserConf can be created on demand (see ::rivet::inspect) |
| |
| array set ::RivetUserConf [dict get [::rivet::inspect] user] |
| |
| ## If they've turned off debugging, we don't do anything. |
| |
| if {[info exists ::RivetUserConf(Debug)] && !$::RivetUserConf(Debug)} { |
| return |
| } |
| |
| ## We want to save the REMOTE_ADDR for any subsequent calls to debug. |
| if {![info exists ::RivetUserConf(REMOTE_ADDR)]} { |
| set REMOTE_ADDR [env REMOTE_ADDR] |
| set ::RivetUserConf(REMOTE_ADDR) $REMOTE_ADDR |
| } |
| |
| |
| ## Set some defaults for the options. |
| set data(subst) 0 |
| set data(separator) <br> |
| |
| ## Check RivetUserConf for globally set options. |
| if {[info exists ::RivetUserConf(DebugIp)]} { |
| set data(ip) $::RivetUserConf(DebugIp) |
| } |
| if {[info exists ::RivetUserConf(DebugSubst)]} { |
| set data(subst) $::RivetUserConf(DebugSubst) |
| } |
| if {[info exists ::RivetUserConf(DebugSeparator)]} { |
| set data(separator) $::RivetUserConf(DebugSeparator) |
| } |
| |
| import_keyvalue_pairs data $args |
| |
| if {[info exists data(ip)]} { |
| set can_see 0 |
| foreach ip $data(ip) { |
| if {[string match $data(ip)* $::RivetUserConf(REMOTE_ADDR)]} { |
| set can_see 1 |
| break |
| } |
| } |
| if {!$can_see} { return } |
| } |
| |
| if {[string tolower $data(subst)] != "on"} { |
| ::rivet::html [join $data(args)] |
| return |
| } |
| |
| set lastWasArray 0 |
| foreach varName $data(args) { |
| upvar $varName var |
| if {[array exists var]} { |
| parray $varName |
| set lastWasArray 1 |
| } elseif {[info exists var]} { |
| if {!$lastWasArray} { |
| ::rivet::html $data(separator) |
| } |
| ::rivet::html $var |
| set lastWasArray 0 |
| } else { |
| if {!$lastWasArray} { |
| ::rivet::html $data(separator) |
| } |
| ::rivet::html $varName |
| set lastWasArray 0 |
| } |
| } |
| } |
| } |