diff options
author | Phil Davis <phil.davis@inf.org> | 2017-01-22 22:25:19 +0545 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2017-01-24 15:04:51 -0200 |
commit | 2ae9fc677076117f167e62b048243f413ddd0cb5 (patch) | |
tree | a972132058753c3207df6754f6749db48b80b738 /src/usr | |
parent | 821a9e4904d5dfa891d4fbad188d16ff6703623a (diff) | |
download | pfsense-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/usr')
-rw-r--r-- | src/usr/local/www/interfaces_qinq_edit.php | 62 |
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"); |