Project

General

Profile

Download (30.8 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
	wizard.php
5
	Copyright (C) 2013-2015 Electric Sheep Fencing, LP
6
	Copyright (C) 2010 Ermal Luçi
7
	Copyright (C) 2004 Scott Ullrich
8
	All rights reserved.
9

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

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

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

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

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

    
39

    
40
require("globals.inc");
41
require("guiconfig.inc");
42
require("functions.inc");
43
require_once("filter.inc");
44
require("shaper.inc");
45
require_once("rrd.inc");
46

    
47
function gentitle_pkg($pgname) {
48
	global $config;
49
	return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
50
}
51

    
52
global $g;
53

    
54
$stepid = htmlspecialchars($_GET['stepid']);
55
if (isset($_POST['stepid']))
56
	$stepid = htmlspecialchars($_POST['stepid']);
57
if (!$stepid)
58
	$stepid = "0";
59

    
60
$xml = htmlspecialchars($_GET['xml']);
61
if($_POST['xml'])
62
	$xml = htmlspecialchars($_POST['xml']);
63

    
64
if(empty($xml)) {
65
	$xml = "not_defined";
66
	print_info_box_np(sprintf(gettext("ERROR:  Could not open %s."), $xml));
67
	die;
68
} else {
69
	if (file_exists("{$g['www_path']}/wizards/{$xml}"))
70
		$pkg = parse_xml_config_pkg("{$g['www_path']}/wizards/" . $xml, "pfsensewizard");
71
	else {
72
		print_info_box_np(sprintf(gettext("ERROR:  Could not open %s."), $xml));
73
		die;
74
	}
75
}
76

    
77
if (!is_array($pkg)) {
78
	print_info_box_np(sprintf(gettext("ERROR: Could not parse %s/wizards/%s file."),$g['www_path'],$xml));
79
	die;
80
}
81

    
82
$title       = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']);
83
$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']);
84
$totalsteps  = $pkg['totalsteps'];
85

    
86
if ($pkg['includefile'])
87
	require_once($pkg['includefile']);
88

    
89
if ($pkg['step'][$stepid]['includefile'])
90
	require_once($pkg['step'][$stepid]['includefile']);
91

    
92
if($pkg['step'][$stepid]['stepsubmitbeforesave']) {
93
	eval($pkg['step'][$stepid]['stepsubmitbeforesave']);
94
}
95

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

    
112
			update_config_field( $field['bindstofield'], $_POST[$fieldname], $unset_fields, $arraynum, $field['type']);
113
		}
114

    
115
	}
116
	// run custom php code embedded in xml config.
117
	if($pkg['step'][$stepid]['stepsubmitphpaction'] <> "") {
118
		eval($pkg['step'][$stepid]['stepsubmitphpaction']);
119
	}
120
	if (!$input_errors)
121
		write_config();
122
	$stepid++;
123
	if($stepid > $totalsteps)
124
		$stepid = $totalsteps;
125
}
126

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

    
147
	if($field_type == "interfaces_selection") {
148
		$var = "\$config{$field_conv}";
149
		$text = "if (isset({$var})) unset({$var});";
150
		$text .= "\$config" . $field_conv . " = \"" . $updatetext . "\";";
151
		eval($text);
152
		return;
153
	}
154

    
155
	if($unset == "yes") {
156
		$text = "unset(\$config" . $field_conv . ");";
157
		eval($text);
158
	}
159
	$text = "\$config" . $field_conv . " = \"" . addslashes($updatetext) . "\";";
160
	eval($text);
161
}
162

    
163
$title       = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']);
164
$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']);
165

    
166
// handle before form display event.
167
do {
168
	$oldstepid = $stepid;
169
	if($pkg['step'][$stepid]['stepbeforeformdisplay'] <> "")
170
		eval($pkg['step'][$stepid]['stepbeforeformdisplay']);
171
} while ($oldstepid != $stepid);
172

    
173
$closehead = false;
174
$pgtitle = array($title);
175
include("head.inc");
176

    
177
if(file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css"))
178
	echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n";
179
else
180
	echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/all.css\" media=\"all\" />";
181
?>
182
</head>
183
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
184

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

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

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

    
235
function disablechange() {
236
<?php
237
	foreach($pkg['step'][$stepid]['fields']['field'] as $field) {
238
		if(isset($field['disablefields']) or isset($field['checkdisablefields'])) {
239
			print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked) {' . "\n";
240
			if(isset($field['disablefields'])) {
241
				$enablefields = explode(',', $field['disablefields']);
242
				foreach($enablefields as $enablefield) {
243
					$enablefield = strtolower($enablefield);
244
					print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n";
245
				}
246
			}
247
			if(isset($field['checkdisablefields'])) {
248
				$checkenablefields = explode(',', $field['checkdisablefields']);
249
				foreach($checkenablefields as $checkenablefield) {
250
					$checkenablefield = strtolower($checkenablefield);
251
					print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n";
252
				}
253
			}
254
			print "\t" . '} else {' . "\n";
255
			if(isset($field['disablefields'])) {
256
				$enablefields = explode(',', $field['disablefields']);
257
				foreach($enablefields as $enablefield) {
258
					$enablefield = strtolower($enablefield);
259
					print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n";
260
				}
261
			}
262
			if(isset($field['checkdisablefields'])) {
263
				$checkenablefields = explode(',', $field['checkdisablefields']);
264
				foreach($checkenablefields as $checkenablefield) {
265
					$checkenablefield = strtolower($checkenablefield);
266
					print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n";
267
				}
268
			}
269
			print "\t" . '}' . "\n";
270
		}
271
	}
272
?>
273
}
274

    
275
function showchange() {
276
<?php
277
	foreach($pkg['step'][$stepid]['fields']['field'] as $field) {
278
		if(isset($field['showfields'])) {
279
			print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked == false) {' . "\n";
280
			if(isset($field['showfields'])) {
281
				$showfields = explode(',', $field['showfields']);
282
				foreach($showfields as $showfield) {
283
					$showfield = strtolower($showfield);
284
					//print "\t\t" . 'document.iform.' . $showfield . ".display =\"none\";\n";
285
					print "\t\t jQuery('#". $showfield . "').hide();";
286
				}
287
			}
288
			print "\t" . '} else {' . "\n";
289
			if(isset($field['showfields'])) {
290
				$showfields = explode(',', $field['showfields']);
291
				foreach($showfields as $showfield) {
292
					$showfield = strtolower($showfield);
293
					#print "\t\t" . 'document.iform.' . $showfield . ".display =\"\";\n";
294
					print "\t\t jQuery('#". $showfield . "').show();";
295
				}
296
			}
297
			print "\t" . '}' . "\n";
298
		}
299
	}
300
?>
301
}
302
//]]>
303
</script>
304
<?php } ?>
305

    
306
<form action="wizard.php" method="post" name="iform" id="iform">
307
<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" />
308
<input type="hidden" name="stepid" value="<?= htmlspecialchars($stepid) ?>" />
309

    
310
<center>
311

    
312
&nbsp;<br />
313

    
314
<?php
315
	if($title == "Reload in progress") {
316
		$ip = fixup_string("\$myurl");
317
	} else {
318
		$ip = "/";
319
	}
320
	echo "<a href='$ip'>";
321
?>
322
<img border="0" src="./themes/<?= $g['theme']; ?>/images/logo.gif" alt="logo" /></a>
323
<p>&nbsp;</p>
324
<div style="width:800px;background-color:#ffffff" id="roundme">
325
<?php
326
	if ($input_errors)
327
		print_input_errors($input_errors);
328
	if ($savemsg)
329
		print_info_box($savemsg);
330
	if ($_GET['message'] != "")
331
		print_info_box(htmlspecialchars($_GET['message']));
332
	if ($_POST['message'] != "")
333
		print_info_box(htmlspecialchars($_POST['message']));
334
?>
335
<table bgcolor="#ffffff" width="95%" border="0" cellspacing="0" cellpadding="2" summary="wizard">
336
	<!-- wizard goes here -->
337
	<tr><td>&nbsp;</td></tr>
338
	<tr>
339
		<td class="tabcont">
340
			<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
341

    
342
				<tr><td colspan="2" align="center"><font size="2"><b><?= fixup_string($description) ?></b></font></td></tr><tr><td>&nbsp;</td></tr>
343
<?php
344
	if(!$pkg['step'][$stepid]['disableheader'])
345
		echo "<tr><td colspan=\"2\" class=\"listtopic\">" . fixup_string($title) . "</td></tr>";
346
?>
347

    
348
<?php
349
	$inputaliases = array();
350
	if($pkg['step'][$stepid]['fields']['field'] <> "") {
351
		foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
352

    
353
			$value = $field['value'];
354
			$name  = $field['name'];
355

    
356
			$name = preg_replace("/\s+/", "", $name);
357
			$name = strtolower($name);
358

    
359
			if($field['bindstofield'] <> "") {
360
				$arraynum = "";
361
				$field_conv = "";
362
				$field_split = explode("->", $field['bindstofield']);
363
				// arraynum is used in cases where there is an array of the same field
364
				// name such as dnsserver (2 of them)
365
				if($field['arraynum'] <> "")
366
					$arraynum = "[" . $field['arraynum'] . "]";
367
				foreach ($field_split as $f)
368
					$field_conv .= "['" . $f . "']";
369
				if($field['type'] == "checkbox")
370
					$toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }";
371
				else
372
					$toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) \$value = \$config" . $field_conv . $arraynum . ";";
373
				eval($toeval);
374
			}
375

    
376
			if(!$field['combinefieldsend'])
377
				echo "<tr>";
378

    
379
			switch ($field['type']) {
380
			case "input":
381
				if ($field['displayname']) {
382
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
383
					echo $field['displayname'];
384
					echo ":</td>\n";
385
				} else if(!$field['dontdisplayname']) {
386
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
387
					echo fixup_string($field['name']);
388
					echo ":</td>\n";
389
				}
390
				if(!$field['dontcombinecells'])
391
					echo "<td class=\"vtable\">\n";
392

    
393
				echo "<input class='formfld unknown' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\"";
394
				if($field['size'])
395
					echo " size='" . $field['size'] . "' ";
396
				if($field['validate'])
397
					echo " onchange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
398
				echo " />\n";
399

    
400
				if($field['description'] <> "") {
401
					echo "<br /> " . $field['description'];
402
				}
403
				break;
404
			case "text":
405
				echo "<td colspan=\"2\" align=\"center\" class=\"vncell\">\n";
406
				if($field['description'] <> "") {
407
					echo "<center><br /> " . $field['description'] . "</center>";
408
				}
409
				break;
410
			case "inputalias":
411
				if ($field['displayname']) {
412
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
413
					echo $field['displayname'];
414
					echo ":</td>\n";
415
				} else if(!$field['dontdisplayname']) {
416
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
417
					echo fixup_string($field['name']);
418
					echo ":</td>\n";
419
				}
420
				if(!$field['dontcombinecells'])
421
					echo "<td class=\"vtable\">\n";
422

    
423
				$inputaliases[] = $name;
424
				echo "<input class='formfldalias' autocomplete='off' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\"";
425
				if($field['size'])
426
					echo " size='" . $field['size'] . "' ";
427
				if($field['validate'])
428
					echo " onchange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
429
				echo " />\n";
430

    
431
				if($field['description'] <> "") {
432
					echo "<br /> " . $field['description'];
433
				}
434
				break;
435
			case "interfaces_selection":
436
			case "interface_select":
437
				$size = "";
438
				$multiple = "";
439
				$name = strtolower($name);
440
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
441
				echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
442
				echo "</td>";
443
				echo "<td class=\"vtable\">\n";
444
				if($field['size'] <> "") $size = "size=\"{$field['size']}\"";
445
				if($field['multiple'] <> "" and $field['multiple'] <> "0") {
446
					$multiple = "multiple=\"multiple\"";
447
					$name .= "[]";
448
				}
449
				echo "<select class='formselect' id='{$name}' name='{$name}' {$size} {$multiple}>\n";
450
				if($field['add_to_interfaces_selection'] <> "") {
451
					$SELECTED = "";
452
					if($field['add_to_interfaces_selection'] == $value) $SELECTED = " selected=\"selected\"";
453
					echo "<option value='" . $field['add_to_interfaces_selection'] . "'" . $SELECTED . ">" . $field['add_to_interfaces_selection'] . "</option>\n";
454
				}
455
				if($field['type'] == "interface_select")
456
					$interfaces = get_interface_list();
457
				else
458
					$interfaces = get_configured_interface_with_descr();
459
				foreach ($interfaces as $ifname => $iface) {
460
					if ($field['type'] == "interface_select") {
461
						$iface = $ifname;
462
						if ($iface['mac'])
463
							$iface .= " ({$iface['mac']})";
464
					}
465
					$SELECTED = "";
466
					if ($value == $ifname) $SELECTED = " selected=\"selected\"";
467
					$to_echo = "<option value='" . $ifname . "'" . $SELECTED . ">" . $iface . "</option>\n";
468
					$to_echo .= "<!-- {$value} -->";
469
					$canecho = 0;
470
					if($field['interface_filter'] <> "") {
471
						if(stristr($ifname, $field['interface_filter']) == true)
472
							$canecho = 1;
473
					} else
474
						$canecho = 1;
475
					if($canecho == 1)
476
						echo $to_echo;
477
				}
478
				echo "</select>\n";
479

    
480
				if($field['description'] <> "") {
481
					echo "<br /> " . $field['description'];
482
				}
483

    
484
				break;
485
			case "password":
486
				if ($field['displayname']) {
487
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
488
					echo $field['displayname'];
489
					echo ":</td>\n";
490
				} else if(!$field['dontdisplayname']) {
491
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
492
					echo fixup_string($field['name']);
493
					echo ":</td>\n";
494
				}
495
				if(!$field['dontcombinecells'])
496
					echo "<td class=\"vtable\">";
497
				echo "<input class='formfld pwd' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\" type='password' ";
498
				if($field['size'])
499
					echo " size='" . $field['size'] . "' ";
500
				echo " />\n";
501

    
502
				if($field['description'] <> "") {
503
					echo "<br /> " . $field['description'];
504
				}
505

    
506
				break;
507
			case "certca_selection":
508
				$size = "";
509
				$multiple = "";
510
				$name = strtolower($name);
511
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
512
				echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
513
				echo "</td>";
514
				echo "<td class=\"vtable\">\n";
515
				if($field['size'] <> "") $size = "size=\"{$field['size']}\"";
516
				echo "<select id='{$name}' name='{$name}' {$size}>\n";
517
				if($field['add_to_certca_selection'] <> "") {
518
					$SELECTED = "";
519
					if($field['add_to_certca_selection'] == $value) $SELECTED = " selected=\"selected\"";
520
					echo "<option value='" . $field['add_to_certca_selection'] . "'" . $SELECTED . ">" . $field['add_to_certca_selection'] . "</option>\n";
521
				}
522
				foreach($config['ca'] as $ca) {
523
					$name = htmlspecialchars($ca['descr']);
524
					$SELECTED = "";
525
					if ($value == $name) $SELECTED = " selected=\"selected\"";
526
					$to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
527
					$to_echo .= "<!-- {$value} -->";
528
					$canecho = 0;
529
					if($field['certca_filter'] <> "") {
530
						if(stristr($name, $field['certca_filter']) == true)
531
							$canecho = 1;
532
					} else {
533
						$canecho = 1;
534
					}
535
					if($canecho == 1)
536
						echo $to_echo;
537
				}
538
				echo "</select>\n";
539

    
540
				if($field['description'] <> "") {
541
					echo "<br /> " . $field['description'];
542
				}
543

    
544
				break;
545
			case "cert_selection":
546
				$size = "";
547
				$multiple = "";
548
				$name = strtolower($name);
549
				echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
550
				echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
551
				echo "</td>";
552
				echo "<td class=\"vtable\">\n";
553
				if($field['size'] <> "") $size = "size=\"{$field['size']}\"";
554
				echo "<select id='{$name}' name='{$name}' {$size}>\n";
555
				if($field['add_to_cert_selection'] <> "") {
556
					$SELECTED = "";
557
					if($field['add_to_cert_selection'] == $value) $SELECTED = " selected=\"selected\"";
558
					echo "<option value='" . $field['add_to_cert_selection'] . "'" . $SELECTED . ">" . $field['add_to_cert_selection'] . "</option>\n";
559
				}
560
				foreach($config['cert'] as $ca) {
561
					if (stristr($ca['descr'], "webconf"))
562
						continue;
563
					$name = htmlspecialchars($ca['descr']);
564
					$SELECTED = "";
565
					if ($value == $name) $SELECTED = " selected=\"selected\"";
566
					$to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
567
					$to_echo .= "<!-- {$value} -->";
568
					$canecho = 0;
569
					if($field['cert_filter'] <> "") {
570
						if(stristr($name, $field['cert_filter']) == true)
571
							$canecho = 1;
572
					} else {
573
						$canecho = 1;
574
					}
575
					if($canecho == 1)
576
						echo $to_echo;
577
				}
578
				echo "</select>\n";
579

    
580
				if($field['description'] <> "") {
581
					echo "<br /> " . $field['description'];
582
				}
583

    
584
				break;
585
			case "select":
586
				if ($field['displayname']) {
587
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
588
					echo $field['displayname'];
589
					echo ":</td>\n";
590
				} else if(!$field['dontdisplayname']) {
591
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
592
					echo fixup_string($field['name']);
593
					echo ":</td>\n";
594
				}
595
				if($field['size']) $size = " size='" . $field['size'] . "' ";
596
				if($field['multiple'] == "yes") $multiple = "multiple=\"multiple\" ";
597
				if(!$field['dontcombinecells'])
598
					echo "<td class=\"vtable\">\n";
599
				$onchange = "";
600
				foreach ($field['options']['option'] as $opt) {
601
					if($opt['enablefields'] <> "") {
602
						$onchange = "onchange=\"enableitems(this.selectedIndex);\" ";
603
					}
604
				}
605
				echo "<select class='formselect' " . $onchange . $multiple . $size . "id='" . $name . "' name='" . $name . "'>\n";
606
				foreach ($field['options']['option'] as $opt) {
607
					$selected = "";
608
					if($value == $opt['value'])
609
						$selected = " selected=\"selected\"";
610
					echo "\t<option value='" . $opt['value'] . "'" . $selected . ">";
611
					if ($opt['displayname'])
612
						echo $opt['displayname'];
613
					else
614
						echo $opt['name'];
615
					echo "</option>\n";
616
				}
617
				echo "</select>\n";
618
				echo "<!-- {$value} -->\n";
619

    
620
				if($field['description'] <> "") {
621
					echo $field['description'];
622
				}
623

    
624
				break;
625
			case "textarea":
626
				if ($field['displayname']) {
627
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
628
					echo $field['displayname'];
629
					echo ":</td>\n";
630
				} else if(!$field['dontdisplayname']) {
631
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
632
					echo fixup_string($field['name']);
633
					echo ":</td>";
634
				}
635
				if(!$field['dontcombinecells'])
636
					echo "<td class=\"vtable\">";
637
				echo "<textarea class='formpre' id='" . $name . "' name='" . $name . "'";
638
				if ($field['rows'])
639
					echo " rows='" . $field['rows'] . "' ";
640
				if ($field['cols'])
641
					echo " cols='" . $field['cols'] . "' ";
642
				echo ">" . $value . "</textarea>\n";
643

    
644

    
645
				if($field['description'] <> "") {
646
					echo "<br /> " . $field['description'];
647
				}
648

    
649
				break;
650
			case "submit":
651
				echo "<td>&nbsp;<br /></td></tr>";
652
				echo "<tr><td colspan=\"2\" align=\"center\">";
653
				echo "<input type='submit' name='" . $name . "' value=\"" . htmlspecialchars($field['name']) . "\" />\n";
654

    
655
				if($field['description'] <> "") {
656
					echo "<br /> " . $field['description'];
657
				}
658

    
659
				break;
660
			case "listtopic":
661
				echo "<td>&nbsp;</td></tr>";
662
				echo "<tr><td colspan=\"2\" class=\"listtopic\">" . $field['name'] . "<br />\n";
663

    
664
				break;
665
			case "subnet_select":
666
				if ($field['displayname']) {
667
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
668
					echo $field['displayname'];
669
					echo ":</td>\n";
670
				} else if(!$field['dontdisplayname']) {
671
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
672
					echo fixup_string($field['name']);
673
					echo ":</td>";
674
				}
675
				if(!$field['dontcombinecells'])
676
					echo "<td class=\"vtable\">";
677
				echo "<select class='formselect' name='{$name}'>\n";
678
				for($x=1; $x<33; $x++) {
679
					$CHECKED = "";
680
					if($value == $x) $CHECKED = " selected=\"selected\"";
681
					if($x <> 31)
682
						echo "<option value='{$x}' {$CHECKED}>{$x}</option>\n";
683
				}
684
				echo "</select>\n";
685

    
686
				if($field['description'] <> "") {
687
					echo "<br /> " . $field['description'];
688
				}
689

    
690
				break;
691
			case "timezone_select":
692
				exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
693
				$timezonelist = array_filter($timezonelist, 'is_timezone');
694
				sort($timezonelist);
695

    
696
				/* kill carriage returns */
697
				for($x=0; $x<count($timezonelist); $x++)
698
					$timezonelist[$x] = str_replace("\n", "", $timezonelist[$x]);
699

    
700
				if ($field['displayname']) {
701
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
702
					echo $field['displayname'];
703
					echo ":</td>\n";
704
				} else if(!$field['dontdisplayname']) {
705
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
706
					echo fixup_string($field['name']);
707
					echo ":</td>";
708
				}
709
				if(!$field['dontcombinecells'])
710
					echo "<td class=\"vtable\">";
711
				echo "<select class='formselect' name='{$name}'>\n";
712
				foreach ($timezonelist as $tz) {
713
					if(strstr($tz, "GMT"))
714
						continue;
715
					$SELECTED = "";
716
					if ($value == $tz) $SELECTED = " selected=\"selected\"";
717
					echo "<option value=\"" . htmlspecialchars($tz) . "\" {$SELECTED}>";
718
					echo htmlspecialchars($tz);
719
					echo "</option>\n";
720
				}
721
				echo "</select>\n";
722

    
723
				if($field['description'] <> "") {
724
					echo "<br /> " . $field['description'];
725
				}
726

    
727
				break;
728
			case "checkbox":
729
				if ($field['displayname']) {
730
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
731
					echo $field['displayname'];
732
					echo ":</td>\n";
733
				} else if(!$field['dontdisplayname']) {
734
					echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
735
					echo $field['name'];
736
					echo ":</td>";
737
				}
738
				$checked = "";
739
				if($value <> "")
740
					$checked = " checked=\"checked\"";
741
				echo "<td class=\"vtable\"><input value=\"on\" type='checkbox' id='" . $name . "' name='" . $name . "' " . $checked;
742
				if(isset($field['enablefields']) or isset($field['checkenablefields']))
743
					echo " onclick=\"enablechange()\"";
744
				else if(isset($field['disablefields']) or isset($field['checkdisablefields']))
745
					echo " onclick=\"disablechange()\"";
746
				echo " />\n";
747

    
748
				if($field['description'] <> "") {
749
					echo $field['description'];
750
				}
751

    
752
				break;
753
			}
754

    
755
			if($field['typehint'] <> "") {
756
				echo $field['typehint'];
757
			}
758
			if($field['warning'] <> "") {
759
				echo "<br /><b><font color=\"red\">" . $field['warning'] . "</font></b>";
760
			}
761

    
762
			if(!$field['combinefieldsbegin']) {
763
				if (!$field['dontcombinecells'])
764
					echo "</td>";
765

    
766
				echo "</tr>\n";
767
			}
768

    
769
		}
770
	}
771
?>
772
			</table>
773
		</td>
774
	</tr>
775
</table>
776
<br />&nbsp;
777
</div>
778
</center>
779
</form>
780
<script type="text/javascript">
781
//<![CDATA[
782
	if (typeof ext_change != 'undefined') {
783
		ext_change();
784
	}
785
	if (typeof proto_change != 'undefined') {
786
		ext_change();
787
	}
788
	if (typeof proto_change != 'undefined') {
789
		proto_change();
790
	}
791

    
792
<?php
793
	$isfirst = 0;
794
	$aliases = "";
795
	$addrisfirst = 0;
796
	$aliasesaddr = "";
797
	if($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias']))
798
		foreach($config['aliases']['alias'] as $alias_name) {
799
				if($isfirst == 1)
800
					$aliases .= ",";
801
				$aliases .= "'" . $alias_name['name'] . "'";
802
				$isfirst = 1;
803
		}
804
?>
805

    
806
	var customarray=new Array(<?php echo $aliases; ?>);
807

    
808
	window.onload = function () {
809

    
810
		<?php
811
			$counter=0;
812
			foreach($inputaliases as $alias) {
813
				echo "var oTextbox$counter = new AutoSuggestControl(document.getElementById(\"$alias\"), new StateSuggestions(customarray));\n";
814
				$counter++;
815
			}
816
		?>
817

    
818
	}
819

    
820
//]]>
821
</script>
822

    
823
<?php
824

    
825
$fieldnames_array = Array();
826
if($pkg['step'][$stepid]['disableallfieldsbydefault'] <> "") {
827
	// create a fieldname loop that can be used with javascript
828
	// hide and enable features.
829
	echo "\n<script type=\"text/javascript\">\n";
830
	echo "//<![CDATA[\n";
831
	echo "function disableall() {\n";
832
	foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
833
		if($field['type'] <> "submit" and $field['type'] <> "listtopic") {
834
			if(!$field['donotdisable'] <> "") {
835
				array_push($fieldnames_array, $field['name']);
836
				$fieldname = preg_replace("/\s+/", "", $field['name']);
837
				$fieldname = strtolower($fieldname);
838
				echo "\tdocument.forms[0]." . $fieldname . ".disabled = 1;\n";
839
			}
840
		}
841
	}
842
	echo "}\ndisableall();\n";
843
	echo "function enableitems(selectedindex) {\n";
844
	echo "disableall();\n";
845
	$idcounter = 0;
846
	if($pkg['step'][$stepid]['fields']['field'] <> "") {
847
		echo "\tswitch(selectedindex) {\n";
848
		foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
849
			if($field['options']['option'] <> "") {
850
				foreach ($field['options']['option'] as $opt) {
851
					if($opt['enablefields'] <> "") {
852
						echo "\t\tcase " . $idcounter . ":\n";
853
						$enablefields_split = explode(",", $opt['enablefields']);
854
						foreach ($enablefields_split as $efs) {
855
							$fieldname = preg_replace("/\s+/", "", $efs);
856
							$fieldname = strtolower($fieldname);
857
							if($fieldname <> "") {
858
								$onchange = "\t\t\tdocument.forms[0]." . $fieldname . ".disabled = 0; \n";
859
								echo $onchange;
860
							}
861
						}
862
						echo "\t\t\tbreak;\n";
863
					}
864
					$idcounter = $idcounter + 1;
865
				}
866
			}
867
		}
868
		echo "\t}\n";
869
	}
870
	echo "}\n";
871
	echo "//]]>\n";
872
	echo "</script>\n\n";
873
}
874
?>
875

    
876
<script type="text/javascript">
877
//<![CDATA[
878
NiftyCheck();
879
var bgcolor = document.getElementsByTagName("body")[0].style.backgroundColor;
880
Rounded("div#roundme","all",bgcolor,"#FFFFFF","smooth");
881
enablechange();
882
disablechange();
883
showchange();
884
//]]>
885
</script>
886

    
887
<?php
888
if($pkg['step'][$stepid]['stepafterformdisplay'] <> "") {
889
	// handle after form display event.
890
	eval($pkg['step'][$stepid]['stepafterformdisplay']);
891
}
892

    
893
if($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") {
894
	// handle after form display event.
895
	echo "\n<script type=\"text/javascript\">\n";
896
	echo "//<![CDATA[\n";
897
	echo $pkg['step'][$stepid]['javascriptafterformdisplay'] . "\n";
898
	echo "//]]>\n";
899
	echo "</script>\n\n";
900
}
901

    
902
/*
903
 *  HELPER FUNCTIONS
904
 */
905

    
906
function fixup_string($string) {
907
	global $config, $g, $myurl, $title;
908
	$newstring = $string;
909
	// fixup #1: $myurl -> http[s]://ip_address:port/
910
	switch($config['system']['webgui']['protocol']) {
911
		case "http":
912
			$proto = "http";
913
			break;
914
		case "https":
915
			$proto = "https";
916
			break;
917
		default:
918
			$proto = "http";
919
			break;
920
	}
921
	$port = $config['system']['webgui']['port'];
922
	if($port != "") {
923
		if(($port == "443" and $proto != "https") or ($port == "80" and $proto != "http")) {
924
			$urlport = ":" . $port;
925
		} elseif ($port != "80" and $port != "443") {
926
			$urlport = ":" . $port;
927
		} else {
928
			$urlport = "";
929
		}
930
	}
931
	$http_host = $_SERVER['SERVER_NAME'];
932
	$urlhost = $http_host;
933
	// If finishing the setup wizard, check if accessing on a LAN or WAN address that changed
934
	if($title == "Reload in progress") {
935
		if (is_ipaddr($urlhost)) {
936
			$host_if = find_ip_interface($urlhost);
937
			if ($host_if) {
938
				$host_if = convert_real_interface_to_friendly_interface_name($host_if);
939
				if ($host_if && is_ipaddr($config['interfaces'][$host_if]['ipaddr']))
940
					$urlhost = $config['interfaces'][$host_if]['ipaddr'];
941
			}
942
		} else if ($urlhost == $config['system']['hostname'])
943
			$urlhost = $config['wizardtemp']['system']['hostname'];
944
		else if ($urlhost == $config['system']['hostname'] . '.' . $config['system']['domain'])
945
			$urlhost = $config['wizardtemp']['system']['hostname'] . '.' . $config['wizardtemp']['system']['domain'];
946
	}
947
	if($urlhost != $http_host)
948
		file_put_contents("{$g['tmp_path']}/setupwizard_lastreferrer", $proto . "://" . $http_host . $urlport . $_SERVER['REQUEST_URI']);
949
	$myurl = $proto . "://" . $urlhost . $urlport . "/";
950

    
951
	if (strstr($newstring, "\$myurl"))
952
		$newstring = str_replace("\$myurl", $myurl, $newstring);
953
	// fixup #2: $wanip
954
	if (strstr($newstring, "\$wanip")) {
955
		$curwanip = get_interface_ip();
956
		$newstring = str_replace("\$wanip", $curwanip, $newstring);
957
	}
958
	// fixup #3: $lanip
959
	if (strstr($newstring, "\$lanip")) {
960
		$lanip = get_interface_ip("lan");
961
		$newstring = str_replace("\$lanip", $lanip, $newstring);
962
	}
963
	// fixup #4: fix'r'up here.
964
	return $newstring;
965
}
966

    
967
function is_timezone($elt) {
968
	return !preg_match("/\/$/", $elt);
969
}
970

    
971
?>
972

    
973
</body>
974
</html>
(255-255/256)