1#!./tclsh 2# $Id: ldapentry.tcl 1204 2009-02-02 19:54:23Z hubert@u.washington.edu $ 3# ======================================================================== 4# Copyright 2006 University of Washington 5# 6# Licensed under the Apache License, Version 2.0 (the "License"); 7# you may not use this file except in compliance with the License. 8# You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# ======================================================================== 13 14# ldapentry.tcl 15# 16# Purpose: CGI script to submit ldap search 17 18# Input: 19set ldap_vars { 20 {dir "Missing Directory Index"} 21 {qn "Missing Query Number"} 22 {si "Missing Search Index"} 23 {ni "Missing Name Index"} 24 {email "" 0} 25} 26 27# Output: 28# 29 30# inherit global config 31source ./alpine.tcl 32source cmdfunc.tcl 33 34 35# Command Menu definition for Message View Screen 36set ldap_menu { 37} 38 39set common_menu { 40 { 41 {} 42 { 43 { 44 # * * * * Ubiquitous INBOX link * * * * 45 if {[string compare inbox [string tolower [WPCmd PEMailbox mailboxname]]]} { 46 cgi_put [cgi_url INBOX open.tcl?folder=INBOX&colid=0&cid=[WPCmd PEInfo key] target=_top class=navbar] 47 } else { 48 cgi_put [cgi_url INBOX fr_main.tcl target=_top class=navbar] 49 } 50 } 51 } 52 } 53 { 54 {} 55 { 56 { 57 # * * * * FOLDER LIST * * * * 58 cgi_puts [cgi_url "Folder List" "wp.tcl?page=folders&cid=[WPCmd PEInfo key]" target=_top class=navbar] 59 } 60 } 61 } 62 { 63 {} 64 { 65 { 66 # * * * * COMPOSE * * * * 67 cgi_puts [cgi_url Compose wp.tcl?page=compose&oncancel=addrbook&cid=[WPCmd PEInfo key] target=_top class=navbar] 68 } 69 } 70 } 71 { 72 {} 73 { 74 { 75 # * * * * RESUME * * * * 76 cgi_puts [cgi_url Resume wp.tcl?page=resume&oncancel=addrbook&cid=[WPCmd PEInfo key] class=navbar] 77 } 78 } 79 } 80 { 81 {} 82 { 83 { 84 # * * * * Addr books * * * * 85 cgi_puts [cgi_url "Address Book" wp.tcl?page=addrbook&oncancel=main.tcl target=_top class=navbar] 86 } 87 } 88 } 89 {{cgi_puts [cgi_nbspace]}} 90 { 91 {} 92 { 93 { 94 # * * * * ldap Query * * * * 95 cgi_puts [cgi_url "Back to Search Results" ldapresult.tcl?dir=${dir}&qn=${qn} class=navbar] 96 } 97 } 98 } 99 {{cgi_puts [cgi_nbspace]}} 100 { 101 {expr {$email > 0}} 102 { 103 { 104 # * * * * Compose To * * * * 105 cgi_puts [cgi_url "Send Mail To This Person" compose.tcl?ldap=1&dir=${dir}&qn=${qn}&si=${si}&ni=${ni}&cid=[WPCmd PEInfo key]&oncancel=addrbook class=navbar] 106 } 107 } 108 } 109 {{cgi_puts [cgi_nbspace]}} 110 { 111 {} 112 { 113 { 114 # * * * * QUIT * * * * 115 cgi_puts [cgi_url "Quit Web Alpine" "$_wp(serverpath)/session/logout.tcl?cid=[WPCmd PEInfo key]&sessid=$sessid class=navbar" target=_top class=navbar] 116 } 117 } 118 } 119} 120 121 122WPEval $ldap_vars { 123 124 if {[catch {WPCmd PEInfo noop} result]} { 125 error [list _action "No Op" $result] 126 } 127 128 cgi_http_head { 129 WPStdHttpHdrs 130 } 131 132 cgi_html { 133 if {$qn != 0} { 134 if {[catch {WPCmd PELdap results $qn} results]} { 135 WPCmd PEInfo statmsg "Some sort of ldap problem" 136 } 137 } 138 139 cgi_head { 140 WPStdHtmlHdr "LDAP Entry" 141 WPStyleSheets 142 } 143 144 cgi_body BGCOLOR="$_wp(bordercolor)" { 145 cgi_table border=0 cellspacing=0 cellpadding=2 width="100%" height="100%" { 146 cgi_table_row { 147 # 148 # next comes the menu down the left side 149 # 150 cgi_table_data valign=top rowspan=4 class=navbar { 151 cgi_table bgcolor=$_wp(menucolor) border=0 cellspacing=0 cellpadding=2 { 152 cgi_table_row { 153 cgi_table_data class=navbar style=padding-top:6 { 154 cgi_puts "Current Folder :" 155 cgi_division align=center "style=\"margin-top:4;margin-bottom:4\"" { 156 cgi_put [cgi_url [WPCmd PEMailbox mailboxname] fr_main.tcl target=_top class=navbar] 157 switch -exact -- [WPCmd PEMailbox state] { 158 readonly { 159 cgi_br 160 cgi_put [cgi_span "style=color: pink; font-weight: bold" "(Read Only)"] 161 } 162 closed { 163 cgi_br 164 cgi_put [cgi_span "style=color: pink; font-weight: bold" "(Closed)"] 165 } 166 ok - 167 default {} 168 } 169 170 cgi_br 171 } 172 173 cgi_hr "width=75%" 174 } 175 } 176 177 cgi_table_row { 178 eval { 179 cgi_table_data $_wp(menuargs) class=navbar style=padding-bottom:10 { 180 WPTFCommandMenu ldap_menu common_menu 181 } 182 } 183 } 184 } 185 } 186 187 188 cgi_table_data valign=top align=center class=dialog width=100% { 189 if {$qn == 0} { 190 cgi_puts [cgi_italic "No matches found"] 191 } else { 192 if {[catch {WPCmd PELdap ldapext $qn "${si}.${ni}"} leinfo]} { 193 cgi_br 194 cgi_puts [cgi_italic "Error getting entry: $leinfo"] 195 } else { 196 197 set lehead [lindex $leinfo 0] 198 set ledata [lindex $leinfo 1] 199 200 foreach item $ledata { 201 if {[string compare [string tolower [lindex $item 0]] name] == 0} { 202 set entry_name [lindex [lindex $item 1] 0] 203 break 204 } 205 } 206 207 cgi_division "style=\"padding:10\"" { 208 cgi_puts [cgi_font size=+1 "Directory Entry for \"$entry_name\""] 209 } 210 211 cgi_table border=0 cellspacing=0 cellpadding=0 width=80% "style=\"border: 1px solid goldenrod; padding: 2\"" { 212 213 set bgwhite 1 214 foreach item $ledata { 215 switch -exact -- [string tolower [lindex $item 0]] { 216 name { 217 continue; 218 } 219 voicemailtelephonenumber { 220 set fieldname "Voice Mail" 221 } 222 "email address" { 223 set do_email 1 224 set fieldname [lindex $item 0] 225 } 226 "fax telephone" { 227 set do_fax 1 228 set fieldname [lindex $item 0] 229 } 230 default { 231 set fieldname [lindex $item 0] 232 } 233 } 234 235 set itematt "" 236 if {[llength $item] > 2} { 237 set itematt [lindex $item 2] 238 } 239 if {$itematt == "objectclass"} { 240 set vals [lindex $item 1] 241 continue 242 } 243 244 if {$bgwhite == 1} { 245 set bgcolor #ffffff 246 set bgwhite 0 247 } else { 248 set bgcolor #eeeeee 249 set bgwhite 1 250 } 251 252 set vals [lindex $item 1] 253 254 cgi_table_row bgcolor=$bgcolor { 255 cgi_table_data width=25% nowrap valign=top rowspan=[llength $vals] { 256 cgi_division "style=\"padding-top:2\"" { 257 cgi_puts [cgi_bold $fieldname] 258 } 259 } 260 261 cgi_table_data rowspan=[llength $vals] { 262 cgi_puts [cgi_img [WPimg dot2] width=8] 263 } 264 265 cgi_table_data height=20px { 266 if {[info exists do_fax]} { 267 set n {[0-9]} 268 set n3 $n$n$n 269 set n4 $n$n$n$n 270 if {[regexp "^\\\+1 ($n3) ($n3)-($n4)\$" [lindex $vals 0] dummy areacode prefix number] && [lsearch -exact {206 425} $areacode] >= 0} { 271 cgi_puts [cgi_url [lindex $vals 0] compose.tcl?ldap=1&fax=yes&dir=${dir}&qn=${qn}&si=${si}&ni=${ni}&cid=[WPCmd PEInfo key]&oncancel=addrbook] 272 } else { 273 cgi_puts [lindex $vals 0] 274 } 275 276 unset do_fax 277 } elseif {[info exists do_email]} { 278 cgi_puts [cgi_url [cgi_font size=-1 face=courier [lindex $vals 0]] compose.tcl?ldap=1&dir=${dir}&qn=${qn}&si=${si}&ni=${ni}&ei=0&cid=[WPCmd PEInfo key]&oncancel=addrbook] 279 } else { 280 cgi_puts [lindex $vals 0] 281 } 282 283 set extrarows [lrange $vals 1 end] 284 } 285 } 286 287 if {[info exists extrarows]} { 288 cgi_table_row bgcolor=$bgcolor { 289 set ei 0 290 foreach extra $extrarows { 291 cgi_table_data height=20px { 292 if {[info exists do_email]} { 293 cgi_puts [cgi_url [cgi_font size=-1 face=courier $extra] compose.tcl?ldap=1&dir=${dir}&qn=${qn}&si=${si}&ni=${ni}&ei=[incr ei]&cid=[WPCmd PEInfo key]&oncancel=addrbook] 294 } else { 295 cgi_puts $extra 296 } 297 } 298 } 299 } 300 301 unset extrarows 302 } 303 304 catch {unset do_email} 305 } 306 } 307 } 308 } 309 } 310 } 311 } 312 } 313 } 314} 315 316