Project

General

Profile

Download (40.6 KB) Statistics
| Branch: | Tag: | Revision:
1 d47013e1 Scott Ullrich
<?php
2
/*
3 c5d81585 Renato Botelho
 * pkg_edit.php
4
 *
5
 * part of pfSense (https://www.pfsense.org)
6 81299b5c Renato Botelho
 * Copyright (c) 2004-2016 Rubicon Communications, LLC (Netgate)
7 c5d81585 Renato Botelho
 * All rights reserved.
8
 *
9 b12ea3fb Renato Botelho
 * Licensed under the Apache License, Version 2.0 (the "License");
10
 * you may not use this file except in compliance with the License.
11
 * You may obtain a copy of the License at
12 c5d81585 Renato Botelho
 *
13 b12ea3fb Renato Botelho
 * http://www.apache.org/licenses/LICENSE-2.0
14 c5d81585 Renato Botelho
 *
15 b12ea3fb Renato Botelho
 * Unless required by applicable law or agreed to in writing, software
16
 * distributed under the License is distributed on an "AS IS" BASIS,
17
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
 * See the License for the specific language governing permissions and
19
 * limitations under the License.
20 23f6cdd7 Stephen Beaver
 */
21 d47013e1 Scott Ullrich
22 6b07c15a Matthew Grooms
##|+PRIV
23
##|*IDENT=page-package-edit
24 5230f468 jim-p
##|*NAME=Package: Edit
25 6b07c15a Matthew Grooms
##|*DESCR=Allow access to the 'Package: Edit' page.
26
##|*MATCH=pkg_edit.php*
27
##|-PRIV
28
29 0089af7c Scott Ullrich
ini_set('max_execution_time', '0');
30
31 c81ef6e2 Phil Davis
require_once("guiconfig.inc");
32 7a927e67 Scott Ullrich
require_once("functions.inc");
33
require_once("filter.inc");
34
require_once("shaper.inc");
35 f8e335a3 Scott Ullrich
require_once("pkg-utils.inc");
36 d47013e1 Scott Ullrich
37 14db714e Scott Ullrich
/* dummy stubs needed by some code that was MFC'd */
38 f8ac4407 Phil Davis
function pfSenseHeader($location) {
39
	header("Location: " . $location);
40
}
41 14db714e Scott Ullrich
42 d8c1a6c5 Scott Ullrich
$xml = htmlspecialchars($_GET['xml']);
43 f8ac4407 Phil Davis
if ($_POST['xml']) {
44
	$xml = htmlspecialchars($_POST['xml']);
45
}
46 d47013e1 Scott Ullrich
47 bef9f697 Renato Botelho
$xml_fullpath = realpath('/usr/local/pkg/' . $xml);
48 69eb2e29 Renato Botelho
49 f5dbca0d Stephen Beaver
if ($xml == "" || $xml_fullpath === false || substr($xml_fullpath, 0, strlen('/usr/local/pkg/')) != '/usr/local/pkg/') {
50 84320769 k-paulius
	$pgtitle = array(gettext("Package"), gettext("Editor"));
51 edcd7535 Phil Davis
	$pglinks = array("", "@self");
52 f5dbca0d Stephen Beaver
	include("head.inc");
53 8545adde k-paulius
	print_info_box(gettext("No valid package defined."), 'danger', false);
54 f5dbca0d Stephen Beaver
	include("foot.inc");
55 f8ac4407 Phil Davis
	die;
56 d47013e1 Scott Ullrich
} else {
57 f8ac4407 Phil Davis
	$pkg = parse_xml_config_pkg($xml_fullpath, "packagegui");
58 d47013e1 Scott Ullrich
}
59 7c172009 Scott Ullrich
60 23f6cdd7 Stephen Beaver
if ($pkg['include_file'] != "") {
61 7c172009 Scott Ullrich
	require_once($pkg['include_file']);
62
}
63
64 f8ac4407 Phil Davis
if (!isset($pkg['adddeleteeditpagefields'])) {
65 b91540da Scott Ullrich
	$only_edit = true;
66 f8ac4407 Phil Davis
} else {
67 b91540da Scott Ullrich
	$only_edit = false;
68 f8ac4407 Phil Davis
}
69 b91540da Scott Ullrich
70 da7bf505 Scott Ullrich
$id = $_GET['id'];
71 f8ac4407 Phil Davis
if (isset($_POST['id'])) {
72 d8c1a6c5 Scott Ullrich
	$id = htmlspecialchars($_POST['id']);
73 f8ac4407 Phil Davis
}
74 98bcf1f8 Scott Ullrich
75 23f6cdd7 Stephen Beaver
// Not posting?	 Then user is editing a record. There must be a valid id
76 916b74c6 Scott Ullrich
// when editing a record.
77 f8ac4407 Phil Davis
if (!$id && !$_POST) {
78 916b74c6 Scott Ullrich
	$id = "0";
79 f8ac4407 Phil Davis
}
80 5a61331a jim-p
81 f8ac4407 Phil Davis
if (!is_numeric($id)) {
82 6f3d2063 Renato Botelho
	header("Location: /");
83 5a61331a jim-p
	exit;
84
}
85
86 23f6cdd7 Stephen Beaver
if ($pkg['custom_php_global_functions'] != "") {
87 f8ac4407 Phil Davis
	eval($pkg['custom_php_global_functions']);
88
}
89 529ffadb Bill Marquette
90 31d27c6c Scott Ullrich
// grab the installedpackages->package_name section.
91 f8ac4407 Phil Davis
if ($config['installedpackages'] && !is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'])) {
92 7db8ff99 Colin Smith
	$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array();
93 f8ac4407 Phil Davis
}
94 da7bf505 Scott Ullrich
95 a2a7f74d jim-p
// If the first entry in the array is an empty <config/> tag, kill it.
96 0f649c97 Phil Davis
if ($config['installedpackages'] &&
97
    (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0) &&
98
    ($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0] == "")) {
99 a2a7f74d jim-p
	array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']);
100 f8ac4407 Phil Davis
}
101 a2a7f74d jim-p
102 7db8ff99 Colin Smith
$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
103 da7bf505 Scott Ullrich
104 23f6cdd7 Stephen Beaver
if ($_GET['savemsg'] != "") {
105 d8c1a6c5 Scott Ullrich
	$savemsg = htmlspecialchars($_GET['savemsg']);
106 f8ac4407 Phil Davis
}
107 f9a91638 Scott Ullrich
108 23f6cdd7 Stephen Beaver
if ($pkg['custom_php_command_before_form'] != "") {
109 194b4e0a Colin Smith
	eval($pkg['custom_php_command_before_form']);
110 f8ac4407 Phil Davis
}
111 f9a91638 Scott Ullrich
112 6483da5d Scott Ullrich
if ($_POST) {
113 2c51f293 jim-p
	$rows = 0;
114
115
	$input_errors = array();
116
	$reqfields = array();
117
	$reqfieldsn = array();
118
	foreach ($pkg['fields']['field'] as $field) {
119 86f28390 doktornotor
		if (isset($field['required'])) {
120 f8ac4407 Phil Davis
			if ($field['fieldname']) {
121 2c51f293 jim-p
				$reqfields[] = $field['fieldname'];
122 f8ac4407 Phil Davis
			}
123
			if ($field['fielddescr']) {
124 2c51f293 jim-p
				$reqfieldsn[] = $field['fielddescr'];
125 f8ac4407 Phil Davis
			}
126 2c51f293 jim-p
		}
127
	}
128 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqfields, $reqfieldsn, $input_errors);
129 2c51f293 jim-p
130 f8ac4407 Phil Davis
	if ($pkg['custom_php_validation_command']) {
131 2c51f293 jim-p
		eval($pkg['custom_php_validation_command']);
132 f8ac4407 Phil Davis
	}
133 2c51f293 jim-p
134 f8ac4407 Phil Davis
	if ($_POST['act'] == "del") {
135
		if ($pkg['custom_delete_php_command']) {
136 23f6cdd7 Stephen Beaver
			if ($pkg['custom_php_command_before_form'] != "") {
137 f8ac4407 Phil Davis
				eval($pkg['custom_php_command_before_form']);
138
			}
139
			eval($pkg['custom_delete_php_command']);
140 b3235baa Scott Ullrich
		}
141 7c172009 Scott Ullrich
		write_config($pkg['delete_string']);
142 facd08f9 Scott Ullrich
		// resync the configuration file code if defined.
143 23f6cdd7 Stephen Beaver
		if ($pkg['custom_php_resync_config_command'] != "") {
144
			if ($pkg['custom_php_command_before_form'] != "") {
145 86f3fc00 Scott Ullrich
				eval($pkg['custom_php_command_before_form']);
146 f8ac4407 Phil Davis
			}
147 86f3fc00 Scott Ullrich
			eval($pkg['custom_php_resync_config_command']);
148 facd08f9 Scott Ullrich
		}
149 b3235baa Scott Ullrich
	} else {
150 f8ac4407 Phil Davis
		if (!$input_errors && $pkg['custom_add_php_command']) {
151 23f6cdd7 Stephen Beaver
			if ($pkg['donotsave'] != "" or $pkg['preoutput'] != "") {
152
				include("head.inc");
153 3eaeb703 Scott Ullrich
			}
154 23f6cdd7 Stephen Beaver
155 f8ac4407 Phil Davis
			if ($pkg['preoutput']) {
156
				echo "<pre>";
157
			}
158 3eaeb703 Scott Ullrich
			eval($pkg['custom_add_php_command']);
159 f8ac4407 Phil Davis
			if ($pkg['preoutput']) {
160
				echo "</pre>";
161
			}
162 b3235baa Scott Ullrich
		}
163 6483da5d Scott Ullrich
	}
164 e3c4b6b7 Scott Ullrich
165 eec70f21 Scott Ullrich
	// donotsave is enabled.  lets simply exit.
166 f8ac4407 Phil Davis
	if (empty($pkg['donotsave'])) {
167 2c51f293 jim-p
168 f8ac4407 Phil Davis
		// store values in xml configuration file.
169 2c51f293 jim-p
		if (!$input_errors) {
170
			$pkgarr = array();
171
			foreach ($pkg['fields']['field'] as $fields) {
172 f8ac4407 Phil Davis
				switch ($fields['type']) {
173 2c51f293 jim-p
					case "rowhelper":
174
						// save rowhelper items.
175 aa66a125 Steve Beaver
						#$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
176
						$rowhelpername="row";
177 f8ac4407 Phil Davis
						foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
178
							foreach ($_POST as $key => $value) {
179 29fc0334 k-paulius
								$matches = array();
180 6c07db48 Phil Davis
								if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) {
181
									$pkgarr[$rowhelpername][$matches[1]][$rowhelperfield['fieldname']] = $value;
182
								}
183 2c51f293 jim-p
							}
184 f8ac4407 Phil Davis
						}
185 2c51f293 jim-p
						break;
186
					default:
187 6c07db48 Phil Davis
						$fieldname = $fields['fieldname'];
188 2c51f293 jim-p
						if ($fieldname == "interface_array") {
189
							$fieldvalue = $_POST[$fieldname];
190
						} elseif (is_array($_POST[$fieldname])) {
191
							$fieldvalue = implode(',', $_POST[$fieldname]);
192
						} else {
193
							$fieldvalue = trim($_POST[$fieldname]);
194 f8ac4407 Phil Davis
							if ($fields['encoding'] == 'base64') {
195 2c51f293 jim-p
								$fieldvalue = base64_encode($fieldvalue);
196 f8ac4407 Phil Davis
							}
197 eec70f21 Scott Ullrich
						}
198 f8ac4407 Phil Davis
						if ($fieldname) {
199 2c51f293 jim-p
							$pkgarr[$fieldname] = $fieldvalue;
200 f8ac4407 Phil Davis
						}
201 eec70f21 Scott Ullrich
					}
202 2c51f293 jim-p
			}
203 0e730fee Scott Ullrich
204 f8ac4407 Phil Davis
			if (isset($id) && $a_pkg[$id]) {
205 2c51f293 jim-p
				$a_pkg[$id] = $pkgarr;
206 f8ac4407 Phil Davis
			} else {
207 2c51f293 jim-p
				$a_pkg[] = $pkgarr;
208 f8ac4407 Phil Davis
			}
209 0e730fee Scott Ullrich
210 2c51f293 jim-p
			write_config($pkg['addedit_string']);
211
			// late running code
212 23f6cdd7 Stephen Beaver
			if ($pkg['custom_add_php_command_late'] != "") {
213 f8ac4407 Phil Davis
				eval($pkg['custom_add_php_command_late']);
214 2c51f293 jim-p
			}
215 0e730fee Scott Ullrich
216 f8ac4407 Phil Davis
			if (isset($pkg['filter_rules_needed'])) {
217 2c51f293 jim-p
				filter_configure();
218 f8ac4407 Phil Davis
			}
219 a9b2e638 Ermal Lu?i
220 2c51f293 jim-p
			// resync the configuration file code if defined.
221 23f6cdd7 Stephen Beaver
			if ($pkg['custom_php_resync_config_command'] != "") {
222 f8ac4407 Phil Davis
				eval($pkg['custom_php_resync_config_command']);
223 2c51f293 jim-p
			}
224 facd08f9 Scott Ullrich
225 2c51f293 jim-p
			parse_package_templates();
226 dcbe6f52 Scott Ullrich
227 2c51f293 jim-p
			/* if start_command is defined, restart w/ this */
228 23f6cdd7 Stephen Beaver
			if ($pkg['start_command'] != "") {
229 f8ac4407 Phil Davis
				exec($pkg['start_command'] . ">/dev/null 2&>1");
230
			}
231 a485a6f5 Scott Ullrich
232 2c51f293 jim-p
			/* if restart_command is defined, restart w/ this */
233 23f6cdd7 Stephen Beaver
			if ($pkg['restart_command'] != "") {
234 f8ac4407 Phil Davis
				exec($pkg['restart_command'] . ">/dev/null 2&>1");
235
			}
236
237 23f6cdd7 Stephen Beaver
			if ($pkg['aftersaveredirect'] != "") {
238 f8ac4407 Phil Davis
				pfSenseHeader($pkg['aftersaveredirect']);
239
			} elseif (!$pkg['adddeleteeditpagefields']) {
240 71e8cdd6 NewEraCracker
				pfSenseHeader("pkg_edit.php?xml={$xml}&id=0");
241 f8ac4407 Phil Davis
			} elseif (!$pkg['preoutput']) {
242
				pfSenseHeader("pkg.php?xml=" . $xml);
243 2c51f293 jim-p
			}
244
			exit;
245
		} else {
246
			$get_from_post = true;
247 dcbe6f52 Scott Ullrich
		}
248 2c51f293 jim-p
	} elseif (!$input_errors) {
249 0e730fee Scott Ullrich
		exit;
250 e11aa161 Warren Baker
	}
251 da7bf505 Scott Ullrich
}
252
253 7c172009 Scott Ullrich
254 eb3743d8 Stephen Beaver
// Turn an embedded table into a bootstrap class table. This is for backward compatibility.
255
// We remove any table attributes in the XML and replace them with Bootstrap table classes
256
function bootstrapTable($text) {
257
	$t = strpos($text, '<table') + strlen('<table');	// Find the <table tag
258
	$c = strpos($text, '>', $t);						// And its closing bracket
259
260
	// Substitute everything inbetween with our new classes
261 0f649c97 Phil Davis
	if ($t && $c && (($c - $t) < 200)) {
262 eb3743d8 Stephen Beaver
		return(substr_replace($text, ' class="table table-striped table-hover table-condensed"', $t, ($c - $t)));
263
	}
264
}
265
266
/*
267
 * ROW helper function. Creates one element in the row from a PHP table by adding
268
 * the specified element to $group
269
 */
270 36cefd8f Stephen Beaver
function display_row($trc, $value, $fieldname, $type, $rowhelper, $description, $ewidth = null) {
271 9e680116 Marcello Coutinho
	global $text, $group, $config;
272 eb3743d8 Stephen Beaver
273
	switch ($type) {
274
		case "input":
275 bd0d36bd Stephen Beaver
			$inpt = new Form_Input(
276 eb3743d8 Stephen Beaver
				$fieldname . $trc,
277
				null,
278
				'text',
279
				$value
280 bd0d36bd Stephen Beaver
			);
281
282
			$inpt->setHelp($description);
283
284 36cefd8f Stephen Beaver
			if ($ewidth) {
285
				$inpt->setWidth($ewidth);
286 bd0d36bd Stephen Beaver
			}
287 eb3743d8 Stephen Beaver
288 bd0d36bd Stephen Beaver
			$group->add($inpt);
289 eb3743d8 Stephen Beaver
			break;
290
		case "checkbox":
291
			$group->add(new Form_Checkbox(
292
				$fieldname . $trc,
293
				null,
294
				null,
295
				$value,
296
				'ON'
297
			))->setHelp($description);
298
299
			break;
300
		case "password":
301
			$group->add(new Form_Input(
302
				$fieldname . $trc,
303
				null,
304
				'password',
305
				$value
306
			))->setHelp($description);
307
			break;
308
		case "textarea":
309 3478ac16 Stephen Beaver
			$group->add(new Form_Textarea(
310 eb3743d8 Stephen Beaver
				$fieldname . $trc,
311
				null,
312
				$value
313
			))->setHelp($description);
314
315
			break;
316
		case "select":
317
			$options = array();
318
			foreach ($rowhelper['options']['option'] as $rowopt) {
319
				$options[$rowopt['value']] = $rowopt['name'];
320
			}
321
322 57fc02b1 Stephen Beaver
			$grp = new Form_Select(
323 eb3743d8 Stephen Beaver
				$fieldname . $trc,
324
				null,
325
				$value,
326
				$options
327 57fc02b1 Stephen Beaver
			);
328
329
			$grp->setHelp($description);
330
331 bf7ee0e0 BBcan177
			if ($ewidth) {
332
				$grp->setWidth($ewidth);
333 57fc02b1 Stephen Beaver
			}
334
335
			$group->add($grp);
336 eb3743d8 Stephen Beaver
337
			break;
338
		case "interfaces_selection":
339
			$size = ($size ? "size=\"{$size}\"" : '');
340
			$multiple = '';
341
			if (isset($rowhelper['multiple'])) {
342 c4b60a9a Colin Fleming
				$multiple = "multiple";
343 eb3743d8 Stephen Beaver
			}
344
			echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$size} {$multiple}>\n";
345
			$ifaces = get_configured_interface_with_descr();
346
			$additional_ifaces = $rowhelper['add_to_interfaces_selection'];
347
			if (!empty($additional_ifaces)) {
348
				$ifaces = array_merge($ifaces, explode(',', $additional_ifaces));
349
			}
350
351
			if (is_array($value)) {
352
				$values = $value;
353
			} else {
354
				$values = explode(',', $value);
355
			}
356
357
			$ifaces["lo0"] = "loopback";
358
			$options = array();
359
			$selected = array();
360
361
			foreach ($ifaces as $ifname => $iface) {
362
				$options[$ifname] = $iface;
363
364 0f649c97 Phil Davis
				if (in_array($ifname, $values)) {
365 eb3743d8 Stephen Beaver
					array_push($selected, $ifname);
366
				}
367
			}
368
369
			$group->add(new Form_Select(
370
				$fieldname . $trc,
371
				null,
372
				($multiple) ? $selected:$selected[0],
373
				$options,
374
				$multiple
375
			))->setHelp($description);
376
377
			//echo "</select>\n";
378
			break;
379
		case "select_source":
380
			$options = array();
381
			$selected = array();
382
383
			if (isset($rowhelper['show_disable_value'])) {
384
				$options[$rowhelper['show_disable_value']] = $rowhelper['show_disable_value'];
385
			}
386
387
			$source_url = $rowhelper['source'];
388
			eval("\$pkg_source_txt = &$source_url;");
389
390
			foreach ($pkg_source_txt as $opt) {
391
				$source_name = ($rowhelper['source_name'] ? $opt[$rowhelper['source_name']] : $opt[$rowhelper['name']]);
392
				$source_value = ($rowhelper['source_value'] ? $opt[$rowhelper['source_value']] : $opt[$rowhelper['value']]);
393
				$options[$source_value] = $source_name;
394
395 0f649c97 Phil Davis
				if ($source_value == $value) {
396 eb3743d8 Stephen Beaver
					array_push($selected, $value);
397
				}
398
			}
399
400
			$group->add(new Form_Select(
401
				$fieldname . $trc,
402
				null,
403
				($multiple) ? $selected:$selected[0],
404
				$options,
405
				$multiple
406
			))->setHelp($description);
407
408
			break;
409
	}
410
}
411
412
function fixup_string($string) {
413
	global $config;
414
	// fixup #1: $myurl -> http[s]://ip_address:port/
415
	$https = "";
416
	$port = $config['system']['webguiport'];
417
	if ($port != "443" and $port != "80") {
418
		$urlport = ":" . $port;
419
	} else {
420
		$urlport = "";
421
	}
422
423
	if ($config['system']['webgui']['protocol'] == "https") {
424
		$https = "s";
425
	}
426
	$myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport;
427
	$newstring = str_replace("\$myurl", $myurl, $string);
428
	$string = $newstring;
429
	// fixup #2: $wanip
430
	$curwanip = get_interface_ip();
431
	$newstring = str_replace("\$wanip", $curwanip, $string);
432
	$string = $newstring;
433
	// fixup #3: $lanip
434
	$lancfg = $config['interfaces']['lan'];
435
	$lanip = $lancfg['ipaddr'];
436
	$newstring = str_replace("\$lanip", $lanip, $string);
437
	$string = $newstring;
438
	// fixup #4: fix'r'up here.
439
	return $newstring;
440
}
441
442
/*
443
 *	Parse templates if they are defined
444
 */
445
function parse_package_templates() {
446
	global $pkg;
447
	if ($pkg['templates']['template'] != "") {
448
		foreach ($pkg['templates']['template'] as $pkg_template_row) {
449
			$filename = $pkg_template_row['filename'];
450
			$template_text = $pkg_template_row['templatecontents'];
451
			/* calculate total row helpers count and */
452
			/* change fields defined as fieldname_fieldvalue to their value */
453
			foreach ($pkg['fields']['field'] as $fields) {
454
				switch ($fields['type']) {
455
					case "rowhelper":
456
						// save rowhelper items.
457
						$row_helper_total_rows = 0;
458
						$row_helper_data = "";
459
						foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
460
							foreach ($_POST as $key => $value) {
461
								if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) {
462
									$row_helper_total_rows++;
463
									$row_helper_data .= $value;
464
									$sep = "";
465
									ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep);
466
									foreach ($sep as $se) {
467
										$separator = $se;
468
									}
469
									if ($separator != "") {
470
										$row_helper_data = ereg_replace("  ", $separator, $row_helper_data);
471
										$template_text = ereg_replace("\[{$separator}\]", "", $template_text);
472
									}
473
									$template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text);
474
								}
475
							}
476
						}
477
						break;
478
					default:
479
						$fieldname = $fields['fieldname'];
480
						$fieldvalue = $_POST[$fieldname];
481
						$template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
482
				}
483
			}
484
			/* replace $domain_total_rows with total rows */
485
			$template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text);
486
487
			/* replace cr's */
488
			$template_text = str_replace("\\n", "\n", $template_text);
489
490
			/* write out new template file */
491
			$fout = fopen($filename, "w");
492
			fwrite($fout, $template_text);
493
			fclose($fout);
494
		}
495
	}
496
}
497
498 0a0447de heper
//breadcrumb
499
if ($pkg['title'] != "") {
500 0f649c97 Phil Davis
	if (!$only_edit) {
501 b238793b Stephen Beaver
		$pkg['title'] = $pkg['title'] . '/Edit';
502
	}
503
504
	if (strpos($pkg['title'], '/')) {
505
		$title = explode('/', $pkg['title']);
506
507
		foreach ($title as $subtitle) {
508
			$pgtitle[] = gettext($subtitle);
509 edcd7535 Phil Davis
			$pglinks[] = ((($subtitle == "Edit") || (strlen($pkg['menu'][0]['url']) == 0)) ? "@self" : $pkg['menu'][0]['url']);
510 9ec7699b Stephen Beaver
		}
511 b238793b Stephen Beaver
	} else {
512
		$pgtitle = array(gettext("Package"), gettext($pkg['title']));
513 edcd7535 Phil Davis
		$pglinks = array("", ((($subtitle == "Edit") || (strlen($pkg['menu'][0]['url']) == 0)) ? "@self" : $pkg['menu'][0]['url']));
514 62cdbf62 heper
	}
515 0a0447de heper
} else {
516 4a457d8d Stephen Beaver
	$pgtitle = array(gettext("Package"), gettext("Editor"));
517 edcd7535 Phil Davis
	$pglinks = array("", "@self");
518 0a0447de heper
}
519 b89a8cbc bruno
520 eb3743d8 Stephen Beaver
// Create any required tabs
521 23f6cdd7 Stephen Beaver
if ($pkg['tabs'] != "") {
522 e11aa161 Warren Baker
	$tab_array = array();
523 f8ac4407 Phil Davis
	foreach ($pkg['tabs']['tab'] as $tab) {
524
		if ($tab['tab_level']) {
525 90551807 Warren Baker
			$tab_level = $tab['tab_level'];
526 f8ac4407 Phil Davis
		} else {
527 90551807 Warren Baker
			$tab_level = 1;
528 f8ac4407 Phil Davis
		}
529 eb3743d8 Stephen Beaver
530 f8ac4407 Phil Davis
		if (isset($tab['active'])) {
531 90551807 Warren Baker
			$active = true;
532 b238793b Stephen Beaver
			$pgtitle[] = $tab['text'] ;
533 edcd7535 Phil Davis
			$pglinks[] = ((strlen($tab['url']) > 0) ? $tab['url'] : "@self");
534 90551807 Warren Baker
		} else {
535
			$active = false;
536
		}
537 eb3743d8 Stephen Beaver
538 f8ac4407 Phil Davis
		if (isset($tab['no_drop_down'])) {
539 f8c462dd Warren Baker
			$no_drop_down = true;
540 f8ac4407 Phil Davis
		}
541 eb3743d8 Stephen Beaver
542 90551807 Warren Baker
		$urltmp = "";
543 23f6cdd7 Stephen Beaver
		if ($tab['url'] != "") {
544 f8ac4407 Phil Davis
			$urltmp = $tab['url'];
545
		}
546 eb3743d8 Stephen Beaver
547 23f6cdd7 Stephen Beaver
		if ($tab['xml'] != "") {
548 f8ac4407 Phil Davis
			$urltmp = "pkg_edit.php?xml=" . $tab['xml'];
549
		}
550 90551807 Warren Baker
551 f8ac4407 Phil Davis
		$addresswithport = getenv("HTTP_HOST");
552 90551807 Warren Baker
		$colonpos = strpos($addresswithport, ":");
553 eb3743d8 Stephen Beaver
554 90551807 Warren Baker
		if ($colonpos !== False) {
555
			//my url is actually just the IP address of the pfsense box
556
			$myurl = substr($addresswithport, 0, $colonpos);
557
		} else {
558
			$myurl = $addresswithport;
559
		}
560 eb3743d8 Stephen Beaver
561 90551807 Warren Baker
		// eval url so that above $myurl item can be processed if need be.
562
		$url = str_replace('$myurl', $myurl, $urltmp);
563
564
		$tab_array[$tab_level][] = array(
565 f8ac4407 Phil Davis
			$tab['text'],
566
			$active,
567
			$url
568
		);
569
	}
570 90551807 Warren Baker
571
	ksort($tab_array);
572 0a0447de heper
}
573 23f6cdd7 Stephen Beaver
574 4b1d882f Colin Fleming
include("head.inc");
575 0a0447de heper
if ($pkg['custom_php_after_head_command']) {
576
	eval($pkg['custom_php_after_head_command']);
577
}
578 0f649c97 Phil Davis
if (isset($tab_array)) {
579 f8ac4407 Phil Davis
	foreach ($tab_array as $tabid => $tab) {
580 23f6cdd7 Stephen Beaver
		display_top_tabs($tab); //, $no_drop_down, $tabid);
581 90551807 Warren Baker
	}
582 7c061036 Scott Ullrich
}
583 55c846c4 Marcello Coutinho
584 0a0447de heper
// Start of page display
585 0f649c97 Phil Davis
if ($input_errors) {
586 0a0447de heper
	print_input_errors($input_errors);
587 0f649c97 Phil Davis
}
588 0a0447de heper
589 0f649c97 Phil Davis
if ($savemsg) {
590 0a0447de heper
	print_info_box($savemsg, 'success');
591 0f649c97 Phil Davis
}
592 55c846c4 Marcello Coutinho
593 eb3743d8 Stephen Beaver
$cols = 0;
594
$savevalue = gettext("Save");
595
if ($pkg['savetext'] != "") {
596
	$savevalue = $pkg['savetext'];
597
}
598
599 e0d1a2f8 Renato Botelho
$savehelp = "";
600 608bb662 Stephen Beaver
if ($pkg['savehelp'] != "") {
601
	$savehelp = $pkg['savehelp'];
602
}
603
604 f84e2105 jim-p
$saveicon = "fa-save";
605
if ($pkg['saveicon'] != "") {
606
	$saveicon = $pkg['saveicon'];
607
}
608
609
$savebtnclass = "btn-primary";
610
if ($pkg['savebtnclass'] != "") {
611
	$savebtnclass = $pkg['savebtnclass'];
612
}
613
614 eb3743d8 Stephen Beaver
$grouping = false; // Indicates the elements we are composing are part of a combined group
615 23f6cdd7 Stephen Beaver
616 608bb662 Stephen Beaver
$savebutton = new Form_Button(
617 eb3743d8 Stephen Beaver
	'submit',
618 f84e2105 jim-p
	$savevalue,
619
	null,
620
	$saveicon
621 608bb662 Stephen Beaver
);
622 f84e2105 jim-p
$savebutton->addClass($savebtnclass);
623 608bb662 Stephen Beaver
624
if ($savehelp) {
625
	$savebutton->setHelp($savehelp);
626
}
627
628
$form = new Form($savebutton);
629 23f6cdd7 Stephen Beaver
630 eb3743d8 Stephen Beaver
$form->addGlobal(new Form_Input(
631
	'xml',
632
	null,
633
	'hidden',
634
	$xml
635
));
636 23f6cdd7 Stephen Beaver
637 eb3743d8 Stephen Beaver
/* If a package's XML has <advanced_options/> configured, then setup
638 2d911f2c Phil Davis
 * the section for the fields that have <advancedfield/> set.
639 eb3743d8 Stephen Beaver
 * These fields will be placed below other fields in a separate area titled 'Advanced Features'.
640
 * These advanced fields are not normally configured and generally left to default to 'default settings'.
641
 */
642 32487e42 Scott Ullrich
643 eb3743d8 Stephen Beaver
if ($pkg['advanced_options'] == "enabled") {
644
	$advfield_count = 0;
645 20414655 k-paulius
	$advanced = new Form_Section("Advanced Features");
646 eb3743d8 Stephen Beaver
	$advanced->addClass('advancedoptions');
647
}
648 23f6cdd7 Stephen Beaver
649 eb3743d8 Stephen Beaver
$js_array = array();
650 23f6cdd7 Stephen Beaver
651 2d911f2c Phil Davis
// Now loop through all of the fields defined in the XML
652 fff6a2af jim-p
if (!is_array($pkg['fields']['field'])) {
653
	$pkg['fields']['field'] = array();
654
}
655 eb3743d8 Stephen Beaver
foreach ($pkg['fields']['field'] as $pkga) {
656 23f6cdd7 Stephen Beaver
657 4a6272be Stephen Beaver
	$action = "";
658
	$uid = "";
659
660 eb3743d8 Stephen Beaver
	if ($pkga['type'] == "sorting") {
661
		continue;
662
	}
663 23f6cdd7 Stephen Beaver
664 eb3743d8 Stephen Beaver
	// Generate a new section
665
	if ($pkga['type'] == "listtopic") {
666
		if (isset($pkga['advancedfield']) && isset($advfield_count)) {
667
			$advanced->addInput(new Form_StaticText(
668
				strip_tags($pkga['name']),
669
				null
670
			));
671 1624b5f1 Marcello Coutinho
672 eb3743d8 Stephen Beaver
			$advfield_count++;
673
		}  else {
674 0f649c97 Phil Davis
			if (isset($section)) {
675 eb3743d8 Stephen Beaver
				$form->add($section);
676 0f649c97 Phil Davis
			}
677 1624b5f1 Marcello Coutinho
678 4a6272be Stephen Beaver
			if (isset($pkga['collapse'])) {
679
				$uid = uniqid("section");
680
681
				$action = COLLAPSIBLE;
682
683
				if ($pkga['collapse'] == "open") {
684
					$action |= SEC_OPEN;
685
				} else {
686
					$action |= SEC_CLOSED;
687
				}
688
			}
689
690
			$section = new Form_Section(strip_tags($pkga['name']), $uid, $action);
691 e11aa161 Warren Baker
		}
692 23f6cdd7 Stephen Beaver
693 eb3743d8 Stephen Beaver
		continue;
694
	}
695 1624b5f1 Marcello Coutinho
696 eb3743d8 Stephen Beaver
	// 'begin' starts a form group. ('end' ends it)
697
	if ($pkga['combinefields'] == "begin") {
698
		$group = new Form_Group(strip_tags($pkga['fielddescr']));
699
		$grouping = true;
700
	}
701
702
	$size = "";
703
	$colspan="";
704
705
	// if user is editing a record, load in the data.
706
	$fieldname = $pkga['fieldname'];
707
	unset($value);
708
	if ($get_from_post) {
709
		$value = $_POST[$fieldname];
710
		if (is_array($value)) {
711
			$value = implode(',', $value);
712 55c846c4 Marcello Coutinho
		}
713 eb3743d8 Stephen Beaver
	} else {
714
		if (isset($id) && isset($a_pkg[$id][$fieldname])) {
715
			$value = $a_pkg[$id][$fieldname];
716 e11aa161 Warren Baker
		} else {
717 eb3743d8 Stephen Beaver
			if (isset($pkga['default_value'])) {
718
				$value = $pkga['default_value'];
719 f8ac4407 Phil Davis
			}
720 31d27c6c Scott Ullrich
		}
721 eb3743d8 Stephen Beaver
	}
722 23f6cdd7 Stephen Beaver
723 86a20575 Stephen Beaver
	// If we get here but have no $section, the package config file probably had no listtopic field
724
	// We can create a section with a generic name to fix that
725 0f649c97 Phil Davis
	if (!$section) {
726 20414655 k-paulius
		$section = new Form_Section('General Options');
727 0f649c97 Phil Davis
	}
728 86a20575 Stephen Beaver
729 19fe69e6 Steve Beaver
	// If this is a required field, pre-pend a "*" to the field description
730
	// This tells the system to add "element-required" class text decoration to the field label
731
	if (isset($pkga['required'])) {
732
		$pkga['fielddescr'] = "*" . $pkga['fielddescr'];
733
	}
734
735 eb3743d8 Stephen Beaver
	switch ($pkga['type']) {
736 5697a26a Stephen Beaver
		// Create an input element. The format is slightly different depending on whether we are composing a group,
737 eb3743d8 Stephen Beaver
		// section, or advanced section. This is true for every element type
738
		case "input":
739 6e5cec8e doktornotor
			if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) {
740
				$value = base64_decode($value);
741
			}
742
743 962ec941 Stephen Beaver
			$grp = new Form_Input(
744 eb3743d8 Stephen Beaver
					$pkga['fieldname'],
745
					$pkga['fielddescr'],
746
					'text',
747
					$value
748 962ec941 Stephen Beaver
				);
749
750
			$grp->setHelp($pkga['description']);
751
752
			if ($pkga['width']) {
753
				$grp->setWidth($pkga['width']);
754
			}
755
756
			if ($grouping) {
757
				$group->add($grp);
758 eb3743d8 Stephen Beaver
			} else {
759 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
760 962ec941 Stephen Beaver
					$advanced->addInput($grp);
761 f8ac4407 Phil Davis
				} else {
762 962ec941 Stephen Beaver
					$section->addInput($grp);
763 f8ac4407 Phil Davis
				}
764 eb3743d8 Stephen Beaver
			}
765 23f6cdd7 Stephen Beaver
766 eb3743d8 Stephen Beaver
			break;
767 1624b5f1 Marcello Coutinho
768 eb3743d8 Stephen Beaver
		case "password":
769 6e5cec8e doktornotor
			if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) {
770
				$value = base64_decode($value);
771
			}
772
773 2d911f2c Phil Davis
			// Create a password element
774 6e5cec8e doktornotor
			if ($grouping) {
775 eb3743d8 Stephen Beaver
				$group->add(new Form_Input(
776
					$pkga['fieldname'],
777
					$pkga['fielddescr'],
778
					'password',
779
					$value
780
				))->setHelp($pkga['description']);
781
			} else {
782 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
783
					$advanced->addInput(new Form_Input(
784
						$pkga['fieldname'],
785
						$pkga['fielddescr'],
786
						'password',
787
						$value
788
					))->setHelp($pkga['description']);
789 f8ac4407 Phil Davis
				} else {
790 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Input(
791
						$pkga['fieldname'],
792
						$pkga['fielddescr'],
793
						'password',
794
						$value
795
					))->setHelp($pkga['description']);
796 f8ac4407 Phil Davis
				}
797 eb3743d8 Stephen Beaver
			}
798 23f6cdd7 Stephen Beaver
799 eb3743d8 Stephen Beaver
			break;
800 23f6cdd7 Stephen Beaver
801 eb3743d8 Stephen Beaver
		case "info":
802 2d911f2c Phil Davis
			// If the info contains a table we should detect and Bootstrap it
803 23f6cdd7 Stephen Beaver
804 0f649c97 Phil Davis
			if (strpos($pkga['description'], '<table') !== FALSE) {
805 eb3743d8 Stephen Beaver
				$info = bootstrapTable($pkga['description']);
806 0f649c97 Phil Davis
			} else {
807 eb3743d8 Stephen Beaver
				$info = $pkga['description'];
808 0f649c97 Phil Davis
			}
809 23f6cdd7 Stephen Beaver
810 eb3743d8 Stephen Beaver
			if (isset($pkga['advancedfield']) && isset($advfield_count)) {
811
				$advanced->addInput(new Form_StaticText(
812
					strip_tags($pkga['fielddescr']),
813
					$info
814
				));
815
			} else {
816
				$section->addInput(new Form_StaticText(
817
					strip_tags($pkga['fielddescr']),
818
					$info
819
				));
820
			}
821 23f6cdd7 Stephen Beaver
822 eb3743d8 Stephen Beaver
			break;
823 1624b5f1 Marcello Coutinho
824 eb3743d8 Stephen Beaver
		case "select":
825
			// Create a select element
826
			$optionlist = array();
827
			$selectedlist = array();
828 23f6cdd7 Stephen Beaver
829 eb3743d8 Stephen Beaver
			$fieldname = $pkga['fieldname'];
830 23f6cdd7 Stephen Beaver
831 eb3743d8 Stephen Beaver
			if (isset($pkga['multiple'])) {
832 c4b60a9a Colin Fleming
				$multiple = 'multiple';
833 eb3743d8 Stephen Beaver
				$items = explode(',', $value);
834
				$fieldname .= "[]";
835
			} else {
836
				$multiple = '';
837
				$items = array($value);
838
			}
839 23f6cdd7 Stephen Beaver
840 a038b816 Steve Beaver
			$onchange = (isset($pkga['onchange']) ? "{$pkga['onchange']}" : '');
841 23f6cdd7 Stephen Beaver
842 eb3743d8 Stephen Beaver
			foreach ($pkga['options']['option'] as $opt) {
843
				$optionlist[$opt['value']] = $opt['name'];
844 23f6cdd7 Stephen Beaver
845 eb3743d8 Stephen Beaver
				if (in_array($opt['value'], $items)) {
846
					array_push($selectedlist, $opt['value']);
847 f8ac4407 Phil Davis
				}
848 eb3743d8 Stephen Beaver
			}
849 23f6cdd7 Stephen Beaver
850 0f649c97 Phil Davis
			if (isset($pkga['advancedfield']) && isset($advfield_count)) {
851 eb3743d8 Stephen Beaver
				$function = $grouping ? $advanced->add:$advanced->addInput;
852 0f649c97 Phil Davis
			} else {
853 eb3743d8 Stephen Beaver
				$function = ($grouping) ? $section->add:$section->addInput;
854 0f649c97 Phil Davis
			}
855 23f6cdd7 Stephen Beaver
856 57fc02b1 Stephen Beaver
			$grp = new Form_Select(
857 23f6cdd7 Stephen Beaver
						$pkga['fieldname'],
858 eb3743d8 Stephen Beaver
						strip_tags($pkga['fielddescr']),
859 23f6cdd7 Stephen Beaver
						isset($pkga['multiple']) ? $selectedlist:$selectedlist[0],
860
						$optionlist,
861
						isset($pkga['multiple'])
862 a1cd3857 Stephen Beaver
					);
863
864 57fc02b1 Stephen Beaver
			$grp ->setHelp($pkga['description'])->setOnchange($onchange)->setAttribute('size', $pkga['size']);
865 a1cd3857 Stephen Beaver
866 57fc02b1 Stephen Beaver
			if ($pkga['width']) {
867
				$grp->setWidth($pkga['width']);
868
			}
869 a1cd3857 Stephen Beaver
870 57fc02b1 Stephen Beaver
			if ($grouping) {
871
				$group->add($grp);
872
			} else {
873
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
874
					$advanced->addInput($grp);
875
				} else {
876
					$section->addInput($grp);
877 f8ac4407 Phil Davis
				}
878 eb3743d8 Stephen Beaver
			}
879 23f6cdd7 Stephen Beaver
880 eb3743d8 Stephen Beaver
			break;
881 1624b5f1 Marcello Coutinho
882 eb3743d8 Stephen Beaver
		case "select_source":
883 23f6cdd7 Stephen Beaver
884 eb3743d8 Stephen Beaver
			if (isset($pkga['multiple'])) {
885
				$items = explode(',', $value);
886
				$fieldname .= "[]";
887
			} else {
888
				$items = array($value);
889
			}
890 23f6cdd7 Stephen Beaver
891 a038b816 Steve Beaver
			$onchange = (isset($pkga['onchange']) ? "{$pkga['onchange']}" : '');
892 55c846c4 Marcello Coutinho
893 eb3743d8 Stephen Beaver
			$source_url = $pkga['source'];
894
			eval("\$pkg_source_txt = &$source_url;");
895 23f6cdd7 Stephen Beaver
896 eb3743d8 Stephen Beaver
			#check if show disable option is present on xml
897 eeae21e8 jim-p
			if (!is_array($pkg_source_txt)) {
898
				$pkg_source_txt = array();
899
			}
900 eb3743d8 Stephen Beaver
			if (isset($pkga['show_disable_value'])) {
901
				array_push($pkg_source_txt,
902
					array(($pkga['source_name']? $pkga['source_name'] : $pkga['name'])=> $pkga['show_disable_value'], ($pkga['source_value']? $pkga['source_value'] : $pkga['value'])=> $pkga['show_disable_value']));
903
			}
904 23f6cdd7 Stephen Beaver
905 eb3743d8 Stephen Beaver
			$srcoptions = array();
906
			$srcselected = array();
907 23f6cdd7 Stephen Beaver
908 eb3743d8 Stephen Beaver
			foreach ($pkg_source_txt as $opt) {
909
				$source_name =($pkga['source_name']? $opt[$pkga['source_name']] : $opt[$pkga['name']]);
910
				$source_value =($pkga['source_value'] ? $opt[$pkga['source_value']] : $opt[$pkga['value']]);
911
				$srcoptions[$source_value] = $source_name;
912 23f6cdd7 Stephen Beaver
913 0f649c97 Phil Davis
				if (in_array($source_value, $items)) {
914 eb3743d8 Stephen Beaver
					array_push($srcselected, $source_value);
915 0f649c97 Phil Davis
				}
916 eb3743d8 Stephen Beaver
			}
917 23f6cdd7 Stephen Beaver
918 83d8e9ab Luiz Otavio O Souza
			$descr = (isset($pkga['description'])) ? $pkga['description'] : "";
919 0f649c97 Phil Davis
			if ($grouping) {
920 eb3743d8 Stephen Beaver
				$group->add(new Form_Select(
921
					$pkga['fieldname'],
922 2512e643 jim-p
					strip_tags($pkga['fielddescr']),
923 eb3743d8 Stephen Beaver
					isset($pkga['multiple']) ? $srcselected:$srcselected[0],
924
					$srcoptions,
925
					isset($pkga['multiple'])
926 83d8e9ab Luiz Otavio O Souza
				))->setHelp($descr)->setOnchange($onchange);
927 eb3743d8 Stephen Beaver
			} else {
928 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
929
					$advanced->addInput(new Form_Select(
930
						$pkga['fieldname'],
931 2512e643 jim-p
						strip_tags($pkga['fielddescr']),
932 23f6cdd7 Stephen Beaver
						isset($pkga['multiple']) ? $srcselected:$srcselected[0],
933 eb3743d8 Stephen Beaver
						$srcoptions,
934 23f6cdd7 Stephen Beaver
						isset($pkga['multiple'])
935 83d8e9ab Luiz Otavio O Souza
					))->setHelp($descr)->setOnchange($onchange);
936 f8ac4407 Phil Davis
				} else {
937 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Select(
938
						$pkga['fieldname'],
939 2512e643 jim-p
						strip_tags($pkga['fielddescr']),
940 23f6cdd7 Stephen Beaver
						isset($pkga['multiple']) ? $srcselected:$srcselected[0],
941 eb3743d8 Stephen Beaver
						$srcoptions,
942 23f6cdd7 Stephen Beaver
						isset($pkga['multiple'])
943 83d8e9ab Luiz Otavio O Souza
					))->setHelp($descr)->setOnchange($onchange);
944 f8ac4407 Phil Davis
				}
945 eb3743d8 Stephen Beaver
			}
946 23f6cdd7 Stephen Beaver
947 eb3743d8 Stephen Beaver
			break;
948 1624b5f1 Marcello Coutinho
949 eb3743d8 Stephen Beaver
		case "vpn_selection" :
950
			$vpnlist = array();
951 23f6cdd7 Stephen Beaver
952 eb3743d8 Stephen Beaver
			foreach ($config['ipsec']['phase1'] as $vpn) {
953
				$vpnlist[$vpn['descr']] = $vpn['descr'];
954 23f6cdd7 Stephen Beaver
955 eb3743d8 Stephen Beaver
			}
956 55c846c4 Marcello Coutinho
957 0f649c97 Phil Davis
			if ($grouping) {
958 eb3743d8 Stephen Beaver
				$group->add(new Form_Select(
959
					$pkga['fieldname'],
960
					null,
961
					false,
962
					$vpnlist
963
				))->setHelp(fixup_string($pkga['description']));
964
			} else {
965 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
966
					$advanced->addInput(new Form_Select(
967
						$pkga['fieldname'],
968
						null,
969
						false,
970
						$vpnlist
971
					))->setHelp(fixup_string($pkga['description']));
972 f8ac4407 Phil Davis
				} else {
973 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Select(
974
						$pkga['fieldname'],
975
						null,
976
						false,
977
						$vpnlist
978
					))->setHelp(fixup_string($pkga['description']));
979 f8ac4407 Phil Davis
				}
980 eb3743d8 Stephen Beaver
			}
981 23f6cdd7 Stephen Beaver
982 eb3743d8 Stephen Beaver
			break;
983 23f6cdd7 Stephen Beaver
984 eb3743d8 Stephen Beaver
		// Create a checkbox element
985
		case "checkbox":
986
			$onchange = (isset($pkga['onchange']) ? "{$pkga['onchange']}" : '');
987 0f649c97 Phil Davis
			if (isset($pkga['enablefields']) || isset($pkga['checkenablefields'])) {
988 eb3743d8 Stephen Beaver
				$onclick = 'javascript:enablechange();';
989 0f649c97 Phil Davis
			} else {
990 eb3743d8 Stephen Beaver
				$onclick = '';
991 0f649c97 Phil Davis
			}
992 eb3743d8 Stephen Beaver
993 0f649c97 Phil Davis
			if ($grouping) {
994 eb3743d8 Stephen Beaver
				$group->add(new Form_Checkbox(
995
					$pkga['fieldname'],
996
					$pkga['fielddescr'],
997 86c77223 Stephen Beaver
					fixup_string($pkga['description']),
998 eb3743d8 Stephen Beaver
					($value == "on"),
999
					'on'
1000 86c77223 Stephen Beaver
				))->setOnclick($onclick)
1001 bb69870b Stephen Beaver
				  ->setOnchange($onchange)
1002 82c02c9e heper
				  ->setHelp($pkga['sethelp']);
1003 eb3743d8 Stephen Beaver
			} else {
1004 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1005
					$advanced->addInput(new Form_Checkbox(
1006
						$pkga['fieldname'],
1007 1ae171a3 Stephen Beaver
						$pkga['fielddescr'],
1008 86c77223 Stephen Beaver
						fixup_string($pkga['description']),
1009 23f6cdd7 Stephen Beaver
						($value == "on"),
1010
						'on'
1011 86c77223 Stephen Beaver
					))->setOnclick($onclick)
1012 bb69870b Stephen Beaver
					  ->setOnchange($onchange)
1013 82c02c9e heper
					  ->setHelp($pkga['sethelp']);
1014 f8ac4407 Phil Davis
				} else {
1015 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Checkbox(
1016
						$pkga['fieldname'],
1017
						$pkga['fielddescr'],
1018 86c77223 Stephen Beaver
						fixup_string($pkga['description']),
1019 23f6cdd7 Stephen Beaver
						($value == "on"),
1020
						'on'
1021 86c77223 Stephen Beaver
					))->setOnclick($onclick)
1022 1ae171a3 Stephen Beaver
					  ->setOnchange($onchange)
1023 bb69870b Stephen Beaver
					  ->setHelp($pkga['sethelp']);
1024 f8ac4407 Phil Davis
				}
1025 eb3743d8 Stephen Beaver
			}
1026 23f6cdd7 Stephen Beaver
1027 eb3743d8 Stephen Beaver
			break;
1028 1624b5f1 Marcello Coutinho
1029 2d911f2c Phil Davis
		// Create a textarea element
1030 eb3743d8 Stephen Beaver
		case "textarea":
1031 c70b6835 Stephen Beaver
			$rows = $cols = 0;
1032
1033 eb3743d8 Stephen Beaver
			if ($pkga['rows']) {
1034 c70b6835 Stephen Beaver
				$rows = $pkga['rows'];
1035 eb3743d8 Stephen Beaver
			}
1036
			if ($pkga['cols']) {
1037 c70b6835 Stephen Beaver
				$cols = $pkga['cols'];
1038 eb3743d8 Stephen Beaver
			}
1039 c70b6835 Stephen Beaver
1040 eb3743d8 Stephen Beaver
			if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) {
1041
				$value = base64_decode($value);
1042
			}
1043 23f6cdd7 Stephen Beaver
1044 c70b6835 Stephen Beaver
			$grp = new Form_Textarea(
1045 eb3743d8 Stephen Beaver
					$pkga['fieldname'],
1046
					$pkga['fielddescr'],
1047
					$value
1048 c70b6835 Stephen Beaver
			);
1049
1050
			$grp->setHelp(fixup_string($pkga['description']));
1051
1052
			if ($rows > 0) {
1053
				$grp->setRows($rows);
1054
			}
1055
1056
			if ($cols > 0) {
1057
				$grp->setCols($cols);
1058
			}
1059
1060
			if ($pkga['wrap'] == "off") {
1061
				$grp->setAttribute("wrap", "off");
1062 e5274f51 Stephen Beaver
				$grp->setAttribute("style", "white-space:nowrap; width: auto;");
1063
			} else {
1064
				$grp->setAttribute("style", "width: auto;");
1065 c70b6835 Stephen Beaver
			}
1066
1067
			if ($grouping) {
1068
				$group->add($grp);
1069 eb3743d8 Stephen Beaver
			} else {
1070 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1071 c70b6835 Stephen Beaver
					$advanced->addInput($grp);
1072 f8ac4407 Phil Davis
				} else {
1073 c70b6835 Stephen Beaver
					$section->addInput($grp);
1074 f8ac4407 Phil Davis
				}
1075 eb3743d8 Stephen Beaver
			}
1076 23f6cdd7 Stephen Beaver
1077 eb3743d8 Stephen Beaver
			break;
1078 b89a8cbc bruno
1079 eb3743d8 Stephen Beaver
		case "aliases":
1080
1081
			// Use xml tag <typealiases> to filter type aliases
1082
			$size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
1083
			$fieldname = $pkga['fieldname'];
1084
			$a_aliases = &$config['aliases']['alias'];
1085
			$addrisfirst = 0;
1086
			$aliasesaddr = "";
1087
1088
			if (isset($a_aliases)) {
1089
				if (!empty($pkga['typealiases'])) {
1090
					foreach ($a_aliases as $alias) {
1091
						if ($alias['type'] == $pkga['typealiases']) {
1092 f8ac4407 Phil Davis
							if ($addrisfirst == 1) {
1093
								$aliasesaddr .= ",";
1094
							}
1095 b89a8cbc bruno
							$aliasesaddr .= "'" . $alias['name'] . "'";
1096
							$addrisfirst = 1;
1097
						}
1098
					}
1099 eb3743d8 Stephen Beaver
				} else {
1100
					foreach ($a_aliases as $alias) {
1101
						if ($addrisfirst == 1) {
1102
							$aliasesaddr .= ",";
1103
						}
1104
						$aliasesaddr .= "'" . $alias['name'] . "'";
1105
						$addrisfirst = 1;
1106
					}
1107 b89a8cbc bruno
				}
1108 eb3743d8 Stephen Beaver
			}
1109 b89a8cbc bruno
1110 962ec941 Stephen Beaver
			$grp = new Form_Input(
1111 eb3743d8 Stephen Beaver
					$pkga['fieldname'],
1112
					$pkga['fielddescr'],
1113
					'text',
1114
					$value
1115 962ec941 Stephen Beaver
				);
1116
1117
			$grp->setHelp($pkga['description']);
1118
1119
			if ($pkga['width']) {
1120
				$grp->setWidth($pkga['width']);
1121
			}
1122
1123 1c937bdc Steve Beaver
			if ($grouping) {
1124 962ec941 Stephen Beaver
				$group->add($grp);
1125 eb3743d8 Stephen Beaver
			} else {
1126
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1127 962ec941 Stephen Beaver
					$advanced->addInput($grp);
1128 eb3743d8 Stephen Beaver
				} else {
1129 962ec941 Stephen Beaver
					$section->addInput($grp);
1130 eb3743d8 Stephen Beaver
				}
1131
			}
1132 b89a8cbc bruno
1133 eb3743d8 Stephen Beaver
			$script = "<script type='text/javascript'>\n";
1134
			$script .= "//<![CDATA[\n";
1135
			$script .= "events.push(function(){\n";
1136
			$script .= "	var aliasarray = new Array({$aliasesaddr})\n";
1137
			$script .= "	$('#' + '{$fieldname}').autocomplete({\n";
1138
			$script .= "		source: aliasarray\n";
1139
			$script .= "	})\n";
1140
			$script .= "});\n";
1141
			$script .= "//]]>\n";
1142
			$script .= "</script>";
1143 b89a8cbc bruno
1144 eb3743d8 Stephen Beaver
			echo $script;
1145
1146
			break;
1147
1148
		case "interfaces_selection":
1149
			$ips = array();
1150
			$interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide");
1151
			if (is_array($config['interfaces'])) {
1152
				foreach ($config['interfaces'] as $iface_key=>$iface_value) {
1153
					if (isset($iface_value['enable']) && !preg_match("/$interface_regex/", $iface_key)) {
1154
						$iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key));
1155
						if (isset($pkga['showips'])) {
1156
							$iface_description .= " address";
1157 f8ac4407 Phil Davis
						}
1158 eb3743d8 Stephen Beaver
						$ips[] = array('ip'=> $iface_key, 'description'=> $iface_description);
1159 e14fbca4 Marcello Coutinho
					}
1160 f8ac4407 Phil Davis
				}
1161 eb3743d8 Stephen Beaver
			}
1162 23f6cdd7 Stephen Beaver
1163 eb3743d8 Stephen Beaver
			if (is_array($config['virtualip']) && isset($pkga['showvirtualips'])) {
1164
				foreach ($config['virtualip']['vip'] as $vip) {
1165
					if (!preg_match("/$interface_regex/", $vip['interface'])) {
1166
						$vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " ");
1167
					}
1168
					switch ($vip['mode']) {
1169
						case "ipalias":
1170
						case "carp":
1171
							$ips[] = array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description");
1172
							break;
1173
						case "proxyarp":
1174
							if ($vip['type'] == "network") {
1175
								$start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits']));
1176
								$end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits']));
1177
								$len = $end - $start;
1178
								for ($i = 0; $i <= $len; $i++) {
1179
									$ips[]= array('ip' => long2ip32($start+$i), 'description' => long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}");
1180 f8ac4407 Phil Davis
								}
1181 eb3743d8 Stephen Beaver
							} else {
1182
								$ips[]= array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description");
1183
							}
1184
							break;
1185 e14fbca4 Marcello Coutinho
					}
1186 f8ac4407 Phil Davis
				}
1187 eb3743d8 Stephen Beaver
			}
1188 23f6cdd7 Stephen Beaver
1189 eb3743d8 Stephen Beaver
			sort($ips);
1190
			if (isset($pkga['showlistenall'])) {
1191 cadeb9fd Phil Davis
				array_unshift($ips, array('ip' => gettext('All'), 'description' => gettext('Listen on All interfaces/ip addresses ')));
1192 eb3743d8 Stephen Beaver
			}
1193 e14fbca4 Marcello Coutinho
1194 eb3743d8 Stephen Beaver
			if (!preg_match("/$interface_regex/", "loopback")) {
1195 cadeb9fd Phil Davis
				$loopback_text = gettext("loopback");
1196
				$iface_description=(isset($pkga['showips']) ? "127.0.0.1 (" . $loopback_text . ")" : $loopback_text);
1197 eb3743d8 Stephen Beaver
				array_push($ips, array('ip' => 'lo0', 'description' => $iface_description));
1198
			}
1199 23f6cdd7 Stephen Beaver
1200 eb3743d8 Stephen Beaver
			#show interfaces array on gui
1201
			$size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
1202
			$multiple = '';
1203
			$fieldname = $pkga['fieldname'];
1204
			if (isset($pkga['multiple'])) {
1205
				$fieldname .= '[]';
1206 c4b60a9a Colin Fleming
				$multiple = 'multiple';
1207 eb3743d8 Stephen Beaver
			}
1208 23f6cdd7 Stephen Beaver
1209 eb3743d8 Stephen Beaver
			$selectedlist = array();
1210
			$optionlist = array();
1211 23f6cdd7 Stephen Beaver
1212 eb3743d8 Stephen Beaver
			if (is_array($value)) {
1213
				$values = $value;
1214
			} else {
1215
				$values = explode(',', $value);
1216
			}
1217 23f6cdd7 Stephen Beaver
1218 eb3743d8 Stephen Beaver
			foreach ($ips as $iface) {
1219
				if (in_array($iface['ip'], $values)) {
1220
					array_push($selectedlist, $iface['ip']);
1221 f8ac4407 Phil Davis
				}
1222 23f6cdd7 Stephen Beaver
1223 eb3743d8 Stephen Beaver
				$optionlist[$iface['ip']] = $iface['description'];
1224
			}
1225
1226 0f649c97 Phil Davis
			if ($grouping) {
1227 eb3743d8 Stephen Beaver
				$group->add(new Form_Select(
1228
					$pkga['fieldname'],
1229
					$pkga['fielddescr'],
1230
					isset($pkga['multiple']) ? $selectedlist:$selectedlist[0],
1231
					$optionlist,
1232
					isset($pkga['multiple'])
1233
				))->setHelp($pkga['description']);
1234
			} else {
1235 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1236
					$advanced->addInput(new Form_Select(
1237
						$pkga['fieldname'],
1238
						$pkga['fielddescr'],
1239
						isset($pkga['multiple']) ? $selectedlist:$selectedlist[0],
1240
						$optionlist,
1241
						isset($pkga['multiple'])
1242
					))->setHelp($pkga['description']);
1243 f8ac4407 Phil Davis
				} else {
1244 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Select(
1245
						$pkga['fieldname'],
1246
						$pkga['fielddescr'],
1247
						isset($pkga['multiple']) ? $selectedlist:$selectedlist[0],
1248
						$optionlist,
1249
						isset($pkga['multiple'])
1250
					))->setHelp($pkga['description']);
1251 f8ac4407 Phil Davis
				}
1252 eb3743d8 Stephen Beaver
			}
1253 23f6cdd7 Stephen Beaver
1254 eb3743d8 Stephen Beaver
			break;
1255 1624b5f1 Marcello Coutinho
1256 eb3743d8 Stephen Beaver
		// Create radio button
1257
		case "radio":
1258 0f649c97 Phil Davis
			if ($grouping) {
1259 eb3743d8 Stephen Beaver
				$group->add(new Form_Checkbox(
1260
					$pkga['fieldname'],
1261
					$pkga['fielddescr'],
1262 86c77223 Stephen Beaver
					fixup_string($pkga['description']),
1263 eb3743d8 Stephen Beaver
					($value == "on"),
1264
					'on'
1265 86c77223 Stephen Beaver
				))->displayAsRadio();
1266 eb3743d8 Stephen Beaver
			} else {
1267 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1268
					$advanced->addInput(new Form_Checkbox(
1269
						$pkga['fieldname'],
1270
						$pkga['fielddescr'],
1271 86c77223 Stephen Beaver
						fixup_string($pkga['description']),
1272 23f6cdd7 Stephen Beaver
						($value == "on"),
1273
						'on'
1274 86c77223 Stephen Beaver
					))->displayAsRadio();
1275 f8ac4407 Phil Davis
				} else {
1276 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Checkbox(
1277
						$pkga['fieldname'],
1278
						$pkga['fielddescr'],
1279 86c77223 Stephen Beaver
						fixup_string($pkga['description']),
1280 23f6cdd7 Stephen Beaver
						($value == "on"),
1281
						'on'
1282 86c77223 Stephen Beaver
					))->displayAsRadio();
1283 f8ac4407 Phil Davis
				}
1284 eb3743d8 Stephen Beaver
			}
1285 23f6cdd7 Stephen Beaver
1286 eb3743d8 Stephen Beaver
			break;
1287 1624b5f1 Marcello Coutinho
1288 eb3743d8 Stephen Beaver
		// Create form button
1289
		case "button":
1290 827a3812 jim-p
			$newbtnicon = "fa-save";
1291
			if ($pkga['buttonicon'] != "") {
1292
				$newbtnicon = $pkga['buttonicon'];
1293
			}
1294
			$newbtnclass = "btn-primary";
1295
			if ($pkga['buttonclass'] != "") {
1296
				$newbtnclass = $pkga['buttonclass'];
1297
			}
1298
1299 eb3743d8 Stephen Beaver
			$newbtn = new Form_Button(
1300
				$pkga['fieldname'],
1301 827a3812 jim-p
				$pkga['fieldname'],
1302
				null,
1303
				$newbtnicon
1304 eb3743d8 Stephen Beaver
			);
1305 827a3812 jim-p
			$newbtn->addClass($newbtnclass);
1306 23f6cdd7 Stephen Beaver
1307 1c937bdc Steve Beaver
			if ($grouping) {
1308 eb3743d8 Stephen Beaver
				$group->add(new Form_StaticText(
1309
					null,
1310
					$newbtn . '<br />' . '<div class="help-block">' . fixup_string($pkga['description']) . '</div>'
1311
				));
1312
			} else {
1313
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1314 0f649c97 Phil Davis
					$advanced->addInput(new Form_StaticText(
1315
						null,
1316
						$newbtn . '<br />' . '<div class="help-block">' . fixup_string($pkga['description']) . '</div>'
1317
					));
1318 eb3743d8 Stephen Beaver
				} else {
1319 0f649c97 Phil Davis
					$section->addInput(new Form_StaticText(
1320
						null,
1321
						$newbtn . '<br />' . '<div class="help-block">' . fixup_string($pkga['description']) . '</div>'
1322
					));
1323 eb3743d8 Stephen Beaver
				}
1324
			}
1325 23f6cdd7 Stephen Beaver
1326 eb3743d8 Stephen Beaver
			break;
1327 1624b5f1 Marcello Coutinho
1328 eb3743d8 Stephen Beaver
		case "schedule_selection":
1329 23f6cdd7 Stephen Beaver
1330 eb3743d8 Stephen Beaver
			$input = "<select id='{$pkga['fieldname']}' name='{$pkga['fieldname']}'>\n";
1331
			$schedules = array();
1332
			$schedules[] = "none";
1333
			if (is_array($config['schedules']['schedule'])) {
1334
				foreach ($config['schedules']['schedule'] as $schedule) {
1335
					if ($schedule['name'] != "") {
1336
						$schedules[] = $schedule['name'];
1337 c67b75d1 xbipin
					}
1338 c6c71b36 xbipin
				}
1339 eb3743d8 Stephen Beaver
			}
1340 23f6cdd7 Stephen Beaver
1341 eb3743d8 Stephen Beaver
			foreach ($schedules as $schedule) {
1342
				if ($schedule == "none") {
1343
					$schedlist[""] = $schedule;
1344
				} else {
1345
					$schedlist[$schedule] = $schedule;
1346 c6c71b36 xbipin
				}
1347 eb3743d8 Stephen Beaver
			}
1348 23f6cdd7 Stephen Beaver
1349 0f649c97 Phil Davis
			if ($grouping) {
1350 eb3743d8 Stephen Beaver
				$group->add(new Form_Select(
1351
					$pkga['fieldname'],
1352
					$pkga['fielddescr'],
1353
					$value,
1354
					$schedlist
1355
				))->setHelp(fixup_string($pkga['description']));
1356
			} else {
1357 23f6cdd7 Stephen Beaver
				if (isset($pkga['advancedfield']) && isset($advfield_count)) {
1358
					$advanced->addInput(new Form_Select(
1359
						$pkga['fieldname'],
1360
						$pkga['fielddescr'],
1361
						$value,
1362
						$schedlist
1363
					))->setHelp(fixup_string($pkga['description']));
1364 f8ac4407 Phil Davis
				} else {
1365 23f6cdd7 Stephen Beaver
					$section->addInput(new Form_Select(
1366
						$pkga['fieldname'],
1367
						$pkga['fielddescr'],
1368
						$value,
1369
						$schedlist
1370
					))->setHelp(fixup_string($pkga['description']));
1371 f8ac4407 Phil Davis
				}
1372 eb3743d8 Stephen Beaver
			}
1373 f8ac4407 Phil Davis
1374 eb3743d8 Stephen Beaver
			break;
1375 1624b5f1 Marcello Coutinho
1376 eb3743d8 Stephen Beaver
		case "rowhelper":
1377 1624b5f1 Marcello Coutinho
1378 aa66a125 Steve Beaver
			$rowhelpername="row";
1379
1380 eb3743d8 Stephen Beaver
				$rowcounter = 0;
1381
				$trc = 0;
1382
1383
				//Use assigned $a_pkg or create an empty array to enter loop
1384
				if (isset($a_pkg[$id][$rowhelpername])) {
1385
					$saved_rows=$a_pkg[$id][$rowhelpername];
1386
				} else {
1387
					$saved_rows[] = array();
1388
				}
1389
1390
				$numrows = count($saved_rows) - 1;
1391
1392
				foreach ($saved_rows as $row) {
1393
					$group = new Form_Group(($rowcounter == 0) ? $pkga['fielddescr']:null);
1394
					$group->addClass('repeatable');
1395
1396
					foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
1397
						unset($value);
1398 57fc02b1 Stephen Beaver
						$width = null;
1399
1400 eb3743d8 Stephen Beaver
						$fieldname = $rowhelper['fieldname'];
1401
						$fielddescr = $rowhelper['fielddescr'];
1402 1624b5f1 Marcello Coutinho
1403 1d653e86 Chris Buechler
						// If input validation failed, read the value from the POST data so that the user's input is not lost
1404 a654d899 Stephen Beaver
						if ($get_from_post && isset($_POST[$fieldname.$rowcounter])) {
1405
							$value = $_POST[$fieldname.$rowcounter];
1406
						} elseif (isset($id) && $a_pkg[$id]) {
1407 eb3743d8 Stephen Beaver
							$value = $row[$fieldname];
1408 a0b0acd1 Stephen Beaver
						} elseif ($rowhelper['value'] != "") {
1409 a654d899 Stephen Beaver
							$value = $rowhelper['value'];
1410 f8ac4407 Phil Davis
						}
1411 eb3743d8 Stephen Beaver
1412
						$type = $rowhelper['type'];
1413 0f649c97 Phil Davis
						if ($type == "input" || $type == "password" || $type == "textarea") {
1414 6e5cec8e doktornotor
							if (($rowhelper['encoding'] == 'base64') && !$get_from_post && !empty($value)) {
1415
								$value = base64_decode($value);
1416
							}
1417
						}
1418 a654d899 Stephen Beaver
1419 eb3743d8 Stephen Beaver
1420
						if ($rowhelper['size']) {
1421
							$size = $rowhelper['size'];
1422
						} else if ($pkga['size']) {
1423
							$size = $pkga['size'];
1424
						} else {
1425
							$size = "8";
1426
						}
1427
1428 57fc02b1 Stephen Beaver
						if ($rowhelper['width']) {
1429
							$width = $rowhelper['width'];
1430
						}
1431
1432
						display_row($rowcounter, $value, $fieldname, $type, $rowhelper, ($numrows == $rowcounter) ? $fielddescr:null, $width);
1433 eb3743d8 Stephen Beaver
1434
						$text = "";
1435
						$trc++;
1436 f8ac4407 Phil Davis
					}
1437 23f6cdd7 Stephen Beaver
1438 eb3743d8 Stephen Beaver
					// Delete row button
1439
					$group->add(new Form_Button(
1440
						'deleterow' . $rowcounter,
1441 faab522f Renato Botelho
						'Delete',
1442 5a2512b3 Stephen Beaver
						null,
1443
						'fa-trash'
1444 eb3743d8 Stephen Beaver
					))->removeClass('btn-primary')->addClass('btn-warning btn-sm');
1445
1446
					$rowcounter++;
1447
					$section->add($group);
1448
				}
1449
1450
			// Add row button
1451
			$section->addInput(new Form_Button(
1452
				'addrow',
1453 faab522f Renato Botelho
				'Add',
1454 05e539af jim-p
				null,
1455
				'fa-plus'
1456
			))->addClass('btn-success');
1457 eb3743d8 Stephen Beaver
1458
			break;
1459 23f6cdd7 Stephen Beaver
1460 f8ac4407 Phil Davis
	}
1461 55c846c4 Marcello Coutinho
1462 eb3743d8 Stephen Beaver
		if ($pkga['combinefields'] == "end") {
1463
			$group->add(new Form_StaticText(
1464
				null,
1465
				null
1466
			));
1467 23f6cdd7 Stephen Beaver
1468 0f649c97 Phil Davis
			if ($advanced) {
1469 eb3743d8 Stephen Beaver
				$advanced->add($group);
1470 0f649c97 Phil Davis
			} else {
1471 eb3743d8 Stephen Beaver
				$section->add($group);
1472 0f649c97 Phil Davis
			}
1473 23f6cdd7 Stephen Beaver
1474 eb3743d8 Stephen Beaver
			$grouping = false;
1475
		}
1476 23f6cdd7 Stephen Beaver
1477 eb3743d8 Stephen Beaver
	#increment counter
1478
	$i++;
1479
} // e-o-foreach field described in the XML
1480 f8ac4407 Phil Davis
1481 fff6a2af jim-p
if ($section) {
1482
	$form->add($section);
1483
}
1484 23f6cdd7 Stephen Beaver
1485 eb3743d8 Stephen Beaver
$form->addGlobal(new Form_Input(
1486
	'id',
1487
	null,
1488
	'hidden',
1489
	$id
1490
));
1491 23f6cdd7 Stephen Beaver
1492 eb3743d8 Stephen Beaver
// If we created an advanced section, add it (and a button) to the form here
1493 0f649c97 Phil Davis
if (!empty($advanced)) {
1494 eb3743d8 Stephen Beaver
	$form->addGlobal(new Form_Button(
1495
		'showadv',
1496 faab522f Renato Botelho
		'Show Advanced Options',
1497 827a3812 jim-p
		null,
1498
		'fa-cog'
1499 347c0214 Phil Davis
	))->setAttribute('type','button')->addClass('btn-info');
1500 23f6cdd7 Stephen Beaver
1501 eb3743d8 Stephen Beaver
	$form->add($advanced);
1502
}
1503
1504
print($form);
1505
1506
if ($pkg['note'] != "") {
1507 f78bbe16 Phil Davis
	print_info_box($pkg['note'], 'info');
1508 4cb4d820 Phil Davis
}
1509 eb3743d8 Stephen Beaver
1510 4cb4d820 Phil Davis
if ($pkg['custom_php_after_form_command']) {
1511 eb3743d8 Stephen Beaver
	eval($pkg['custom_php_after_form_command']);
1512 23f6cdd7 Stephen Beaver
}
1513
1514 6d55e876 Steve Beaver
1515
$hidemsg = gettext("Show Advanced Options");
1516
$showmsg = gettext("Hide Advanced Options");
1517
1518 23f6cdd7 Stephen Beaver
if ($pkg['fields']['field'] != "") { ?>
1519
<script type="text/javascript">
1520
//<![CDATA[
1521 0f649c97 Phil Davis
	events.push(function() {
1522 23f6cdd7 Stephen Beaver
1523 eb3743d8 Stephen Beaver
	// Hide the advanced section
1524
	var advanced_visible = false;
1525
1526
	// Hide on page load
1527
	$('.advancedoptions').hide();
1528
1529 0bc61baa Stephen Beaver
	// Suppress "Delete row" button if there are fewer than two rows
1530
	checkLastRow();
1531
1532
	// Show advanced section if you click the showadv button
1533 eb3743d8 Stephen Beaver
	$("#showadv").click(function() {
1534
		advanced_visible = !advanced_visible;
1535
1536 0f649c97 Phil Davis
		if (advanced_visible) {
1537 eb3743d8 Stephen Beaver
			$('.advancedoptions').show();
1538 6d55e876 Steve Beaver
			$("#showadv").html('<i class="fa fa-cog icon-embed-btn"></i>' + "<?=$showmsg?>");
1539 0f649c97 Phil Davis
		} else {
1540 eb3743d8 Stephen Beaver
			$('.advancedoptions').hide();
1541 6d55e876 Steve Beaver
			$("#showadv").html('<i class="fa fa-cog icon-embed-btn"></i>' + "<?=$hidemsg?>");
1542 eb3743d8 Stephen Beaver
		}
1543 23f6cdd7 Stephen Beaver
	});
1544
1545 eb3743d8 Stephen Beaver
	// Call enablechange function
1546
	enablechange();
1547
});
1548
1549 23f6cdd7 Stephen Beaver
	function enablechange() {
1550
<?php
1551
	foreach ($pkg['fields']['field'] as $field) {
1552
		if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
1553 3f98044a Francisco Cavalcante
			echo "\tif ($('input[name=\"{$field['fieldname']}\"]').prop('checked') == false) {\n";
1554 23f6cdd7 Stephen Beaver
1555
			if (isset($field['enablefields'])) {
1556
				foreach (explode(',', $field['enablefields']) as $enablefield) {
1557 3f98044a Francisco Cavalcante
					echo "\t\tif ($('input[name=\"{$enablefield}\"]').length > 0) {\n";
1558
					echo "\t\t\t$('input[name=\"{$enablefield}\"]').prop('disabled',true);\n";
1559 23f6cdd7 Stephen Beaver
					echo "\t\t}\n";
1560 f8ac4407 Phil Davis
				}
1561 23f6cdd7 Stephen Beaver
			}
1562
1563
			if (isset($field['checkenablefields'])) {
1564
				foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
1565 3f98044a Francisco Cavalcante
					echo "\t\tif ($('input[name=\"{$checkenablefield}\"]').length > 0) {\n";
1566
					echo "\t\t\t$('input[name=\"{$checkenablefield}\"]').prop('checked',true);\n";
1567 23f6cdd7 Stephen Beaver
					echo "\t\t}\n";
1568 f8ac4407 Phil Davis
				}
1569 23f6cdd7 Stephen Beaver
			}
1570 55c846c4 Marcello Coutinho
1571 23f6cdd7 Stephen Beaver
			echo "\t}\n\telse {\n";
1572 7c061036 Scott Ullrich
1573 23f6cdd7 Stephen Beaver
			if (isset($field['enablefields'])) {
1574
				foreach (explode(',', $field['enablefields']) as $enablefield) {
1575 3f98044a Francisco Cavalcante
					echo "\t\tif ($('input[name=\"{$enablefield}\"]').length > 0) {\n";
1576
					echo "\t\t\t$('input[name=\"{$enablefield}\"]').prop('disabled',false);\n";
1577 23f6cdd7 Stephen Beaver
					echo "\t\t}\n";
1578
				}
1579
			}
1580 95736b54 Scott Ullrich
1581 23f6cdd7 Stephen Beaver
			if (isset($field['checkenablefields'])) {
1582
				foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
1583 3f98044a Francisco Cavalcante
					echo "\t\tif ($('input[name=\"{$checkenablefield}\"]').length > 0) {\n";
1584
					echo "\t\t\t$('input[name=\"{$checkenablefield}\"]').prop('checked',false);\n";
1585 23f6cdd7 Stephen Beaver
					echo "\t\t}\n";
1586
				}
1587
			}
1588
1589
			echo "\t}\n";
1590 e11aa161 Warren Baker
		}
1591
	}
1592 23f6cdd7 Stephen Beaver
	?>
1593
	}
1594
//]]>
1595
</script>
1596 d47013e1 Scott Ullrich
1597 31d27c6c Scott Ullrich
<?php
1598 23f6cdd7 Stephen Beaver
}
1599
1600
include("foot.inc");