Project

General

Profile

Download (19.7 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
    pkg.php
5
    Copyright (C) 2013-2014 Electric Sheep Fencing, LP
6
    Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
7
    Copyright (C) 2013-2014 Electric Sheep Fencing, LP
8
    All rights reserved.
9

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

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

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

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

    
35
##|+PRIV
36
##|*IDENT=page-package-settings
37
##|*NAME=Package: Settings page
38
##|*DESCR=Allow access to the 'Package: Settings' page.
39
##|*MATCH=pkg.php*
40
##|-PRIV
41

    
42
require_once("guiconfig.inc");
43
require_once("pkg-utils.inc");
44

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

    
50
function domTT_title($title_msg){
51
	print "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '".gettext($title_msg)."', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
52
}
53

    
54
$xml = $_REQUEST['xml'];
55

    
56
if($xml == "") {
57
	print_info_box_np(gettext("ERROR: No package defined."));
58
	exit;
59
} else {
60
	if(file_exists("/usr/local/pkg/" . $xml))
61
		$pkg = parse_xml_config_pkg("/usr/local/pkg/" . $xml, "packagegui");
62
	else {
63
		echo "File not found " . htmlspecialchars($xml);
64
		exit;
65
	}
66
}
67

    
68
if($pkg['donotsave'] <> "") {
69
	header("Location: pkg_edit.php?xml=" . $xml);
70
	exit;
71
}
72

    
73
if ($pkg['include_file'] != "") {
74
	require_once($pkg['include_file']);
75
}
76

    
77
$package_name = $pkg['menu'][0]['name'];
78
$section      = $pkg['menu'][0]['section'];
79
$config_path  = $pkg['configpath'];
80
$title	      = $pkg['title'];
81

    
82
if($_REQUEST['startdisplayingat']) 
83
	$startdisplayingat = $_REQUEST['startdisplayingat'];
84

    
85
if($_REQUEST['display_maximum_rows']) 
86
	if($_REQUEST['display_maximum_rows'])
87
		$display_maximum_rows = $_REQUEST['display_maximum_rows'];
88

    
89
$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
90

    
91
if ($_GET['act'] == "update") {
92
		
93
		if(is_array($config['installedpackages'][$pkg['name']]) && $pkg['name'] != "" && $_REQUEST['ids'] !=""){
94
			#get current values
95
			$current_values=$config['installedpackages'][$pkg['name']]['config'];
96
			#get updated ids
97
			parse_str($_REQUEST['ids'], $update_list);
98
			#sort ids to know what to change
99
			#usefull to do not loose data when using sorting and paging
100
			$sort_list=$update_list['ids'];
101
			sort($sort_list);
102
			#apply updates
103
			foreach($update_list['ids'] as $key=> $value){
104
				$config['installedpackages'][$pkg['name']]['config'][$sort_list[$key]]=$current_values[$update_list['ids'][$key]];
105
				}
106
			#save current config
107
			write_config();
108
			#sync package
109
			eval ("{$pkg['custom_php_resync_config_command']}");
110
			}
111
		#function called via jquery, no need to continue after save changes.
112
		exit;
113
}
114
if ($_GET['act'] == "del") {
115
		// loop through our fieldnames and automatically setup the fieldnames
116
		// in the environment.  ie: a fieldname of username with a value of
117
		// testuser would automatically eval $username = "testuser";
118
		foreach ($evaledvar as $ip) {
119
			if($pkg['adddeleteeditpagefields']['columnitem'])
120
			  foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
121
				  ${xml_safe_fieldname($column['fielddescr'])} = $ip[xml_safe_fieldname($column['fieldname'])];
122
			  }
123
		}
124

    
125
		$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
126

    
127
		if ($a_pkg[$_GET['id']]) {
128
			unset($a_pkg[$_GET['id']]);
129
			write_config();
130
			if($pkg['custom_delete_php_command'] <> "") {
131
			    if($pkg['custom_php_command_before_form'] <> "")
132
					eval($pkg['custom_php_command_before_form']);
133
		    		eval($pkg['custom_delete_php_command']);
134
			}
135
			header("Location:  pkg.php?xml=" . $xml);
136
			exit;
137
	    }
138
}
139

    
140
ob_start();
141

    
142
$iflist = get_configured_interface_with_descr(false, true);
143
$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
144

    
145
if($pkg['custom_php_global_functions'] <> "")
146
	eval($pkg['custom_php_global_functions']);
147

    
148
if($pkg['custom_php_command_before_form'] <> "")
149
	eval($pkg['custom_php_command_before_form']);
150

    
151
$pgtitle = array($title);
152
include("head.inc");
153

    
154
?>
155

    
156
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
157
<?php include("fbegin.inc"); ?>
158
<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
159
<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
160
<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
161
<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
162
<script type="text/javascript">
163
//<![CDATA[
164
	function setFilter(filtertext) {
165
		jQuery('#pkg_filter').val(filtertext);
166
		document.pkgform.submit();
167
    }
168

    
169
	<?php
170
		if($pkg['adddeleteeditpagefields']['movable']){
171
	?>
172
			jQuery(document).ready(function(){
173
				jQuery('#mainarea table tbody').sortable({
174
					items: 'tr.sortable',
175
					cursor: 'move',
176
					distance: 10,
177
					opacity: 0.8,
178
					helper: function(e,ui){  
179
						ui.children().each(function(){  
180
							jQuery(this).width(jQuery(this).width());  
181
						});
182
					return ui;  
183
					},
184
				});
185
			});
186
			function save_changes_to_xml(xml) {
187
					var ids=jQuery('#mainarea table tbody').sortable('serialize',{key:"ids[]"});
188
					var strloading="<img src='/themes/<?= $g['theme']; ?>/images/misc/loader.gif' alt='loader' /> " +  "<?=gettext('Saving changes...');?>";
189
					if(confirm("<?=gettext("Do you really want to save changes?");?>")){
190
						jQuery.ajax({
191
							type: 'get',
192
							cache: false,
193
							url: "<?=$_SERVER['SCRIPT_NAME'];?>",
194
							data: {xml:'<?=$xml?>', act:'update', ids: ids},
195
							beforeSend: function(){
196
						        jQuery('#savemsg').empty().html(strloading);
197
							},
198
							error: function(data){
199
        						jQuery('#savemsg').empty().html('Error:' + data);
200
   							 },
201
							success: function(data){
202
        						jQuery('#savemsg').empty().html(data);
203
   							 }
204
						});
205
					}
206
			}
207
	<?php 
208
		}
209
	?>
210
//]]>
211
</script>
212
<form action="pkg.php" name="pkgform" method="get">
213
<input type='hidden' name='xml' value='<?=$_REQUEST['xml']?>' />
214
<?php if($_GET['savemsg'] <> "") $savemsg = htmlspecialchars($_GET['savemsg']); ?>
215
<div id="savemsg"></div>
216
<?php if ($savemsg) print_info_box($savemsg); ?>
217
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package settings">
218
<?php
219
if ($pkg['tabs'] <> "") {
220
    $tab_array = array();
221
    foreach($pkg['tabs']['tab'] as $tab) {
222
        if($tab['tab_level'])
223
            $tab_level = $tab['tab_level'];
224
        else
225
            $tab_level = 1;
226
        if(isset($tab['active'])) {
227
            $active = true;
228
        } else {
229
            $active = false;
230
        }
231
		if(isset($tab['no_drop_down']))
232
			$no_drop_down = true;
233
        $urltmp = "";
234
        if($tab['url'] <> "") $urltmp = $tab['url'];
235
        if($tab['xml'] <> "") $urltmp = "pkg_edit.php?xml=" . $tab['xml'];
236

    
237
        $addresswithport = getenv("HTTP_HOST");
238
        $colonpos = strpos($addresswithport, ":");
239
        if ($colonpos !== False) {
240
            //my url is actually just the IP address of the pfsense box
241
            $myurl = substr($addresswithport, 0, $colonpos);
242
        } else {
243
            $myurl = $addresswithport;
244
        }
245
        // eval url so that above $myurl item can be processed if need be.
246
        $url = str_replace('$myurl', $myurl, $urltmp);
247

    
248
        $tab_array[$tab_level][] = array(
249
                        $tab['text'],
250
                        $active,
251
                        $url
252
                    );
253
    }
254

    
255
    ksort($tab_array);
256
    foreach($tab_array as $tab) {
257
		echo '<tr><td>';
258
		display_top_tabs($tab, $no_drop_down);
259
        echo '</td></tr>';
260
    }
261
}
262
?>
263
<tr><td><div id="mainarea"><table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
264
	<tr>
265
		<td class="tabcont">
266
			<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabs">
267
<?php
268
				/* Handle filtering bar A-Z */				
269
				$include_filtering_inputbox = false;
270
				$colspan = 0;
271
				if($pkg['adddeleteeditpagefields']['columnitem'] <> "") 
272
					foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column)
273
						$colspan++;
274
				if($pkg['fields']['field']) {
275
					// First find the sorting type field if it exists
276
					foreach($pkg['fields']['field'] as $field) {
277
						if($field['type'] == "sorting") {
278
							if(isset($field['include_filtering_inputbox'])) 
279
								$include_filtering_inputbox = true;
280
							if($display_maximum_rows < 1) 
281
								if($field['display_maximum_rows']) 
282
									$display_maximum_rows = $field['display_maximum_rows'];
283
							echo "<tr><td class='listhdrr' colspan='$colspan' align='center'>";
284
							echo "Filter by: ";
285
							$isfirst = true;
286
							for($char = 65; $char < 91; $char++) {
287
								if(!$isfirst) 
288
									echo " | ";
289
								echo "<a href=\"#\" onclick=\"setFilter('" . chr($char) . "');\">" . chr($char) . "</a>";
290
								$isfirst = false;
291
							}
292
							echo "</td></tr>";
293
							echo "<tr><td class='listhdrr' colspan='$colspan' align='center'>";
294
							if($field['sortablefields']) {
295
								echo "Filter field: <select name='pkg_filter_type'>";
296
								foreach($field['sortablefields']['item'] as $si) {
297
									if($si['name'] == $_REQUEST['pkg_filter_type']) 
298
										$SELECTED = "selected=\"selected\"";
299
									else 
300
										$SELECTED = "";
301
									echo "<option value='{$si['name']}' {$SELECTED}>{$si['name']}</option>";
302
								}
303
								echo "</select>";
304
							}
305
							if($include_filtering_inputbox) 
306
								echo "&nbsp;&nbsp;Filter text: <input id='pkg_filter' name='pkg_filter' value='" . $_REQUEST['pkg_filter'] . "' /> <input type='submit' value='Filter' />";
307
							echo "</td></tr><tr><td><font size='-3'>&nbsp;</font></td></tr>";
308
						}
309
					}
310
				}
311
?>
312
				<tr>
313
<?php
314
				if($display_maximum_rows) {
315
					$totalpages = ceil(round((count($evaledvar) / $display_maximum_rows),9));
316
					$page = 1;
317
					$tmpcount = 0;
318
					$tmppp = 0;
319
					if(is_array($evaledvar)) {
320
						foreach ($evaledvar as $ipa) {
321
							if($tmpcount == $display_maximum_rows) {
322
								$page++;
323
								$tmpcount = 0;
324
							}
325
							if($tmppp == $startdisplayingat)
326
						 		break;
327
							$tmpcount++;
328
							$tmppp++;
329
						}
330
					}
331
					echo "<tr><td colspan='" . count($pkg['adddeleteeditpagefields']['columnitem']) . "'>";
332
					echo "<table width='100%' summary=''>";
333
					echo "<tr>";
334
					echo "<td align='left'>Displaying page $page of $totalpages</b></td>";
335
					echo "<td align='right'>Rows per page: <select onchange='document.pkgform.submit();' name='display_maximum_rows'>";
336
					for($x=0; $x<250; $x++) {
337
						if($x == $display_maximum_rows)
338
							$SELECTED = "selected=\"selected\"";
339
						else 
340
							$SELECTED = "";
341
						echo "<option value='$x' $SELECTED>$x</option>\n";
342
						$x=$x+4;
343
					}
344
					echo "</select></td></tr>";
345
					echo "</table>";
346
					echo "</td></tr>";
347
				}
348
				$cols = 0;
349
				if($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
350
				    foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
351
						echo "<td class=\"listhdrr\">" . $column['fielddescr'] . "</td>";
352
						$cols++;
353
				    }
354
				}
355
				echo "</tr>";
356
				$i=0;
357
				$pagination_startingrow=0;
358
				$pagination_counter=0;
359
			    if($evaledvar)
360
			    foreach ($evaledvar as $ip) {
361
				if($startdisplayingat) {
362
					if($i < $startdisplayingat) {
363
						$i++;
364
						continue;
365
					}
366
				}
367
				if($_REQUEST['pkg_filter']) {
368
					// Handle filterered items
369
					if($pkg['fields']['field'] && !$filter_regex) {
370
						// First find the sorting type field if it exists
371
						foreach($pkg['fields']['field'] as $field) {
372
							if($field['type'] == "sorting") {
373
								if($field['sortablefields']['item']) {
374
									foreach($field['sortablefields']['item'] as $sf) {
375
										if($sf['name'] == $_REQUEST['pkg_filter_type']) {
376
											$filter_fieldname = $sf['fieldname'];
377
											#Use a default regex on sortable fields when none is declared
378
											if($sf['regex'])
379
												$filter_regex = str_replace("%FILTERTEXT%", $_REQUEST['pkg_filter'], trim($sf['regex']));
380
											else
381
												$filter_regex = "/{$_REQUEST['pkg_filter']}/i";
382
										}
383
									}
384
								}
385
							}
386
						}
387
					}
388
					// Do we have something to filter on?
389
					unset($filter_matches);
390
					if($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
391
						foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
392
							$fieldname = $ip[xml_safe_fieldname($column['fieldname'])];
393
							if($column['fieldname'] == $filter_fieldname) {
394
								if($filter_regex) {
395
									//echo "$filter_regex - $fieldname<p/>";
396
									preg_match($filter_regex, $fieldname, $filter_matches);
397
									break;
398
								}
399
							}
400
						}
401
					}
402
					if(!$filter_matches) {
403
						$i++;
404
						continue;
405
					}
406
				}
407
				if($pkg['adddeleteeditpagefields']['movable'])
408
					echo "<tr valign=\"top\" class=\"sortable\" id=\"id_{$i}\">\n";
409
				else
410
					echo "<tr valign=\"top\">\n";
411
				if($pkg['adddeleteeditpagefields']['columnitem'] <> "")
412
					foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
413
						if ($column['fieldname'] == "description")
414
							$class = "listbg";
415
						else
416
							$class = "listlr";
417
?>
418
						<td class="<?=$class;?>" ondblclick="document.location='pkg_edit.php?xml=<?=$xml?>&amp;act=edit&amp;id=<?=$i;?>';">
419
							<?php
420
								$fieldname = $ip[xml_safe_fieldname($column['fieldname'])];
421
								#Check if columnitem has a type field declared
422
							    if($column['type'] == "checkbox") {
423
									if($fieldname == "") {
424
								    	echo gettext("No");
425
									} else {
426
								    	echo gettext("Yes");
427
									}
428
							    } else if ($column['type'] == "interface") {
429
									echo  $column['prefix'] . $iflist[$fieldname] . $column['suffix'];
430
							    } else {
431
							    	#Check if columnitem has an encoding field declared
432
							    	if ($column['encoding'] == "base64")
433
										echo  $column['prefix'] . base64_decode($fieldname) . $column['suffix'];
434
									#Check if there is a custom info to show when $fieldname is not empty
435
									else if($column['listmodeon'] && $fieldname != "")
436
								   		echo $column['prefix'] . gettext($column['listmodeon']). $column['suffix'];
437
								   	#Check if there is a custom info to show when $fieldname is empty	
438
								   	else if($column['listmodeoff'] && $fieldname == "")
439
								    	echo $column['prefix'] .gettext($column['listmodeoff']). $column['suffix'];
440
									else
441
										echo $column['prefix'] . $fieldname ." ". $column['suffix'];
442
							    }
443
							?>
444
						</td>
445
<?php
446
					}
447
?>
448
				<td valign="middle" class="list nowrap">
449
				<table border="0" cellspacing="0" cellpadding="1" summary="icons">
450
				<tr>
451
				<?php
452
				#Show custom description to edit button if defined
453
				$edit_msg=($pkg['adddeleteeditpagefields']['edittext']?$pkg['adddeleteeditpagefields']['edittext']:"Edit this item");?>
454
				<td valign="middle"><a href="pkg_edit.php?xml=<?=$xml?>&amp;act=edit&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" <?=domTT_title($edit_msg)?> alt="edit" /></a></td>
455
				<?php
456
				#Show custom description to delete button if defined
457
				$delete_msg=($pkg['adddeleteeditpagefields']['deletetext']?$pkg['adddeleteeditpagefields']['deletetext']:"Delete this item");?>
458
				<td valign="middle"><a href="pkg.php?xml=<?=$xml?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this item?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" <?=domTT_title($delete_msg)?> alt="delete" /></a></td>
459
				</tr>
460
				</table>
461
				</td>
462
<?php
463
				echo "</tr>\n";
464
				// Handle pagination and display_maximum_rows
465
				if($display_maximum_rows) {
466
					if($pagination_counter == ($display_maximum_rows-1) or 
467
					   $i ==  (count($evaledvar)-1)) {
468
						$colcount = count($pkg['adddeleteeditpagefields']['columnitem']);
469
						$final_footer = "";
470
						$final_footer .= "<tr><td colspan='$colcount'>";
471
						$final_footer .=  "<table width='100%' summary=''><tr>";
472
						$final_footer .=  "<td align='left'>";
473
						$startingat = $startdisplayingat - $display_maximum_rows;
474
						if($startingat > -1) {
475
							$final_footer .=  "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat={$startingat}&amp;display_maximum_rows={$display_maximum_rows}'>";
476
						} else {
477
							if($startingnat > 1) 
478
								$final_footer .=  "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat=0&amp;display_maximum_rows={$display_maximum_rows}'>";
479
						}
480
						$final_footer .=  "<font size='2'><< Previous page</font></a>";
481
						if($tmppp + $display_maximum_rows > count($evaledvar)) 
482
							$endingrecord = count($evaledvar);
483
						else 
484
							$endingrecord = $tmppp + $display_maximum_rows;
485
						$final_footer .=  "</td><td align='center'>";
486
						$tmppp++;
487
						$final_footer .=  "<font size='2'>Displaying {$tmppp} - {$endingrecord} / " . count($evaledvar) . " records";
488
						$final_footer .=  "</font></td><td align='right'>&nbsp;";
489
						if(($i+1) < count($evaledvar))
490
							$final_footer .=  "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat=" . ($startdisplayingat + $display_maximum_rows) . "&amp;display_maximum_rows={$display_maximum_rows}'>";
491
						$final_footer .=  "<font size='2'>Next page >></font></a>";	
492
						$final_footer .=  "</td></tr></table></td></tr>";
493
						$i = count($evaledvar);
494
						break;
495
					}
496
				}
497
				$i++;
498
				$pagination_counter++;
499
			    }
500
?>
501
				<tr>
502
					<td colspan="<?=$cols?>"></td>
503
					<td>
504
						<table border="0" cellspacing="0" cellpadding="1" summary="icons">
505
							<tr>
506
								<?php
507
								#Show custom description to add button if defined
508
								$add_msg=($pkg['adddeleteeditpagefields']['addtext']?$pkg['adddeleteeditpagefields']['addtext']:"Add a new item");?>
509
								<td valign="middle"><a href="pkg_edit.php?xml=<?=$xml?>&amp;id=<?=$i?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=domTT_title($add_msg)?> alt="add" /></a></td>
510
								<?php
511
								#Show description button and info if defined
512
								if($pkg['adddeleteeditpagefields']['description']){?>
513
								<td valign="middle"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_info_pkg.gif" width="17" height="17" border="0" <?=domTT_title($pkg['adddeleteeditpagefields']['description'])?> alt="info" /></td>
514
								<?php }?>
515
							</tr>
516
						</table>
517
					</td>
518
				</tr>
519
				<?=$final_footer?>
520
				<?php
521
				#Show save button only when movable is defined
522
				if($pkg['adddeleteeditpagefields']['movable']){?>
523
				<tr><td><input class="formbtn" type="button" value="Save" name="Submit" onclick="save_changes_to_xml('<?=$xml?>')" /></td></tr>
524
				<?php }?>
525
		</table>
526
	</td>
527
</tr>
528
</table>
529
</div></td></tr></table>
530

    
531
</form>
532
<?php include("fend.inc"); ?>
533

    
534
<?php
535
	echo "<!-- filter_fieldname: {$filter_fieldname} -->";
536
	echo "<!-- filter_regex: {$filter_regex} -->";
537
?>
538

    
539
</body>
540
</html>
(130-130/256)