Project

General

Profile

Download (28.8 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
    wizard.php
5
    Copyright (C) 2004 Scott Ullrich
6
    All rights reserved.
7

    
8
    Redistribution and use in source and binary forms, with or without
9
    modification, are permitted provided that the following conditions are met:
10

    
11
    1. Redistributions of source code must retain the above copyright notice,
12
       this list of conditions and the following disclaimer.
13

    
14
    2. Redistributions in binary form must reproduce the above copyright
15
       notice, this list of conditions and the following disclaimer in the
16
       documentation and/or other materials provided with the distribution.
17

    
18
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20
    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
    AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
22
    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
    POSSIBILITY OF SUCH DAMAGE.
28
*/
29

    
30
##|+PRIV
31
##|*IDENT=page-pfsensewizardsubsystem
32
##|*NAME=pfSense wizard subsystem page
33
##|*DESCR=Allow access to the 'pfSense wizard subsystem' page.
34
##|*MATCH=wizard.php*
35
##|-PRIV
36

    
37

    
38
require("guiconfig.inc");
39
require("functions.inc");
40
require("filter.inc");
41
require("shaper.inc");
42
require("rrd.inc");
43

    
44
function gentitle_pkg($pgname) {
45
	global $config;
46
	return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
47
}
48

    
49
$stepid = htmlspecialchars($_GET['stepid']);
50
if (isset($_POST['stepid']))
51
    $stepid = htmlspecialchars($_POST['stepid']);
52
if (!$stepid)
53
	$stepid = "0";
54

    
55
$xml = htmlspecialchars($_GET['xml']);
56
if($_POST['xml'])
57
	$xml = htmlspecialchars($_POST['xml']);
58

    
59
if(empty($xml)) {
60
	$xml = "not_defined";
61
	print_info_box_np("ERROR:  Could not open " . $xml . ".");
62
	die;
63
} else {
64
	if (file_exists("{$g['www_path']}/wizards/{$xml}"))
65
		$pkg = parse_xml_config_pkg("{$g['www_path']}/wizards/" . $xml, "pfsensewizard");
66
	else {
67
		print_info_box_np("ERROR:  Could not open " . $xml . ".");
68
		die;
69
	}
70
}
71

    
72
if (!is_array($pkg)) {
73
	print_info_box_np("ERROR: Could not parse {$g['www_path']}/wizards/{$xml} file.");
74
	die;
75
}
76

    
77
$title          = $pkg['step'][$stepid]['title'];
78
$description    = $pkg['step'][$stepid]['description'];
79
$totalsteps     = $pkg['totalsteps'];
80

    
81
if ($pkg['includefile'])
82
        require_once($pkg['includefile']);
83

    
84
if ($pkg['step'][$stepid]['includefile'])
85
	require_once($pkg['step'][$stepid]['includefile']);
86

    
87
if($pkg['step'][$stepid]['stepsubmitbeforesave']) {
88
		eval($pkg['step'][$stepid]['stepsubmitbeforesave']);
89
}
90

    
91
if ($_POST) {
92
    foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
93
        if(!empty($field['bindstofield']) and $field['type'] <> "submit") {
94
		$fieldname = $field['name'];
95
		$fieldname = str_replace(" ", "", $fieldname);
96
		$fieldname = strtolower($fieldname);
97
		// update field with posted values.
98
                if($field['unsetfield'] <> "")
99
			$unset_fields = "yes";
100
		else
101
			$unset_fields = "";
102
		if($field['arraynum'] <> "")
103
			$arraynum = $field['arraynum'];
104
		else
105
			$arraynum = "";
106

    
107
		update_config_field( $field['bindstofield'], $_POST[$fieldname], $unset_fields, $arraynum, $field['type']);
108
        }
109

    
110
    }
111
    // run custom php code embedded in xml config.
112
    if($pkg['step'][$stepid]['stepsubmitphpaction'] <> "") {
113
		eval($pkg['step'][$stepid]['stepsubmitphpaction']);
114
    }
115
	write_config();
116
    $stepid++;
117
    if($stepid > $totalsteps)
118
	$stepid = $totalsteps;
119
}
120

    
121
$title          = $pkg['step'][$stepid]['title'];
122
$description    = $pkg['step'][$stepid]['description'];
123

    
124
function update_config_field($field, $updatetext, $unset, $arraynum, $field_type) {
125
	global $config;
126
	$field_split = split("->",$field);
127
	foreach ($field_split as $f)
128
		$field_conv .= "['" . $f . "']";
129
	if($field_conv == "")
130
		return;
131
	if(($field_type == "checkbox" and $updatetext <> "on") || $updatetext == "") {
132
		/*
133
		    item is a checkbox, it should have the value "on"
134
		    if it was checked
135
                */
136
		$text = "unset(\$config" . $field_conv . ");";
137
		eval($text);
138
		return;
139
	}
140

    
141
	if($field_type == "interfaces_selection") {
142
		$text = "unset(\$config" . $field_conv . ");";
143
		eval($text);
144
		$text = "\$config" . $field_conv . " = \"" . $updatetext . "\";";
145
		eval($text);
146
		return;
147
	}
148

    
149
	if($unset <> "") {
150
		$text = "unset(\$config" . $field_conv . ");";
151
		eval($text);
152
		$text = "\$config" . $field_conv . "[" . $arraynum . "] = \"" . $updatetext . "\";";
153
		eval($text);
154
	} else {
155
		if($arraynum <> "") {
156
			$text = "\$config" . $field_conv . "[" . $arraynum . "] = \"" . $updatetext . "\";";
157
		} else {
158
			$text = "\$config" . $field_conv . " = \"" . $updatetext . "\";";
159
		}
160
		eval($text);
161
	}
162
}
163

    
164
if($pkg['step'][$stepid]['stepbeforeformdisplay'] <> "") {
165
	// handle before form display event.
166
        // good for modifying posted values, etc.
167
	eval($pkg['step'][$stepid]['stepbeforeformdisplay']);
168
}
169

    
170
$pgtitle = array($title);
171
include("head.inc");
172

    
173
?>
174
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onLoad="enablechange();">
175

    
176
<?php
177
	if(file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) 
178
		echo "<link rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n";
179
	else 
180
		echo "<link rel=\"stylesheet\" href=\"/themes/{$g['theme']}/all.css\" media=\"all\" />";
181
?>
182

    
183
<?php if($pkg['step'][$stepid]['fields']['field'] <> "") { ?>
184
<script type="text/javascript">
185
<!--
186

    
187
function  FieldValidate(userinput,  regexp,  message)
188
{
189
                if(!userinput.match(regexp))
190
                                alert(message);
191
}
192

    
193
function enablechange() {
194
<?php
195
        foreach($pkg['step'][$stepid]['fields']['field'] as $field) {
196
                if(isset($field['enablefields']) or isset($field['checkenablefields'])) {
197
                        print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked == false) {' . "\n";
198
                        if(isset($field['enablefields'])) {
199
                                $enablefields = explode(',', $field['enablefields']);
200
                                foreach($enablefields as $enablefield) {
201
                                        $enablefield = strtolower($enablefield);
202
                                        print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n";
203
                                }
204
                        }
205
                        if(isset($field['checkenablefields'])) {
206
                                $checkenablefields = explode(',', $field['checkenablefields']);
207
                                foreach($checkenablefields as $checkenablefield) {
208
                                        $checkenablefield = strtolower($checkenablefield);
209
                                        print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n";
210
                                }
211
                        }
212
                        print "\t" . '} else {' . "\n";
213
                        if(isset($field['enablefields'])) {
214
                                foreach($enablefields as $enablefield) {
215
                                        $enablefield = strtolower($enablefield);
216
                                        print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n";
217
                                }
218
                        }
219
                        if(isset($field['checkenablefields'])) {
220
                                foreach($checkenablefields as $checkenablefield) {
221
                                        $checkenablefield = strtolower($checkenablefield);
222
                                        print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n";
223
                                }
224
                        }
225
                        print "\t" . '}' . "\n";
226
                }
227
        }
228
?>
229
}
230
//-->
231
</script>
232
<?php } ?>
233

    
234
<form action="wizard.php" method="post" name="iform" id="iform">
235
<input type="hidden" name="xml" value="<?= $xml ?>">
236
<input type="hidden" name="stepid" value="<?= $stepid ?>">
237

    
238
<center>
239

    
240
&nbsp;<br>
241

    
242
<?php
243
	if($title == "Reload in progress") {
244
		$ip = fixup_string($_SERVER['HTTP_HOST']);
245
	} else {
246
		$ip = "/";
247
	}
248
	echo "<a href='$ip'>";
249
?>
250
<img border="0" src="./themes/<?= $g['theme']; ?>/images/logo.gif"></a>
251
<p>
252
<div style="width:800px;background-color:#ffffff" id="roundme">
253
<table bgcolor="#ffffff" width="95%" border="0" cellspacing="0" cellpadding="2">
254
    <!-- wizard goes here -->
255
    <tr><td>&nbsp;</td></tr>
256
    <tr><td colspan='2'>
257
<?php
258
	if ($savemsg)
259
		print_info_box($savemsg);
260
	if ($_GET['message'] != "")
261
		print_info_box(htmlspecialchars($_GET['message']));
262
	if ($_POST['message'] != "")
263
		print_info_box(htmlspecialchars($_POST['message']));
264
?></td></tr>
265
 <tr>
266
	<td class="tabcont">
267
	<table width="100%" border="0" cellpadding="6" cellspacing="0">
268

    
269
    <tr><td colspan='2'><center><font size="2"><b><?= fixup_string($description) ?></b></font></center></td></tr><tr><td>&nbsp;</td></tr>
270
    <?php
271
	if(!$pkg['step'][$stepid]['disableheader'])
272
		echo "<tr><td colspan=\"2\" class=\"listtopic\">" . fixup_string($title) . "</td></tr>";
273
    ?>
274

    
275
    <?php
276
	$inputaliases = array();
277
	if($pkg['step'][$stepid]['fields']['field'] <> "") {
278
		foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
279

    
280
		    $value = $field['value'];
281
		    $name  = $field['name'];
282

    
283
		    $name = ereg_replace(" ", "", $name);
284
		    $name = strtolower($name);
285

    
286
		    if($field['bindstofield'] <> "") {
287
				$arraynum = "";
288
				$field_conv = "";
289
				$field_split = split("->", $field['bindstofield']);
290
				// arraynum is used in cases where there is an array of the same field
291
				// name such as dnsserver (2 of them)
292
				if($field['arraynum'] <> "") $arraynum = "[" . $field['arraynum'] . "]";
293
				foreach ($field_split as $f) $field_conv .= "['" . $f . "']";
294
					$toeval = "\$value = \$config" . $field_conv . $arraynum . ";";
295
					eval($toeval);
296
					if ($field['type'] == "checkbox") {
297
						$toeval = "if(isset(\$config" . $field_conv . $arraynum . ")) \$value = \" CHECKED\";";
298
						eval($toeval);
299
					}
300
		    }
301

    
302
		    if(!$field['combinefieldsend'])
303
			echo "<tr>";
304

    
305
		    switch ($field['type']) {
306
		    case "input":
307
			if ($field['displayname']) {
308
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
309
                                echo $field['displayname'];
310
                                echo ":</td>\n";
311
			} else if(!$field['dontdisplayname']) {
312
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
313
				echo fixup_string($field['name']);
314
				echo ":</td>\n";
315
			}
316
			if(!$field['dontcombinecells'])
317
				echo "<td class=\"vtable\">\n";
318

    
319
			echo "<input class='formfld unknown' id='" . $name . "' name='" . $name . "' value='" . $value . "'";
320
			if($field['size'])
321
				echo " size='" . $field['size'] . "' ";
322
			if($field['validate'])
323
				echo " onChange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
324
			echo ">\n";
325

    
326
			if($field['description'] <> "") {
327
				echo "<br /> " . $field['description'];
328
		    	}
329
			break;
330
		    case "text":
331
			echo "<td colspan=\"2\" align=\"center\" class=\"vncell\">\n";
332
			if($field['description'] <> "") {
333
                                echo "<center><br /> " . $field['description'] . "</center>";
334
                        }
335
			break;
336
		    case "inputalias":
337
			if ($field['displayname']) {
338
                                echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
339
                                echo $field['displayname'];
340
                                echo ":</td>\n";
341
			} else if(!$field['dontdisplayname']) {
342
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
343
				echo fixup_string($field['name']);
344
				echo ":</td>\n";
345
				$inputaliases[] = $name;
346
			}
347
			if(!$field['dontcombinecells'])
348
				echo "<td class=\"vtable\">\n";
349

    
350
			echo "<input class='formfld unknown' autocomplete='off' class='formfldalias' id='" . $name . "' name='" . $name . "' value='" . $value . "'";
351
			if($field['size'])
352
				echo " size='" . $field['size'] . "' ";
353
			if($field['validate'])
354
				echo " onChange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
355
			echo ">\n";
356

    
357
			if($field['description'] <> "") {
358
				echo "<br /> " . $field['description'];
359
		    	}
360
			break;
361
		    case "interfaces_selection":
362
			$size = "";
363
			$multiple = "";
364
			$name = strtolower($name);
365
			echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
366
			echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
367
			echo "</td>";
368
			echo "<td class=\"vtable\">\n";
369
			if($field['size'] <> "") $size = "size=\"{$field['size']}\"";
370
			if($field['multiple'] <> "" and $field['multiple'] <> "0") {
371
			  $multiple = "multiple=\"multiple\"";
372
			  $name .= "[]";
373
			}
374
			echo "<select class='formselect' id='{$name}' name='{$name}' {$size} {$multiple}>\n";
375
			if($field['add_to_interfaces_selection'] <> "") {
376
				$SELECTED = "";
377
				if($field['add_to_interfaces_selection'] == $value) $SELECTED = " SELECTED";
378
				echo "<option value='" . $field['add_to_interfaces_selection'] . "'" . $SELECTED . ">" . $field['add_to_interfaces_selection'] . "</option>\n";
379
			}
380
			$interfaces = get_configured_interface_with_descr();
381
			foreach ($interfaces as $ifname => $iface) {
382
			  $SELECTED = "";
383
			  if ($value == $ifname) $SELECTED = " SELECTED";
384
			  $to_echo = "<option value='" . $ifname . "'" . $SELECTED . ">" . $iface . "</option>\n";
385
			  $to_echo .= "<!-- {$value} -->";
386
			  $canecho = 0;
387
			  if($field['interface_filter'] <> "") {
388
				if(stristr($ifname, $field['interface_filter']) == true)
389
					$canecho = 1;
390
			  } else {
391
				$canecho = 1;
392
			  }
393
			  if($canecho == 1)
394
				echo $to_echo;
395
			}
396
				echo "</select>\n";
397

    
398
			if($field['description'] <> "") {
399
				echo "<br /> " . $field['description'];
400
		    	}
401

    
402
			break;
403
		    case "password":
404
			if(!$field['dontdisplayname']) {
405
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
406
				echo fixup_string($field['name']);
407
				echo ":</td>\n";
408
			}
409
			if(!$field['dontcombinecells'])
410
				echo "<td class=\"vtable\">";
411
			echo "<input class='formfld password' id='" . $name . "' name='" . $name . "' value='" . $value . "' type='password' ";
412
			if($field['size'])
413
				echo " size='" . $field['size'] . "' ";
414
			echo ">\n";
415

    
416
			if($field['description'] <> "") {
417
				echo "<br /> " . $field['description'];
418
		    	}
419

    
420
			break;
421
		    case "certca_selection":
422
                        $size = "";
423
                        $multiple = "";
424
                        $name = strtolower($name);
425
                        echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
426
                        echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
427
                        echo "</td>";
428
                        echo "<td class=\"vtable\">\n";
429
                        if($field['size'] <> "") $size = "size=\"{$field['size']}\"";
430
                        echo "<select id='{$name}' name='{$name}' {$size}>\n";
431
                        if($field['add_to_certca_selection'] <> "") {
432
                                $SELECTED = "";
433
                                if($field['add_to_certca_selection'] == $value) $SELECTED = " SELECTED";
434
                                echo "<option value='" . $field['add_to_certca_selection'] . "'" . $SELECTED . ">" . $field['add_to_certca_selection'] . "</option>\n";
435
                        }
436
			foreach($config['system']['ca'] as $ca) {
437
				$name = htmlspecialchars($ca['name']);
438
                          $SELECTED = "";
439
                          if ($value == $name) $SELECTED = " SELECTED";
440
                          $to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
441
                          $to_echo .= "<!-- {$value} -->";
442
                          $canecho = 0;
443
                          if($field['certca_filter'] <> "") {
444
                                if(stristr($name, $field['certca_filter']) == true)
445
                                        $canecho = 1;
446
                          } else {
447
                                $canecho = 1;
448
                          }
449
                          if($canecho == 1)
450
                                echo $to_echo;
451
                        }
452
                                echo "</select>\n";
453

    
454
			if($field['description'] <> "") {
455
				echo "<br /> " . $field['description'];
456
		    	}
457

    
458
			break;
459
		    case "cert_selection":
460
                        $size = "";
461
                        $multiple = "";
462
                        $name = strtolower($name);
463
                        echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
464
                        echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
465
                        echo "</td>";
466
                        echo "<td class=\"vtable\">\n";
467
                        if($field['size'] <> "") $size = "size=\"{$field['size']}\"";
468
                        echo "<select id='{$name}' name='{$name}' {$size}>\n";
469
                        if($field['add_to_cert_selection'] <> "") {
470
                                $SELECTED = "";
471
                                if($field['add_to_cert_selection'] == $value) $SELECTED = " SELECTED";
472
                                echo "<option value='" . $field['add_to_cert_selection'] . "'" . $SELECTED . ">" . $field['add_to_cert_selection'] . "</option>\n";
473
                        }
474
                        foreach($config['system']['cert'] as $ca) {
475
				if (stristr($ca['name'], "webconf"))
476
					continue;
477
                                $name = htmlspecialchars($ca['name']);
478
                          $SELECTED = "";
479
                          if ($value == $name) $SELECTED = " SELECTED";
480
                          $to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
481
                          $to_echo .= "<!-- {$value} -->";
482
                          $canecho = 0;
483
                          if($field['cert_filter'] <> "") {
484
                                if(stristr($name, $field['cert_filter']) == true)
485
                                        $canecho = 1;
486
                          } else {
487
                                $canecho = 1;
488
                          }
489
                          if($canecho == 1)
490
                                echo $to_echo;
491
                        }
492
                                echo "</select>\n";
493

    
494
			if($field['description'] <> "") {
495
				echo "<br /> " . $field['description'];
496
		    	}
497

    
498
			break;
499
		    case "select":
500
			if ($field['displayname']) {
501
                                echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
502
                                echo $field['displayname'];
503
                                echo ":</td>\n";
504
			} else if(!$field['dontdisplayname']) {
505
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
506
				echo fixup_string($field['name']);
507
				echo ":</td>\n";
508
			}
509
			if($field['size']) $size = " size='" . $field['size'] . "' ";
510
			if($field['multiple'] == "yes") $multiple = "MULTIPLE ";
511
			if(!$field['dontcombinecells'])
512
				echo "<td class=\"vtable\">\n";
513
			$onchange = "";
514
			foreach ($field['options']['option'] as $opt) {
515
				if($opt['enablefields'] <> "") {
516
					$onchange = "onchange=\"enableitems(this.selectedIndex);\" ";
517
				}
518
			}
519
			echo "<select class='formselect' " . $onchange . $multiple . $size . "id='" . $name . "' name='" . $name . "'>\n";
520
			foreach ($field['options']['option'] as $opt) {
521
				$selected = "";
522
				if($value == $opt['value']) $selected = " SELECTED";
523
			    echo "\t<option name='" . $opt['name'] . "' value='" . $opt['value'] . "'" . $selected . ">";
524
				if ($opt['displayname'])
525
					echo $opt['displayname'];
526
				else
527
					echo $opt['name'];
528
				echo "</option>\n";
529
			}
530
			echo "</select>\n";
531

    
532
			if($field['description'] <> "") {
533
				echo $field['description'];
534
		    	}
535

    
536
			break;
537
		    case "textarea":
538
			if ($field['displayname']) {
539
                                echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
540
                                echo $field['displayname'];
541
                                echo ":</td>\n";
542
			} else if(!$field['dontdisplayname']) {
543
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
544
				echo fixup_string($field['name']);
545
				echo ":</td>";
546
			}
547
			if(!$field['dontcombinecells'])
548
				echo "<td class=\"vtable\">";
549
			echo "<textarea class='formpre' id='" . $name . "' name='" . $name . "'";
550
			if ($field['rows'])
551
				echo " rows='" . $field['rows'] . "' ";
552
			if ($field['cols'])
553
				echo " cols='" . $field['cols'] . "' ";
554
			echo ">" . $value . "</textarea>\n";
555
				
556

    
557
			if($field['description'] <> "") {
558
				echo "<br /> " . $field['description'];
559
		    	}
560

    
561
			break;
562
		    case "submit":
563
			echo "<td>&nbsp;<br></td></tr>";
564
			echo "<tr><td colspan='2'><center>";
565
			echo "<input type='submit' name='" . $name . "' value='" . $field['name'] . "'>\n";
566

    
567
			if($field['description'] <> "") {
568
				echo "<br /> " . $field['description'];
569
		    	}
570

    
571
			break;
572
		    case "listtopic":
573
			echo "<td>&nbsp;</td></tr>";
574
			echo "<tr><td colspan=\"2\" class=\"listtopic\">" . $field['name'] . "<br ></td>\n";
575

    
576
			break;
577
		    case "subnet_select":
578
			if ($field['displayname']) {
579
                                echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
580
                                echo $field['displayname'];
581
                                echo ":</td>\n";
582
			} else if(!$field['dontdisplayname']) {
583
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
584
				echo fixup_string($field['name']);
585
				echo ":</td>";
586
			}
587
			if(!$field['dontcombinecells'])
588
				echo "<td class=\"vtable\">";
589
			echo "<select class='formselect' name='{$name}'>\n";
590
			for($x=1; $x<33; $x++) {
591
				$CHECKED = "";
592
				if($value == $x) $CHECKED = " SELECTED";
593
				if($x <> 31)
594
					echo "<option value='{$x}' {$CHECKED}>{$x}</option>\n";
595
			}
596
			echo "</select>\n";
597

    
598
			if($field['description'] <> "") {
599
				echo "<br /> " . $field['description'];
600
		    	}
601

    
602
			break;
603
		    case "timezone_select":
604
			exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
605
			$timezonelist = array_filter($timezonelist, 'is_timezone');
606
			sort($timezonelist);
607

    
608
			/* kill carriage returns */
609
			for($x=0; $x<count($timezonelist); $x++)
610
				$timezonelist[$x] = str_replace("\n", "", $timezonelist[$x]);
611

    
612
			if ($field['displayname']) {
613
                                echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
614
                                echo $field['displayname'];
615
                                echo ":</td>\n";
616
			} else if(!$field['dontdisplayname']) {
617
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
618
				echo fixup_string($field['name']);
619
				echo ":</td>";
620
			}
621
			if(!$field['dontcombinecells'])
622
				echo "<td class=\"vtable\">";
623
			echo "<select class='formselect' name='{$name}'>\n";
624
			foreach ($timezonelist as $tz) {
625
				$SELECTED = "";
626
				if ($value == $tz) $SELECTED = " SELECTED";
627
				echo "<option value='" . htmlspecialchars($tz) . "' {$SELECTED}>";
628
				echo htmlspecialchars($tz);
629
				echo "</option>\n";
630
			}
631
			echo "</select>\n";
632

    
633
			if($field['description'] <> "") {
634
				echo "<br /> " . $field['description'];
635
		    	}
636

    
637
			break;
638
		    case "checkbox":
639
			if ($field['displayname']) {
640
                                echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
641
                                echo $field['displayname'];
642
                                echo ":</td>\n";
643
			} else if(!$field['dontdisplayname']) {
644
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
645
				echo $field['name'];
646
				echo ":</td>";
647
			}
648
			$checked = "";
649
			if($value <> "")
650
				$checked = " CHECKED";
651
			echo "<td class=\"vtable\"><input value=\"on\" type='checkbox' id='" . $name . "' name='" . $name . "' " . $checked;
652
			if(isset($field['enablefields']) or isset($field['checkenablefields']))
653
				echo " onClick=\"enablechange()\"";
654
			echo ">\n";
655

    
656
			if($field['description'] <> "") {
657
				echo $field['description'];
658
		    	}
659

    
660
			break;
661
		    }
662

    
663
		    echo "</td>";
664
		    if($field['typehint'] <> "") {
665
			echo $field['typehint'];
666
		    }
667

    
668
		    if(!$field['combinefieldsbegin'])
669
			 echo "</tr>\n";
670

    
671
		    if($field['warning'] <> "") {
672
			echo "<br ><b><font color=\"red\">" . $field['warning'] . "</font></b>";
673
		    }
674

    
675
		}
676
	}
677
    ?>
678
	</table>
679
	</td></tr>
680
</table>
681
<br>&nbsp;
682
</div>
683
</form>
684
<script type="text/javascript">
685
<!--
686
	if (typeof ext_change != 'undefined') {
687
		ext_change();
688
	}
689
	if (typeof proto_change != 'undefined') {
690
		ext_change();
691
	}
692
	if (typeof proto_change != 'undefined') {
693
		proto_change();
694
	}
695

    
696
<?php
697
	$isfirst = 0;
698
	$aliases = "";
699
	$addrisfirst = 0;
700
	$aliasesaddr = "";
701
	if($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias']))
702
		foreach($config['aliases']['alias'] as $alias_name) {
703
			if(!stristr($alias_name['address'], ".")) {
704
				if($isfirst == 1) $aliases .= ",";
705
				$aliases .= "'" . $alias_name['name'] . "'";
706
				$isfirst = 1;
707
			} else {
708
				if($addrisfirst == 1) $aliasesaddr .= ",";
709
				$aliasesaddr .= "'" . $alias_name['name'] . "'";
710
				$addrisfirst = 1;
711
			}
712
		}
713
?>
714

    
715
	var addressarray=new Array(<?php echo $aliasesaddr; ?>);
716
	var customarray=new Array(<?php echo $aliases; ?>);
717

    
718
	window.onload = function () {
719

    
720
		<?php
721
			$counter=0;
722
			foreach($inputaliases as $alias) {
723
				echo "var oTextbox$counter = new AutoSuggestControl(document.getElementById(\"$alias\"), new StateSuggestions(addressarray));\n";
724
				$counter++;
725
			}
726
		?>
727

    
728
	}
729

    
730
//-->
731
</script>
732
<script type="text/javascript">
733
NiftyCheck();
734
var bgcolor = document.getElementsByTagName("body")[0].style.backgroundColor;
735
Rounded("div#roundme","all",bgcolor,"#FFFFFF","smooth");
736
</script>
737

    
738
<?php
739

    
740
$fieldnames_array = Array();
741
if($pkg['step'][$stepid]['disableallfieldsbydefault'] <> "") {
742
	// create a fieldname loop that can be used with javascript
743
	// hide and enable features.
744
	echo "\n<script type=\"text/javascript\">\n";
745
	echo "function disableall() {\n";
746
	foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
747
		if($field['type'] <> "submit" and $field['type'] <> "listtopic") {
748
			if(!$field['donotdisable'] <> "") {
749
				array_push($fieldnames_array, $field['name']);
750
				$fieldname = ereg_replace(" ", "", $field['name']);
751
				$fieldname = strtolower($fieldname);
752
				echo "\tdocument.forms[0]." . $fieldname . ".disabled = 1;\n";
753
			}
754
		}
755
	}
756
	echo "}\ndisableall();\n";
757
	echo "function enableitems(selectedindex) {\n";
758
	echo "disableall();\n";
759
	$idcounter = 0;
760
	if($pkg['step'][$stepid]['fields']['field'] <> "") {
761
		echo "\tswitch(selectedindex) {\n";
762
		foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
763
			if($field['options']['option'] <> "") {
764
				foreach ($field['options']['option'] as $opt) {
765
					if($opt['enablefields'] <> "") {
766
						echo "\t\tcase " . $idcounter . ":\n";
767
						$enablefields_split = split(",", $opt['enablefields']);
768
						foreach ($enablefields_split as $efs) {
769
							$fieldname = ereg_replace(" ", "", $efs);
770
							$fieldname = strtolower($fieldname);
771
							if($fieldname <> "") {
772
								$onchange = "\t\t\tdocument.forms[0]." . $fieldname . ".disabled = 0; \n";
773
								echo $onchange;
774
							}
775
						}
776
						echo "\t\t\tbreak;\n";
777
					}
778
					$idcounter = $idcounter + 1;
779
				}
780
			}
781
		}
782
		echo "\t}\n";
783
	}
784
	echo "}\n";
785
	echo "disableall();\n";
786
	echo "</script>\n\n";
787
}
788

    
789

    
790
if($pkg['step'][$stepid]['stepafterformdisplay'] <> "") {
791
	// handle after form display event.
792
	eval($pkg['step'][$stepid]['stepafterformdisplay']);
793
}
794

    
795
if($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") {
796
	// handle after form display event.
797
        echo "\n<script type=\"text/javascript\">\n";
798
	echo $pkg['step'][$stepid]['javascriptafterformdisplay'] . "\n";
799
	echo "</script>\n\n";
800
}
801

    
802
/*
803
 *  HELPER FUNCTIONS
804
 */
805

    
806
function fixup_string($string) {
807
	global $config, $myurl;
808
	$newstring = $string;
809
	// fixup #1: $myurl -> http[s]://ip_address:port/
810
	switch($config['system']['webgui']['protocol']) {
811
		case "http":
812
			$proto = "http";
813
			break;
814
		case "https":
815
			$proto = "https";
816
			break;
817
		default:
818
			$proto = "http";
819
			break;
820
	}
821
	$port = $config['system']['webgui']['port'];
822
	if($port != "") {
823
		if(($port == "443" and $proto != "https") or ($port == "80" and $proto != "http")) {
824
			$urlport = ":" . $port;
825
		} elseif ($port != "80" and $port != "443") {
826
			$urlport = ":" . $port;
827
		} else {
828
			$urlport = "";
829
		}
830
	}
831
	$myurl = $proto . "://" . $_SERVER['HTTP_HOST'] . $urlport . "/";
832

    
833
	if (strstr($newstring, "\$myurl"))
834
		$newstring = str_replace("\$myurl", $myurl, $newstring);
835
	// fixup #2: $wanip
836
	if (strstr($newstring, "\$wanip")) {
837
		$curwanip = get_interface_ip();
838
		$newstring = str_replace("\$wanip", $curwanip, $newstring);
839
	}
840
	// fixup #3: $lanip
841
	if (strstr($newstring, "\$lanip")) {
842
		$lanip = get_interface_ip("lan");
843
		$newstring = str_replace("\$lanip", $lanip, $newstring);
844
	}
845
	// fixup #4: fix'r'up here.
846
	return $newstring;
847
}
848

    
849
function is_timezone($elt) {
850
	return !preg_match("/\/$/", $elt);
851
}
852

    
853
?>
854

    
855
</body>
856
</html>
857

    
(217-217/218)