Project

General

Profile

Download (40.7 KB) Statistics
| Branch: | Tag: | Revision:
1 d47013e1 Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 d47013e1 Scott Ullrich
/*
4
    pkg_edit.php
5 d961e7e3 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 4520b2d2 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 f6014228 Phil Davis
		$colspan="";
473 55c846c4 Marcello Coutinho
		if (isset($pkga['dontdisplayname'])){
474
			$input="";
475 bec3f925 Phil Davis
			// If this is in a set of combined fields and;
476
			// - it is a "begin" (case already handled above) or
477
			// - usecolspan2 is in effect (so we want to spread all the combined fields horizontally)
478
			// then we do not want this "tr" to be inserted.
479
			// Thus only insert the "tr" if the not (!) of the above condition.
480
			if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) {
481 55c846c4 Marcello Coutinho
				$input .= "<tr valign='top' id='tr_{$pkga['fieldname']}'>";
482 bec3f925 Phil Davis
			}
483 55c846c4 Marcello Coutinho
			if(isset($pkga['usecolspan2']))
484
				$colspan="colspan='2'";
485
			else
486
				$input .= "<td width='22%' class='vncell{$req}'>&nbsp;</td>";
487
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
488
				$advanced .= $input;
489
				$adv_filed_count++;
490
				}
491
			else
492
				echo $input;
493
			}
494
		else if (!isset($pkga['placeonbottom'])){
495 e11aa161 Warren Baker
			unset($req);
496
			if (isset($pkga['required']))
497
				$req = 'req';
498 e3167a84 Phil Davis
			$input="";
499 bec3f925 Phil Davis
			// If this is in a set of combined fields and;
500
			// - it is a "begin" (case already handled above) or
501
			// - usecolspan2 is in effect (so we want to spread all the combined fields horizontally)
502
			// then we do not want this "tr" to be inserted.
503
			// Thus only insert the "tr" if the not (!) of the above condition.
504
			if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) {
505 e3167a84 Phil Davis
				$input .= "<tr>";
506
			}
507
			$input .= "<td valign='top' width=\"22%\" class=\"vncell{$req}\">";
508 55c846c4 Marcello Coutinho
			$input .= fixup_string($pkga['fielddescr']);
509
			$input .= "</td>";
510
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
511
				$advanced .= $input;
512
				$adv_filed_count++;
513
				}
514
			else 
515
				echo $input;
516 e11aa161 Warren Baker
		}
517 55c846c4 Marcello Coutinho
		if($pkga['combinefields']=="begin"){
518 e3167a84 Phil Davis
			$input="<td class=\"vncell\"><table summary=\"advanced\"><tr>";
519 55c846c4 Marcello Coutinho
			if(isset($pkga['advancedfield']) && isset($adv_filed_count))
520
				$advanced .= $input;
521
			else
522
			  	echo $input;
523
			}
524 1624b5f1 Marcello Coutinho
525 55c846c4 Marcello Coutinho
		$class=(isset($pkga['combinefields']) ? '' : 'class="vtable"');
526
		if (!isset($pkga['placeonbottom'])){
527
			$input="<td valign='top' {$colspan} {$class}>";
528
			if(isset($pkga['advancedfield']) && isset($adv_filed_count)){
529
				$advanced .= $input;
530
				$adv_filed_count++;
531
				}
532 e11aa161 Warren Baker
			else
533 55c846c4 Marcello Coutinho
				echo $input;
534
		}
535 1624b5f1 Marcello Coutinho
536 31d27c6c Scott Ullrich
		// if user is editing a record, load in the data.
537 7c172009 Scott Ullrich
		$fieldname = $pkga['fieldname'];
538 fbd14b13 Scott Ullrich
		if ($get_from_post) {
539 7c172009 Scott Ullrich
			$value = $_POST[$fieldname];
540 fbd14b13 Scott Ullrich
			if (is_array($value)) $value = implode(',', $value);
541 e11aa161 Warren Baker
		} else {
542 91c31339 Warren Baker
			if (isset($id) && $a_pkg[$id])
543 7c172009 Scott Ullrich
				$value = $a_pkg[$id][$fieldname];
544 b91540da Scott Ullrich
			else
545
				$value = $pkga['default_value'];
546 31d27c6c Scott Ullrich
		}
547 55c846c4 Marcello Coutinho
		switch($pkga['type']){
548
			case "input":
549
				$size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
550 605ae553 Renato Botelho
				$input = "<input {$size} id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formfld unknown' value=\"" . htmlspecialchars($value) ."\" />\n";
551 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
552 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
553
					$js_array[] = $pkga['fieldname'];
554
					$advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
555
					}
556
				else
557
					echo $input;
558
				break;
559 1624b5f1 Marcello Coutinho
560 55c846c4 Marcello Coutinho
			case "password":
561
				$size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
562 605ae553 Renato Botelho
				$input = "<input " . $size . " id='" . $pkga['fieldname'] . "' type='password' name='" . $pkga['fieldname'] . "' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
563 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
564 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
565
					$js_array[] = $pkga['fieldname'];
566
					$advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
567
					}
568
				else
569
					echo $input;
570
				break;
571 1624b5f1 Marcello Coutinho
572 55c846c4 Marcello Coutinho
			case "info":
573
				$input = fixup_string($pkga['description']) . "\n";
574
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
575
					$js_array[] = $pkga['fieldname'];
576
					$advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
577
					}
578
				else
579
					echo $input;
580
				break;
581 1624b5f1 Marcello Coutinho
582 55c846c4 Marcello Coutinho
			case "select":
583
				$fieldname = $pkga['fieldname'];
584
				if (isset($pkga['multiple'])) {
585
					$multiple = 'multiple="multiple"';
586
					$items = explode(',', $value);
587
					$fieldname .= "[]";
588
				} else {
589
					$multiple = '';
590
					$items = array($value);
591 e11aa161 Warren Baker
				}
592 55c846c4 Marcello Coutinho
				$size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
593
				$onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
594 2e606955 Colin Fleming
				$input = "<select id='" . $pkga['fieldname'] . "' $multiple $size $onchange name=\"$fieldname\">\n";
595 e11aa161 Warren Baker
				foreach ($pkga['options']['option'] as $opt) {
596 55c846c4 Marcello Coutinho
					$selected = (in_array($opt['value'], $items) ? 'selected="selected"' : '');
597 2e606955 Colin Fleming
					$input .= "\t<option value=\"{$opt['value']}\" {$selected}>{$opt['name']}</option>\n";
598 55c846c4 Marcello Coutinho
					}
599
				$input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
600
                if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
601
					$js_array[] = $pkga['fieldname'];
602
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
603
					$advanced .= "</div>\n";
604
					}
605
				else
606
					echo $input;
607
				break;
608 1624b5f1 Marcello Coutinho
609 55c846c4 Marcello Coutinho
			case "select_source":
610
				$fieldname = $pkga['fieldname'];
611
				if (isset($pkga['multiple'])) {
612
					$multiple = 'multiple="multiple"';
613
					$items = explode(',', $value);
614
					$fieldname .= "[]";
615 e11aa161 Warren Baker
				} else {
616 55c846c4 Marcello Coutinho
					$multiple = '';
617
					$items = array($value);
618 e11aa161 Warren Baker
				}
619 55c846c4 Marcello Coutinho
				$size = (isset($pkga['size']) ? "size=\"{$pkga['size']}\"" : '');
620
				$onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
621 2e606955 Colin Fleming
				$input = "<select id='{$pkga['fieldname']}' {$multiple} {$size} {$onchange} name=\"{$fieldname}\">\n";
622 55c846c4 Marcello Coutinho
623
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
624
					$js_array[] = $pkga['fieldname'];
625
					$advanced .= display_advanced_field($pkga['fieldname']) .$input;
626
					$advanced .= "</div>\n";
627 e11aa161 Warren Baker
				} else {
628 55c846c4 Marcello Coutinho
					echo $input;
629 e11aa161 Warren Baker
				}
630 55c846c4 Marcello Coutinho
				$source_url = $pkga['source'];
631
				eval("\$pkg_source_txt = &$source_url;");
632 1624b5f1 Marcello Coutinho
				$input="";
633 504a57b2 Charlie Root
				#check if show disable option is present on xml
634
				if(isset($pkga['show_disable_value'])){
635
					array_push($pkg_source_txt, array(($pkga['source_name']? $pkga['source_name'] : $pkga['name'])=> $pkga['show_disable_value'],
636
													  ($pkga['source_value']? $pkga['source_value'] : $pkga['value'])=> $pkga['show_disable_value']));
637
					}
638 55c846c4 Marcello Coutinho
				foreach ($pkg_source_txt as $opt) {
639
					$source_name =($pkga['source_name']? $opt[$pkga['source_name']] : $opt[$pkga['name']]);
640
					$source_value =($pkga['source_value'] ? $opt[$pkga['source_value']] : $opt[$pkga['value']]);
641
					$selected = (in_array($source_value, $items)? 'selected="selected"' : '' );
642 2e606955 Colin Fleming
					$input  .= "\t<option value=\"{$source_value}\" $selected>{$source_name}</option>\n";
643 55c846c4 Marcello Coutinho
					}
644 1624b5f1 Marcello Coutinho
				$input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
645
				if(isset($pkga['advancedfield']) && isset($adv_filed_count))
646
					$advanced .= $input;
647
				else
648
					echo $input;
649 55c846c4 Marcello Coutinho
				break;
650 1624b5f1 Marcello Coutinho
651 55c846c4 Marcello Coutinho
			case "vpn_selection" :
652
				$input = "<select id='{$pkga['fieldname']}' name='{$vpn['name']}'>\n";
653 e11aa161 Warren Baker
				foreach ($config['ipsec']['phase1'] as $vpn) {
654 55c846c4 Marcello Coutinho
					$input .= "\t<option value=\"{$vpn['descr']}\">{$vpn['descr']}</option>\n";
655
					}
656
				$input .= "</select>\n";
657 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
658 55c846c4 Marcello Coutinho
659
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
660
					$js_array[] = $pkga['fieldname'];
661
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
662
					$advanced .= "</div>\n";
663
					}
664
				else
665
					echo $input;
666
				break;
667 1624b5f1 Marcello Coutinho
668 55c846c4 Marcello Coutinho
			case "checkbox":
669 2e606955 Colin Fleming
				$checkboxchecked =($value == "on" ? " checked=\"checked\"" : "");
670 cfa845a9 Luiz Gustavo Costa (gugabsd)
				$onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
671 55c846c4 Marcello Coutinho
				if (isset($pkga['enablefields']) || isset($pkga['checkenablefields']))
672
					$onclick = ' onclick="javascript:enablechange();"';
673 2e606955 Colin Fleming
				$input = "<input id='{$pkga['fieldname']}' type='checkbox' name='{$pkga['fieldname']}' {$checkboxchecked} {$onclick} {$onchange} />\n";
674 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
675 55c846c4 Marcello Coutinho
676
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
677
					$js_array[] = $pkga['fieldname'];
678
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
679
					$advanced .= "</div>\n";
680
					}
681
				else
682
					echo $input;
683
				break;
684 1624b5f1 Marcello Coutinho
685 55c846c4 Marcello Coutinho
			case "textarea":
686
				if($pkga['rows'])
687
					$rows = " rows='{$pkga['rows']}' ";
688
				if($pkga['cols'])
689
					$cols = " cols='{$pkga['cols']}' ";
690
				if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value))
691
					$value = base64_decode($value);
692
				$wrap =($pkga['wrap'] == "off" ? 'wrap="off" style="white-space:nowrap;"' : '');		  
693
				$input = "<textarea {$rows} {$cols} name='{$pkga['fieldname']}'{$wrap}>{$value}</textarea>\n";
694 8cd558b6 ayvis
				$input .= "<br />" . fixup_string($pkga['description']) . "\n";
695 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count)) {
696
					$js_array[] = $pkga['fieldname'];
697
					$advanced .= display_advanced_field($pkga['fieldname']).$input;
698
					$advanced .= "</div>\n";
699
					}
700
				else
701
					echo $input;
702
				break;
703 b89a8cbc bruno
704
			case "aliases":
705
				// Use xml tag <typealiases> to filter type aliases
706
				$size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
707
				$fieldname = $pkga['fieldname'];
708
				$a_aliases = &$config['aliases']['alias'];
709
				$addrisfirst = 0;
710
				$aliasesaddr = "";
711
				$value = "value='{$value}'";
712
713
				if(isset($a_aliases)) {
714
					if(!empty($pkga['typealiases'])) {
715
						foreach($a_aliases as $alias)
716
							if($alias['type'] == $pkga['typealiases']) {
717
								if($addrisfirst == 1) $aliasesaddr .= ",";
718
								$aliasesaddr .= "'" . $alias['name'] . "'";
719
								$addrisfirst = 1;
720
							}
721
					} else {
722
						foreach($a_aliases as $alias) {
723
							if($addrisfirst == 1) $aliasesaddr .= ",";
724
							$aliasesaddr .= "'" . $alias['name'] . "'";
725
							$addrisfirst = 1;
726
						}
727
					}
728
				}
729
730 2e606955 Colin Fleming
				$input = "<input name='{$fieldname}' type='text' class='formfldalias' id='{$fieldname}' {$size} {$value} />\n<br />";
731 b89a8cbc bruno
				$input .= fixup_string($pkga['description']) . "\n";
732
733
				$script = "<script type='text/javascript'>\n";
734 8df076fe Colin Fleming
				$script .= "//<![CDATA[\n";
735 b89a8cbc bruno
				$script .= "var aliasarray = new Array({$aliasesaddr})\n";
736
				$script .= "var oTextbox1 = new AutoSuggestControl(document.getElementById('{$fieldname}'), new StateSuggestions(aliasarray))\n";
737 befa8be0 Colin Fleming
				$script .= "//]]>\n";
738 b89a8cbc bruno
				$script .= "</script>";
739
740
				echo $input;
741
				echo $script;
742
                                break;
743
744 55c846c4 Marcello Coutinho
			case "interfaces_selection":
745 e14fbca4 Marcello Coutinho
				$ips=array();
746
				$interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide");
747
				if (is_array($config['interfaces']))
748
					foreach ($config['interfaces'] as $iface_key=>$iface_value){
749
						if (isset($iface_value['enable']) && ! preg_match("/$interface_regex/",$iface_key)){
750 2d9063af ccesario
							$iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key));
751
							if (isset($pkga['showips']))
752
								$iface_description .= " address";
753 e14fbca4 Marcello Coutinho
							$ips[]=array('ip'=> $iface_key, 'description'=> $iface_description);
754
							}
755
					}
756
				if (is_array($config['virtualip']) && isset($pkga['showvirtualips']))
757
					foreach ($config['virtualip']['vip'] as $vip){
758
						if (! preg_match("/$interface_regex/",$vip['interface']))
759
						$vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " ");
760
						  switch ($vip['mode']){
761
							case "ipalias":
762
							case "carp":
763
									$ips[]=array(   'ip'=> $vip['subnet'],'description' => "{$vip['subnet']} $vip_description");
764
								break;
765
							case "proxyarp":
766
								if ($vip['type']=="network"){
767
									$start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits']));
768
									$end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits']));
769
									$len = $end - $start;
770
									for ($i = 0; $i <= $len; $i++)
771
										$ips[]= array('ip'=>long2ip32($start+$i),'description'=> long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}");
772
									}
773
								else{
774
									$ips[]= array('ip'=>$vip['subnet'],'description'=> "{$vip['subnet']} $vip_description");
775
									}
776
								break;
777
							}
778
					}
779
				sort($ips);
780
				if (isset($pkga['showlistenall']))
781
					array_unshift($ips,array('ip'=> 'All', 'description'=> 'Listen on All interfaces/ip addresses '));
782
				if (! preg_match("/$interface_regex/","loopback")){
783
					$iface_description=(isset($pkga['showips']) ? "127.0.0.1 (loopback)" : "loopback");
784
					array_push($ips,array('ip'=> 'lo0', 'description'=> $iface_description));
785
					}
786
787
				#show interfaces array on gui
788 55c846c4 Marcello Coutinho
				$size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
789
				$multiple = '';
790
				$fieldname = $pkga['fieldname'];
791
				if (isset($pkga['multiple'])) {
792
					$fieldname .= '[]';
793 2e606955 Colin Fleming
					$multiple = 'multiple="multiple"';
794 e14fbca4 Marcello Coutinho
					}
795 55c846c4 Marcello Coutinho
				$input = "<select id='{$pkga['fieldname']}' name=\"{$fieldname}\" {$size} {$multiple}>\n";
796
				if(is_array($value))
797
					$values = $value;
798 e11aa161 Warren Baker
				else
799 55c846c4 Marcello Coutinho
					$values  =  explode(',',  $value);
800 e14fbca4 Marcello Coutinho
				foreach($ips as $iface){
801 2e606955 Colin Fleming
					$selected = (in_array($iface['ip'], $values) ? 'selected="selected"' : '');
802 e14fbca4 Marcello Coutinho
					$input .= "<option value=\"{$iface['ip']}\" {$selected}>{$iface['description']}</option>\n";
803
					}
804
				$input .= "</select>\n<br />" . fixup_string($pkga['description']) . "\n";
805 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count))
806 e14fbca4 Marcello Coutinho
					$advanced .= $input;
807 55c846c4 Marcello Coutinho
				else
808
					echo $input;
809
				break;
810 1624b5f1 Marcello Coutinho
811 55c846c4 Marcello Coutinho
			case "radio":
812 2e606955 Colin Fleming
				$input = "<input type='radio' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' value='{$value}' />";
813 55c846c4 Marcello Coutinho
				if(isset($pkga['advancedfield']) && isset($adv_filed_count))
814
					$advanced .= $input;
815
				else
816
					echo $input;
817
					break;
818 1624b5f1 Marcello Coutinho
819 55c846c4 Marcello Coutinho
			case "button":
820 2e606955 Colin Fleming
				$input = "<input type='submit' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formbtn' value='{$pkga['fieldname']}' />\n";
821 55c846c4 Marcello Coutinho
				if(isset($pkga['placeonbottom']))
822
					$pkg_buttons .= $input;
823
				else
824 91f026b0 ayvis
					echo $input ."\n<br />" . fixup_string($pkga['description']) . "\n";
825 55c846c4 Marcello Coutinho
				break;
826 1624b5f1 Marcello Coutinho
827 55c846c4 Marcello Coutinho
			case "rowhelper":
828
				#$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
829
				$rowhelpername="row";
830
				?>
831 befa8be0 Colin Fleming
				<script type="text/javascript">
832
				//<![CDATA[
833 55c846c4 Marcello Coutinho
				<?php
834
					$rowcounter = 0;
835
					$fieldcounter = 0;
836
					foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
837
						echo "rowname[{$fieldcounter}] = \"{$rowhelper['fieldname']}\";\n";
838
						echo "rowtype[{$fieldcounter}] = \"{$rowhelper['type']}\";\n";
839
						echo "rowsize[{$fieldcounter}] = \"{$rowhelper['size']}\";\n";
840
						$fieldcounter++;
841
					}
842
				?>
843 befa8be0 Colin Fleming
				//]]>
844 55c846c4 Marcello Coutinho
				</script>
845 2a83d2bd Colin Fleming
				<table id="maintable" summary="main table">
846 55c846c4 Marcello Coutinho
				<tr id='<?="tr_{$pkga['fieldname']}";?>'>
847
				<?php
848
					foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
849 8612c539 Colin Fleming
					  echo "<td ".domTT_title($rowhelper['description'])."><b>" . fixup_string($rowhelper['fielddescr']) . "</b></td>\n";
850 55c846c4 Marcello Coutinho
					}
851 1624b5f1 Marcello Coutinho
852 55c846c4 Marcello Coutinho
					$rowcounter = 0;
853
					$trc = 0;
854 1624b5f1 Marcello Coutinho
855 55c846c4 Marcello Coutinho
					//Use assigned $a_pkg or create an empty array to enter loop
856
					if(isset($a_pkg[$id][$rowhelpername]))
857
						$saved_rows=$a_pkg[$id][$rowhelpername];
858
					else
859
						$saved_rows[]=array();
860 1624b5f1 Marcello Coutinho
861 55c846c4 Marcello Coutinho
					foreach($saved_rows as $row) {
862
						echo "</tr>\n<tr class=\"sortable\" id=\"id_{$rowcounter}\">\n";
863 31d27c6c Scott Ullrich
						foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
864 0c8cdb25 Warren Baker
							unset($value);
865 31d27c6c Scott Ullrich
							if($rowhelper['value'] <> "") $value = $rowhelper['value'];
866
							$fieldname = $rowhelper['fieldname'];
867
							// if user is editing a record, load in the data.
868 bb940538 Scott Ullrich
							if (isset($id) && $a_pkg[$id]) {
869 7db8ff99 Colin Smith
								$value = $row[$fieldname];
870 bb940538 Scott Ullrich
							}
871 31d27c6c Scott Ullrich
							$options = "";
872
							$type = $rowhelper['type'];
873 55c846c4 Marcello Coutinho
							$description = $rowhelper['description'];
874 31d27c6c Scott Ullrich
							$fieldname = $rowhelper['fieldname'];
875 e54626e2 Ermal Lu?i
							if($type == "option")
876
								$options = &$rowhelper['options']['option'];
877 7e542bd1 Scott Ullrich
							if($rowhelper['size']) 
878 4c09b655 Scott Ullrich
								$size = $rowhelper['size'];
879 e54626e2 Ermal Lu?i
							else if ($pkga['size'])
880
								$size = $pkga['size'];
881 4c09b655 Scott Ullrich
							else
882
								$size = "8";
883 e70e0b76 Scott Ullrich
							display_row($rowcounter, $value, $fieldname, $type, $rowhelper, $size);
884 1624b5f1 Marcello Coutinho
885 bb940538 Scott Ullrich
							$text = "";
886
							$trc++;
887 55c846c4 Marcello Coutinho
							}
888 31d27c6c Scott Ullrich
						$rowcounter++;
889
						echo "<td>";
890 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>";
891
						echo "<a class='delete' href=\"#\"><img border='0' src='./themes/{$g['theme']}/images/icons/icon_x.gif' alt='delete' /></a>";
892 eec70f21 Scott Ullrich
						echo "</td>\n";
893 55c846c4 Marcello Coutinho
						}
894
				?>
895 81ecdc6c Colin Fleming
				</tr>
896 55c846c4 Marcello Coutinho
				<tbody></tbody>
897
				</table>
898
	
899 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>-->
900
				<br /><a class="add" href="#"><img border="0" src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>
901
				<br /><?php if($pkga['description'] != "") echo $pkga['description']; ?>
902 befa8be0 Colin Fleming
				<script type="text/javascript">
903
				//<![CDATA[
904 55c846c4 Marcello Coutinho
				field_counter_js = <?= $fieldcounter ?>;
905
				rows = <?= $rowcounter ?>;
906
				totalrows = <?php echo $rowcounter; ?>;
907
				loaded = <?php echo $rowcounter; ?>;
908
				//typesel_change();
909 befa8be0 Colin Fleming
				//]]>
910 55c846c4 Marcello Coutinho
				</script>
911
		
912
				<?php
913
				break;
914
		    }
915
		#check typehint value
916
	   	if($pkga['typehint'])
917
	   		echo " " . $pkga['typehint'];
918
	   	#check combinefields options
919
     	if (isset($pkga['combinefields'])){
920 bec3f925 Phil Davis
			// At the end of each combined-fields field we always want to end a td tag.
921 f6014228 Phil Davis
			$input = "</td>";
922 bec3f925 Phil Davis
			// The tr tag end is used to end the whole set of combined fields,
923
			// but also if usecolspan2 is not in effect then we also put each combined field in its own tr.
924
			if (($pkga['combinefields'] == "end") || (!isset($pkga['usecolspan2']))) {
925
           		$input.="</tr>";
926
			}
927
			// At the end of the combined fields we finish up the table that encloses the combined fields...
928
			if ($pkga['combinefields'] == "end") {
929
           		$input.="</table></td></tr>";
930
			}
931 55c846c4 Marcello Coutinho
      		}
932
     	else{
933 f6014228 Phil Davis
			$input = "</td></tr>";
934 55c846c4 Marcello Coutinho
			if($pkga['usecolspan2'])
935 8cd558b6 ayvis
				$input.= "</tr><br />";
936 55c846c4 Marcello Coutinho
	     	}
937
   	 	if(isset($pkga['advancedfield']) && isset($adv_filed_count))
938
			$advanced .= "{$input}\n";
939
		else
940
			echo "{$input}\n";
941
		#increment counter
942
		$i++;
943
  		}
944
945
  	#print advanced settings if any after reading all fields
946
	if (isset($advanced) && $adv_filed_count > 0)
947
		echo $advanced;
948
  
949
	?>
950 b6e87566 Scott Ullrich
  <tr>
951
	<td>&nbsp;</td>
952
  </tr>
953 d47013e1 Scott Ullrich
  <tr>
954
    <td width="22%" valign="top">&nbsp;</td>
955
    <td width="78%">
956 2e606955 Colin Fleming
    <div id="buttons">
957 55c846c4 Marcello Coutinho
		<?php
958
		if($pkg['note'] != ""){
959
			echo "<p><span class=\"red\"><strong>" . gettext("Note") . ":</strong></span> {$pkg['note']}</p>";
960
			}
961
		//if (isset($id) && $a_pkg[$id]) // We'll always have a valid ID in our hands
962 605ae553 Renato Botelho
		echo "<input name='id' type='hidden' value=\"" . htmlspecialchars($id) . "\" />";
963
		echo "<input name='Submit' type='submit' class='formbtn' value=\"" . htmlspecialchars($savevalue) . "\" />\n{$pkg_buttons}\n";
964 55c846c4 Marcello Coutinho
		if (!$only_edit){
965 62424bdb Renato Botelho
			echo "<input class=\"formbtn\" type=\"button\" value=\"".gettext("Cancel")."\" onclick=\"window.location.href='" . $_SERVER['HTTP_REFERER'] . "'\" />";
966 55c846c4 Marcello Coutinho
			}
967
		?>
968
	</div>
969 d47013e1 Scott Ullrich
    </td>
970
  </tr>
971 55c846c4 Marcello Coutinho
972 e11aa161 Warren Baker
</table>
973 098686af bcyrill
</div></td></tr>
974 d47013e1 Scott Ullrich
</table>
975 7c172009 Scott Ullrich
</form>
976 7c061036 Scott Ullrich
977 7c172009 Scott Ullrich
<?php if ($pkg['custom_php_after_form_command']) eval($pkg['custom_php_after_form_command']); ?>
978 95736b54 Scott Ullrich
979 e11aa161 Warren Baker
<?php
980
	/* JavaScript to handle the advanced fields. */
981 d92b3311 Warren Baker
	if ($pkg['advanced_options'] == "enabled") {
982 e11aa161 Warren Baker
		echo "<script type=\"text/javascript\">\n";
983 befa8be0 Colin Fleming
		echo "//<![CDATA[\n";
984 e11aa161 Warren Baker
		foreach($js_array as $advfieldname) {
985
			echo "function show_" . $advfieldname . "() {\n";
986 55c846c4 Marcello Coutinho
			echo "\tjQuery('#showadv_{$advfieldname}').empty();\n";
987
			echo "\tjQuery('#show_{$advfieldname}').css('display', 'block');\n";
988 e11aa161 Warren Baker
			echo "}\n\n";
989
		}
990 befa8be0 Colin Fleming
		echo "//]]>\n";
991 e11aa161 Warren Baker
		echo "</script>\n";
992
	}
993
?>
994
995 d47013e1 Scott Ullrich
<?php include("fend.inc"); ?>
996
</body>
997
</html>
998
999 31d27c6c Scott Ullrich
<?php
1000
/*
1001
 * ROW Helpers function
1002
 */
1003 e70e0b76 Scott Ullrich
function display_row($trc, $value, $fieldname, $type, $rowhelper, $size) {
1004 db3829e1 Scott Ullrich
	global $text, $config;
1005 31d27c6c Scott Ullrich
	echo "<td>\n";
1006 55c846c4 Marcello Coutinho
	switch($type){
1007
		case "input":
1008 605ae553 Renato Botelho
			echo "<input size='{$size}' name='{$fieldname}{$trc}' id='{$fieldname}{$trc}' class='formfld unknown' value=\"" . htmlspecialchars($value) . "\" />\n";
1009 55c846c4 Marcello Coutinho
			break;
1010
		case "checkbox":
1011 2e606955 Colin Fleming
			echo "<input size='{$size}' type='checkbox' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' value='ON' ".($value?"CHECKED":"")." />\n";
1012 55c846c4 Marcello Coutinho
			break;
1013
		case "password":
1014 605ae553 Renato Botelho
			echo "<input size='{$size}' type='password' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
1015 55c846c4 Marcello Coutinho
			break;
1016
		case "textarea":
1017
			echo "<textarea rows='2' cols='12' id='{$fieldname}{$trc}' class='formfld unknown' name='{$fieldname}{$trc}'>{$value}</textarea>\n";
1018
		case "select":
1019
			echo "<select style='height:22px;'  id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$title}>\n";
1020
			foreach($rowhelper['options']['option'] as $rowopt) {
1021
				$text .= "<option value='{$rowopt['value']}'>{$rowopt['name']}</option>";
1022 2e606955 Colin Fleming
				echo "<option value='{$rowopt['value']}'".($rowopt['value'] == $value?" selected=\"selected\"":"").">{$rowopt['name']}</option>\n";
1023 55c846c4 Marcello Coutinho
				}
1024
			echo "</select>\n";
1025
			break;
1026
		case "interfaces_selection":
1027 85a46fbd whizkidzz
			$size = ($size ? "size=\"{$size}\"" : '');
1028
			$multiple = '';
1029
			if (isset($rowhelper['multiple'])) {
1030
				$fieldname .= '[]';
1031 5655d48b Colin Fleming
				$multiple = "multiple=\"multiple\"";
1032 85a46fbd whizkidzz
			}
1033 504a57b2 Charlie Root
			echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$size} {$multiple}>\n";
1034 85a46fbd whizkidzz
			$ifaces = get_configured_interface_with_descr();
1035
			$additional_ifaces = $rowhelper['add_to_interfaces_selection'];
1036
			if (!empty($additional_ifaces))
1037
				$ifaces = array_merge($ifaces, explode(',', $additional_ifaces));
1038
			if(is_array($value))
1039
				$values = $value;
1040
			else
1041
				$values  =  explode(',',  $value);
1042
			$ifaces["lo0"] = "loopback";
1043
			echo "<option><name></name><value></value></option>/n";
1044
			foreach($ifaces as $ifname => $iface) {
1045 5655d48b Colin Fleming
				$text .="<option value=\"{$ifname}\">$iface</option>";
1046 2e606955 Colin Fleming
				echo "<option value=\"{$ifname}\" ".(in_array($ifname, $values) ? 'selected="selected"' : '').">{$iface}</option>\n";
1047 55c846c4 Marcello Coutinho
				}
1048 85a46fbd whizkidzz
			echo "</select>\n";
1049 55c846c4 Marcello Coutinho
			break;
1050
		case "select_source":
1051 504a57b2 Charlie Root
			echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}'>\n";
1052
			if(isset($rowhelper['show_disable_value']))
1053
				echo "<option value='{$rowhelper['show_disable_value']}'>{$rowhelper['show_disable_value']}</option>\n";
1054 55c846c4 Marcello Coutinho
			$source_url = $rowhelper['source'];
1055
			eval("\$pkg_source_txt = &$source_url;");
1056
			foreach($pkg_source_txt as $opt) {
1057
				$source_name = ($rowhelper['source_name'] ? $opt[$rowhelper['source_name']] : $opt[$rowhelper['name']]);
1058
				$source_value = ($rowhelper['source_value'] ? $opt[$rowhelper['source_value']] : $opt[$rowhelper['value']]);
1059
				$text .= "<option value='{$source_value}'>{$source_name}</option>";
1060 2e606955 Colin Fleming
				echo "<option value='{$source_value}'".($source_value == $value?" selected=\"selected\"":"").">{$source_name}</option>\n";
1061 55c846c4 Marcello Coutinho
				}
1062
			echo "</select>\n";
1063
			break;		
1064 db3829e1 Scott Ullrich
		}
1065 8612c539 Colin Fleming
	echo "</td>\n";
1066 31d27c6c Scott Ullrich
}
1067
1068 d51f86e0 Scott Ullrich
function fixup_string($string) {
1069 d2133701 Scott Ullrich
	global $config;
1070 d51f86e0 Scott Ullrich
	// fixup #1: $myurl -> http[s]://ip_address:port/
1071
	$https = "";
1072
	$port = $config['system']['webguiport'];
1073 63637de9 Bill Marquette
	if($port <> "443" and $port <> "80")
1074
		$urlport = ":" . $port;
1075
	else
1076
		$urlport = "";
1077 3c616886 Scott Ullrich
1078 58362f9d jim-p
	if($config['system']['webgui']['protocol'] == "https") $https = "s";
1079 63637de9 Bill Marquette
	$myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport;
1080 d51f86e0 Scott Ullrich
	$newstring = str_replace("\$myurl", $myurl, $string);
1081 d2133701 Scott Ullrich
	$string = $newstring;
1082
	// fixup #2: $wanip
1083 85a5da13 Ermal Luçi
	$curwanip = get_interface_ip();
1084 d2133701 Scott Ullrich
	$newstring = str_replace("\$wanip", $curwanip, $string);
1085
	$string = $newstring;
1086
	// fixup #3: $lanip
1087
	$lancfg = $config['interfaces']['lan'];
1088
	$lanip = $lancfg['ipaddr'];
1089
	$newstring = str_replace("\$lanip", $lanip, $string);
1090
	$string = $newstring;
1091
	// fixup #4: fix'r'up here.
1092 d51f86e0 Scott Ullrich
	return $newstring;
1093
}
1094
1095 dcbe6f52 Scott Ullrich
/*
1096
 *  Parse templates if they are defined
1097
 */
1098
function parse_package_templates() {
1099
	global $pkg, $config;
1100 767a716e Scott Ullrich
	$rows = 0;
1101 dcbe6f52 Scott Ullrich
	if($pkg['templates']['template'] <> "")
1102
	    foreach($pkg['templates']['template'] as $pkg_template_row) {
1103 55c846c4 Marcello Coutinho
			$filename = $pkg_template_row['filename'];
1104
			$template_text = $pkg_template_row['templatecontents'];
1105
			$firstfield = "";
1106
			/* calculate total row helpers count and */
1107
			/* change fields defined as fieldname_fieldvalue to their value */
1108
			foreach ($pkg['fields']['field'] as $fields) {
1109
				switch($fields['type']){
1110
					case "rowhelper":
1111
					// save rowhelper items.
1112
					$row_helper_total_rows = 0;
1113
					$row_helper_data = "";
1114
					foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield)
1115
						foreach($_POST as $key => $value){
1116
							if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/",$key,$matches)){
1117
								$row_helper_total_rows++;
1118
								$row_helper_data .= $value;
1119
								$sep = "";
1120
								ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep);
1121 5aa68a55 Renato Botelho
								foreach ($sep as $se) $separator = $se;
1122
								if($separator <> "") {
1123
							    	$row_helper_data = ereg_replace("  ", $separator, $row_helper_data);
1124
							    	$template_text = ereg_replace("\[{$separator}\]", "", $template_text);
1125 55c846c4 Marcello Coutinho
									}
1126
								$template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text);
1127
								}
1128
							}
1129
					break;
1130
				default:
1131
					$fieldname  = $fields['fieldname'];
1132
					$fieldvalue = $_POST[$fieldname];
1133
					$template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
1134 dcbe6f52 Scott Ullrich
				}
1135
			}
1136
		/* replace $domain_total_rows with total rows */
1137
		$template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text);
1138 1624b5f1 Marcello Coutinho
1139 dcbe6f52 Scott Ullrich
		/* replace cr's */
1140
		$template_text = str_replace("\\n", "\n", $template_text);
1141
1142
		/* write out new template file */
1143
		$fout = fopen($filename,"w");
1144
		fwrite($fout, $template_text);
1145
		fclose($fout);
1146
	    }
1147
}
1148
1149 e11aa161 Warren Baker
/* Return html div fields */
1150
function display_advanced_field($fieldname) {
1151 55c846c4 Marcello Coutinho
	$div = "<div id='showadv_{$fieldname}'>\n";
1152 2e606955 Colin Fleming
	$div .= "<input type='button' onclick='show_{$fieldname}()' value='" . gettext("Advanced") . "' /> - " . gettext("Show advanced option") ."</div>\n";
1153 55c846c4 Marcello Coutinho
	$div .= "<div id='show_{$fieldname}' style='display:none'>\n";
1154 e11aa161 Warren Baker
	return $div;
1155
}
1156
1157 b89a8cbc bruno
?>