summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPhil Davis <phil.davis@inf.org>2017-01-22 22:25:19 +0545
committerRenato Botelho <renato@netgate.com>2017-01-24 15:04:51 -0200
commit2ae9fc677076117f167e62b048243f413ddd0cb5 (patch)
treea972132058753c3207df6754f6749db48b80b738 /src
parent821a9e4904d5dfa891d4fbad188d16ff6703623a (diff)
downloadpfsense-2ae9fc677076117f167e62b048243f413ddd0cb5.zip
pfsense-2ae9fc677076117f167e62b048243f413ddd0cb5.tar.gz
QinQ Edit fix row add delete
1) Make the row delete button actually work 2) Do not allow ranges that go backwards like 25-20 or just "-" or 1-sided ranges "-42" "42-" 3) Remember the POSTed stuff to redisplay to the user if there were input errors 4) Ranges or numbers entered could overlap - just save a list of the unique members. e.g. If the user enters 5-15 and 10-20 (cherry picked from commit 477d849bd4e85af8bb3595eaf39f946de51d7289)
Diffstat (limited to 'src')
-rw-r--r--src/usr/local/www/interfaces_qinq_edit.php62
1 files changed, 46 insertions, 16 deletions
diff --git a/src/usr/local/www/interfaces_qinq_edit.php b/src/usr/local/www/interfaces_qinq_edit.php
index 9b2609b..4e61e82 100644
--- a/src/usr/local/www/interfaces_qinq_edit.php
+++ b/src/usr/local/www/interfaces_qinq_edit.php
@@ -136,33 +136,49 @@ if ($_POST) {
}
$members = "";
- $isfirst = 0;
// Read the POSTed member array into a space separated list translating any ranges
// into their included values
- foreach ($_POST['members'] as $memb) {
+ $membercounter = 0;
+ $membername = "member{$membercounter}";
+ $valid_members = array();
+
+ while (isset($_POST[$membername])) {
// Might be a range
- $member = explode("-", $memb);
+ $member = explode("-", $_POST[$membername]);
if (count($member) > 1) {
- if (preg_match("/([^0-9])+/", $member[0], $match) || preg_match("/([^0-9])+/", $member[1], $match)) {
+ if (($member[0] == "") || ($member[1] == "") ||
+ preg_match("/([^0-9])+/", $member[0], $match) || preg_match("/([^0-9])+/", $member[1], $match)) {
$input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
- }
-
- for ($i = $member[0]; $i <= $member[1]; $i++) {
- $members .= ($isfirst == 0 ? '':' ') . $i;
- $isfirst++;
+ } else if ($member[0] > $member[1]) {
+ $input_errors[] = gettext("Tag ranges must be entered with the lower number first.");
+ } else {
+ for ($i = $member[0]; $i <= $member[1]; $i++) {
+ $valid_members[] = $i;
+ }
}
} else { // Just a single number
- if (preg_match("/([^0-9])+/", $memb, $match)) {
+ if (preg_match("/([^0-9])+/", $member[0], $match)) {
$input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
} else {
- $members .= ($isfirst == 0 ? '':' ') . $memb;
- $isfirst++;
+ // Ignore empty rows
+ if ($member[0] != "") {
+ $valid_members[] = $member[0];
+ }
}
}
+
+ // Remember the POSTed values so they can be redisplayed if there were errors.
+ $posted_members .= ($membercounter == 0 ? '':' ') . $_POST[$membername];
+
+ $membercounter++;
+ $membername = "member{$membercounter}";
}
+ // Just use the unique valid members. There could have been overlap in the ranges or repeat of numbers entered.
+ $members = implode(" ", array_unique($valid_members));
+
if (!$input_errors) {
$qinqentry['members'] = $members;
$qinqentry['descr'] = $_POST['descr'];
@@ -230,7 +246,7 @@ if ($_POST) {
} else {
$pconfig['descr'] = $_POST['descr'];
$pconfig['tag'] = $_POST['tag'];
- $pconfig['members'] = $members;
+ $pconfig['members'] = $posted_members;
}
}
@@ -290,7 +306,7 @@ $section->addInput(new Form_Input(
$section->addInput(new Form_StaticText(
'Member(s)',
'Ranges can be specified in the inputs below. Enter a range (2-3) or individual numbers.' . '<br />' .
- 'Click "Duplicate" as many times as needed to add new inputs.'
+ 'Click "Add Tag" as many times as needed to add new inputs.'
));
if (isset($id) && $a_qinqs[$id]) {
@@ -313,13 +329,12 @@ if ($members != "") {
}
foreach ($item as $ww) {
- $member = $item[$counter];
$group = new Form_Group($counter == 0 ? 'Tag(s)':'');
$group->addClass('repeatable');
$group->add(new Form_Input(
- 'members[]',
+ 'member' . $counter,
null,
'text',
$ww
@@ -348,4 +363,19 @@ $form->add($section);
print($form);
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+events.push(function() {
+
+ // Suppress "Delete row" button if there are fewer than two rows
+ checkLastRow();
+
+});
+//]]>
+</script>
+
+<?php
include("foot.inc");
OpenPOWER on IntegriCloud