Project

General

Profile

Download (40.3 KB) Statistics
| Branch: | Tag: | Revision:
1 d47013e1 Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 d47013e1 Scott Ullrich
/*
4
    pkg_edit.php
5 ed2d1343 Renato Botelho
    Copyright (C) 2013-2015 Electric Sheep Fencing, LP
6 55c846c4 Marcello Coutinho
    Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
7 d47013e1 Scott Ullrich
    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 1d333258 Scott Ullrich
/*
31
	pfSense_BUILDER_BINARIES:	/sbin/ifconfig
32
	pfSense_MODULE:	pkgs
33
*/
34 d47013e1 Scott Ullrich
35 6b07c15a Matthew Grooms
##|+PRIV
36
##|*IDENT=page-package-edit
37
##|*NAME=Package: Edit page
38
##|*DESCR=Allow access to the 'Package: Edit' page.
39
##|*MATCH=pkg_edit.php*
40
##|-PRIV
41
42 0089af7c Scott Ullrich
ini_set('max_execution_time', '0');
43
44 7a927e67 Scott Ullrich
require("guiconfig.inc");
45
require_once("functions.inc");
46
require_once("filter.inc");
47
require_once("shaper.inc");
48 f8e335a3 Scott Ullrich
require_once("pkg-utils.inc");
49 d47013e1 Scott Ullrich
50 14db714e Scott Ullrich
/* dummy stubs needed by some code that was MFC'd */
51 916b74c6 Scott Ullrich
function pfSenseHeader($location) { header("Location: " . $location); }
52 14db714e Scott Ullrich
53 d47013e1 Scott Ullrich
function gentitle_pkg($pgname) {
54
	global $pfSense_config;
55
	return $pfSense_config['system']['hostname'] . "." . $pfSense_config['system']['domain'] . " - " . $pgname;
56
}
57
58 55c846c4 Marcello Coutinho
function domTT_title($title_msg){
59
	if (!empty($title_msg)){
60
		$title_msg=preg_replace("/\s+/"," ",$title_msg);
61
        $title_msg=preg_replace("/'/","\'",$title_msg);
62 504a57b2 Charlie Root
		return "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'delay',300,'styleClass', 'niceTitle');\"";
63 55c846c4 Marcello Coutinho
	}
64
}
65
66 d8c1a6c5 Scott Ullrich
$xml = htmlspecialchars($_GET['xml']);
67
if($_POST['xml']) $xml = htmlspecialchars($_POST['xml']);
68 d47013e1 Scott Ullrich
69 bef9f697 Renato Botelho
$xml_fullpath = realpath('/usr/local/pkg/' . $xml);
70 69eb2e29 Renato Botelho
71 bef9f697 Renato Botelho
if ($xml == "" || $xml_fullpath === false ||
72
    substr($xml_fullpath, 0, strlen('/usr/local/pkg/')) != '/usr/local/pkg/') {
73
            print_info_box_np(gettext("ERROR: No valid package defined."));
74 69eb2e29 Renato Botelho
            die;
75 d47013e1 Scott Ullrich
} else {
76 bef9f697 Renato Botelho
            $pkg = parse_xml_config_pkg($xml_fullpath, "packagegui");
77 d47013e1 Scott Ullrich
}
78 7c172009 Scott Ullrich
79
if($pkg['include_file'] <> "") {
80
	require_once($pkg['include_file']);
81
}
82
83 b91540da Scott Ullrich
if (!isset($pkg['adddeleteeditpagefields']))
84
	$only_edit = true;
85
else
86
	$only_edit = false;
87
88 a28c8b59 Scott Ullrich
$package_name = $pkg['menu'][0]['name'];
89
$section      = $pkg['menu'][0]['section'];
90 d47013e1 Scott Ullrich
$config_path  = $pkg['configpath'];
91 bb940538 Scott Ullrich
$name         = $pkg['name'];
92 b91540da Scott Ullrich
$title        = $pkg['title'];
93 96d9f5c9 Bill Marquette
$pgtitle      = $title;
94 d47013e1 Scott Ullrich
95 da7bf505 Scott Ullrich
$id = $_GET['id'];
96
if (isset($_POST['id']))
97 d8c1a6c5 Scott Ullrich
	$id = htmlspecialchars($_POST['id']);
98 98bcf1f8 Scott Ullrich
99 916b74c6 Scott Ullrich
// Not posting?  Then user is editing a record. There must be a valid id
100
// when editing a record.
101
if(!$id && !$_POST)
102
	$id = "0";
103 5a61331a jim-p
104
if(!is_numeric($id)) {
105 6f3d2063 Renato Botelho
	header("Location: /");
106 5a61331a jim-p
	exit;
107
}
108
109 529ffadb Bill Marquette
if($pkg['custom_php_global_functions'] <> "")
110
        eval($pkg['custom_php_global_functions']);
111
112 31d27c6c Scott Ullrich
// grab the installedpackages->package_name section.
113 80d5bd41 Phil Lavin
if($config['installedpackages'] && !is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']))
114 7db8ff99 Colin Smith
	$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array();
115 da7bf505 Scott Ullrich
116 a2a7f74d jim-p
// If the first entry in the array is an empty <config/> tag, kill it.
117 80d5bd41 Phil Lavin
if ($config['installedpackages'] && (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0) 
118 a2a7f74d jim-p
	&& ($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0] == ""))
119
	array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']);
120
121 7db8ff99 Colin Smith
$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
122 da7bf505 Scott Ullrich
123 19d360bf Scott Ullrich
if($_GET['savemsg'] <> "")
124 d8c1a6c5 Scott Ullrich
	$savemsg = htmlspecialchars($_GET['savemsg']);
125 f9a91638 Scott Ullrich
126 194b4e0a Colin Smith
if($pkg['custom_php_command_before_form'] <> "")
127
	eval($pkg['custom_php_command_before_form']);
128 f9a91638 Scott Ullrich
129 6483da5d Scott Ullrich
if ($_POST) {
130 2c51f293 jim-p
	$firstfield = "";
131
	$rows = 0;
132
133
	$input_errors = array();
134
	$reqfields = array();
135
	$reqfieldsn = array();
136
	foreach ($pkg['fields']['field'] as $field) {
137
		if (($field['type'] == 'input') && isset($field['required'])) {
138
			if($field['fieldname'])
139
				$reqfields[] = $field['fieldname'];
140
			if($field['fielddescr'])
141
				$reqfieldsn[] = $field['fielddescr'];
142
		}
143
	}
144 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqfields, $reqfieldsn, $input_errors);
145 2c51f293 jim-p
146
	if ($pkg['custom_php_validation_command'])
147
		eval($pkg['custom_php_validation_command']);
148
149 b3235baa Scott Ullrich
	if($_POST['act'] == "del") {
150
		if($pkg['custom_delete_php_command']) {
151 5cd30ac3 Scott Ullrich
		    if($pkg['custom_php_command_before_form'] <> "")
152
			    eval($pkg['custom_php_command_before_form']);
153 b3235baa Scott Ullrich
		    eval($pkg['custom_delete_php_command']);
154
		}
155 7c172009 Scott Ullrich
		write_config($pkg['delete_string']);
156 facd08f9 Scott Ullrich
		// resync the configuration file code if defined.
157
		if($pkg['custom_php_resync_config_command'] <> "") {
158 86f3fc00 Scott Ullrich
			if($pkg['custom_php_command_before_form'] <> "")
159
				eval($pkg['custom_php_command_before_form']);
160
			eval($pkg['custom_php_resync_config_command']);
161 facd08f9 Scott Ullrich
		}
162 b3235baa Scott Ullrich
	} else {
163 2c51f293 jim-p
		if(!$input_errors && $pkg['custom_add_php_command']) {
164 90779bf7 Scott Ullrich
			if($pkg['donotsave'] <> "" or $pkg['preoutput'] <> "") {
165 12123e25 Colin Smith
			?>
166 afe4a7d3 Erik Kristensen
167 539b4c44 Colin Smith
<?php include("head.inc"); ?>
168 3eaeb703 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
169 2fe6c52b Colin Smith
<?php include("fbegin.inc"); ?>
170 fbd14b13 Scott Ullrich
<?php
171 3eaeb703 Scott Ullrich
			}
172
			if($pkg['preoutput']) echo "<pre>";
173
			eval($pkg['custom_add_php_command']);
174
			if($pkg['preoutput']) echo "</pre>";
175 b3235baa Scott Ullrich
		}
176 6483da5d Scott Ullrich
	}
177 e3c4b6b7 Scott Ullrich
178 eec70f21 Scott Ullrich
	// donotsave is enabled.  lets simply exit.
179 2c51f293 jim-p
	if(empty($pkg['donotsave'])) {
180
181
		// store values in xml configration file.
182
		if (!$input_errors) {
183
			$pkgarr = array();
184
			foreach ($pkg['fields']['field'] as $fields) {
185
				switch($fields['type']){
186
					case "rowhelper":
187
						// save rowhelper items.
188
						#$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
189
						$rowhelpername="row";
190
						foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield)
191
							foreach($_POST as $key => $value){
192
								if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/",$key,$matches))
193
									$pkgarr[$rowhelpername][$matches[1]][$rowhelperfield['fieldname']]=$value;
194
							}
195
						break;
196
					default:
197
						$fieldname  = $fields['fieldname'];
198
						if ($fieldname == "interface_array") {
199
							$fieldvalue = $_POST[$fieldname];
200
						} elseif (is_array($_POST[$fieldname])) {
201
							$fieldvalue = implode(',', $_POST[$fieldname]);
202
						} else {
203
							$fieldvalue = trim($_POST[$fieldname]);
204
							if ($fields['encoding'] == 'base64')
205
								$fieldvalue = base64_encode($fieldvalue);
206 eec70f21 Scott Ullrich
						}
207 2c51f293 jim-p
						if($fieldname)
208
							$pkgarr[$fieldname] = $fieldvalue;
209 eec70f21 Scott Ullrich
					}
210 2c51f293 jim-p
			}
211 0e730fee Scott Ullrich
212 2c51f293 jim-p
			if (isset($id) && $a_pkg[$id])
213
				$a_pkg[$id] = $pkgarr;
214
			else
215
				$a_pkg[] = $pkgarr;
216 0e730fee Scott Ullrich
217 2c51f293 jim-p
			write_config($pkg['addedit_string']);
218
			// late running code
219
			if($pkg['custom_add_php_command_late'] <> "") {
220
			    eval($pkg['custom_add_php_command_late']);
221
			}
222 0e730fee Scott Ullrich
223 2c51f293 jim-p
			if (isset($pkg['filter_rules_needed']))
224
				filter_configure();
225 a9b2e638 Ermal Lu?i
226 2c51f293 jim-p
			// resync the configuration file code if defined.
227
			if($pkg['custom_php_resync_config_command'] <> "") {
228
			    eval($pkg['custom_php_resync_config_command']);
229
			}
230 facd08f9 Scott Ullrich
231 2c51f293 jim-p
			parse_package_templates();
232 dcbe6f52 Scott Ullrich
233 2c51f293 jim-p
			/* if start_command is defined, restart w/ this */
234
			if($pkg['start_command'] <> "")
235
			    exec($pkg['start_command'] . ">/dev/null 2&>1");
236 a485a6f5 Scott Ullrich
237 2c51f293 jim-p
			/* if restart_command is defined, restart w/ this */
238
			if($pkg['restart_command'] <> "")
239
			    exec($pkg['restart_command'] . ">/dev/null 2&>1");
240 a485a6f5 Scott Ullrich
241 2c51f293 jim-p
			if($pkg['aftersaveredirect'] <> "") {
242
			    pfSenseHeader($pkg['aftersaveredirect']);
243
			} elseif(!$pkg['adddeleteeditpagefields']) {
244 b3733e10 Colin Fleming
			    pfSenseHeader("pkg_edit.php?xml={$xml}&amp;id=0");
245 2c51f293 jim-p
			} elseif(!$pkg['preoutput']) {
246
			    pfSenseHeader("pkg.php?xml=" . $xml);
247
			}
248
			exit;
249
		} else {
250
			$get_from_post = true;
251 dcbe6f52 Scott Ullrich
		}
252 2c51f293 jim-p
	} elseif (!$input_errors) {
253 0e730fee Scott Ullrich
		exit;
254 e11aa161 Warren Baker
	}
255 da7bf505 Scott Ullrich
}
256
257 b91540da Scott Ullrich
if($pkg['title'] <> "") {
258 f0d1af93 Carlos Eduardo Ramos
	$edit = ($only_edit ? '' : ": " .  gettext("Edit"));
259 b91540da Scott Ullrich
	$title = $pkg['title'] . $edit;
260
}
261 83ddedcd Scott Ullrich
else
262 b91540da Scott Ullrich
	$title = gettext("Package Editor");
263 83ddedcd Scott Ullrich
264
$pgtitle = $title;
265
266 2690afba Colin Fleming
if ($pkg['custom_php_after_head_command']) {
267
	$closehead = false;
268
	include("head.inc");
269 7c172009 Scott Ullrich
	eval($pkg['custom_php_after_head_command']);
270 2690afba Colin Fleming
	echo "</head>\n";
271
}
272
else
273
	include("head.inc");
274 7c172009 Scott Ullrich
275 d47013e1 Scott Ullrich
?>
276
277 cf6a1f80 Warren Baker
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
278 b89a8cbc bruno
279 befa8be0 Colin Fleming
<?php include("fbegin.inc"); ?>
280
281 6672609b Renato Botelho
<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
282 b89a8cbc bruno
<script type="text/javascript" src="/javascript/suggestions.js"></script>
283
284 2fe6c52b Colin Smith
<?php if($pkg['fields']['field'] <> "") { ?>
285 befa8be0 Colin Fleming
<script type="text/javascript">
286
//<![CDATA[
287 55c846c4 Marcello Coutinho
	//Everything inside it will load as soon as the DOM is loaded and before the page contents are loaded
288
	jQuery(document).ready(function() {
289
		
290
		//Sortable function
291
		jQuery('#mainarea table tbody').sortable({
292
			items: 'tr.sortable',
293
			cursor: 'move',
294
			distance: 10,
295
			opacity: 0.8,
296
			helper: function(e,ui){  
297
				ui.children().each(function(){  
298
					jQuery(this).width(jQuery(this).width());  
299
				});
300
			return ui;  
301
			},
302
		});
303
		
304
		//delete current line jQuery function
305
		jQuery('#maintable td .delete').live('click', function() {
306
			//do not remove first line
307 2c0dd263 Marcello Coutinho
			if (jQuery("#maintable tr").length > 2){
308 55c846c4 Marcello Coutinho
				jQuery(this).parent().parent().remove();
309 2c0dd263 Marcello Coutinho
				return false;
310
			}
311 55c846c4 Marcello Coutinho
	    });
312
	    
313
		//add new line jQuery function
314
		jQuery('#mainarea table .add').click(function() {
315
			//get table size and assign as new id
316
			var c_id=jQuery("#maintable tr").length;
317
			var new_row=jQuery("table#maintable tr:last").html().replace(/(name|id)="(\w+)(\d+)"/g,"$1='$2"+c_id+"'");
318
			//apply new id to created line rowhelperid
319 befa8be0 Colin Fleming
			jQuery("table#maintable tr:last").after("<tr>"+new_row+"<\/tr>");
320 2c0dd263 Marcello Coutinho
			return false;
321 55c846c4 Marcello Coutinho
	    });
322
		// Call enablechange function
323
		enablechange();
324
	});
325
326
	function enablechange() {
327
	<?php
328
	foreach ($pkg['fields']['field'] as $field) {
329
		if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
330
			echo "\tif (jQuery('form[name=\"iform\"] input[name=\"{$field['fieldname']}\"]').prop('checked') == false) {\n";
331
332
			if (isset($field['enablefields'])) {
333
				foreach (explode(',', $field['enablefields']) as $enablefield) {
334
					echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n";
335
					echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',true);\n";
336
					echo "\t\t}\n";
337
				}
338 dcf6d563 Manoel Carvalho
			}
339 fbd14b13 Scott Ullrich
340 55c846c4 Marcello Coutinho
			if (isset($field['checkenablefields'])) {
341
				foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
342
					echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n";
343
					echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',true);\n";
344
					echo "\t\t}\n";
345
				}
346 dcf6d563 Manoel Carvalho
			}
347 fbd14b13 Scott Ullrich
348 55c846c4 Marcello Coutinho
			echo "\t}\n\telse {\n";
349 fbd14b13 Scott Ullrich
350 55c846c4 Marcello Coutinho
			if (isset($field['enablefields'])) {
351
				foreach (explode(',', $field['enablefields']) as $enablefield) {
352
					echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n";
353
					echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',false);\n";
354
					echo "\t\t}\n";
355
				}
356 dcf6d563 Manoel Carvalho
			}
357 fbd14b13 Scott Ullrich
358 55c846c4 Marcello Coutinho
			if (isset($field['checkenablefields'])) {
359
				foreach(explode(',', $field['checkenablefields']) as $checkenablefield) {
360
					echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n";
361
					echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',false);\n";
362
					echo "\t\t}\n";
363
				}
364 dcf6d563 Manoel Carvalho
			}
365 fbd14b13 Scott Ullrich
366 55c846c4 Marcello Coutinho
			echo "\t}\n";
367
		}
368 fbd14b13 Scott Ullrich
	}
369 55c846c4 Marcello Coutinho
	?>
370 2fe6c52b Colin Smith
}
371 7c8bce79 Colin Fleming
//]]>
372 2fe6c52b Colin Smith
</script>
373
<?php } ?>
374 55c846c4 Marcello Coutinho
<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
375
<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
376
<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
377
<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
378 befa8be0 Colin Fleming
<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
379 eec70f21 Scott Ullrich
380 7c172009 Scott Ullrich
<?php if (!empty($input_errors)) print_input_errors($input_errors); ?>
381
<form name="iform" action="pkg_edit.php" method="post">
382 2e606955 Colin Fleming
<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" />
383 d47013e1 Scott Ullrich
<?php if ($savemsg) print_info_box($savemsg); ?>
384 2a83d2bd Colin Fleming
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package edit">
385 7c061036 Scott Ullrich
<?php
386
if ($pkg['tabs'] <> "") {
387 e11aa161 Warren Baker
	$tab_array = array();
388
	foreach($pkg['tabs']['tab'] as $tab) {
389 90551807 Warren Baker
		if($tab['tab_level'])
390
			$tab_level = $tab['tab_level'];
391
		else
392
			$tab_level = 1;
393
		if(isset($tab['active'])) {
394
			$active = true;
395
		} else {
396
			$active = false;
397
		}
398 f8c462dd Warren Baker
		if(isset($tab['no_drop_down']))
399
			$no_drop_down = true;
400 90551807 Warren Baker
		$urltmp = "";
401
		if($tab['url'] <> "") $urltmp = $tab['url'];
402
		if($tab['xml'] <> "") $urltmp = "pkg_edit.php?xml=" . $tab['xml'];
403
404
 		$addresswithport = getenv("HTTP_HOST");
405
		$colonpos = strpos($addresswithport, ":");
406
		if ($colonpos !== False) {
407
			//my url is actually just the IP address of the pfsense box
408
			$myurl = substr($addresswithport, 0, $colonpos);
409
		} else {
410
			$myurl = $addresswithport;
411
		}
412
		// eval url so that above $myurl item can be processed if need be.
413
		$url = str_replace('$myurl', $myurl, $urltmp);
414
415
		$tab_array[$tab_level][] = array(
416
						$tab['text'],
417
						$active,
418
						$url
419
					);
420 e11aa161 Warren Baker
    	}
421 90551807 Warren Baker
422
	ksort($tab_array);
423 e14fbca4 Marcello Coutinho
	foreach($tab_array as $tabid => $tab) {
424 f8c462dd Warren Baker
		echo '<tr><td>';
425 e14fbca4 Marcello Coutinho
		display_top_tabs($tab, $no_drop_down, $tabid);
426 f8c462dd Warren Baker
		echo '</td></tr>';
427 90551807 Warren Baker
	}
428 7c061036 Scott Ullrich
}
429 55c846c4 Marcello Coutinho
430 7c061036 Scott Ullrich
?>
431 2a83d2bd Colin Fleming
<tr><td><div id="mainarea"><table id="t" class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
432 e11aa161 Warren Baker
<?php
433
	$cols = 0;
434
	$savevalue = gettext("Save");
435
	if($pkg['savetext'] <> "") $savevalue = $pkg['savetext'];
436
	/* If a package's XML has <advanced_options/> configured, then setup 
437
	 * the table rows for the fields that have <advancedfield/> set.
438
	 * These fields will be placed below other fields in a seprate area titled 'Advanced Features'.
439
	 * These advanced fields are not normally configured and generally left to default to 'default settings'.
440
	 */
441 55c846c4 Marcello Coutinho
442 e11aa161 Warren Baker
	if ($pkg['advanced_options'] == "enabled") {
443 55c846c4 Marcello Coutinho
		$adv_filed_count = 0;
444
		$advanced = "<td>&nbsp;</td>";
445 8cd558b6 ayvis
		$advanced .= "<tr><td colspan=\"2\" class=\"listtopic\">". gettext("Advanced features") . "<br /></td></tr>\n";
446 55c846c4 Marcello Coutinho
		}		
447 e11aa161 Warren Baker
	foreach ($pkg['fields']['field'] as $pkga) {
448 969a36ce Scott Ullrich
		if ($pkga['type'] == "sorting") 
449
			continue;
450 32487e42 Scott Ullrich
451
		if ($pkga['type'] == "listtopic") {
452 55c846c4 Marcello Coutinho
			$input = "<tr id='td_{$pkga['fieldname']}'><td>&nbsp;</td></tr>";
453 8cd558b6 ayvis
			$input .= "<tr id='tr_{$pkga['fieldname']}'><td colspan=\"2\" class=\"listtopic\">{$pkga['name']}<br /></td></tr>\n";
454 55c846c4 Marcello Coutinho
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
455
				$advanced .= $input;
456
				$adv_filed_count++;
457
				}
458 e11aa161 Warren Baker
			else
459 55c846c4 Marcello Coutinho
				echo $input;
460
			continue;
461 e11aa161 Warren Baker
		}
462 1624b5f1 Marcello Coutinho
463 55c846c4 Marcello Coutinho
		if($pkga['combinefields']=="begin"){
464
			$input="<tr valign='top' id='tr_{$pkga['fieldname']}'>";
465
			if(isset($pkga['advancedfield']) && isset($adv_filed_count))
466
				$advanced .= $input;
467
			else
468
			  	echo $input;
469
			}
470 1624b5f1 Marcello Coutinho
471 e11aa161 Warren Baker
		$size = "";
472 55c846c4 Marcello Coutinho
		if (isset($pkga['dontdisplayname'])){
473
			$input="";
474
			if(!isset($pkga['combinefields']))
475
				$input .= "<tr valign='top' id='tr_{$pkga['fieldname']}'>";
476
			if(isset($pkga['usecolspan2']))
477
				$colspan="colspan='2'";
478
			else
479
				$input .= "<td width='22%' class='vncell{$req}'>&nbsp;</td>";
480
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
481
				$advanced .= $input;
482
				$adv_filed_count++;
483
				}
484
			else
485
				echo $input;
486
			}
487
		else if (!isset($pkga['placeonbottom'])){
488 e11aa161 Warren Baker
			unset($req);
489
			if (isset($pkga['required']))
490
				$req = 'req';
491 2e606955 Colin Fleming
			$input= "<tr><td valign='top' width=\"22%\" class=\"vncell{$req}\">";
492 55c846c4 Marcello Coutinho
			$input .= fixup_string($pkga['fielddescr']);
493
			$input .= "</td>";
494
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
495
				$advanced .= $input;
496
				$adv_filed_count++;
497
				}
498
			else 
499
				echo $input;
500 e11aa161 Warren Baker
		}
501 55c846c4 Marcello Coutinho
		if($pkga['combinefields']=="begin"){
502 2a83d2bd Colin Fleming
			$input="<td class=\"vncell\"><table summary=\"advanced\">";
503 55c846c4 Marcello Coutinho
			if(isset($pkga['advancedfield']) && isset($adv_filed_count))
504
				$advanced .= $input;
505
			else
506
			  	echo $input;
507
			}
508 1624b5f1 Marcello Coutinho
509 55c846c4 Marcello Coutinho
		$class=(isset($pkga['combinefields']) ? '' : 'class="vtable"');
510
		if (!isset($pkga['placeonbottom'])){
511
			$input="<td valign='top' {$colspan} {$class}>";
512
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)){
513
				$advanced .= $input;
514
				$adv_filed_count++;
515
				}
516 e11aa161 Warren Baker
			else
517 55c846c4 Marcello Coutinho
				echo $input;
518
		}
519 1624b5f1 Marcello Coutinho
520 31d27c6c Scott Ullrich
		// if user is editing a record, load in the data.
521 7c172009 Scott Ullrich
		$fieldname = $pkga['fieldname'];
522 fbd14b13 Scott Ullrich
		if ($get_from_post) {
523 7c172009 Scott Ullrich
			$value = $_POST[$fieldname];
524 fbd14b13 Scott Ullrich
			if (is_array($value)) $value = implode(',', $value);
525 e11aa161 Warren Baker
		} else {
526 91c31339 Warren Baker
			if (isset($id) && $a_pkg[$id])
527 7c172009 Scott Ullrich
				$value = $a_pkg[$id][$fieldname];
528 b91540da Scott Ullrich
			else
529
				$value = $pkga['default_value'];
530 31d27c6c Scott Ullrich
		}
531 55c846c4 Marcello Coutinho
		switch($pkga['type']){
532
			case "input":
533
				$size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
534 605ae553 Renato Botelho
				$input = "<input {$size} id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formfld unknown' value=\"" . htmlspecialchars($value) ."\" />\n";
535 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
536 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
537
					$js_array[] = $pkga['fieldname'];
538
					$advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
539
					}
540
				else
541
					echo $input;
542
				break;
543 1624b5f1 Marcello Coutinho
544 55c846c4 Marcello Coutinho
			case "password":
545
				$size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
546 605ae553 Renato Botelho
				$input = "<input " . $size . " id='" . $pkga['fieldname'] . "' type='password' name='" . $pkga['fieldname'] . "' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
547 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
548 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
549
					$js_array[] = $pkga['fieldname'];
550
					$advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
551
					}
552
				else
553
					echo $input;
554
				break;
555 1624b5f1 Marcello Coutinho
556 55c846c4 Marcello Coutinho
			case "info":
557
				$input = fixup_string($pkga['description']) . "\n";
558
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
559
					$js_array[] = $pkga['fieldname'];
560
					$advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
561
					}
562
				else
563
					echo $input;
564
				break;
565 1624b5f1 Marcello Coutinho
566 55c846c4 Marcello Coutinho
			case "select":
567
				$fieldname = $pkga['fieldname'];
568
				if (isset($pkga['multiple'])) {
569
					$multiple = 'multiple="multiple"';
570
					$items = explode(',', $value);
571
					$fieldname .= "[]";
572
				} else {
573
					$multiple = '';
574
					$items = array($value);
575 e11aa161 Warren Baker
				}
576 55c846c4 Marcello Coutinho
				$size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
577
				$onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
578 2e606955 Colin Fleming
				$input = "<select id='" . $pkga['fieldname'] . "' $multiple $size $onchange name=\"$fieldname\">\n";
579 e11aa161 Warren Baker
				foreach ($pkga['options']['option'] as $opt) {
580 55c846c4 Marcello Coutinho
					$selected = (in_array($opt['value'], $items) ? 'selected="selected"' : '');
581 2e606955 Colin Fleming
					$input .= "\t<option value=\"{$opt['value']}\" {$selected}>{$opt['name']}</option>\n";
582 55c846c4 Marcello Coutinho
					}
583
				$input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
584
                if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
585
					$js_array[] = $pkga['fieldname'];
586
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
587
					$advanced .= "</div>\n";
588
					}
589
				else
590
					echo $input;
591
				break;
592 1624b5f1 Marcello Coutinho
593 55c846c4 Marcello Coutinho
			case "select_source":
594
				$fieldname = $pkga['fieldname'];
595
				if (isset($pkga['multiple'])) {
596
					$multiple = 'multiple="multiple"';
597
					$items = explode(',', $value);
598
					$fieldname .= "[]";
599 e11aa161 Warren Baker
				} else {
600 55c846c4 Marcello Coutinho
					$multiple = '';
601
					$items = array($value);
602 e11aa161 Warren Baker
				}
603 55c846c4 Marcello Coutinho
				$size = (isset($pkga['size']) ? "size=\"{$pkga['size']}\"" : '');
604
				$onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
605 2e606955 Colin Fleming
				$input = "<select id='{$pkga['fieldname']}' {$multiple} {$size} {$onchange} name=\"{$fieldname}\">\n";
606 55c846c4 Marcello Coutinho
607
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
608
					$js_array[] = $pkga['fieldname'];
609
					$advanced .= display_advanced_field($pkga['fieldname']) .$input;
610
					$advanced .= "</div>\n";
611 e11aa161 Warren Baker
				} else {
612 55c846c4 Marcello Coutinho
					echo $input;
613 e11aa161 Warren Baker
				}
614 55c846c4 Marcello Coutinho
				$source_url = $pkga['source'];
615
				eval("\$pkg_source_txt = &$source_url;");
616 1624b5f1 Marcello Coutinho
				$input="";
617 504a57b2 Charlie Root
				#check if show disable option is present on xml
618
				if(isset($pkga['show_disable_value'])){
619
					array_push($pkg_source_txt, array(($pkga['source_name']? $pkga['source_name'] : $pkga['name'])=> $pkga['show_disable_value'],
620
													  ($pkga['source_value']? $pkga['source_value'] : $pkga['value'])=> $pkga['show_disable_value']));
621
					}
622 55c846c4 Marcello Coutinho
				foreach ($pkg_source_txt as $opt) {
623
					$source_name =($pkga['source_name']? $opt[$pkga['source_name']] : $opt[$pkga['name']]);
624
					$source_value =($pkga['source_value'] ? $opt[$pkga['source_value']] : $opt[$pkga['value']]);
625
					$selected = (in_array($source_value, $items)? 'selected="selected"' : '' );
626 2e606955 Colin Fleming
					$input  .= "\t<option value=\"{$source_value}\" $selected>{$source_name}</option>\n";
627 55c846c4 Marcello Coutinho
					}
628 1624b5f1 Marcello Coutinho
				$input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
629
				if(isset($pkga['advancedfield']) && isset($adv_filed_count))
630
					$advanced .= $input;
631
				else
632
					echo $input;
633 55c846c4 Marcello Coutinho
				break;
634 1624b5f1 Marcello Coutinho
635 55c846c4 Marcello Coutinho
			case "vpn_selection" :
636
				$input = "<select id='{$pkga['fieldname']}' name='{$vpn['name']}'>\n";
637 e11aa161 Warren Baker
				foreach ($config['ipsec']['phase1'] as $vpn) {
638 55c846c4 Marcello Coutinho
					$input .= "\t<option value=\"{$vpn['descr']}\">{$vpn['descr']}</option>\n";
639
					}
640
				$input .= "</select>\n";
641 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
642 55c846c4 Marcello Coutinho
643
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
644
					$js_array[] = $pkga['fieldname'];
645
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
646
					$advanced .= "</div>\n";
647
					}
648
				else
649
					echo $input;
650
				break;
651 1624b5f1 Marcello Coutinho
652 55c846c4 Marcello Coutinho
			case "checkbox":
653 2e606955 Colin Fleming
				$checkboxchecked =($value == "on" ? " checked=\"checked\"" : "");
654 cfa845a9 Luiz Gustavo Costa (gugabsd)
				$onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
655 55c846c4 Marcello Coutinho
				if (isset($pkga['enablefields']) || isset($pkga['checkenablefields']))
656
					$onclick = ' onclick="javascript:enablechange();"';
657 2e606955 Colin Fleming
				$input = "<input id='{$pkga['fieldname']}' type='checkbox' name='{$pkga['fieldname']}' {$checkboxchecked} {$onclick} {$onchange} />\n";
658 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
659 55c846c4 Marcello Coutinho
660
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
661
					$js_array[] = $pkga['fieldname'];
662
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
663
					$advanced .= "</div>\n";
664
					}
665
				else
666
					echo $input;
667
				break;
668 1624b5f1 Marcello Coutinho
669 55c846c4 Marcello Coutinho
			case "textarea":
670
				if($pkga['rows'])
671
					$rows = " rows='{$pkga['rows']}' ";
672
				if($pkga['cols'])
673
					$cols = " cols='{$pkga['cols']}' ";
674
				if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value))
675
					$value = base64_decode($value);
676
				$wrap =($pkga['wrap'] == "off" ? 'wrap="off" style="white-space:nowrap;"' : '');		  
677
				$input = "<textarea {$rows} {$cols} name='{$pkga['fieldname']}'{$wrap}>{$value}</textarea>\n";
678 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
679 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
680
					$js_array[] = $pkga['fieldname'];
681
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
682
					$advanced .= "</div>\n";
683
					}
684
				else
685
					echo $input;
686
				break;
687 b89a8cbc bruno
688
			case "aliases":
689
				// Use xml tag <typealiases> to filter type aliases
690
				$size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
691
				$fieldname = $pkga['fieldname'];
692
				$a_aliases = &$config['aliases']['alias'];
693
				$addrisfirst = 0;
694
				$aliasesaddr = "";
695
				$value = "value='{$value}'";
696
697
				if(isset($a_aliases)) {
698
					if(!empty($pkga['typealiases'])) {
699
						foreach($a_aliases as $alias)
700
							if($alias['type'] == $pkga['typealiases']) {
701
								if($addrisfirst == 1) $aliasesaddr .= ",";
702
								$aliasesaddr .= "'" . $alias['name'] . "'";
703
								$addrisfirst = 1;
704
							}
705
					} else {
706
						foreach($a_aliases as $alias) {
707
							if($addrisfirst == 1) $aliasesaddr .= ",";
708
							$aliasesaddr .= "'" . $alias['name'] . "'";
709
							$addrisfirst = 1;
710
						}
711
					}
712
				}
713
714 2e606955 Colin Fleming
				$input = "<input name='{$fieldname}' type='text' class='formfldalias' id='{$fieldname}' {$size} {$value} />\n<br />";
715 b89a8cbc bruno
				$input .= fixup_string($pkga['description']) . "\n";
716
717
				$script = "<script type='text/javascript'>\n";
718 8df076fe Colin Fleming
				$script .= "//<![CDATA[\n";
719 b89a8cbc bruno
				$script .= "var aliasarray = new Array({$aliasesaddr})\n";
720
				$script .= "var oTextbox1 = new AutoSuggestControl(document.getElementById('{$fieldname}'), new StateSuggestions(aliasarray))\n";
721 befa8be0 Colin Fleming
				$script .= "//]]>\n";
722 b89a8cbc bruno
				$script .= "</script>";
723
724
				echo $input;
725
				echo $script;
726
                                break;
727
728 55c846c4 Marcello Coutinho
			case "interfaces_selection":
729 e14fbca4 Marcello Coutinho
				$ips=array();
730
				$interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide");
731
				if (is_array($config['interfaces']))
732
					foreach ($config['interfaces'] as $iface_key=>$iface_value){
733
						if (isset($iface_value['enable']) && ! preg_match("/$interface_regex/",$iface_key)){
734 2d9063af ccesario
							$iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key));
735
							if (isset($pkga['showips']))
736
								$iface_description .= " address";
737 e14fbca4 Marcello Coutinho
							$ips[]=array('ip'=> $iface_key, 'description'=> $iface_description);
738
							}
739
					}
740
				if (is_array($config['virtualip']) && isset($pkga['showvirtualips']))
741
					foreach ($config['virtualip']['vip'] as $vip){
742
						if (! preg_match("/$interface_regex/",$vip['interface']))
743
						$vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " ");
744
						  switch ($vip['mode']){
745
							case "ipalias":
746
							case "carp":
747
									$ips[]=array(   'ip'=> $vip['subnet'],'description' => "{$vip['subnet']} $vip_description");
748
								break;
749
							case "proxyarp":
750
								if ($vip['type']=="network"){
751
									$start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits']));
752
									$end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits']));
753
									$len = $end - $start;
754
									for ($i = 0; $i <= $len; $i++)
755
										$ips[]= array('ip'=>long2ip32($start+$i),'description'=> long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}");
756
									}
757
								else{
758
									$ips[]= array('ip'=>$vip['subnet'],'description'=> "{$vip['subnet']} $vip_description");
759
									}
760
								break;
761
							}
762
					}
763
				sort($ips);
764
				if (isset($pkga['showlistenall']))
765
					array_unshift($ips,array('ip'=> 'All', 'description'=> 'Listen on All interfaces/ip addresses '));
766
				if (! preg_match("/$interface_regex/","loopback")){
767
					$iface_description=(isset($pkga['showips']) ? "127.0.0.1 (loopback)" : "loopback");
768
					array_push($ips,array('ip'=> 'lo0', 'description'=> $iface_description));
769
					}
770
771
				#show interfaces array on gui
772 55c846c4 Marcello Coutinho
				$size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
773
				$multiple = '';
774
				$fieldname = $pkga['fieldname'];
775
				if (isset($pkga['multiple'])) {
776
					$fieldname .= '[]';
777 2e606955 Colin Fleming
					$multiple = 'multiple="multiple"';
778 e14fbca4 Marcello Coutinho
					}
779 55c846c4 Marcello Coutinho
				$input = "<select id='{$pkga['fieldname']}' name=\"{$fieldname}\" {$size} {$multiple}>\n";
780
				if(is_array($value))
781
					$values = $value;
782 e11aa161 Warren Baker
				else
783 55c846c4 Marcello Coutinho
					$values  =  explode(',',  $value);
784 e14fbca4 Marcello Coutinho
				foreach($ips as $iface){
785 2e606955 Colin Fleming
					$selected = (in_array($iface['ip'], $values) ? 'selected="selected"' : '');
786 e14fbca4 Marcello Coutinho
					$input .= "<option value=\"{$iface['ip']}\" {$selected}>{$iface['description']}</option>\n";
787
					}
788
				$input .= "</select>\n<br />" . fixup_string($pkga['description']) . "\n";
789 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count))
790 e14fbca4 Marcello Coutinho
					$advanced .= $input;
791 55c846c4 Marcello Coutinho
				else
792
					echo $input;
793
				break;
794 1624b5f1 Marcello Coutinho
795 55c846c4 Marcello Coutinho
			case "radio":
796 2e606955 Colin Fleming
				$input = "<input type='radio' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' value='{$value}' />";
797 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count))
798
					$advanced .= $input;
799
				else
800
					echo $input;
801
					break;
802 1624b5f1 Marcello Coutinho
803 55c846c4 Marcello Coutinho
			case "button":
804 2e606955 Colin Fleming
				$input = "<input type='submit' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formbtn' value='{$pkga['fieldname']}' />\n";
805 55c846c4 Marcello Coutinho
				if(isset($pkga['placeonbottom']))
806
					$pkg_buttons .= $input;
807
				else
808 91f026b0 ayvis
					echo $input ."\n<br />" . fixup_string($pkga['description']) . "\n";
809 55c846c4 Marcello Coutinho
				break;
810 1624b5f1 Marcello Coutinho
811 c67b75d1 xbipin
			case "schedule_selection":
812
				$input = "<select id='{$pkga['fieldname']}' name='{$pkga['fieldname']}'>\n";
813
				$schedules = array();
814 f55ef2e7 xbipin
				$schedules[] = "none";
815 c67b75d1 xbipin
				if(is_array($config['schedules']['schedule'])) {
816
					foreach ($config['schedules']['schedule'] as $schedule) {
817
						if ($schedule['name'] <> "")
818
							$schedules[] = $schedule['name'];
819
					}
820 c6c71b36 xbipin
				}
821 c67b75d1 xbipin
				foreach($schedules as $schedule) {
822
					$selected = ($value == $schedule ? "selected=\"selected\"" : "");
823
					if($schedule == "none")
824
						$input .= "<option value=\"\" {$selected}>{$schedule}</option>\n";
825
					else
826
						$input .= "<option value=\"{$schedule}\" {$selected}>{$schedule}</option>\n";
827 c6c71b36 xbipin
				}
828 c67b75d1 xbipin
				$input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
829
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
830
					$js_array[] = $pkga['fieldname'];
831
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
832
					$advanced .= "</div>\n";
833 c6c71b36 xbipin
				} else
834 c67b75d1 xbipin
					echo $input;
835
				break;
836
				
837 55c846c4 Marcello Coutinho
			case "rowhelper":
838
				#$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
839
				$rowhelpername="row";
840
				?>
841 befa8be0 Colin Fleming
				<script type="text/javascript">
842
				//<![CDATA[
843 55c846c4 Marcello Coutinho
				<?php
844
					$rowcounter = 0;
845
					$fieldcounter = 0;
846
					foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
847
						echo "rowname[{$fieldcounter}] = \"{$rowhelper['fieldname']}\";\n";
848
						echo "rowtype[{$fieldcounter}] = \"{$rowhelper['type']}\";\n";
849
						echo "rowsize[{$fieldcounter}] = \"{$rowhelper['size']}\";\n";
850
						$fieldcounter++;
851
					}
852
				?>
853 befa8be0 Colin Fleming
				//]]>
854 55c846c4 Marcello Coutinho
				</script>
855 2a83d2bd Colin Fleming
				<table id="maintable" summary="main table">
856 55c846c4 Marcello Coutinho
				<tr id='<?="tr_{$pkga['fieldname']}";?>'>
857
				<?php
858
					foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
859 8612c539 Colin Fleming
					  echo "<td ".domTT_title($rowhelper['description'])."><b>" . fixup_string($rowhelper['fielddescr']) . "</b></td>\n";
860 55c846c4 Marcello Coutinho
					}
861 1624b5f1 Marcello Coutinho
862 55c846c4 Marcello Coutinho
					$rowcounter = 0;
863
					$trc = 0;
864 1624b5f1 Marcello Coutinho
865 55c846c4 Marcello Coutinho
					//Use assigned $a_pkg or create an empty array to enter loop
866
					if(isset($a_pkg[$id][$rowhelpername]))
867
						$saved_rows=$a_pkg[$id][$rowhelpername];
868
					else
869
						$saved_rows[]=array();
870 1624b5f1 Marcello Coutinho
871 55c846c4 Marcello Coutinho
					foreach($saved_rows as $row) {
872
						echo "</tr>\n<tr class=\"sortable\" id=\"id_{$rowcounter}\">\n";
873 31d27c6c Scott Ullrich
						foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
874 0c8cdb25 Warren Baker
							unset($value);
875 31d27c6c Scott Ullrich
							if($rowhelper['value'] <> "") $value = $rowhelper['value'];
876
							$fieldname = $rowhelper['fieldname'];
877
							// if user is editing a record, load in the data.
878 bb940538 Scott Ullrich
							if (isset($id) && $a_pkg[$id]) {
879 7db8ff99 Colin Smith
								$value = $row[$fieldname];
880 bb940538 Scott Ullrich
							}
881 31d27c6c Scott Ullrich
							$options = "";
882
							$type = $rowhelper['type'];
883 55c846c4 Marcello Coutinho
							$description = $rowhelper['description'];
884 31d27c6c Scott Ullrich
							$fieldname = $rowhelper['fieldname'];
885 e54626e2 Ermal Lu?i
							if($type == "option")
886
								$options = &$rowhelper['options']['option'];
887 7e542bd1 Scott Ullrich
							if($rowhelper['size']) 
888 4c09b655 Scott Ullrich
								$size = $rowhelper['size'];
889 e54626e2 Ermal Lu?i
							else if ($pkga['size'])
890
								$size = $pkga['size'];
891 4c09b655 Scott Ullrich
							else
892
								$size = "8";
893 e70e0b76 Scott Ullrich
							display_row($rowcounter, $value, $fieldname, $type, $rowhelper, $size);
894 1624b5f1 Marcello Coutinho
895 bb940538 Scott Ullrich
							$text = "";
896
							$trc++;
897 55c846c4 Marcello Coutinho
							}
898 31d27c6c Scott Ullrich
						$rowcounter++;
899
						echo "<td>";
900 befa8be0 Colin Fleming
						#echo "<a onclick=\"removeRow(this); return false;\" href=\"#\"><img border=\"0\" src=\"./themes/".$g['theme']."/images/icons/icon_x.gif\" alt=\"remove\" /></a>";
901
						echo "<a class='delete' href=\"#\"><img border='0' src='./themes/{$g['theme']}/images/icons/icon_x.gif' alt='delete' /></a>";
902 eec70f21 Scott Ullrich
						echo "</td>\n";
903 55c846c4 Marcello Coutinho
						}
904
				?>
905 81ecdc6c Colin Fleming
				</tr>
906 55c846c4 Marcello Coutinho
				<tbody></tbody>
907
				</table>
908
	
909 8cd558b6 ayvis
				<!-- <br /><a onclick="javascript:addRowTo('maintable'); return false;" href="#"><img border="0" src="./themes/<?#= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>-->
910
				<br /><a class="add" href="#"><img border="0" src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>
911
				<br /><?php if($pkga['description'] != "") echo $pkga['description']; ?>
912 befa8be0 Colin Fleming
				<script type="text/javascript">
913
				//<![CDATA[
914 55c846c4 Marcello Coutinho
				field_counter_js = <?= $fieldcounter ?>;
915
				rows = <?= $rowcounter ?>;
916
				totalrows = <?php echo $rowcounter; ?>;
917
				loaded = <?php echo $rowcounter; ?>;
918
				//typesel_change();
919 befa8be0 Colin Fleming
				//]]>
920 55c846c4 Marcello Coutinho
				</script>
921
		
922
				<?php
923
				break;
924
		    }
925
		#check typehint value
926
	   	if($pkga['typehint'])
927
	   		echo " " . $pkga['typehint'];
928
	   	#check combinefields options
929
     	if (isset($pkga['combinefields'])){
930
     		$input="</td>";
931
			if ($pkga['combinefields']=="end")
932
           		$input.="</table></td></tr>";
933
      		}
934
     	else{
935
			$input= "</td></tr>";
936
			if($pkga['usecolspan2'])
937 8cd558b6 ayvis
				$input.= "</tr><br />";
938 55c846c4 Marcello Coutinho
	     	}
939
   	 	if(isset($pkga['advancedfield']) && isset($adv_filed_count))
940
			$advanced .= "{$input}\n";
941
		else
942
			echo "{$input}\n";
943
		#increment counter
944
		$i++;
945
  		}
946
947
  	#print advanced settings if any after reading all fields
948
	if (isset($advanced) && $adv_filed_count > 0)
949
		echo $advanced;
950
  
951
	?>
952 b6e87566 Scott Ullrich
  <tr>
953
	<td>&nbsp;</td>
954
  </tr>
955 d47013e1 Scott Ullrich
  <tr>
956
    <td width="22%" valign="top">&nbsp;</td>
957
    <td width="78%">
958 2e606955 Colin Fleming
    <div id="buttons">
959 55c846c4 Marcello Coutinho
		<?php
960
		if($pkg['note'] != ""){
961
			echo "<p><span class=\"red\"><strong>" . gettext("Note") . ":</strong></span> {$pkg['note']}</p>";
962
			}
963
		//if (isset($id) && $a_pkg[$id]) // We'll always have a valid ID in our hands
964 605ae553 Renato Botelho
		echo "<input name='id' type='hidden' value=\"" . htmlspecialchars($id) . "\" />";
965
		echo "<input name='Submit' type='submit' class='formbtn' value=\"" . htmlspecialchars($savevalue) . "\" />\n{$pkg_buttons}\n";
966 55c846c4 Marcello Coutinho
		if (!$only_edit){
967 62424bdb Renato Botelho
			echo "<input class=\"formbtn\" type=\"button\" value=\"".gettext("Cancel")."\" onclick=\"window.location.href='" . $_SERVER['HTTP_REFERER'] . "'\" />";
968 55c846c4 Marcello Coutinho
			}
969
		?>
970
	</div>
971 d47013e1 Scott Ullrich
    </td>
972
  </tr>
973 55c846c4 Marcello Coutinho
974 e11aa161 Warren Baker
</table>
975 098686af bcyrill
</div></td></tr>
976 d47013e1 Scott Ullrich
</table>
977 7c172009 Scott Ullrich
</form>
978 7c061036 Scott Ullrich
979 7c172009 Scott Ullrich
<?php if ($pkg['custom_php_after_form_command']) eval($pkg['custom_php_after_form_command']); ?>
980 95736b54 Scott Ullrich
981 e11aa161 Warren Baker
<?php
982
	/* JavaScript to handle the advanced fields. */
983 d92b3311 Warren Baker
	if ($pkg['advanced_options'] == "enabled") {
984 e11aa161 Warren Baker
		echo "<script type=\"text/javascript\">\n";
985 befa8be0 Colin Fleming
		echo "//<![CDATA[\n";
986 e11aa161 Warren Baker
		foreach($js_array as $advfieldname) {
987
			echo "function show_" . $advfieldname . "() {\n";
988 55c846c4 Marcello Coutinho
			echo "\tjQuery('#showadv_{$advfieldname}').empty();\n";
989
			echo "\tjQuery('#show_{$advfieldname}').css('display', 'block');\n";
990 e11aa161 Warren Baker
			echo "}\n\n";
991
		}
992 befa8be0 Colin Fleming
		echo "//]]>\n";
993 e11aa161 Warren Baker
		echo "</script>\n";
994
	}
995
?>
996
997 d47013e1 Scott Ullrich
<?php include("fend.inc"); ?>
998
</body>
999
</html>
1000
1001 31d27c6c Scott Ullrich
<?php
1002
/*
1003
 * ROW Helpers function
1004
 */
1005 e70e0b76 Scott Ullrich
function display_row($trc, $value, $fieldname, $type, $rowhelper, $size) {
1006 db3829e1 Scott Ullrich
	global $text, $config;
1007 31d27c6c Scott Ullrich
	echo "<td>\n";
1008 55c846c4 Marcello Coutinho
	switch($type){
1009
		case "input":
1010 605ae553 Renato Botelho
			echo "<input size='{$size}' name='{$fieldname}{$trc}' id='{$fieldname}{$trc}' class='formfld unknown' value=\"" . htmlspecialchars($value) . "\" />\n";
1011 55c846c4 Marcello Coutinho
			break;
1012
		case "checkbox":
1013 2e606955 Colin Fleming
			echo "<input size='{$size}' type='checkbox' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' value='ON' ".($value?"CHECKED":"")." />\n";
1014 55c846c4 Marcello Coutinho
			break;
1015
		case "password":
1016 605ae553 Renato Botelho
			echo "<input size='{$size}' type='password' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
1017 55c846c4 Marcello Coutinho
			break;
1018
		case "textarea":
1019
			echo "<textarea rows='2' cols='12' id='{$fieldname}{$trc}' class='formfld unknown' name='{$fieldname}{$trc}'>{$value}</textarea>\n";
1020
		case "select":
1021
			echo "<select style='height:22px;'  id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$title}>\n";
1022
			foreach($rowhelper['options']['option'] as $rowopt) {
1023
				$text .= "<option value='{$rowopt['value']}'>{$rowopt['name']}</option>";
1024 2e606955 Colin Fleming
				echo "<option value='{$rowopt['value']}'".($rowopt['value'] == $value?" selected=\"selected\"":"").">{$rowopt['name']}</option>\n";
1025 55c846c4 Marcello Coutinho
				}
1026
			echo "</select>\n";
1027
			break;
1028
		case "interfaces_selection":
1029 85a46fbd whizkidzz
			$size = ($size ? "size=\"{$size}\"" : '');
1030
			$multiple = '';
1031
			if (isset($rowhelper['multiple'])) {
1032
				$fieldname .= '[]';
1033 5655d48b Colin Fleming
				$multiple = "multiple=\"multiple\"";
1034 85a46fbd whizkidzz
			}
1035 504a57b2 Charlie Root
			echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$size} {$multiple}>\n";
1036 85a46fbd whizkidzz
			$ifaces = get_configured_interface_with_descr();
1037
			$additional_ifaces = $rowhelper['add_to_interfaces_selection'];
1038
			if (!empty($additional_ifaces))
1039
				$ifaces = array_merge($ifaces, explode(',', $additional_ifaces));
1040
			if(is_array($value))
1041
				$values = $value;
1042
			else
1043
				$values  =  explode(',',  $value);
1044
			$ifaces["lo0"] = "loopback";
1045
			echo "<option><name></name><value></value></option>/n";
1046
			foreach($ifaces as $ifname => $iface) {
1047 5655d48b Colin Fleming
				$text .="<option value=\"{$ifname}\">$iface</option>";
1048 2e606955 Colin Fleming
				echo "<option value=\"{$ifname}\" ".(in_array($ifname, $values) ? 'selected="selected"' : '').">{$iface}</option>\n";
1049 55c846c4 Marcello Coutinho
				}
1050 85a46fbd whizkidzz
			echo "</select>\n";
1051 55c846c4 Marcello Coutinho
			break;
1052
		case "select_source":
1053 504a57b2 Charlie Root
			echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}'>\n";
1054
			if(isset($rowhelper['show_disable_value']))
1055
				echo "<option value='{$rowhelper['show_disable_value']}'>{$rowhelper['show_disable_value']}</option>\n";
1056 55c846c4 Marcello Coutinho
			$source_url = $rowhelper['source'];
1057
			eval("\$pkg_source_txt = &$source_url;");
1058
			foreach($pkg_source_txt as $opt) {
1059
				$source_name = ($rowhelper['source_name'] ? $opt[$rowhelper['source_name']] : $opt[$rowhelper['name']]);
1060
				$source_value = ($rowhelper['source_value'] ? $opt[$rowhelper['source_value']] : $opt[$rowhelper['value']]);
1061
				$text .= "<option value='{$source_value}'>{$source_name}</option>";
1062 2e606955 Colin Fleming
				echo "<option value='{$source_value}'".($source_value == $value?" selected=\"selected\"":"").">{$source_name}</option>\n";
1063 55c846c4 Marcello Coutinho
				}
1064
			echo "</select>\n";
1065
			break;		
1066 db3829e1 Scott Ullrich
		}
1067 8612c539 Colin Fleming
	echo "</td>\n";
1068 31d27c6c Scott Ullrich
}
1069
1070 d51f86e0 Scott Ullrich
function fixup_string($string) {
1071 d2133701 Scott Ullrich
	global $config;
1072 d51f86e0 Scott Ullrich
	// fixup #1: $myurl -> http[s]://ip_address:port/
1073
	$https = "";
1074
	$port = $config['system']['webguiport'];
1075 63637de9 Bill Marquette
	if($port <> "443" and $port <> "80")
1076
		$urlport = ":" . $port;
1077
	else
1078
		$urlport = "";
1079 3c616886 Scott Ullrich
1080 58362f9d jim-p
	if($config['system']['webgui']['protocol'] == "https") $https = "s";
1081 63637de9 Bill Marquette
	$myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport;
1082 d51f86e0 Scott Ullrich
	$newstring = str_replace("\$myurl", $myurl, $string);
1083 d2133701 Scott Ullrich
	$string = $newstring;
1084
	// fixup #2: $wanip
1085 85a5da13 Ermal Luçi
	$curwanip = get_interface_ip();
1086 d2133701 Scott Ullrich
	$newstring = str_replace("\$wanip", $curwanip, $string);
1087
	$string = $newstring;
1088
	// fixup #3: $lanip
1089
	$lancfg = $config['interfaces']['lan'];
1090
	$lanip = $lancfg['ipaddr'];
1091
	$newstring = str_replace("\$lanip", $lanip, $string);
1092
	$string = $newstring;
1093
	// fixup #4: fix'r'up here.
1094 d51f86e0 Scott Ullrich
	return $newstring;
1095
}
1096
1097 dcbe6f52 Scott Ullrich
/*
1098
 *  Parse templates if they are defined
1099
 */
1100
function parse_package_templates() {
1101
	global $pkg, $config;
1102 767a716e Scott Ullrich
	$rows = 0;
1103 dcbe6f52 Scott Ullrich
	if($pkg['templates']['template'] <> "")
1104
	    foreach($pkg['templates']['template'] as $pkg_template_row) {
1105 55c846c4 Marcello Coutinho
			$filename = $pkg_template_row['filename'];
1106
			$template_text = $pkg_template_row['templatecontents'];
1107
			$firstfield = "";
1108
			/* calculate total row helpers count and */
1109
			/* change fields defined as fieldname_fieldvalue to their value */
1110
			foreach ($pkg['fields']['field'] as $fields) {
1111
				switch($fields['type']){
1112
					case "rowhelper":
1113
					// save rowhelper items.
1114
					$row_helper_total_rows = 0;
1115
					$row_helper_data = "";
1116
					foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield)
1117
						foreach($_POST as $key => $value){
1118
							if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/",$key,$matches)){
1119
								$row_helper_total_rows++;
1120
								$row_helper_data .= $value;
1121
								$sep = "";
1122
								ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep);
1123 5aa68a55 Renato Botelho
								foreach ($sep as $se) $separator = $se;
1124
								if($separator <> "") {
1125
							    	$row_helper_data = ereg_replace("  ", $separator, $row_helper_data);
1126
							    	$template_text = ereg_replace("\[{$separator}\]", "", $template_text);
1127 55c846c4 Marcello Coutinho
									}
1128
								$template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text);
1129
								}
1130
							}
1131
					break;
1132
				default:
1133
					$fieldname  = $fields['fieldname'];
1134
					$fieldvalue = $_POST[$fieldname];
1135
					$template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
1136 dcbe6f52 Scott Ullrich
				}
1137
			}
1138
		/* replace $domain_total_rows with total rows */
1139
		$template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text);
1140 1624b5f1 Marcello Coutinho
1141 dcbe6f52 Scott Ullrich
		/* replace cr's */
1142
		$template_text = str_replace("\\n", "\n", $template_text);
1143
1144
		/* write out new template file */
1145
		$fout = fopen($filename,"w");
1146
		fwrite($fout, $template_text);
1147
		fclose($fout);
1148
	    }
1149
}
1150
1151 e11aa161 Warren Baker
/* Return html div fields */
1152
function display_advanced_field($fieldname) {
1153 55c846c4 Marcello Coutinho
	$div = "<div id='showadv_{$fieldname}'>\n";
1154 2e606955 Colin Fleming
	$div .= "<input type='button' onclick='show_{$fieldname}()' value='" . gettext("Advanced") . "' /> - " . gettext("Show advanced option") ."</div>\n";
1155 55c846c4 Marcello Coutinho
	$div .= "<div id='show_{$fieldname}' style='display:none'>\n";
1156 e11aa161 Warren Baker
	return $div;
1157
}
1158
1159 b89a8cbc bruno
?>