Advertisement
Guest User

ns_querygetarray

a guest
May 8th, 2011
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 1.39 KB | None | 0 0
  1. # jQuery example
  2. # $.post("/json/answer/set/question/",$("#form_answers").serializeArray())
  3. proc ns_querygetarray {} {
  4.     # name {name1 name2 ...} id {id1 id2 ...} ...
  5.     set info [dict create]
  6.     set form [ns_getform]
  7.     set size [ns_set size $form]
  8.     # empty form
  9.     if { $size == 0 } return
  10.     for {set i 0} {$i < $size} {incr i} {
  11.         set k [ns_set key $form $i]
  12.         set v [ns_set value $form $i]
  13.         # empty-named element is not exists
  14.         if { $k eq "" } continue
  15.         # check for valid names
  16.         if { [regexp -- {^\w+$} $k] == 0 } {
  17.             error "Field name is dangerous (\"$k\")"
  18.         }
  19.         dict lappend info [string tolower $k] [string trim $v]
  20.     }
  21.     # empty form (as form with only empty elements)
  22.     if { [llength $info] == 0 } return
  23.     # all fields must have equal elements count
  24.     set counter ""
  25.     dict for {k v} $info {
  26.         lappend counter [llength $v]
  27.     }
  28.     set counter [lsort -unique $counter]
  29.     if { [llength $counter] > 1 } {
  30.         error "Form arrays have non-equal length"
  31.     }
  32.     # transpose
  33.     set infoT ""
  34.     for {set i 0} {$i<$counter} {incr i} {
  35.         set row ""
  36.         foreach k [dict keys $info] {
  37.             lappend row $k [lindex [dict get $info $k] $i]
  38.         }
  39.         lappend infoT $row
  40.     }
  41.     # {name name1 id id1 ...} {name name2 id id2 ...} ....
  42.     return $infoT
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement