2 # Show the LDAP server's data tree
4 require './ldap-server-lib.pl';
5 &ui_print_header(undef, $text{'browser_title'}, "", "browser");
6 $access{'browser'} || &error($text{'browser_ecannot'});
9 # Connect to LDAP server, or die trying
10 $ldap = &connect_ldap_db();
12 print &text('browser_econn', $ldap),"<p>\n";
13 &ui_print_footer("", $text{'index_return'});
17 # Work out the base (current navigation level)
18 if ($in{'goparent'}) {
19 $base = $in{'parent'};
21 elsif (!$in{'base'}) {
22 $base = &get_ldap_base();
28 # Show current base (with option to change), and parent button
30 print &ui_form_start("edit_browser.cgi"),"\n";
31 print "<b>$text{'browser_base'}</b>\n";
32 print &ui_textbox("base", $base, 60)," ",&ui_submit($text{'browser_ok'}),"\n";
34 $parent =~ s/^[^,]+,\s*//;
35 if ($parent =~ /\S/) {
36 print &ui_hidden("parent", $parent),"\n";
37 print " \n";
38 print &ui_submit($text{'browser_parent'}, "goparent"),"\n";
43 # Show list of objects under the base, and its attributes
45 $filter = '(|'.join('', map { '('.$_.'=*'.$in{'search'}.'*)' }
49 $filter = '(objectClass=*)';
51 $rv = $ldap->search(base => $base,
54 sizelimit => int($config{'browse_max'}),
56 @subs = sort { lc($a->dn()) cmp lc($b->dn()) } $rv->all_entries;
57 if ($rv->code && !@subs) {
59 print &text('browser_esearch', $rv->error),"<p>\n";
62 # Start tabs for layout
63 $in{'mode'} ||= @subs || $in{'search'} ? "subs" : "attrs";
64 @tabs = ( [ 'subs', $text{'browser_subs'} ],
65 [ 'attrs', $text{'browser_attrs'} ] );
66 print &ui_tabs_start(\@tabs, "browser", $in{'mode'}, 1);
68 # Show sub-objects, if any
69 print &ui_tabs_start_tab("browser", "subs");
70 @crlinks = ( "<a href='add_form.cgi?base=".
71 &urlize($base)."'>$text{'browser_sadd'}</a>" );
72 if ($rv->code || ($in{'search'} && !@subs)) {
74 if (@subs && $in{'search'}) {
76 print &text('browser_toomany2', "<i>$in{'search'}</i>",
77 $config{'browse_max'}),"<p>\n";
80 # No search, many sub-objects
81 print &text('browser_toomany',
82 $config{'browse_max'}),"<p>\n";
86 print &text('browser_nomatch',
87 "<i>$in{'search'}</i>"),"<p>\n";
89 &show_search_form($text{'browser_search'});
90 print &ui_links_row(\@crlinks);
93 # Search result, so show form
95 &show_search_form($text{'browser_search2'});
99 @tds = ( "width=90%", "width=10%" );
102 print &ui_form_start("rename_browser.cgi", "post");
103 print &ui_hidden("old", $in{'rename'});
106 # Delete sub-objects form
107 print &ui_form_start("sdelete_browser.cgi", "post");
108 @tds = ( "width=5", @tds );
109 @links = ( &select_all_link("d", $formno),
110 &select_invert_link("d", $formno),
114 print &ui_hidden("base", $base);
115 print &ui_links_row(\@links);
116 print &ui_columns_start([ $in{'rename'} ? ( ) : ( "" ),
117 $text{'browser_sub'},
118 $text{'browser_acts'},
120 foreach $dn (@subs) {
121 $link = "<a href='edit_browser.cgi?base=".
122 &urlize($dn->dn())."'>".
123 &html_escape($dn->dn())."</a>";
124 @alinks = ( "<a href='edit_browser.cgi?base=".
125 &urlize($base)."&mode=subs".
126 "&rename=".&urlize($dn->dn()).
127 "'>$text{'browser_rename'}</a>" );
128 if ($in{'rename'} eq $dn->dn()) {
130 @alinks = ( "<a href='edit_browser.cgi?base=".
131 &urlize($base)."&mode=subs".
132 "'>$text{'browser_cancel'}</a>" );
133 print &ui_columns_row([
134 &ui_textbox("rename", $dn->dn(), 70),
135 &ui_links_row(\@alinks) ], \@tds);
137 elsif ($in{'rename'}) {
139 print &ui_columns_row([
140 $link,&ui_links_row(\@alinks) ], \@tds);
143 # Rename or select for delete
144 print &ui_checked_columns_row([
145 $link, &ui_links_row(\@alinks) ],
146 \@tds, "d", $dn->dn());
149 print &ui_columns_end();
150 print &ui_links_row(\@links);
151 print &ui_form_end([ [ undef,
152 $in{'rename'} ? $text{'browser_rsave'}
153 : $text{'browser_sdelete'} ] ]);
158 print "<i>$text{'browser_subnone'}</i><p>\n";
159 print &ui_links_row(\@crlinks);
161 print &ui_tabs_end_tab();
164 print &ui_tabs_start_tab("browser", "attrs");
165 $rv2 = $ldap->search(base => $base,
166 filter => '(objectClass=*)',
168 ($bo) = $rv2->all_entries;
169 @attrs = sort { lc($a) cmp lc($b) } $bo->attributes();
171 # Show all attributes
172 @tds = ( "valign=top width=45%", "valign=top width=45%",
173 "width=5% valign=top" );
176 print &ui_form_start("save_browser.cgi", "post");
177 print &ui_hidden("edit", $in{'edit'});
181 print &ui_form_start("add_browser.cgi", "post");
185 print &ui_form_start("delete_browser.cgi", "post");
186 @links = ( &select_all_link("d", $formno),
187 &select_invert_link("d", $formno),
188 "<a href='edit_browser.cgi?base=".
189 &urlize($bo->dn())."&add=1&mode=attrs'>".
190 "$text{'browser_add'}</a>",
191 "<a href='add_form.cgi?base=".
192 &urlize($base)."&clone=1'>".
193 "$text{'browser_clone'}</a>" );
194 @tds = ( "width=5", @tds );
196 print &ui_hidden("base", $bo->dn());
197 print &ui_hidden("mode", "attrs");
198 print &ui_links_row(\@links);
199 print &ui_columns_start([
200 $in{'edit'} || $in{'add'} ? ( ) : ( "" ),
201 $text{'browser_name'},
202 $text{'browser_value'},
203 $text{'browser_acts'} ], 100, 0, \@tds);
204 foreach $a (@attrs) {
205 @v = $bo->get_value($a);
206 @alinks = ( "<a href='edit_browser.cgi?base=".
207 &urlize($bo->dn())."&mode=attrs".
208 "&edit=$a'>$text{'browser_edit'}</a>" );
209 @cols = ( $a, join(", ", @v),
210 &ui_links_row(\@alinks),
212 if ($in{'edit'} eq $a) {
214 @alinks = ( "<a href='edit_browser.cgi?base=".
215 &urlize($bo->dn())."&mode=attrs".
216 "'>$text{'browser_cancel'}</a>" );
217 print &ui_columns_row([
218 $a, &ui_textarea("value", join("\n", @v),
220 &ui_links_row(\@alinks),
223 elsif ($in{'edit'} || $in{'add'}) {
225 print &ui_columns_row(\@cols, \@tds);
228 # Edit or select for delete
229 print &ui_checked_columns_row(
230 \@cols, \@tds, "d", $a);
234 # Show row to add an attribute
235 @alinks = ( "<a href='edit_browser.cgi?base=".
236 &urlize($bo->dn())."&mode=attrs".
237 "'>$text{'browser_cancel'}</a>" );
238 print &ui_columns_row([
239 &ui_textbox("add", undef, 20),
240 &ui_textbox("value", undef, 60),
241 &ui_links_row(\@alinks),
244 print &ui_columns_end();
245 print &ui_links_row(\@links);
246 print &ui_form_end([ [ undef, $in{'edit'} ? $text{'save'} :
247 $in{'add'} ? $text{'create'} :
248 $text{'browser_delete'} ] ]);
252 print "<i>$text{'browser_attrnone'}</i><p>\n";
253 print &ui_links_row(\@links);
255 print &ui_tabs_end_tab();
257 print &ui_tabs_end(1);
261 &ui_print_footer("", $text{'index_return'});
266 print &ui_form_start("edit_browser.cgi");
267 print &ui_hidden("base", $base);
268 print "<b>$msg</b>\n";
269 print &ui_textbox("search", $in{'search'}, 40),"\n";
270 print &ui_submit($text{'browser_sok'}),"<p>\n";
271 print &ui_form_end();