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