]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - html/cgi-bin/connscheduler.cgi
"Update Booster" fertiggestellt und getestet.
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / connscheduler.cgi
CommitLineData
4e565351
MT
1#!/usr/bin/perl
2#
0e199a22
MT
3# IPFire CGI
4# based on:
5#
4e565351
MT
6# IPCop Connection Scheduler Web-Iface
7#
8# This code is distributed under the terms of the GPL
9#
957fb958
MT
10# 2006-04-xx created by weizen_42 at ipcop-forum dot de
11# 2006-06-xx added reboot and shutdown
12# 2006-08-20 added ipsecctrl
13#
4e565351
MT
14
15
16use strict;
17
18# enable only the following on debugging purpose
957fb958
MT
19use warnings;
20use CGI::Carp 'fatalsToBrowser';
4e565351
MT
21
22require '/var/ipfire/general-functions.pl';
23require "${General::swroot}/lang.pl";
24require "${General::swroot}/header.pl";
25
0937506a 26require '/var/ipfire/connscheduler/lib.pl';
4e565351
MT
27
28my $buttontext = $Lang::tr{'add'};
29my $hiddenvalue = 'add';
30my $day;
31my $hour;
32my $minute;
33my %temppppsettings=();
34my @profilenames=();
35
36
37#
38# defaults for settings
39#
40my $selected_hour = '00';
41my $selected_minute = '00';
42my $checked_connect = "checked='checked'";
43my $checked_profile = '';
44my %selected = ();
45$selected{'reconnect'} = '';
46$selected{'dial'} = '';
47$selected{'hangup'} = '';
48$selected{'reboot'} = '';
49$selected{'shutdown'} = '';
957fb958
MT
50$selected{'ipsecstart'} = '';
51$selected{'ipsecstop'} = '';
4e565351
MT
52my $selected_profile = 1;
53my $checked_days = "checked='checked'";
54my $selected_daystart = 1;
55my $selected_dayend = 31;
56my $checked_weekdays = '';
57my $checked_mon = "checked='checked'";
58my $checked_tue = "checked='checked'";
59my $checked_wed = "checked='checked'";
60my $checked_thu = "checked='checked'";
61my $checked_fri = "checked='checked'";
62my $checked_sat = "checked='checked'";
63my $checked_sun = "checked='checked'";
64my $comment = '';
65
66my %cgiparams = ();
67
68$cgiparams{'ACTION'} = ''; # add/edit/update/remove/wakeup
69$cgiparams{'ACTION_ACTION'} = ''; # CONNECT/PROFILE
70$cgiparams{'ACTION_CONNECT'} = ''; # connect/disconnect/reconnect
71$cgiparams{'ACTION_PROFILENR'} = 0;
72$cgiparams{'ACTION_HOUR'} = '';
73$cgiparams{'ACTION_MINUTE'} = '';
74$cgiparams{'ACTION_DAYSTYPE'} = '';
75$cgiparams{'ACTION_DAYSTART'} = 1;
76$cgiparams{'ACTION_DAYEND'} = 31;
77$cgiparams{'Mon'} = '';
78$cgiparams{'Tue'} = '';
79$cgiparams{'Wed'} = '';
80$cgiparams{'Thu'} = '';
81$cgiparams{'Fri'} = '';
82$cgiparams{'Sat'} = '';
83$cgiparams{'Sun'} = '';
84$cgiparams{'ACTION_COMMENT'} = '';
85
86&Header::getcgihash(\%cgiparams);
87
88
89# read the profile names
90my $i=0;
91for ($i = 1; $i <= $CONNSCHED::maxprofiles; $i++)
92{
93 %temppppsettings = ();
94 $temppppsettings{'PROFILENAME'} = $Lang::tr{'empty'};
95 &General::readhash("${General::swroot}/ppp/settings-$i", \%temppppsettings);
96 $profilenames[$i] = $temppppsettings{'PROFILENAME'};
97}
98
99&Header::showhttpheaders();
100&Header::openpage($Lang::tr{'connscheduler'}, 1, '');
101&Header::openbigbox('100%', 'left', '', '');
102
103
104# Found this usefull piece of code in BlockOutTraffic AddOn 8-)
105# fwrules.cgi
106###############
107# DEBUG DEBUG
108#&Header::openbox('100%', 'left', 'DEBUG');
109#my $debugCount = 0;
110#foreach my $line (sort keys %cgiparams) {
111# print "$line = $cgiparams{$line}<br />\n";
112# $debugCount++;
113#}
114#print "&nbsp;Count: $debugCount\n";
115#&Header::closebox();
116# DEBUG DEBUG
117###############
118
119
120if ( $cgiparams{'ACTION'} eq 'toggle' )
121{
122 if ( $CONNSCHED::config[$cgiparams{'ID'}]{'ACTIVE'} eq 'on' )
123 {
124 $CONNSCHED::config[$cgiparams{'ID'}]{'ACTIVE'} = 'off';
125 }
126 else
127 {
128 $CONNSCHED::config[$cgiparams{'ID'}]{'ACTIVE'} = 'on';
129 }
130
131 &CONNSCHED::WriteConfig;
132}
133
134if ( ($cgiparams{'ACTION'} eq 'add') || ($cgiparams{'ACTION'} eq 'update') )
135{
136 my $l_action = $cgiparams{'ACTION_CONNECT'};
137 my $l_profilenr = '';
138 my $l_days = '';
139 my $l_weekdays = '';
140
141 if ( $cgiparams{'ACTION'} eq 'add' )
142 {
143 $i = $#CONNSCHED::config + 1;
144 $CONNSCHED::config[$i]{'ACTIVE'} = 'on';
145 }
146 else
147 {
148 $i = $cgiparams{'UPDATE_ID'};
149 }
150
151 if ( $cgiparams{'ACTION_ACTION'} eq 'PROFILE')
152 {
153 $l_action = 'select profile';
154 $l_profilenr = $cgiparams{'ACTION_PROFILENR'};
155 }
156
157 if ( $cgiparams{'ACTION_DAYSTYPE'} eq 'WEEKDAYS' )
158 {
159 if ( $cgiparams{'Mon'} eq 'on' ) { $l_weekdays .= 'Mon '; }
160 if ( $cgiparams{'Tue'} eq 'on' ) { $l_weekdays .= 'Tue '; }
161 if ( $cgiparams{'Wed'} eq 'on' ) { $l_weekdays .= 'Wed '; }
162 if ( $cgiparams{'Thu'} eq 'on' ) { $l_weekdays .= 'Thu '; }
163 if ( $cgiparams{'Fri'} eq 'on' ) { $l_weekdays .= 'Fri '; }
164 if ( $cgiparams{'Sat'} eq 'on' ) { $l_weekdays .= 'Sat '; }
165 if ( $cgiparams{'Sun'} eq 'on' ) { $l_weekdays .= 'Sun '; }
166 }
167 else
168 {
169 $l_days = "$cgiparams{'ACTION_DAYSTART'} - $cgiparams{'ACTION_DAYEND'}";
170 }
171
172 $CONNSCHED::config[$i]{'ACTION'} = $l_action;
173 $CONNSCHED::config[$i]{'PROFILENR'} = $l_profilenr;
174 $CONNSCHED::config[$i]{'TIME'} = "$cgiparams{'ACTION_HOUR'}:$cgiparams{'ACTION_MINUTE'}";
175 $CONNSCHED::config[$i]{'DAYSTYPE'} = lc($cgiparams{'ACTION_DAYSTYPE'});
176 $CONNSCHED::config[$i]{'DAYS'} = $l_days;
177 $CONNSCHED::config[$i]{'WEEKDAYS'} = $l_weekdays;
178 $CONNSCHED::config[$i]{'COMMENT'} = &Header::cleanhtml($cgiparams{'ACTION_COMMENT'});
179
180 &CONNSCHED::WriteConfig;
181}
182
183if ( $cgiparams{'ACTION'} eq 'edit' )
184{
185 $i = $cgiparams{'ID'};
186
187 $selected_hour = substr($CONNSCHED::config[$i]{'TIME'},0,2);
188 $selected_minute = substr($CONNSCHED::config[$i]{'TIME'},3,2);
189
190 if ( $CONNSCHED::config[$i]{'ACTION'} eq 'select profile' )
191 {
192 $checked_connect = '';
193 $checked_profile = "checked='checked'";
194 $selected_profile = $CONNSCHED::config[$i]{'PROFILENR'};
195 }
196 else
197 {
198 $selected{"$CONNSCHED::config[$i]{'ACTION'}"} = "selected='selected'";
199 }
200
201 if ( $CONNSCHED::config[$i]{'DAYSTYPE'} eq 'days' )
202 {
203 my @temp = split(/-/,$CONNSCHED::config[$i]{'DAYS'},2);
204
205 $selected_daystart = substr($temp[0], 0, -1);
206 $selected_dayend = substr($temp[1], 1);
207 }
208 else
209 {
210 my $wd = $CONNSCHED::config[$i]{'WEEKDAYS'};
211 $checked_mon = '' if ( index($wd, 'Mon') == -1 ) ;
212 $checked_tue = '' if ( index($wd, 'Tue') == -1 ) ;
213 $checked_wed = '' if ( index($wd, 'Wed') == -1 ) ;
214 $checked_thu = '' if ( index($wd, 'Thu') == -1 ) ;
215 $checked_fri = '' if ( index($wd, 'Fri') == -1 ) ;
216 $checked_sat = '' if ( index($wd, 'Sat') == -1 ) ;
217 $checked_sun = '' if ( index($wd, 'Sun') == -1 ) ;
218
219 $checked_days = '';
220 $checked_weekdays = "checked='checked'";
221 }
222
223 $comment = $CONNSCHED::config[$cgiparams{'ID'}]{'COMMENT'};
224
225 $buttontext = $Lang::tr{'update'};
226 $hiddenvalue = 'update';
227}
228
229if ( $cgiparams{'ACTION'} eq 'remove' )
230{
231 # simply set ACTIVE to empty, WriteConfig will handle the gory details
232 $CONNSCHED::config[$cgiparams{'ID'}]{'ACTIVE'} = '';
233 &CONNSCHED::WriteConfig;
234}
235if ( ($cgiparams{'ACTION'} eq 'down') || ($cgiparams{'ACTION'} eq 'up') )
236{
237 my $action = @CONNSCHED::config[$cgiparams{'ID'}];
238 my $newpos = 0;
239
240 splice(@CONNSCHED::config, $cgiparams{'ID'}, 1);
241
242 if ( ($cgiparams{'ACTION'} eq 'down') )
243 {
244 $newpos = $cgiparams{'ID'} + 1;
245 }
246 else
247 {
248 $newpos = $cgiparams{'ID'} - 1;
249 }
250
251 splice(@CONNSCHED::config, $newpos, 0, $action);
252
253 &CONNSCHED::WriteConfig;
254}
255
256
257#
258# Add / Edit Box
259#
260
957fb958 261&Header::openbox('100%', 'left', $Lang::tr{'ConnSched add action'});
4e565351
MT
262
263print <<END
264<form method='post' name='addevent' action='$ENV{'SCRIPT_NAME'}'>
265<table width='100%' border='0' cellspacing='6' cellpadding='0'>
266<tr>
957fb958 267<td width='15%' class='base'>$Lang::tr{'ConnSched time'}</td>
4e565351
MT
268<td><select name='ACTION_HOUR'>
269END
270;
271for ($hour = 0; $hour <= 23; $hour++)
272{
273 my $hour00 = $hour < 10 ? "0$hour" : $hour;
274 if ( $hour00 eq $selected_hour )
275 {
276 print "<option value='$hour00' selected='selected'>$hour00</option>";
277 }
278 else
279 {
280 print "<option value='$hour00'>$hour00</option>";
281 }
282}
283print "</select>&nbsp;:&nbsp;<select name='ACTION_MINUTE'>";
284for ($minute = 0; $minute <= 55; $minute += 5)
285{
286 my $minute00 = $minute < 10 ? "0$minute" : $minute;
287 if ( $minute00 eq $selected_minute )
288 {
289 print "<option value='$minute00' selected='selected'>$minute00</option>";
290 }
291 else
292 {
293 print "<option value='$minute00'>$minute00</option>";
294 }
295}
296
297print <<END
298</select></td></tr>
299<tr><td colspan='2'><hr /></td></tr>
957fb958 300<tr><td width='15%' class='base'>$Lang::tr{'ConnSched action'}</td><td>
4e565351 301<input type='radio' value='CONNECT' name='ACTION_ACTION' $checked_connect />&nbsp;<select name='ACTION_CONNECT'>
957fb958 302<option value='reconnect' $selected{'reconnect'}>$Lang::tr{'ConnSched reconnect'}</option>
4e565351
MT
303<option value='dial' $selected{'dial'}>$Lang::tr{'dial'}</option>
304<option value='hangup' $selected{'hangup'}>$Lang::tr{'hangup'}</option>
305<option value='reboot' $selected{'reboot'}>$Lang::tr{'reboot'}</option>
306<option value='shutdown' $selected{'shutdown'}>$Lang::tr{'shutdown'}</option>
957fb958
MT
307<option value='ipsecstart' $selected{'ipsecstart'}>$Lang::tr{'ConnSched ipsecstart'}</option>
308<option value='ipsecstop' $selected{'ipsecstop'}>$Lang::tr{'ConnSched ipsecstop'}</option>
4e565351
MT
309</select></td></tr>
310<tr><td width='15%' class='base'>&nbsp;</td>
957fb958 311<td><input type='radio' value='PROFILE' name='ACTION_ACTION' $checked_profile />&nbsp;$Lang::tr{'ConnSched change profile title'}&nbsp;<select name='ACTION_PROFILENR'>
4e565351
MT
312END
313;
314for ($i = 1; $i <= $CONNSCHED::maxprofiles; $i++)
315{
316 if ( $i == $selected_profile )
317 {
318 print "<option value='$i' selected='selected'>$i. $profilenames[$i]</option>";
319 }
320 else
321 {
322 print "<option value='$i'>$i. $profilenames[$i]</option>";
323 }
324}
325print <<END
326</select></td></tr>
327<tr><td colspan='2'><hr /></td></tr>
957fb958 328<tr><td width='15%' class='base'>$Lang::tr{'ConnSched days'}</td>
4e565351
MT
329<td><input type='radio' value='DAYS' name='ACTION_DAYSTYPE' $checked_days />&nbsp;<select name='ACTION_DAYSTART'>
330END
331;
332for ($day = 1; $day <= 31; $day++)
333{
334 if ( $day == $selected_daystart )
335 {
336 print "<option value='$day' selected='selected'>$day</option>";
337 }
338 else
339 {
340 print "<option value='$day'>$day</option>";
341 }
342}
343print "</select>&nbsp;-&nbsp;<select name='ACTION_DAYEND'>";
344for ($day = 1; $day <= 31; $day++)
345{
346 if ( $day == $selected_dayend )
347 {
348 print "<option value='$day' selected='selected'>$day</option>";
349 }
350 else
351 {
352 print "<option value='$day'>$day</option>";
353 }
354}
355
356print <<END
357</select></td></tr>
957fb958 358<tr><td width='15%' class='base'>&nbsp;</td><td><input type='radio' value='WEEKDAYS' name='ACTION_DAYSTYPE' $checked_weekdays />&nbsp;$Lang::tr{'ConnSched weekdays'}<br />
4e565351
MT
359&nbsp;&nbsp;<input type='checkbox' name='Mon' $checked_mon />$Lang::tr{'monday'}<br />
360&nbsp;&nbsp;<input type='checkbox' name='Tue' $checked_tue />$Lang::tr{'tuesday'}<br />
361&nbsp;&nbsp;<input type='checkbox' name='Wed' $checked_wed />$Lang::tr{'wednesday'}<br />
362&nbsp;&nbsp;<input type='checkbox' name='Thu' $checked_thu />$Lang::tr{'thursday'}<br />
363&nbsp;&nbsp;<input type='checkbox' name='Fri' $checked_fri />$Lang::tr{'friday'}<br />
364&nbsp;&nbsp;<input type='checkbox' name='Sat' $checked_sat />$Lang::tr{'saturday'}<br />
365&nbsp;&nbsp;<input type='checkbox' name='Sun' $checked_sun />$Lang::tr{'sunday'}
366</td></tr>
367<tr><td colspan='2'><hr /></td></tr>
368<tr><td width='15%' class='base'>$Lang::tr{'remark title'}&nbsp;<img src='/blob.gif' alt='*' /></td>
369<td><input type='text' name='ACTION_COMMENT' size='40' value='$comment' /></td></tr></table>
370<hr />
371<table width='100%'><tr>
372 <td class='base' valign='top'><img src='/blob.gif' alt='*' /></td>
373 <td width='55%' class='base'>$Lang::tr{'this field may be blank'}</td>
374 <td width='40%' align='center'><input type='submit' name='SUBMIT' value='$buttontext' />
375 <input type='hidden' name='ACTION' value='$hiddenvalue' /></td>
376 <input type='hidden' name='UPDATE_ID' value='$cgiparams{'ID'}' /></td>
377</tr></table>
378</form>
379
380END
381;
382
383&Header::closebox();
384
385#
386# Box with List of events
387#
388
957fb958 389&Header::openbox('100%', 'left', $Lang::tr{'ConnSched scheduled actions'});
4e565351
MT
390print <<END
391<table width='100%' border='0' cellspacing='1' cellpadding='0'>
392<tr>
393<td align='center' width='10%'><b>$Lang::tr{'time'}</b></td>
394<td width='15%'>&nbsp;</td>
395<td align='center' width='60%'><b>$Lang::tr{'remark'}</b></td>
396<td align='center' colspan='5' width='5%'><b>$Lang::tr{'action'}</b></td>
397</tr>
398END
399;
400
401for my $id ( 0 .. $#CONNSCHED::config )
402{
403 my $trcolor;
404
405 if ( ($cgiparams{'ACTION'} eq 'edit') && ($id == $cgiparams{'ID'}) )
406 {
407 $trcolor = "<tr bgcolor='${Header::colouryellow}'>";
408 }
409 elsif ( $id % 2 )
410 {
411 $trcolor = "<tr bgcolor='$Header::table2colour'>";
412 }
413 else
414 {
415 $trcolor = "<tr bgcolor='$Header::table1colour'>";
416 }
417
418print <<END
419$trcolor
420<td align='center'>$CONNSCHED::config[$id]{'TIME'}</td>
957fb958 421<td>$Lang::tr{"ConnSched $CONNSCHED::config[$id]{'ACTION'}"}&nbsp;$CONNSCHED::config[$id]{'PROFILENR'}</td>
4e565351
MT
422<td>$CONNSCHED::config[$id]{'COMMENT'}</td>
423<td align='center'>
424 <form method='post' name='frm$id' action='$ENV{'SCRIPT_NAME'}'>
425 <input type='hidden' name='ACTION' value='toggle' />
426 <input type='image' name='$Lang::tr{'toggle enable disable'}' src='/images/$CONNSCHED::config[$id]{'ACTIVE'}.gif' alt='$Lang::tr{'toggle enable disable'}' title='$Lang::tr{'toggle enable disable'}' />
427 <input type='hidden' name='ID' value='$id' />
428 </form>
429</td>
430<td align='center'>
431 <form method='post' name='frm$id' action='$ENV{'SCRIPT_NAME'}'>
432 <input type='hidden' name='ACTION' value='edit' />
433 <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
434 <input type='hidden' name='ID' value='$id' />
435 </form>
436</td>
437<td align='center'>
438 <form method='post' name='frm$id' action='$ENV{'SCRIPT_NAME'}'>
439 <input type='hidden' name='ACTION' value='remove' />
440 <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' alt='$Lang::tr{'remove'}' title='$Lang::tr{'remove'}' />
441 <input type='hidden' name='ID' value='$id' />
442 </form>
443</td>
444<td align='center'>
445 <form method='post' name='frm$id' action='$ENV{'SCRIPT_NAME'}'>
446 <input type='hidden' name='ACTION' value='up' />
957fb958 447 <input type='image' name='$Lang::tr{'up'}' src='/images/up.gif' alt='$Lang::tr{'ConnSched up'}' title='$Lang::tr{'ConnSched up'}' />
4e565351
MT
448 <input type='hidden' name='ID' value='$id' />
449 </form>
450</td>
451<td align='center'>
452 <form method='post' name='frm$id' action='$ENV{'SCRIPT_NAME'}'>
453 <input type='hidden' name='ACTION' value='down' />
957fb958 454 <input type='image' name='$Lang::tr{'down'}' src='/images/down.gif' alt='$Lang::tr{'ConnSched down'}' title='$Lang::tr{'ConnSched down'}' />
4e565351
MT
455 <input type='hidden' name='ID' value='$id' />
456 </form>
457</td>
458</tr>
459$trcolor
460<td>&nbsp;</td>
461<td colspan='7'>$CONNSCHED::config[$id]{'DAYS'}$CONNSCHED::config[$id]{'WEEKDAYS_PR'}&nbsp;</td>
462</tr>
463END
464;
465}
466
467print <<END
468</table>
469<br />
470<hr />
471<table width='100%'>
472<tr>
473 <td>&nbsp;</td>
474 <td align='right'>
475 <b><small><a href="http://www.ban-solms.de/t/IPCop.html" target="_blank">Connection Scheduler $CONNSCHED::version</a></small></b>
476 </td>
477</tr>
478</table>
479END
480;
481
482
483&Header::closebox();
484
485&Header::closebigbox();
486&Header::closepage();