Project

General

Profile

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

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

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

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

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

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

    
38

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

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

    
51
global $g;
52

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
172
$pgtitle = array($title);
173
include("head.inc");
174

    
175
?>
176
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
177
<?php
178

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

    
185
<?php if($pkg['step'][$stepid]['fields']['field'] <> "") { ?>
186
<script type="text/javascript">
187
<!--
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"></a>
323
<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">
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">
341

    
342
    <tr><td colspan='2'><center><font size="2"><b><?= fixup_string($description) ?></b></font></center></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' class='formfldalias' 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";
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";
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";
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";
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";
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";
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 ";
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";
610
				echo "\t<option name='" . $opt['name'] . "' 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'><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 ></td>\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";
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";
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";
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></tr>
774
</table>
775
<br>&nbsp;
776
</div>
777
</form>
778
<script type="text/javascript">
779
<!--
780
	if (typeof ext_change != 'undefined') {
781
		ext_change();
782
	}
783
	if (typeof proto_change != 'undefined') {
784
		ext_change();
785
	}
786
	if (typeof proto_change != 'undefined') {
787
		proto_change();
788
	}
789

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

    
804
	var customarray=new Array(<?php echo $aliases; ?>);
805

    
806
	window.onload = function () {
807

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

    
816
	}
817

    
818
//-->
819
</script>
820
<script type="text/javascript">
821
NiftyCheck();
822
var bgcolor = document.getElementsByTagName("body")[0].style.backgroundColor;
823
Rounded("div#roundme","all",bgcolor,"#FFFFFF","smooth");
824
enablechange();
825
disablechange();
826
showchange();
827
</script>
828

    
829
<?php
830

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

    
879

    
880
if($pkg['step'][$stepid]['stepafterformdisplay'] <> "") {
881
	// handle after form display event.
882
	eval($pkg['step'][$stepid]['stepafterformdisplay']);
883
}
884

    
885
if($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") {
886
	// handle after form display event.
887
        echo "\n<script type=\"text/javascript\">\n";
888
	echo $pkg['step'][$stepid]['javascriptafterformdisplay'] . "\n";
889
	echo "</script>\n\n";
890
}
891

    
892
/*
893
 *  HELPER FUNCTIONS
894
 */
895

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

    
942
	if (strstr($newstring, "\$myurl"))
943
		$newstring = str_replace("\$myurl", $myurl, $newstring);
944
	// fixup #2: $wanip
945
	if (strstr($newstring, "\$wanip")) {
946
		$curwanip = get_interface_ip();
947
		$newstring = str_replace("\$wanip", $curwanip, $newstring);
948
	}
949
	// fixup #3: $lanip
950
	if (strstr($newstring, "\$lanip")) {
951
		$lanip = get_interface_ip("lan");
952
		$newstring = str_replace("\$lanip", $lanip, $newstring);
953
	}
954
	// fixup #4: fix'r'up here.
955
	return $newstring;
956
}
957

    
958
function is_timezone($elt) {
959
	return !preg_match("/\/$/", $elt);
960
}
961

    
962
?>
963

    
964
</body>
965
</html>
(250-250/251)