Project

General

Profile

Download (20.2 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/*
3
	system.php
4
*/
5
/* ====================================================================
6
 *	Copyright (c)  2004-2015  Electric Sheep Fencing, LLC. All rights reserved.
7
 *
8
 *	Some or all of this file is based on the m0n0wall project which is
9
 *	Copyright (c)  2004 Manuel Kasper (BSD 2 clause)
10
 *
11
 *	Redistribution and use in source and binary forms, with or without modification,
12
 *	are permitted provided that the following conditions are met:
13
 *
14
 *	1. Redistributions of source code must retain the above copyright notice,
15
 *		this list of conditions and the following disclaimer.
16
 *
17
 *	2. Redistributions in binary form must reproduce the above copyright
18
 *		notice, this list of conditions and the following disclaimer in
19
 *		the documentation and/or other materials provided with the
20
 *		distribution.
21
 *
22
 *	3. All advertising materials mentioning features or use of this software
23
 *		must display the following acknowledgment:
24
 *		"This product includes software developed by the pfSense Project
25
 *		 for use in the pfSense software distribution. (http://www.pfsense.org/).
26
 *
27
 *	4. The names "pfSense" and "pfSense Project" must not be used to
28
 *		 endorse or promote products derived from this software without
29
 *		 prior written permission. For written permission, please contact
30
 *		 coreteam@pfsense.org.
31
 *
32
 *	5. Products derived from this software may not be called "pfSense"
33
 *		nor may "pfSense" appear in their names without prior written
34
 *		permission of the Electric Sheep Fencing, LLC.
35
 *
36
 *	6. Redistributions of any form whatsoever must retain the following
37
 *		acknowledgment:
38
 *
39
 *	"This product includes software developed by the pfSense Project
40
 *	for use in the pfSense software distribution (http://www.pfsense.org/).
41
 *
42
 *	THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
43
 *	EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44
 *	IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
45
 *	PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
46
 *	ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47
 *	SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
48
 *	NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
49
 *	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50
 *	HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
51
 *	STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
52
 *	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
53
 *	OF THE POSSIBILITY OF SUCH DAMAGE.
54
 *
55
 *	====================================================================
56
 *
57
 */
58

    
59
##|+PRIV
60
##|*IDENT=page-system-generalsetup
61
##|*NAME=System: General Setup
62
##|*DESCR=Allow access to the 'System: General Setup' page.
63
##|*MATCH=system.php*
64
##|-PRIV
65

    
66
require("guiconfig.inc");
67
require_once("functions.inc");
68
require_once("filter.inc");
69
require_once("shaper.inc");
70
require_once("system.inc");
71

    
72
$pconfig['hostname'] = $config['system']['hostname'];
73
$pconfig['domain'] = $config['system']['domain'];
74
list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $config['system']['dnsserver'];
75

    
76
$arr_gateways = return_gateways_array();
77

    
78
// set default colmns to two if unset
79
if (!isset($config['system']['webgui']['dashboardcolumns'])) {
80
	$config['system']['webgui']['dashboardcolumns'] = 2;
81
}
82

    
83
$pconfig['dns1gw'] = $config['system']['dns1gw'];
84
$pconfig['dns2gw'] = $config['system']['dns2gw'];
85
$pconfig['dns3gw'] = $config['system']['dns3gw'];
86
$pconfig['dns4gw'] = $config['system']['dns4gw'];
87

    
88
$pconfig['dnsallowoverride'] = isset($config['system']['dnsallowoverride']);
89
$pconfig['timezone'] = $config['system']['timezone'];
90
$pconfig['timeservers'] = $config['system']['timeservers'];
91
$pconfig['language'] = $config['system']['language'];
92
$pconfig['webguicss'] = $config['system']['webgui']['webguicss'];
93
$pconfig['webguifixedmenu'] = $config['system']['webgui']['webguifixedmenu'];
94
$pconfig['dashboardcolumns'] = $config['system']['webgui']['dashboardcolumns'];
95
$pconfig['webguileftcolumnhyper'] = isset($config['system']['webgui']['webguileftcolumnhyper']);
96
$pconfig['dashboardavailablewidgetspanel'] = isset($config['system']['webgui']['dashboardavailablewidgetspanel']);
97
$pconfig['systemlogsfilterpanel'] = isset($config['system']['webgui']['systemlogsfilterpanel']);
98
$pconfig['systemlogsmanagelogpanel'] = isset($config['system']['webgui']['systemlogsmanagelogpanel']);
99
$pconfig['statusmonitoringsettingspanel'] = isset($config['system']['webgui']['statusmonitoringsettingspanel']);
100
$pconfig['dnslocalhost'] = isset($config['system']['dnslocalhost']);
101

    
102
if (!$pconfig['timezone']) {
103
	if (isset($g['default_timezone']) && !empty($g['default_timezone'])) {
104
		$pconfig['timezone'] = $g['default_timezone'];
105
	} else {
106
		$pconfig['timezone'] = "Etc/UTC";
107
	}
108
}
109

    
110
if (!$pconfig['timeservers']) {
111
	$pconfig['timeservers'] = "pool.ntp.org";
112
}
113

    
114
$changedesc = gettext("System") . ": ";
115
$changecount = 0;
116

    
117
function is_timezone($elt) {
118
	return !preg_match("/\/$/", $elt);
119
}
120

    
121
if ($pconfig['timezone'] <> $_POST['timezone']) {
122
	filter_pflog_start(true);
123
}
124

    
125
$timezonelist = system_get_timezone_list();
126

    
127
$multiwan = false;
128
$interfaces = get_configured_interface_list();
129
foreach ($interfaces as $interface) {
130
	if (interface_has_gateway($interface)) {
131
		$multiwan = true;
132
	}
133
}
134

    
135
if ($_POST) {
136

    
137
	$changecount++;
138

    
139
	unset($input_errors);
140
	$pconfig = $_POST;
141

    
142
	/* input validation */
143
	$reqdfields = explode(" ", "hostname domain");
144
	$reqdfieldsn = array(gettext("Hostname"), gettext("Domain"));
145

    
146
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
147

    
148
	if ($_POST['webguicss']) {
149
		$config['system']['webgui']['webguicss'] = $_POST['webguicss'];
150
	} else {
151
		unset($config['system']['webgui']['webguicss']);
152
	}
153

    
154
	if ($_POST['webguifixedmenu']) {
155
		$config['system']['webgui']['webguifixedmenu'] = $_POST['webguifixedmenu'];
156
	} else {
157
		unset($config['system']['webgui']['webguifixedmenu']);
158
	}
159

    
160
	if ($_POST['dashboardcolumns']) {
161
		$config['system']['webgui']['dashboardcolumns'] = $_POST['dashboardcolumns'];
162
	} else {
163
		unset($config['system']['webgui']['dashboardcolumns']);
164
	}
165

    
166
	if ($_POST['hostname']) {
167
		if (!is_hostname($_POST['hostname'])) {
168
			$input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
169
		} else {
170
			if (!is_unqualified_hostname($_POST['hostname'])) {
171
				$input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
172
			}
173
		}
174
	}
175
	if ($_POST['domain'] && !is_domain($_POST['domain'])) {
176
		$input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'.");
177
	}
178

    
179
	$dnslist = $ignore_posted_dnsgw = array();
180

    
181
	for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
182
		$dnsname="dns{$dnscounter}";
183
		$dnsgwname="dns{$dnscounter}gw";
184
		$dnslist[] = $_POST[$dnsname];
185

    
186
		if (($_POST[$dnsname] && !is_ipaddr($_POST[$dnsname]))) {
187
			$input_errors[] = sprintf(gettext("A valid IP address must be specified for DNS server %s."), $dnscounter);
188
		} else {
189
			if (($_POST[$dnsgwname] <> "") && ($_POST[$dnsgwname] <> "none")) {
190
				// A real gateway has been selected.
191
				if (is_ipaddr($_POST[$dnsname])) {
192
					if ((is_ipaddrv4($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
193
						$input_errors[] = sprintf(gettext('The IPv6 gateway "%1$s" can not be specified for IPv4 DNS server "%2$s".'), $_POST[$dnsgwname], $_POST[$dnsname]);
194
					}
195
					if ((is_ipaddrv6($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
196
						$input_errors[] = sprintf(gettext('The IPv4 gateway "%1$s" can not be specified for IPv6 DNS server "%2$s".'), $_POST[$dnsgwname], $_POST[$dnsname]);
197
					}
198
				} else {
199
					// The user selected a gateway but did not provide a DNS address. Be nice and set the gateway back to "none".
200
					$ignore_posted_dnsgw[$dnsgwname] = true;
201
				}
202
			}
203
		}
204
	}
205

    
206
	if (count(array_filter($dnslist)) != count(array_unique(array_filter($dnslist)))) {
207
		$input_errors[] = gettext('Each configured DNS server must have a unique IP address. Remove the duplicated IP.');
208
	}
209

    
210
	$direct_networks_list = explode(" ", filter_get_direct_networks_list());
211
	for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
212
		$dnsitem = "dns{$dnscounter}";
213
		$dnsgwitem = "dns{$dnscounter}gw";
214
		if ($_POST[$dnsgwitem]) {
215
			if (interface_has_gateway($_POST[$dnsgwitem])) {
216
				foreach ($direct_networks_list as $direct_network) {
217
					if (ip_in_subnet($_POST[$dnsitem], $direct_network)) {
218
						$input_errors[] = sprintf(gettext("A gateway can not be assigned to DNS '%s' server which is on a directly connected network."), $_POST[$dnsitem]);
219
					}
220
				}
221
			}
222
		}
223
	}
224

    
225
	# it's easy to have a little too much whitespace in the field, clean it up for the user before processing.
226
	$_POST['timeservers'] = preg_replace('/[[:blank:]]+/', ' ', $_POST['timeservers']);
227
	$_POST['timeservers'] = trim($_POST['timeservers']);
228
	foreach (explode(' ', $_POST['timeservers']) as $ts) {
229
		if (!is_domain($ts)) {
230
			$input_errors[] = gettext("A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'.");
231
		}
232
	}
233

    
234
	if (!$input_errors) {
235
		update_if_changed("hostname", $config['system']['hostname'], $_POST['hostname']);
236
		update_if_changed("domain", $config['system']['domain'], $_POST['domain']);
237
		update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']);
238
		update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers']));
239

    
240
		if ($_POST['language'] && $_POST['language'] != $config['system']['language']) {
241
			$config['system']['language'] = $_POST['language'];
242
			set_language();
243
		}
244

    
245
		unset($config['system']['webgui']['webguileftcolumnhyper']);
246
		$config['system']['webgui']['webguileftcolumnhyper'] = $_POST['webguileftcolumnhyper'] ? true : false;
247

    
248
		unset($config['system']['webgui']['dashboardavailablewidgetspanel']);
249
		$config['system']['webgui']['dashboardavailablewidgetspanel'] = $_POST['dashboardavailablewidgetspanel'] ? true : false;
250

    
251
		unset($config['system']['webgui']['systemlogsfilterpanel']);
252
		$config['system']['webgui']['systemlogsfilterpanel'] = $_POST['systemlogsfilterpanel'] ? true : false;
253

    
254
		unset($config['system']['webgui']['systemlogsmanagelogpanel']);
255
		$config['system']['webgui']['systemlogsmanagelogpanel'] = $_POST['systemlogsmanagelogpanel'] ? true : false;
256

    
257
		unset($config['system']['webgui']['statusmonitoringsettingspanel']);
258
		$config['system']['webgui']['statusmonitoringsettingspanel'] = $_POST['statusmonitoringsettingspanel'] ? true : false;
259

    
260
		/* XXX - billm: these still need updating after figuring out how to check if they actually changed */
261
		$olddnsservers = $config['system']['dnsserver'];
262
		unset($config['system']['dnsserver']);
263
		if ($_POST['dns1']) {
264
			$config['system']['dnsserver'][] = $_POST['dns1'];
265
		}
266
		if ($_POST['dns2']) {
267
			$config['system']['dnsserver'][] = $_POST['dns2'];
268
		}
269
		if ($_POST['dns3']) {
270
			$config['system']['dnsserver'][] = $_POST['dns3'];
271
		}
272
		if ($_POST['dns4']) {
273
			$config['system']['dnsserver'][] = $_POST['dns4'];
274
		}
275

    
276
		$olddnsallowoverride = $config['system']['dnsallowoverride'];
277

    
278
		unset($config['system']['dnsallowoverride']);
279
		$config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false;
280

    
281
		if ($_POST['dnslocalhost'] == "yes") {
282
			$config['system']['dnslocalhost'] = true;
283
		} else {
284
			unset($config['system']['dnslocalhost']);
285
		}
286

    
287
		/* which interface should the dns servers resolve through? */
288
		$outdnscounter = 0;
289
		for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
290
			$dnsname="dns{$dnscounter}";
291
			$dnsgwname="dns{$dnscounter}gw";
292
			$olddnsgwname = $config['system'][$dnsgwname];
293

    
294
			if ($ignore_posted_dnsgw[$dnsgwname]) {
295
				$thisdnsgwname = "none";
296
			} else {
297
				$thisdnsgwname = $pconfig[$dnsgwname];
298
			}
299

    
300
			// "Blank" out the settings for this index, then we set them below using the "outdnscounter" index.
301
			$config['system'][$dnsgwname] = "none";
302
			$pconfig[$dnsgwname] = "none";
303
			$pconfig[$dnsname] = "";
304

    
305
			if ($_POST[$dnsname]) {
306
				// Only the non-blank DNS servers were put into the config above.
307
				// So we similarly only add the corresponding gateways sequentially to the config (and to pconfig), as we find non-blank DNS servers.
308
				// This keeps the DNS server IP and corresponding gateway "lined up" when the user blanks out a DNS server IP in the middle of the list.
309
				$outdnscounter++;
310
				$outdnsname="dns{$outdnscounter}";
311
				$outdnsgwname="dns{$outdnscounter}gw";
312
				$pconfig[$outdnsname] = $_POST[$dnsname];
313
				if ($_POST[$dnsgwname]) {
314
					$config['system'][$outdnsgwname] = $thisdnsgwname;
315
					$pconfig[$outdnsgwname] = $thisdnsgwname;
316
				} else {
317
					// Note: when no DNS GW name is chosen, the entry is set to "none", so actually this case never happens.
318
					unset($config['system'][$outdnsgwname]);
319
					$pconfig[$outdnsgwname] = "";
320
				}
321
			}
322
			if (($olddnsgwname != "") && ($olddnsgwname != "none") && (($olddnsgwname != $thisdnsgwname) || ($olddnsservers[$dnscounter-1] != $_POST[$dnsname]))) {
323
				// A previous DNS GW name was specified. It has now gone or changed, or the DNS server address has changed.
324
				// Remove the route. Later calls will add the correct new route if needed.
325
				if (is_ipaddrv4($olddnsservers[$dnscounter-1])) {
326
					mwexec("/sbin/route delete " . escapeshellarg($olddnsservers[$dnscounter-1]));
327
				} else if (is_ipaddrv6($olddnsservers[$dnscounter-1])) {
328
					mwexec("/sbin/route delete -inet6 " . escapeshellarg($olddnsservers[$dnscounter-1]));
329
				}
330
			}
331
		}
332

    
333
		if ($changecount > 0) {
334
			write_config($changedesc);
335
		}
336

    
337
		$retval = 0;
338
		$retval = system_hostname_configure();
339
		$retval |= system_hosts_generate();
340
		$retval |= system_resolvconf_generate();
341
		if (isset($config['dnsmasq']['enable'])) {
342
			$retval |= services_dnsmasq_configure();
343
		} elseif (isset($config['unbound']['enable'])) {
344
			$retval |= services_unbound_configure();
345
		}
346
		$retval |= system_timezone_configure();
347
		$retval |= system_ntp_configure();
348

    
349
		if ($olddnsallowoverride != $config['system']['dnsallowoverride']) {
350
			$retval |= send_event("service reload dns");
351
		}
352

    
353
		// Reload the filter - plugins might need to be run.
354
		$retval |= filter_configure();
355

    
356
		$savemsg = get_std_save_message($retval);
357
	}
358

    
359
	unset($ignore_posted_dnsgw);
360
}
361

    
362
$pgtitle = array(gettext("System"), gettext("General Setup"));
363
include("head.inc");
364

    
365
if ($input_errors) {
366
	print_input_errors($input_errors);
367
}
368

    
369
if ($savemsg) {
370
	print_info_box($savemsg, 'success');
371
}
372
?>
373
<div id="container">
374
<?php
375

    
376
$form = new Form;
377
$section = new Form_Section('System');
378
$section->addInput(new Form_Input(
379
	'hostname',
380
	'Hostname',
381
	'text',
382
	$pconfig['hostname'],
383
	['placeholder' => 'pfSense']
384
))->setHelp('Name of the firewall host, without domain part');
385
$section->addInput(new Form_Input(
386
	'domain',
387
	'Domain',
388
	'text',
389
	$pconfig['domain'],
390
	['placeholder' => 'mycorp.com, home, office, private, etc.']
391
))->setHelp('Do not use \'local\' as a domain name. It will cause local '.
392
	'hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve '.
393
	'local hosts not running mDNS.');
394
$form->add($section);
395

    
396
$section = new Form_Section('DNS Server Settings');
397

    
398
for ($i=1; $i<5; $i++) {
399
//	if (!isset($pconfig['dns'.$i]))
400
//		continue;
401

    
402
	$group = new Form_Group('DNS Server ' . $i);
403

    
404
	$group->add(new Form_Input(
405
		'dns' . $i,
406
		'DNS Server',
407
		'text',
408
		$pconfig['dns'. $i]
409
	))->setHelp(($i == 4) ? 'Address':null);
410

    
411
	$help = "Enter IP addresses to be used by the system for DNS resolution. " .
412
		"These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients.";
413

    
414
	if ($multiwan)	{
415
		$options = array('none' => 'none');
416

    
417
		foreach ($arr_gateways as $gwname => $gwitem) {
418
			if ((is_ipaddrv4(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv6($gwitem['gateway'])))) {
419
				continue;
420
			}
421

    
422
			if ((is_ipaddrv6(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv4($gwitem['gateway'])))) {
423
				continue;
424
			}
425

    
426
			$options[$gwname] = $gwname.' - '.$gwitem['friendlyiface'].' - '.$gwitem['gateway'];
427
		}
428

    
429
		$group->add(new Form_Select(
430
			'dns' . $i . 'gw',
431
			'Gateway',
432
			$pconfig['dns' . $i . 'gw'],
433
			$options
434
		))->setHelp(($i == 4) ? 'Gateway':null);;
435

    
436
		$help .= '<br/>'. "In addition, optionally select the gateway for each DNS server. " .
437
			"When using multiple WAN connections there should be at least one unique DNS server per gateway.";
438
	}
439

    
440
	if ($i == 4) {
441
		$group->setHelp($help);
442
	}
443

    
444
	$section->add($group);
445
}
446

    
447
$section->addInput(new Form_Checkbox(
448
	'dnsallowoverride',
449
	'DNS Server Override',
450
	'Allow DNS server list to be overridden by DHCP/PPP on WAN',
451
	$pconfig['dnsallowoverride']
452
))->setHelp(sprintf(gettext('If this option is set, %s will use DNS servers '.
453
	'assigned by a DHCP/PPP server on WAN for its own purposes (including '.
454
	'the DNS forwarder). However, they will not be assigned to DHCP and PPTP '.
455
	'VPN clients.'), $g['product_name']));
456

    
457
$section->addInput(new Form_Checkbox(
458
	'dnslocalhost',
459
	'Disable DNS Forwarder',
460
	'Do not use the DNS Forwarder as a DNS server for the firewall',
461
	$pconfig['dnslocalhost']
462
))->setHelp('By default localhost (127.0.0.1) will be used as the first DNS '.
463
	'server where the DNS Forwarder or DNS Resolver is enabled and set to '.
464
	'listen on Localhost, so system can use the local DNS service to perform '.
465
	'lookups. Checking this box omits localhost from the list of DNS servers.');
466

    
467
$form->add($section);
468

    
469
$section = new Form_Section('Localization');
470
$section->addInput(new Form_Select(
471
	'timezone',
472
	'Timezone',
473
	$pconfig['timezone'],
474
	array_combine($timezonelist, $timezonelist)
475
))->setHelp('Select the timezone or location within the timezone to be used by this system.');
476
$section->addInput(new Form_Input(
477
	'timeservers',
478
	'Timeservers',
479
	'text',
480
	$pconfig['timeservers']
481
))->setHelp('Use a space to separate multiple hosts (only one required). '.
482
	'Remember to set up at least one DNS server if a host name is entered here!');
483
$section->addInput(new Form_Select(
484
	'language',
485
	'Language',
486
	$pconfig['language'],
487
	get_locale_list()
488
))->setHelp('Choose a language for the webConfigurator');
489

    
490
$form->add($section);
491

    
492
$csslist = array();
493
$css = glob("/usr/local/www/css/*.css");
494
foreach ($css as $file) {
495
	$file = basename($file);
496
	$csslist[$file] = pathinfo($file, PATHINFO_FILENAME);
497
}
498

    
499
asort($csslist);
500

    
501
if (!isset($pconfig['webguicss']) || !isset($csslist[$pconfig['webguicss']])) {
502
	$pconfig['webguicss'] = "pfSense.css";
503
}
504

    
505
$section = new Form_Section('webConfigurator');
506

    
507
$section->addInput(new Form_Select(
508
	'webguicss',
509
	'Theme',
510
	$pconfig['webguicss'],
511
	$csslist
512
))->setHelp('Choose an alternative css file (if installed) to change the appearance of the webConfigurator. css files are located in /usr/local/www/css/');
513

    
514
$section->addInput(new Form_Select(
515
	'webguifixedmenu',
516
	'Top Navigation',
517
	$pconfig['webguifixedmenu'],
518
	["" => gettext("Scrolls with page"), "fixed" => gettext("Fixed (Remains visible at top of page)")]
519
))->setHelp("The fixed option is intended for large screens only.");
520

    
521
$section->addInput(new Form_Input(
522
	'dashboardcolumns',
523
	'Dashboard Columns',
524
	'number',
525
	$pconfig['dashboardcolumns'],
526
	[min => 1, max => 4]
527
));
528

    
529
$group = new Form_Group('Associated Panels Show/Hide');
530

    
531
$group->add(new Form_Checkbox(
532
	'dashboardavailablewidgetspanel',
533
	null,
534
	'Available Widgets',
535
	$pconfig['dashboardavailablewidgetspanel']
536
	))->setHelp('Show the Available Widgets panel on the Dashboard.');
537

    
538
$group->add(new Form_Checkbox(
539
	'systemlogsfilterpanel',
540
	null,
541
	'Log Filter',
542
	$pconfig['systemlogsfilterpanel']
543
))->setHelp('Show the Log Filter panel in System Logs.');
544

    
545
$group->add(new Form_Checkbox(
546
	'systemlogsmanagelogpanel',
547
	null,
548
	'Manage Log',
549
	$pconfig['systemlogsmanagelogpanel']
550
))->setHelp('Show the Manage Log panel in System Logs.');
551

    
552
$group->add(new Form_Checkbox(
553
	'statusmonitoringsettingspanel',
554
	null,
555
	'Monitoring Settings',
556
	$pconfig['statusmonitoringsettingspanel']
557
))->setHelp('Show the Settings panel in Status Monitoring.');
558

    
559
$group->setHelp('These options allow certain panels to be automatically hidden on page load. A control is provided in the title bar to un-hide the panel.
560
<br /><span class="badge" title="This feature is in BETA">BETA</span>');
561

    
562
$section->add($group);
563

    
564
$section->addInput(new Form_Checkbox(
565
	'webguileftcolumnhyper',
566
	'Left Column Labels',
567
	'Active',
568
	$pconfig['webguileftcolumnhyper']
569
))->setHelp('If selected, clicking a label in the left column will select/toggle the first item of the group.<br /><span class="badge" title="This feature is in BETA">BETA</span>');
570

    
571
$form->add($section);
572

    
573
print $form;
574
?>
575
</div>
576
<?php
577
include("foot.inc");
578
?>
(185-185/225)