Handle hostnames with upper-case letters
[webmin.git] / at / index.cgi
1 #!/usr/local/bin/perl
2 # index.cgi
3 # List all at jobs and display a form for creating a new one
4 #
5 # F&AS : default parameters can be set 
6 #   ext_user : default user
7 #   ext_cmd  : default command
8
9 require './at-lib.pl';
10 use POSIX;
11 &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
12 ReadParse();
13
14 # Check if at is installed
15 if (!&has_command("at")) {
16         &ui_print_endpage(&text('index_noat', "<tt>at</tt>",
17                                 "../config.cgi?$module_name"));
18         }
19
20 # Show list of existing jobs
21 @jobs = &list_atjobs();
22 @jobs = grep { &can_edit_user(\%access, $_->{'user'}) } @jobs;
23 if (@jobs) {
24         print &ui_form_start("delete_jobs.cgi", "post");
25         @jobs = sort { $a->{'id'} <=> $b->{'id'} } @jobs;
26         @tds = ( "width=5", "nowrap" );
27         @links = ( &select_all_link("d"), &select_invert_link("d") );
28         print &ui_links_row(\@links);
29         print &ui_columns_start([
30                 "",
31                 $text{'index_id'},
32                 $text{'index_user'},
33                 $text{'index_exec'},
34                 $text{'index_created'},
35                 $text{'index_cmd'} ], 100, 0, \@tds);
36         foreach $j (@jobs) {
37                 local @cols;
38                 push(@cols, "<a href='edit_job.cgi?id=$j->{'id'}'>".
39                             "$j->{'id'}</a>");
40                 push(@cols, &html_escape($j->{'user'}));
41                 $date = localtime($j->{'date'});
42                 push(@cols, "<tt>$date</tt>");
43                 $created = localtime($j->{'created'});
44                 push(@cols, "<tt>$created</tt>");
45                 push(@cols, join("<br>", split(/\n/,
46                                 &html_escape($j->{'realcmd'}))));
47                 print &ui_checked_columns_row(\@cols, \@tds, "d", $j->{'id'});
48                 }
49         print &ui_columns_end();
50         print &ui_links_row(\@links);
51         print &ui_form_end([ [ "delete", $text{'index_delete'} ] ]);
52         print &ui_hr();
53         }
54
55
56 # Show form for creating a new At job
57 print &ui_form_start("create_job.cgi");
58 print &ui_table_start($text{'index_header'}, undef, 2);
59
60 # User to run as
61 $dir = "/";
62 if ($access{'mode'} == 1) {
63         $usel = &ui_select("user", undef,
64                            [ split(/\s+/, $access{'users'}) ]);
65         }
66 elsif ($access{'mode'} == 3) {
67         $usel = "<tt>$remote_user</tt>";
68         print &ui_hidden("user", $remote_user);
69         @uinfo = getpwnam($remote_user);
70         $dir = $uinfo[7];
71         }
72 else {
73         $usel = &ui_user_textbox("user", $in{'ext_user'});
74         }
75 print &ui_table_row($text{'index_user'}, $usel);
76
77 # Run date
78 @now = localtime(time());
79 print &ui_table_row($text{'index_date'},
80         &ui_textbox("day", $now[3], 2)."/".
81         &ui_select("month", $now[4],
82                    [ map { [ $_, $text{"smonth_".($_+1)} ] } ( 0 .. 11 ) ])."/".
83         &ui_textbox("year", $now[5]+1900, 4).
84         &date_chooser_button("day", "month", "year"));
85
86 # Run time
87 print &ui_table_row($text{'index_time'},
88         &ui_textbox("hour", undef, 2).":".&ui_textbox("min", "00", 2));
89
90 # Current date and time
91 ($date, $time) = split(/\s+/, &make_date(time()));
92 print &ui_table_row($text{'index_cdate'}, $date);
93 print &ui_table_row($text{'index_ctime'}, $time);
94
95 # Run in directory
96 print &ui_table_row($text{'index_dir'},
97                     &ui_textbox("dir", $dir, 50));
98
99 # Commands to run
100 print &ui_table_row($text{'index_cmd'},
101                     &ui_textarea("cmd", $in{'ext_cmd'}, 5, 50));
102
103 # Send email on completion
104 print &ui_table_row($text{'index_mail'},
105                     &ui_yesno_radio("mail", 0));
106
107 print &ui_table_end();
108 print &ui_form_end([ [ undef, $text{'create'} ] ]);
109
110 if ($access{'allow'} && $config{'allow_file'}) {
111         # Show form to manage allowed and denied users
112         @allow = &list_allowed();
113         @deny = &list_denied();
114         print &ui_hr();
115         print &ui_form_start("save_allow.cgi", "post");
116         print &ui_table_start($text{'index_allow'}, undef, 2);
117         print &ui_table_row($text{'index_amode'},
118                     &ui_radio("amode", 
119                         @allow ? 1 : @deny ? 2 : 0,
120                         [ [ 0, $text{'index_amode0'} ],
121                           [ 1, $text{'index_amode1'} ],
122                           [ 2, $text{'index_amode2'} ] ]));
123         print &ui_table_row("",
124                     &ui_textarea("ausers", @allow ? join("\n", @allow) :
125                                           @deny ? join("\n", @deny) : undef,
126                                 5, 50));
127         print &ui_table_end();
128         print &ui_form_end([ [ "save", $text{'save'} ] ]);
129         }
130
131 &ui_print_footer("/", $text{'index'});
132