diff options
author | Renato Botelho <renato@netgate.com> | 2015-08-25 08:08:24 -0300 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2015-08-25 14:49:54 -0300 |
commit | 46bc6e545a17e77202aaf01ec0cd8d5a46567525 (patch) | |
tree | 32d18dda436ec739c67c489ceb771e8629cd926f /usr/local/www/pkg_edit.php | |
parent | 4d9801c2dbd2b3e54a39578ee62b93af66607227 (diff) | |
download | pfsense-46bc6e545a17e77202aaf01ec0cd8d5a46567525.zip pfsense-46bc6e545a17e77202aaf01ec0cd8d5a46567525.tar.gz |
Move main pfSense content to src/
Diffstat (limited to 'usr/local/www/pkg_edit.php')
-rw-r--r-- | usr/local/www/pkg_edit.php | 1267 |
1 files changed, 0 insertions, 1267 deletions
diff --git a/usr/local/www/pkg_edit.php b/usr/local/www/pkg_edit.php deleted file mode 100644 index 0b01a28..0000000 --- a/usr/local/www/pkg_edit.php +++ /dev/null @@ -1,1267 +0,0 @@ -<?php -/* $Id$ */ -/* - pkg_edit.php - Copyright (C) 2013-2015 Electric Sheep Fencing, LP - Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com> - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ -/* - pfSense_BUILDER_BINARIES: /sbin/ifconfig - pfSense_MODULE: pkgs -*/ - -##|+PRIV -##|*IDENT=page-package-edit -##|*NAME=Package: Edit page -##|*DESCR=Allow access to the 'Package: Edit' page. -##|*MATCH=pkg_edit.php* -##|-PRIV - -ini_set('max_execution_time', '0'); - -require("guiconfig.inc"); -require_once("functions.inc"); -require_once("filter.inc"); -require_once("shaper.inc"); -require_once("pkg-utils.inc"); - -/* dummy stubs needed by some code that was MFC'd */ -function pfSenseHeader($location) { - header("Location: " . $location); -} - -function gentitle_pkg($pgname) { - global $pfSense_config; - return $pfSense_config['system']['hostname'] . "." . $pfSense_config['system']['domain'] . " - " . $pgname; -} - -function domTT_title($title_msg) { - if (!empty($title_msg)) { - $title_msg = preg_replace("/\s+/", " ", $title_msg); - $title_msg = preg_replace("/'/", "\'", $title_msg); - 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');\""; - } -} - -$xml = htmlspecialchars($_GET['xml']); -if ($_POST['xml']) { - $xml = htmlspecialchars($_POST['xml']); -} - -$xml_fullpath = realpath('/usr/local/pkg/' . $xml); - -if ($xml == "" || $xml_fullpath === false || - substr($xml_fullpath, 0, strlen('/usr/local/pkg/')) != '/usr/local/pkg/') { - print_info_box_np(gettext("ERROR: No valid package defined.")); - die; -} else { - $pkg = parse_xml_config_pkg($xml_fullpath, "packagegui"); -} - -if ($pkg['include_file'] <> "") { - require_once($pkg['include_file']); -} - -if (!isset($pkg['adddeleteeditpagefields'])) { - $only_edit = true; -} else { - $only_edit = false; -} - -$package_name = $pkg['menu'][0]['name']; -$section = $pkg['menu'][0]['section']; -$config_path = $pkg['configpath']; -$name = $pkg['name']; -$title = $pkg['title']; -$pgtitle = $title; - -$id = $_GET['id']; -if (isset($_POST['id'])) { - $id = htmlspecialchars($_POST['id']); -} - -// Not posting? Then user is editing a record. There must be a valid id -// when editing a record. -if (!$id && !$_POST) { - $id = "0"; -} - -if (!is_numeric($id)) { - header("Location: /"); - exit; -} - -if ($pkg['custom_php_global_functions'] <> "") { - eval($pkg['custom_php_global_functions']); -} - -// grab the installedpackages->package_name section. -if ($config['installedpackages'] && !is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'])) { - $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array(); -} - -// If the first entry in the array is an empty <config/> tag, kill it. -if ($config['installedpackages'] && (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0) - && ($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0] == "")) { - array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']); -} - -$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']; - -if ($_GET['savemsg'] <> "") { - $savemsg = htmlspecialchars($_GET['savemsg']); -} - -if ($pkg['custom_php_command_before_form'] <> "") { - eval($pkg['custom_php_command_before_form']); -} - -if ($_POST) { - $firstfield = ""; - $rows = 0; - - $input_errors = array(); - $reqfields = array(); - $reqfieldsn = array(); - foreach ($pkg['fields']['field'] as $field) { - if (($field['type'] == 'input') && isset($field['required'])) { - if ($field['fieldname']) { - $reqfields[] = $field['fieldname']; - } - if ($field['fielddescr']) { - $reqfieldsn[] = $field['fielddescr']; - } - } - } - do_input_validation($_POST, $reqfields, $reqfieldsn, $input_errors); - - if ($pkg['custom_php_validation_command']) { - eval($pkg['custom_php_validation_command']); - } - - if ($_POST['act'] == "del") { - if ($pkg['custom_delete_php_command']) { - if ($pkg['custom_php_command_before_form'] <> "") { - eval($pkg['custom_php_command_before_form']); - } - eval($pkg['custom_delete_php_command']); - } - write_config($pkg['delete_string']); - // resync the configuration file code if defined. - if ($pkg['custom_php_resync_config_command'] <> "") { - if ($pkg['custom_php_command_before_form'] <> "") { - eval($pkg['custom_php_command_before_form']); - } - eval($pkg['custom_php_resync_config_command']); - } - } else { - if (!$input_errors && $pkg['custom_add_php_command']) { - if ($pkg['donotsave'] <> "" or $pkg['preoutput'] <> "") { - ?> - -<?php include("head.inc"); ?> -<body link="#0000CC" vlink="#0000CC" alink="#0000CC"> -<?php include("fbegin.inc"); ?> -<?php - } - if ($pkg['preoutput']) { - echo "<pre>"; - } - eval($pkg['custom_add_php_command']); - if ($pkg['preoutput']) { - echo "</pre>"; - } - } - } - - // donotsave is enabled. lets simply exit. - if (empty($pkg['donotsave'])) { - - // store values in xml configuration file. - if (!$input_errors) { - $pkgarr = array(); - foreach ($pkg['fields']['field'] as $fields) { - switch ($fields['type']) { - case "rowhelper": - // save rowhelper items. - #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row"); - $rowhelpername="row"; - foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) { - foreach ($_POST as $key => $value) { - if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) { - $pkgarr[$rowhelpername][$matches[1]][$rowhelperfield['fieldname']] = $value; - } - } - } - break; - default: - $fieldname = $fields['fieldname']; - if ($fieldname == "interface_array") { - $fieldvalue = $_POST[$fieldname]; - } elseif (is_array($_POST[$fieldname])) { - $fieldvalue = implode(',', $_POST[$fieldname]); - } else { - $fieldvalue = trim($_POST[$fieldname]); - if ($fields['encoding'] == 'base64') { - $fieldvalue = base64_encode($fieldvalue); - } - } - if ($fieldname) { - $pkgarr[$fieldname] = $fieldvalue; - } - } - } - - if (isset($id) && $a_pkg[$id]) { - $a_pkg[$id] = $pkgarr; - } else { - $a_pkg[] = $pkgarr; - } - - write_config($pkg['addedit_string']); - // late running code - if ($pkg['custom_add_php_command_late'] <> "") { - eval($pkg['custom_add_php_command_late']); - } - - if (isset($pkg['filter_rules_needed'])) { - filter_configure(); - } - - // resync the configuration file code if defined. - if ($pkg['custom_php_resync_config_command'] <> "") { - eval($pkg['custom_php_resync_config_command']); - } - - parse_package_templates(); - - /* if start_command is defined, restart w/ this */ - if ($pkg['start_command'] <> "") { - exec($pkg['start_command'] . ">/dev/null 2&>1"); - } - - /* if restart_command is defined, restart w/ this */ - if ($pkg['restart_command'] <> "") { - exec($pkg['restart_command'] . ">/dev/null 2&>1"); - } - - if ($pkg['aftersaveredirect'] <> "") { - pfSenseHeader($pkg['aftersaveredirect']); - } elseif (!$pkg['adddeleteeditpagefields']) { - pfSenseHeader("pkg_edit.php?xml={$xml}&id=0"); - } elseif (!$pkg['preoutput']) { - pfSenseHeader("pkg.php?xml=" . $xml); - } - exit; - } else { - $get_from_post = true; - } - } elseif (!$input_errors) { - exit; - } -} - -if ($pkg['title'] <> "") { - $edit = ($only_edit ? '' : ": " . gettext("Edit")); - $title = $pkg['title'] . $edit; -} else { - $title = gettext("Package Editor"); -} - -$pgtitle = $title; - -if ($pkg['custom_php_after_head_command']) { - $closehead = false; - include("head.inc"); - eval($pkg['custom_php_after_head_command']); - echo "</head>\n"; -} else { - include("head.inc"); -} - -?> - -<body link="#0000CC" vlink="#0000CC" alink="#0000CC"> - -<?php include("fbegin.inc"); ?> - -<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script> -<script type="text/javascript" src="/javascript/suggestions.js"></script> - -<?php if ($pkg['fields']['field'] <> "") { ?> -<script type="text/javascript"> -//<![CDATA[ - //Everything inside it will load as soon as the DOM is loaded and before the page contents are loaded - jQuery(document).ready(function() { - - //Sortable function - jQuery('#mainarea table tbody').sortable({ - items: 'tr.sortable', - cursor: 'move', - distance: 10, - opacity: 0.8, - helper: function(e, ui) { - ui.children().each(function() { - jQuery(this).width(jQuery(this).width()); - }); - return ui; - }, - }); - - //delete current line jQuery function - jQuery('#maintable td .delete').live('click', function() { - //do not remove first line - if (jQuery("#maintable tr").length > 2) { - jQuery(this).parent().parent().remove(); - return false; - } - }); - - //add new line jQuery function - jQuery('#mainarea table .add').click(function() { - //get table size and assign as new id - var c_id=jQuery("#maintable tr").length; - var new_row=jQuery("table#maintable tr:last").html().replace(/(name|id)="(\w+)(\d+)"/g,"$1='$2"+c_id+"'"); - //apply new id to created line rowhelperid - jQuery("table#maintable tr:last").after("<tr>"+new_row+"<\/tr>"); - return false; - }); - // Call enablechange function - enablechange(); - }); - - function enablechange() { - <?php - foreach ($pkg['fields']['field'] as $field) { - if (isset($field['enablefields']) or isset($field['checkenablefields'])) { - echo "\tif (jQuery('form[name=\"iform\"] input[name=\"{$field['fieldname']}\"]').prop('checked') == false) {\n"; - - if (isset($field['enablefields'])) { - foreach (explode(',', $field['enablefields']) as $enablefield) { - echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n"; - echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',true);\n"; - echo "\t\t}\n"; - } - } - - if (isset($field['checkenablefields'])) { - foreach (explode(',', $field['checkenablefields']) as $checkenablefield) { - echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n"; - echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',true);\n"; - echo "\t\t}\n"; - } - } - - echo "\t}\n\telse {\n"; - - if (isset($field['enablefields'])) { - foreach (explode(',', $field['enablefields']) as $enablefield) { - echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n"; - echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',false);\n"; - echo "\t\t}\n"; - } - } - - if (isset($field['checkenablefields'])) { - foreach (explode(',', $field['checkenablefields']) as $checkenablefield) { - echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n"; - echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',false);\n"; - echo "\t\t}\n"; - } - } - - echo "\t}\n"; - } - } - ?> - } -//]]> -</script> -<?php } ?> -<script type="text/javascript" src="javascript/domTT/domLib.js"></script> -<script type="text/javascript" src="javascript/domTT/domTT.js"></script> -<script type="text/javascript" src="javascript/domTT/behaviour.js"></script> -<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script> -<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script> - -<?php if (!empty($input_errors)) print_input_errors($input_errors); ?> -<form name="iform" action="pkg_edit.php" method="post"> -<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" /> -<?php if ($savemsg) print_info_box($savemsg); ?> -<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package edit"> -<?php -if ($pkg['tabs'] <> "") { - $tab_array = array(); - foreach ($pkg['tabs']['tab'] as $tab) { - if ($tab['tab_level']) { - $tab_level = $tab['tab_level']; - } else { - $tab_level = 1; - } - if (isset($tab['active'])) { - $active = true; - } else { - $active = false; - } - if (isset($tab['no_drop_down'])) { - $no_drop_down = true; - } - $urltmp = ""; - if ($tab['url'] <> "") { - $urltmp = $tab['url']; - } - if ($tab['xml'] <> "") { - $urltmp = "pkg_edit.php?xml=" . $tab['xml']; - } - - $addresswithport = getenv("HTTP_HOST"); - $colonpos = strpos($addresswithport, ":"); - if ($colonpos !== False) { - //my url is actually just the IP address of the pfsense box - $myurl = substr($addresswithport, 0, $colonpos); - } else { - $myurl = $addresswithport; - } - // eval url so that above $myurl item can be processed if need be. - $url = str_replace('$myurl', $myurl, $urltmp); - - $tab_array[$tab_level][] = array( - $tab['text'], - $active, - $url - ); - } - - ksort($tab_array); - foreach ($tab_array as $tabid => $tab) { - echo '<tr><td>'; - display_top_tabs($tab, $no_drop_down, $tabid); - echo '</td></tr>'; - } -} - -?> -<tr><td><div id="mainarea"><table id="t" class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area"> -<?php - $cols = 0; - $savevalue = gettext("Save"); - if ($pkg['savetext'] <> "") { - $savevalue = $pkg['savetext']; - } - /* If a package's XML has <advanced_options/> configured, then setup - * the table rows for the fields that have <advancedfield/> set. - * These fields will be placed below other fields in a separate area titled 'Advanced Features'. - * These advanced fields are not normally configured and generally left to default to 'default settings'. - */ - - if ($pkg['advanced_options'] == "enabled") { - $adv_filed_count = 0; - $advanced = "<td> </td>"; - $advanced .= "<tr><td colspan=\"2\" class=\"listtopic\">". gettext("Advanced features") . "<br /></td></tr>\n"; - } - foreach ($pkg['fields']['field'] as $pkga) { - if ($pkga['type'] == "sorting") { - continue; - } - - if ($pkga['type'] == "listtopic") { - $input = "<tr id='td_{$pkga['fieldname']}'><td> </td></tr>"; - $input .= "<tr id='tr_{$pkga['fieldname']}'><td colspan=\"2\" class=\"listtopic\">{$pkga['name']}<br /></td></tr>\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - $adv_filed_count++; - } else { - echo $input; - } - continue; - } - - if ($pkga['combinefields'] == "begin") { - $input="<tr valign='top' id='tr_{$pkga['fieldname']}'>"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - } else { - echo $input; - } - } - - $size = ""; - $colspan=""; - if (isset($pkga['dontdisplayname'])) { - $input=""; - // If this is in a set of combined fields and; - // - it is a "begin" (case already handled above) or - // - usecolspan2 is in effect (so we want to spread all the combined fields horizontally) - // then we do not want this "tr" to be inserted. - // Thus only insert the "tr" if the not (!) of the above condition. - if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) { - $input .= "<tr valign='top' id='tr_{$pkga['fieldname']}'>"; - } - if (isset($pkga['usecolspan2'])) { - $colspan="colspan='2'"; - } else { - $input .= "<td width='22%' class='vncell{$req}'> </td>"; - } - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - $adv_filed_count++; - } else { - echo $input; - } - } else if (!isset($pkga['placeonbottom'])) { - unset($req); - if (isset($pkga['required'])) { - $req = 'req'; - } - $input=""; - // If this is in a set of combined fields and; - // - it is a "begin" (case already handled above) or - // - usecolspan2 is in effect (so we want to spread all the combined fields horizontally) - // then we do not want this "tr" to be inserted. - // Thus only insert the "tr" if the not (!) of the above condition. - if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) { - $input .= "<tr>"; - } - $input .= "<td valign='top' width=\"22%\" class=\"vncell{$req}\">"; - $input .= fixup_string($pkga['fielddescr']); - $input .= "</td>"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - $adv_filed_count++; - } else { - echo $input; - } - } - if ($pkga['combinefields'] == "begin") { - $input="<td class=\"vncell\"><table summary=\"advanced\"><tr>"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - } else { - echo $input; - } - } - - $class=(isset($pkga['combinefields']) ? '' : 'class="vtable"'); - if (!isset($pkga['placeonbottom'])) { - $input="<td valign='top' {$colspan} {$class}>"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - $adv_filed_count++; - } else { - echo $input; - } - } - - // if user is editing a record, load in the data. - $fieldname = $pkga['fieldname']; - if ($get_from_post) { - $value = $_POST[$fieldname]; - if (is_array($value)) { - $value = implode(',', $value); - } - } else { - if (isset($id) && $a_pkg[$id]) { - $value = $a_pkg[$id][$fieldname]; - } else { - $value = $pkga['default_value']; - } - } - switch ($pkga['type']) { - case "input": - $size = ($pkga['size'] ? " size='{$pkga['size']}' " : ""); - $input = "<input {$size} id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formfld unknown' value=\"" . htmlspecialchars($value) ."\" />\n"; - $input .= "<br />" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n"; - } else { - echo $input; - } - break; - - case "password": - $size = ($pkga['size'] ? " size='{$pkga['size']}' " : ""); - $input = "<input " . $size . " id='" . $pkga['fieldname'] . "' type='password' name='" . $pkga['fieldname'] . "' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n"; - $input .= "<br />" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n"; - } else { - echo $input; - } - break; - - case "info": - $input = fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n"; - } else { - echo $input; - } - break; - - case "select": - $fieldname = $pkga['fieldname']; - if (isset($pkga['multiple'])) { - $multiple = 'multiple="multiple"'; - $items = explode(',', $value); - $fieldname .= "[]"; - } else { - $multiple = ''; - $items = array($value); - } - $size = ($pkga['size'] ? " size='{$pkga['size']}' " : ""); - $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : ''); - $input = "<select id='" . $pkga['fieldname'] . "' $multiple $size $onchange name=\"$fieldname\">\n"; - foreach ($pkga['options']['option'] as $opt) { - $selected = (in_array($opt['value'], $items) ? 'selected="selected"' : ''); - $input .= "\t<option value=\"{$opt['value']}\" {$selected}>{$opt['name']}</option>\n"; - } - $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input; - $advanced .= "</div>\n"; - } else { - echo $input; - } - break; - - case "select_source": - $fieldname = $pkga['fieldname']; - if (isset($pkga['multiple'])) { - $multiple = 'multiple="multiple"'; - $items = explode(',', $value); - $fieldname .= "[]"; - } else { - $multiple = ''; - $items = array($value); - } - $size = (isset($pkga['size']) ? "size=\"{$pkga['size']}\"" : ''); - $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : ''); - $input = "<select id='{$pkga['fieldname']}' {$multiple} {$size} {$onchange} name=\"{$fieldname}\">\n"; - - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']) .$input; - $advanced .= "</div>\n"; - } else { - echo $input; - } - $source_url = $pkga['source']; - eval("\$pkg_source_txt = &$source_url;"); - $input=""; - #check if show disable option is present on xml - if (isset($pkga['show_disable_value'])) { - array_push($pkg_source_txt, - array(($pkga['source_name']? $pkga['source_name'] : $pkga['name'])=> $pkga['show_disable_value'], ($pkga['source_value']? $pkga['source_value'] : $pkga['value'])=> $pkga['show_disable_value'])); - } - foreach ($pkg_source_txt as $opt) { - $source_name =($pkga['source_name']? $opt[$pkga['source_name']] : $opt[$pkga['name']]); - $source_value =($pkga['source_value'] ? $opt[$pkga['source_value']] : $opt[$pkga['value']]); - $selected = (in_array($source_value, $items)? 'selected="selected"' : ''); - $input .= "\t<option value=\"{$source_value}\" $selected>{$source_name}</option>\n"; - } - $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - } else { - echo $input; - } - break; - - case "vpn_selection" : - $input = "<select id='{$pkga['fieldname']}' name='{$vpn['name']}'>\n"; - foreach ($config['ipsec']['phase1'] as $vpn) { - $input .= "\t<option value=\"{$vpn['descr']}\">{$vpn['descr']}</option>\n"; - } - $input .= "</select>\n"; - $input .= "<br />" . fixup_string($pkga['description']) . "\n"; - - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input; - $advanced .= "</div>\n"; - } else { - echo $input; - } - break; - - case "checkbox": - $checkboxchecked =($value == "on" ? " checked=\"checked\"" : ""); - $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : ''); - if (isset($pkga['enablefields']) || isset($pkga['checkenablefields'])) { - $onclick = ' onclick="javascript:enablechange();"'; - } - $input = "<input id='{$pkga['fieldname']}' type='checkbox' name='{$pkga['fieldname']}' {$checkboxchecked} {$onclick} {$onchange} />\n"; - $input .= "<br />" . fixup_string($pkga['description']) . "\n"; - - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input; - $advanced .= "</div>\n"; - } else { - echo $input; - } - break; - - case "textarea": - if ($pkga['rows']) { - $rows = " rows='{$pkga['rows']}' "; - } - if ($pkga['cols']) { - $cols = " cols='{$pkga['cols']}' "; - } - if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) { - $value = base64_decode($value); - } - $wrap =($pkga['wrap'] == "off" ? 'wrap="off" style="white-space:nowrap;"' : ''); - $input = "<textarea {$rows} {$cols} name='{$pkga['fieldname']}'{$wrap}>{$value}</textarea>\n"; - $input .= "<br />" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input; - $advanced .= "</div>\n"; - } else { - echo $input; - } - break; - - case "aliases": - // Use xml tag <typealiases> to filter type aliases - $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : ''); - $fieldname = $pkga['fieldname']; - $a_aliases = &$config['aliases']['alias']; - $addrisfirst = 0; - $aliasesaddr = ""; - $value = "value='{$value}'"; - - if (isset($a_aliases)) { - if (!empty($pkga['typealiases'])) { - foreach ($a_aliases as $alias) { - if ($alias['type'] == $pkga['typealiases']) { - if ($addrisfirst == 1) { - $aliasesaddr .= ","; - } - $aliasesaddr .= "'" . $alias['name'] . "'"; - $addrisfirst = 1; - } - } - } else { - foreach ($a_aliases as $alias) { - if ($addrisfirst == 1) { - $aliasesaddr .= ","; - } - $aliasesaddr .= "'" . $alias['name'] . "'"; - $addrisfirst = 1; - } - } - } - - $input = "<input name='{$fieldname}' type='text' class='formfldalias' id='{$fieldname}' {$size} {$value} />\n<br />"; - $input .= fixup_string($pkga['description']) . "\n"; - - $script = "<script type='text/javascript'>\n"; - $script .= "//<![CDATA[\n"; - $script .= "var aliasarray = new Array({$aliasesaddr})\n"; - $script .= "var oTextbox1 = new AutoSuggestControl(document.getElementById('{$fieldname}'), new StateSuggestions(aliasarray))\n"; - $script .= "//]]>\n"; - $script .= "</script>"; - - echo $input; - echo $script; - break; - - case "interfaces_selection": - $ips = array(); - $interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide"); - if (is_array($config['interfaces'])) { - foreach ($config['interfaces'] as $iface_key=>$iface_value) { - if (isset($iface_value['enable']) && !preg_match("/$interface_regex/", $iface_key)) { - $iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key)); - if (isset($pkga['showips'])) { - $iface_description .= " address"; - } - $ips[] = array('ip'=> $iface_key, 'description'=> $iface_description); - } - } - } - if (is_array($config['virtualip']) && isset($pkga['showvirtualips'])) { - foreach ($config['virtualip']['vip'] as $vip) { - if (!preg_match("/$interface_regex/", $vip['interface'])) { - $vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " "); - } - switch ($vip['mode']) { - case "ipalias": - case "carp": - $ips[] = array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description"); - break; - case "proxyarp": - if ($vip['type'] == "network") { - $start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits'])); - $end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits'])); - $len = $end - $start; - for ($i = 0; $i <= $len; $i++) { - $ips[]= array('ip' => long2ip32($start+$i), 'description' => long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}"); - } - } else { - $ips[]= array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description"); - } - break; - } - } - } - sort($ips); - if (isset($pkga['showlistenall'])) { - array_unshift($ips, array('ip' => 'All', 'description' => 'Listen on All interfaces/ip addresses ')); - } - if (!preg_match("/$interface_regex/", "loopback")) { - $iface_description=(isset($pkga['showips']) ? "127.0.0.1 (loopback)" : "loopback"); - array_push($ips, array('ip' => 'lo0', 'description' => $iface_description)); - } - - #show interfaces array on gui - $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : ''); - $multiple = ''; - $fieldname = $pkga['fieldname']; - if (isset($pkga['multiple'])) { - $fieldname .= '[]'; - $multiple = 'multiple="multiple"'; - } - $input = "<select id='{$pkga['fieldname']}' name=\"{$fieldname}\" {$size} {$multiple}>\n"; - if (is_array($value)) { - $values = $value; - } else { - $values = explode(',', $value); - } - foreach ($ips as $iface) { - $selected = (in_array($iface['ip'], $values) ? 'selected="selected"' : ''); - $input .= "<option value=\"{$iface['ip']}\" {$selected}>{$iface['description']}</option>\n"; - } - $input .= "</select>\n<br />" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - } else { - echo $input; - } - break; - - case "radio": - $input = "<input type='radio' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' value='{$value}' />"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= $input; - } else { - echo $input; - } - break; - - case "button": - $input = "<input type='submit' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formbtn' value='{$pkga['fieldname']}' />\n"; - if (isset($pkga['placeonbottom'])) { - $pkg_buttons .= $input; - } else { - echo $input ."\n<br />" . fixup_string($pkga['description']) . "\n"; - } - break; - - case "schedule_selection": - $input = "<select id='{$pkga['fieldname']}' name='{$pkga['fieldname']}'>\n"; - $schedules = array(); - $schedules[] = "none"; - if (is_array($config['schedules']['schedule'])) { - foreach ($config['schedules']['schedule'] as $schedule) { - if ($schedule['name'] <> "") { - $schedules[] = $schedule['name']; - } - } - } - foreach ($schedules as $schedule) { - $selected = ($value == $schedule ? "selected=\"selected\"" : ""); - if ($schedule == "none") { - $input .= "<option value=\"\" {$selected}>{$schedule}</option>\n"; - } else { - $input .= "<option value=\"{$schedule}\" {$selected}>{$schedule}</option>\n"; - } - } - $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n"; - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $js_array[] = $pkga['fieldname']; - $advanced .= display_advanced_field($pkga['fieldname']).$input; - $advanced .= "</div>\n"; - } else { - echo $input; - } - break; - - case "rowhelper": - #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row"); - $rowhelpername="row"; - ?> - <script type="text/javascript"> - //<![CDATA[ - <?php - $rowcounter = 0; - $fieldcounter = 0; - foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) { - echo "rowname[{$fieldcounter}] = \"{$rowhelper['fieldname']}\";\n"; - echo "rowtype[{$fieldcounter}] = \"{$rowhelper['type']}\";\n"; - echo "rowsize[{$fieldcounter}] = \"{$rowhelper['size']}\";\n"; - $fieldcounter++; - } - ?> - //]]> - </script> - <table id="maintable" summary="main table"> - <tr id='<?="tr_{$pkga['fieldname']}";?>'> - <?php - foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) { - echo "<td ".domTT_title($rowhelper['description'])."><b>" . fixup_string($rowhelper['fielddescr']) . "</b></td>\n"; - } - - $rowcounter = 0; - $trc = 0; - - //Use assigned $a_pkg or create an empty array to enter loop - if (isset($a_pkg[$id][$rowhelpername])) { - $saved_rows=$a_pkg[$id][$rowhelpername]; - } else { - $saved_rows[] = array(); - } - - foreach ($saved_rows as $row) { - echo "</tr>\n<tr class=\"sortable\" id=\"id_{$rowcounter}\">\n"; - foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) { - unset($value); - if ($rowhelper['value'] <> "") { - $value = $rowhelper['value']; - } - $fieldname = $rowhelper['fieldname']; - // if user is editing a record, load in the data. - if (isset($id) && $a_pkg[$id]) { - $value = $row[$fieldname]; - } - $options = ""; - $type = $rowhelper['type']; - $description = $rowhelper['description']; - $fieldname = $rowhelper['fieldname']; - if ($type == "option") { - $options = &$rowhelper['options']['option']; - } - if ($rowhelper['size']) { - $size = $rowhelper['size']; - } else if ($pkga['size']) { - $size = $pkga['size']; - } else { - $size = "8"; - } - display_row($rowcounter, $value, $fieldname, $type, $rowhelper, $size); - - $text = ""; - $trc++; - } - $rowcounter++; - echo "<td>"; - #echo "<a onclick=\"removeRow(this); return false;\" href=\"#\"><img border=\"0\" src=\"./themes/".$g['theme']."/images/icons/icon_x.gif\" alt=\"remove\" /></a>"; - echo "<a class='delete' href=\"#\"><img border='0' src='./themes/{$g['theme']}/images/icons/icon_x.gif' alt='delete' /></a>"; - echo "</td>\n"; - } - ?> - </tr> - <tbody></tbody> - </table> - - <!-- <br /><a onclick="javascript:addRowTo('maintable'); return false;" href="#"><img border="0" src="./themes/<?#= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>--> - <br /><a class="add" href="#"><img border="0" src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a> - <br /><?php if ($pkga['description'] != "") echo $pkga['description']; ?> - <script type="text/javascript"> - //<![CDATA[ - field_counter_js = <?= $fieldcounter ?>; - rows = <?= $rowcounter ?>; - totalrows = <?php echo $rowcounter; ?>; - loaded = <?php echo $rowcounter; ?>; - //typesel_change(); - //]]> - </script> - - <?php - break; - } - #check typehint value - if ($pkga['typehint']) { - echo " " . $pkga['typehint']; - } - #check combinefields options - if (isset($pkga['combinefields'])) { - // At the end of each combined-fields field we always want to end a td tag. - $input = "</td>"; - // The tr tag end is used to end the whole set of combined fields, - // but also if usecolspan2 is not in effect then we also put each combined field in its own tr. - if (($pkga['combinefields'] == "end") || (!isset($pkga['usecolspan2']))) { - $input .= "</tr>"; - } - // At the end of the combined fields we finish up the table that encloses the combined fields... - if ($pkga['combinefields'] == "end") { - $input .= "</table></td></tr>"; - } - } else { - $input = "</td></tr>"; - if ($pkga['usecolspan2']) { - $input .= "</tr><br />"; - } - } - if (isset($pkga['advancedfield']) && isset($adv_filed_count)) { - $advanced .= "{$input}\n"; - } else { - echo "{$input}\n"; - } - #increment counter - $i++; - } - - #print advanced settings if any after reading all fields - if (isset($advanced) && $adv_filed_count > 0) { - echo $advanced; - } - - ?> - <tr> - <td> </td> - </tr> - <tr> - <td width="22%" valign="top"> </td> - <td width="78%"> - <div id="buttons"> - <?php - if ($pkg['note'] != "") { - echo "<p><span class=\"red\"><strong>" . gettext("Note") . ":</strong></span> {$pkg['note']}</p>"; - } - //if (isset($id) && $a_pkg[$id]) // We'll always have a valid ID in our hands - echo "<input name='id' type='hidden' value=\"" . htmlspecialchars($id) . "\" />"; - echo "<input name='Submit' type='submit' class='formbtn' value=\"" . htmlspecialchars($savevalue) . "\" />\n{$pkg_buttons}\n"; - if (!$only_edit) { - echo "<input class=\"formbtn\" type=\"button\" value=\"".gettext("Cancel")."\" onclick=\"window.location.href='" . $_SERVER['HTTP_REFERER'] . "'\" />"; - } - ?> - </div> - </td> - </tr> - -</table> -</div></td></tr> -</table> -</form> - -<?php if ($pkg['custom_php_after_form_command']) eval($pkg['custom_php_after_form_command']); ?> - -<?php - /* JavaScript to handle the advanced fields. */ - if ($pkg['advanced_options'] == "enabled") { - echo "<script type=\"text/javascript\">\n"; - echo "//<![CDATA[\n"; - foreach ($js_array as $advfieldname) { - echo "function show_" . $advfieldname . "() {\n"; - echo "\tjQuery('#showadv_{$advfieldname}').empty();\n"; - echo "\tjQuery('#show_{$advfieldname}').css('display', 'block');\n"; - echo "}\n\n"; - } - echo "//]]>\n"; - echo "</script>\n"; - } -?> - -<?php include("fend.inc"); ?> -</body> -</html> - -<?php -/* - * ROW Helpers function - */ -function display_row($trc, $value, $fieldname, $type, $rowhelper, $size) { - global $text, $config; - echo "<td>\n"; - switch ($type) { - case "input": - echo "<input size='{$size}' name='{$fieldname}{$trc}' id='{$fieldname}{$trc}' class='formfld unknown' value=\"" . htmlspecialchars($value) . "\" />\n"; - break; - case "checkbox": - echo "<input size='{$size}' type='checkbox' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' value='ON' ".($value?"CHECKED":"")." />\n"; - break; - case "password": - echo "<input size='{$size}' type='password' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n"; - break; - case "textarea": - echo "<textarea rows='2' cols='12' id='{$fieldname}{$trc}' class='formfld unknown' name='{$fieldname}{$trc}'>{$value}</textarea>\n"; - case "select": - echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$title}>\n"; - foreach ($rowhelper['options']['option'] as $rowopt) { - $text .= "<option value='{$rowopt['value']}'>{$rowopt['name']}</option>"; - echo "<option value='{$rowopt['value']}'".($rowopt['value'] == $value?" selected=\"selected\"":"").">{$rowopt['name']}</option>\n"; - } - echo "</select>\n"; - break; - case "interfaces_selection": - $size = ($size ? "size=\"{$size}\"" : ''); - $multiple = ''; - if (isset($rowhelper['multiple'])) { - $fieldname .= '[]'; - $multiple = "multiple=\"multiple\""; - } - echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$size} {$multiple}>\n"; - $ifaces = get_configured_interface_with_descr(); - $additional_ifaces = $rowhelper['add_to_interfaces_selection']; - if (!empty($additional_ifaces)) { - $ifaces = array_merge($ifaces, explode(',', $additional_ifaces)); - } - if (is_array($value)) { - $values = $value; - } else { - $values = explode(',', $value); - } - $ifaces["lo0"] = "loopback"; - echo "<option><name></name><value></value></option>/n"; - foreach ($ifaces as $ifname => $iface) { - $text .="<option value=\"{$ifname}\">$iface</option>"; - echo "<option value=\"{$ifname}\" ".(in_array($ifname, $values) ? 'selected="selected"' : '').">{$iface}</option>\n"; - } - echo "</select>\n"; - break; - case "select_source": - echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}'>\n"; - if (isset($rowhelper['show_disable_value'])) { - echo "<option value='{$rowhelper['show_disable_value']}'>{$rowhelper['show_disable_value']}</option>\n"; - } - $source_url = $rowhelper['source']; - eval("\$pkg_source_txt = &$source_url;"); - foreach ($pkg_source_txt as $opt) { - $source_name = ($rowhelper['source_name'] ? $opt[$rowhelper['source_name']] : $opt[$rowhelper['name']]); - $source_value = ($rowhelper['source_value'] ? $opt[$rowhelper['source_value']] : $opt[$rowhelper['value']]); - $text .= "<option value='{$source_value}'>{$source_name}</option>"; - echo "<option value='{$source_value}'".($source_value == $value?" selected=\"selected\"":"").">{$source_name}</option>\n"; - } - echo "</select>\n"; - break; - } - echo "</td>\n"; -} - -function fixup_string($string) { - global $config; - // fixup #1: $myurl -> http[s]://ip_address:port/ - $https = ""; - $port = $config['system']['webguiport']; - if ($port <> "443" and $port <> "80") { - $urlport = ":" . $port; - } else { - $urlport = ""; - } - - if ($config['system']['webgui']['protocol'] == "https") { - $https = "s"; - } - $myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport; - $newstring = str_replace("\$myurl", $myurl, $string); - $string = $newstring; - // fixup #2: $wanip - $curwanip = get_interface_ip(); - $newstring = str_replace("\$wanip", $curwanip, $string); - $string = $newstring; - // fixup #3: $lanip - $lancfg = $config['interfaces']['lan']; - $lanip = $lancfg['ipaddr']; - $newstring = str_replace("\$lanip", $lanip, $string); - $string = $newstring; - // fixup #4: fix'r'up here. - return $newstring; -} - -/* - * Parse templates if they are defined - */ -function parse_package_templates() { - global $pkg, $config; - $rows = 0; - if ($pkg['templates']['template'] <> "") { - foreach ($pkg['templates']['template'] as $pkg_template_row) { - $filename = $pkg_template_row['filename']; - $template_text = $pkg_template_row['templatecontents']; - $firstfield = ""; - /* calculate total row helpers count and */ - /* change fields defined as fieldname_fieldvalue to their value */ - foreach ($pkg['fields']['field'] as $fields) { - switch ($fields['type']) { - case "rowhelper": - // save rowhelper items. - $row_helper_total_rows = 0; - $row_helper_data = ""; - foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) { - foreach ($_POST as $key => $value) { - if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) { - $row_helper_total_rows++; - $row_helper_data .= $value; - $sep = ""; - ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep); - foreach ($sep as $se) { - $separator = $se; - } - if ($separator <> "") { - $row_helper_data = ereg_replace(" ", $separator, $row_helper_data); - $template_text = ereg_replace("\[{$separator}\]", "", $template_text); - } - $template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text); - } - } - } - break; - default: - $fieldname = $fields['fieldname']; - $fieldvalue = $_POST[$fieldname]; - $template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text); - } - } - /* replace $domain_total_rows with total rows */ - $template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text); - - /* replace cr's */ - $template_text = str_replace("\\n", "\n", $template_text); - - /* write out new template file */ - $fout = fopen($filename, "w"); - fwrite($fout, $template_text); - fclose($fout); - } - } -} - -/* Return html div fields */ -function display_advanced_field($fieldname) { - $div = "<div id='showadv_{$fieldname}'>\n"; - $div .= "<input type='button' onclick='show_{$fieldname}()' value='" . gettext("Advanced") . "' /> - " . gettext("Show advanced option") ."</div>\n"; - $div .= "<div id='show_{$fieldname}' style='display:none'>\n"; - return $div; -} - -?> |