diff options
Diffstat (limited to 'usr/local')
-rw-r--r-- | usr/local/www/interfaces_qinq_edit.php | 304 |
1 files changed, 103 insertions, 201 deletions
diff --git a/usr/local/www/interfaces_qinq_edit.php b/usr/local/www/interfaces_qinq_edit.php index 085ab8d..dd3ad7a 100644 --- a/usr/local/www/interfaces_qinq_edit.php +++ b/usr/local/www/interfaces_qinq_edit.php @@ -44,6 +44,8 @@ $shortcut_section = "interfaces"; require("guiconfig.inc"); +print('POST: '); print_r($_POST); print('<br />'); + if (!is_array($config['qinqs']['qinqentry'])) $config['qinqs']['qinqentry'] = array(); @@ -53,8 +55,8 @@ $portlist = get_interface_list(); /* add LAGG interfaces */ if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { - foreach ($config['laggs']['lagg'] as $lagg) - $portlist[$lagg['laggif']] = $lagg; + foreach ($config['laggs']['lagg'] as $lagg) + $portlist[$lagg['laggif']] = $lagg; } if (count($portlist) < 1) { @@ -64,6 +66,7 @@ if (count($portlist) < 1) { if (is_numericint($_GET['id'])) $id = $_GET['id']; + if (isset($_POST['id']) && is_numericint($_POST['id'])) $id = $_POST['id']; @@ -81,7 +84,6 @@ if (isset($id) && $a_qinqs[$id]) { } if ($_POST) { - unset($input_errors); $pconfig = $_POST; @@ -120,7 +122,7 @@ if ($_POST) { $isfirst = 0; /* item is a normal qinqentry type */ for($x=0; $x<9999; $x++) { - if($_POST["members{$x}"] <> "") { + if($_POST["members{$x}"] != "") { $member = explode("-", $_POST["members{$x}"]); if (count($member) > 1) { if (preg_match("/([^0-9])+/", $member[0], $match) || @@ -214,207 +216,107 @@ if ($_POST) { } } -include("head.inc"); - -?> +function build_parent_list() { + global $portlist; + + $list = array(); + + foreach ($portlist as $ifn => $ifinfo) { + if (is_jumbo_capable($ifn)) + $list[$ifn] = $ifn . ' (' . $ifinfo['mac'] . ')'; + } + + return($list); +} -<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>"> -<?php include("fbegin.inc"); ?> +include("head.inc"); -<script type="text/javascript"> -//<![CDATA[ -// Global Variables -var rowname = new Array(9999); -var rowtype = new Array(9999); -var newrow = new Array(9999); -var rowsize = new Array(9999); -for (i = 0; i < 9999; i++) { - rowname[i] = 'members'; - rowtype[i] = 'select'; - newrow[i] = ''; - rowsize[i] = '30'; +require('classes/Form.class.php'); + +$form = new Form(new Form_Button( + 'Submit', + gettext("Save") +)); + +$section = new Form_Section('Interface QinQ Edit'); + +$section->addInput(new Form_Select( + 'filterdescriptions', + 'Parent interface', + $pconfig['if'], + build_parent_list() +))->setHelp('Only QinQ capable interfaces will be shown.'); + +$section->addInput(new Form_Input( + 'tag', + 'First level tag', + 'number', + $pconfig['tag'], + ['max' => '4094', 'min' => '1'] +))->setHelp('This is the first level VLAN tag. On top of this are stacked the member VLANs defined below.'); + +$section->addInput(new Form_Checkbox( + 'autogroup', + 'Option(s)', + 'Adds interface to QinQ interface groups', + $pconfig['autogroup'] +))->setHelp('Allows rules to be written more easily'); + +$section->addInput(new Form_Input( + 'descr', + 'Description', + 'text', + $pconfig['descr'] +))->setHelp('You may enter a description here for your reference (not parsed).'); + +$section->addInput(new Form_StaticText( + 'Member(s)', + 'You can specify ranges in the inputs below. Enter a range (2-3) or individual numbers.' . '<br />' . + 'Click "Duplicate" as many times as needed to add new inputs' +)); + +$counter = 0; +$members = $pconfig['members']; + +// DEBUG +//$members = "666 55555"; +//$members = ""; + +if ($members != "") + $item = explode(" ", $members); +else + $item = array(''); + +foreach($item as $ww) { + $member = $item[$counter]; + + $group = new Form_Group($counter == 0 ? 'Tag(s)':''); + + $group->add(new Form_Input( + 'members', + null, + 'text', + $ww + )); + +$counter++; + +$group->enableDuplication(); +$section->add($group); } -var field_counter_js = 0; -var loaded = 0; -var is_streaming_progress_bar = 0; -var temp_streaming_text = ""; - -var addRowTo = (function() { - return (function (tableId) { - var d, tbody, tr, td, bgc, i, ii, j; - d = document; - tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0); - tr = d.createElement("tr"); - for (i = 0; i < field_counter_js; i++) { - td = d.createElement("td"); - td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown' name='" + rowname[i] + totalrows + "' /> "; - tr.appendChild(td); - } - td = d.createElement("td"); - td.rowSpan = "1"; - - td.innerHTML = '<a onclick="removeRow(this);return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" alt="remove" /><\/a>'; - tr.appendChild(td); - tbody.appendChild(tr); - totalrows++; - }); -})(); - -function removeRow(el) { - var cel; - while (el && el.nodeName.toLowerCase() != "tr") - el = el.parentNode; - - if (el && el.parentNode) { - cel = el.getElementsByTagName("td").item(0); - el.parentNode.removeChild(el); - } +if (isset($id) && $a_qinqs[$id]) { + $section->addInput(new Form_Input( + 'id', + null, + 'hidden', + $id + )); } + +$form->add($section); - rowname[0] = <?=gettext("members");?>; - rowtype[0] = "textbox"; - rowsize[0] = "30"; - - rowname[2] = <?=gettext("detail");?>; - rowtype[2] = "textbox"; - rowsize[2] = "50"; -//]]> -</script> -<input type='hidden' name='members_type' value='textbox' class="formfld unknown" /> - -<?php if ($input_errors) print_input_errors($input_errors); ?> -<div id="inputerrors"></div> - -<form action="interfaces_qinq_edit.php" method="post" name="iform" id="iform"> -<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces qinq edit"> - <tr> - <td colspan="2" valign="top" class="listtopic"><?=gettext("Interface QinQ Edit");?></td> - </tr> - <tr> - <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td> - <td width="78%" class="vtable"> - <select name="if" id="if" class="formselect"> - <?php - foreach ($portlist as $ifn => $ifinfo) { - if (is_jumbo_capable($ifn)) { - echo "<option value=\"{$ifn}\""; - if ($ifn == $pconfig['if']) - echo " selected=\"selected\""; - echo ">"; - echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")"); - echo "</option>"; - } - } - ?> - </select> - <br /> - <span class="vexpl"><?=gettext("Only QinQ capable interfaces will be shown.");?></span></td> - </tr> - <tr> - <td width="22%" valign="top" class="vncellreq"><?=gettext("First level tag");?></td> - <td width="78%" class="vtable"> - <input name="tag" type="text" class="formfld unknown" id="tag" size="10" value="<?=htmlspecialchars($pconfig['tag']);?>" /> - <br /> - <span class="vexpl"> - <?=gettext("This is the first level VLAN tag. On top of this are stacked the member VLANs defined below.");?> - </span> - </td> - </tr> - <tr> - <td width="22%" valign="top" class="vncell"><?=gettext("Options");?></td> - <td width="78%" class="vtable"> -<?php /* ?> - <br /> - <input type="checkbox" value="yes" name="autoassign" id="autoassign" <?php if ($pconfig['autoassign']) echo "checked=\"checked\""; ?> /> - <span class="vexpl"> Auto assign interface so it can be configured with ip etc...</span> - <br /> - <input type="checkbox" value="yes" name="autoenable" id="autoenable" <?php if ($pconfig['autoenable']) echo "checked=\"checked\""; ?> /> - <span class="vexpl"> Auto enable interface so it can be used on filter rules.</span> - <br /> - <input type="checkbox" value="yes" name="autoadjustmtu" id="autoadjustmtu" <?php if ($pconfig['autoadjustmtu']) echo "checked=\"checked\""; ?> /> - <span class="vexpl"> Allows to keep clients mtu unchanged(1500). <br />NOTE: if you are using jumbo frames this option is not needed and may produce incorrect results!</span> -<?php */ ?> - <br /> - <input name="autogroup" type="checkbox" value="yes" id="autogroup" <?php if ($pconfig['autogroup']) echo "checked=\"checked\""; ?> /> - <span class="vexpl"><?=gettext("Adds interface to QinQ interface groups so you can write filter rules easily.");?></span> - </td> - </tr> - <tr> - <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td> - <td width="78%" class="vtable"> - <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" /> - <br /> - <span class="vexpl"> - <?=gettext("You may enter a description here for your reference (not parsed).");?> - </span> - </td> - </tr> - <tr> - <td width="22%" valign="top" class="vncellreq"><div id="membersnetworkport"><?=gettext("Member (s)");?></div></td> - <td width="78%" class="vtable"> - <span class="vexpl"> - <?=gettext("You can specify ranges in the input below. The format is pretty simple i.e 9-100 or 10.20...");?> - </span> - <br /> - <table id="maintable" summary="main table"> - <tbody> - <tr> - <td><div id="onecolumn"><?=gettext("Tag");?></div></td> - </tr> - - <?php - $counter = 0; - $members = $pconfig['members']; - if ($members <> "") { - $item = explode(" ", $members); - foreach($item as $ww) { - $member = $item[$counter]; - ?> - <tr> - <td class="vtable"> - <input name="members<?php echo $counter; ?>" class="formselect" id="members<?php echo $counter; ?>" value="<?php echo $member;?>" /> - </td> - <td> - <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="remove" /></a> - </td> - </tr> -<?php - $counter++; - - } // end foreach - } // end if -?> - </tbody> - </table> - <a onclick="javascript:addRowTo('maintable'); return false;" href="#"> - <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" /> - </a> - </td> - </tr> - <tr> - <td width="22%" valign="top"> </td> - <td width="78%"> - <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /> - <a href="interfaces_qinq.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a> - <?php if (isset($id) && $a_qinqs[$id]): ?> - <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" /> - <?php endif; ?> - </td> - </tr> -</table> -</form> - -<script type="text/javascript"> -//<![CDATA[ - field_counter_js = 1; - rows = 1; - totalrows = <?php echo $counter; ?>; - loaded = <?php echo $counter; ?>; -//]]> -</script> - -<?php include("fend.inc"); ?> -</body> -</html> +print($form); + +include("foot.inc"); |