Handle hostnames with upper-case letters
[webmin.git] / custom / index.cgi
1 #!/usr/local/bin/perl
2 # index.cgi
3 # Display commands available for execution
4
5 require './custom-lib.pl';
6 &ui_print_header(undef, $text{'index_title'}, "", "intro", 1, 1);
7
8 @cust = grep { &can_run_command($_) } &list_commands();
9 @cust = &sort_commands(@cust);
10
11 # Build links
12 @links = ( );
13 if ($access{'edit'}) {
14         push(@links,"<a href='edit_cmd.cgi?new=1'>$text{'index_create'}</a>");
15         push(@links,"<a href='edit_file.cgi?new=1'>$text{'index_ecreate'}</a>");
16         push(@links,"<a href='edit_sql.cgi?new=1'>$text{'index_screate'}</a>");
17         }
18
19 if (!@cust) {
20         print "<b>$text{'index_none'}</b> <p>\n";
21         }
22 elsif ($config{'display_mode'} == 0) {
23         # Show command buttons
24         print &ui_links_row(\@links);
25         @grid = ( );
26         $form = 0;
27         for($i=0; $i<@cust; $i++) {
28                 $c = $cust[$i];
29                 @a = @{$c->{'args'}};
30                 local $html;
31                 if ($c->{'edit'}) {
32                         $html .= &ui_form_start("view.cgi");
33                         }
34                 elsif ($c->{'sql'}) {
35                         $html .= &ui_form_start("sql.cgi");
36                         }
37                 else {
38                         local @up = grep { $_->{'type'} == 10 } @a;
39                         if (@up) {
40                                 # Has upload fields
41                                 @ufn = map { $_->{'name'} } @up;
42                                 $upid = time().$$;
43                                 $html .= &ui_form_start("run.cgi?id=$upid",
44                                   "form-data", undef,
45                                   &read_parse_mime_javascript($upid, \@ufn));
46                                 }
47                         elsif (@a) {
48                                 $html .= &ui_form_start("run.cgi", "post");
49                                 }
50                         else {
51                                 $html .= &ui_form_start("run.cgi");
52                                 }
53                         }
54                 $html .= &ui_hidden("id", $c->{'id'});
55                 $w = $config{'columns'} == 2 ? 2 : 4;
56                 $html .= &ui_table_start(undef, undef, $w,
57                    $config{'columns'} == 1 ? [ "width=20%", "width=30%" ]
58                                            : [ "width=30%" ]);
59                 $html .= &ui_table_row(undef, &ui_submit($c->{'desc'}), $w, []);
60                 if ($c->{'html'}) {
61                         $html .= &ui_table_row(undef,
62                                 &filter_javascript($c->{'html'}), $w, []);
63                         }
64                 foreach $a (@a) {
65                         $html .= &ui_table_row(&html_escape($a->{'desc'}),
66                                         &show_parameter_input($a, $formno));
67                         }
68                 if (scalar(@a)%2 && $w == 4) {
69                         # Hack to make spacing nicer
70                         $html .= &ui_table_row(" ", " ");
71                         }
72                 if ($access{'edit'}) {
73                         if ($c->{'edit'}) {
74                                 $link = "<a href='edit_file.cgi?id=$c->{'id'}'>$text{'index_fedit'}</a>";
75                                 }
76                         elsif ($c->{'sql'}) {
77                                 $link = "<a href='edit_sql.cgi?id=$c->{'id'}'>$text{'index_sedit'}</a>";
78                                 }
79                         else {
80                                 $link = "<a href='edit_cmd.cgi?id=$c->{'id'}'>$text{'index_edit'}</a>";
81                                 }
82                         $html .= &ui_table_row(undef,
83                                         &ui_links_row([ $link ]), $w);
84                         }
85                 $html .= &ui_table_end();
86                 $html .= &ui_form_end();
87                 push(@grid, $html);
88                 $form++;
89                 }
90         print &ui_grid_table(\@grid, $config{'columns'} || 1, 100,
91              $config{'columns'} == 2 ? [ "width=50%", "width=50%" ] : [ ]);
92         }
93 else {
94         # Just show table of commands
95         print &ui_links_row(\@links);
96         @tds = ( "width=30%", "width=60%", "width=10% nowrap" );
97         print &ui_columns_start([
98                 $text{'index_cmd'},
99                 $text{'index_desc'},
100                 $text{'index_acts'},
101                 ], 100, 0, \@tds);
102         foreach $c (@cust) {
103                 @cols = ( );
104                 local @links = ( );
105                 if ($access{'edit'}) {
106                         local $e = $c->{'edit'} ? "edit_file.cgi" :
107                                    $c->{'sql'} ? "edit_sql.cgi" :
108                                                  "edit_cmd.cgi";
109                         push(@links, "<a href='$e?id=$c->{'id'}'>".
110                                      "$text{'index_ed'}</a>");
111                         }
112                 if ($c->{'edit'} && !@{$c->{'args'}}) {
113                         # Open file editor directly, as file is known
114                         push(@cols, "<a href='view.cgi?id=$c->{'id'}'>".
115                                     &html_escape($c->{'desc'})."</a>");
116                         push(@links, "<a href='view.cgi?id=$c->{'id'}'>".
117                                      $text{'index_acted'}."</a>");
118                         }
119                 elsif ($c->{'sql'} && !@{$c->{'args'}}) {
120                         # Execute SQL directorly, as no args
121                         push(@cols, "<a href='sql.cgi?id=$c->{'id'}'>".
122                                     &html_escape($c->{'desc'})."</a>");
123                         push(@links, "<a href='sql.cgi?id=$c->{'id'}'>".
124                                      $text{'index_actrun'}."</a>");
125                         }
126                 elsif ($c->{'sql'}) {
127                         # Link to SQL query form
128                         push(@cols, "<a href='sqlform.cgi?id=$c->{'id'}'>".
129                                     &html_escape($c->{'desc'})."</a>");
130                         push(@links, "<a href='sqlform.cgi?id=$c->{'id'}'>".
131                                      $text{'index_actsql'}."</a>");
132                         }
133                 elsif (!@{$c->{'args'}}) {
134                         # Link direct to execute page
135                         push(@cols, "<a href='run.cgi?id=$c->{'id'}'>".
136                                     &html_escape($c->{'desc'})."</a>");
137                         push(@links, "<a href='run.cgi?id=$c->{'id'}'>".
138                                      $text{'index_actrun'}."</a>");
139                         }
140                 else {
141                         # Link to parameters form
142                         push(@cols, "<a href='form.cgi?id=$c->{'id'}'>".
143                                     &html_escape($c->{'desc'})."</a>");
144                         push(@links, "<a href='form.cgi?id=$c->{'id'}'>".
145                                      $text{'index_actform'}."</a>");
146                         }
147                 push(@cols, $c->{'html'});
148                 push(@cols, &ui_links_row(\@links));
149                 print &ui_columns_row(\@cols, \@tds);
150                 }
151         print &ui_columns_end();
152         }
153 print &ui_links_row(\@links);
154
155 &ui_print_footer("/", $text{'index'});
156