Skip to content

Commit

Permalink
Item13125: CGI changes for multi-value parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
gac410 committed Dec 11, 2014
1 parent 75d9c83 commit 8c3ded3
Show file tree
Hide file tree
Showing 27 changed files with 184 additions and 128 deletions.
7 changes: 4 additions & 3 deletions CommentPlugin/lib/Foswiki/Plugins/CommentPlugin.pm
Original file line number Diff line number Diff line change
Expand Up @@ -118,12 +118,13 @@ sub _restSave {
my $query = Foswiki::Func::getCgiQuery();

my ( $web, $topic ) =
Foswiki::Func::normalizeWebTopicName( undef, $query->param('topic') );
Foswiki::Func::normalizeWebTopicName( undef,
scalar $query->param('topic') );

if ( $query->param('comment_target') ) {
if ( scalar $query->param('comment_target') ) {
( $web, $topic ) =
Foswiki::Func::normalizeWebTopicName( $web,
$query->param('comment_target') );
scalar $query->param('comment_target') );
}

$web =
Expand Down
4 changes: 2 additions & 2 deletions EditRowPlugin/lib/Foswiki/Plugins/EditRowPlugin/Get.pm
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ sub process {
}
else {
$text =~ s/\\\n//gs;
my @ps = $query->param();
my @ps = $query->multi_param();
my $urps = {};
foreach my $p (@ps) {
my @vals = $query->param($p);
my @vals = $query->multi_param($p);

# We interpreted multi-value parameters as comma-separated
# lists. This is what checkboxes, select+multi etc. use.
Expand Down
6 changes: 3 additions & 3 deletions EditRowPlugin/lib/Foswiki/Plugins/EditRowPlugin/Save.pm
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ sub process {
my $minor = 0; # If true, this is a quiet save
my $no_return = 0; # if true, we want to finish editing after the action
my $no_save = 0; # if true, we are cancelling
my $clicked = join( '', $query->param('erp_action') ) || '';
my $clicked = join( '', $query->multi_param('erp_action') ) || '';
if ( $clicked =~ /^#?(quiet)?(save(Table|Row|Cell)Cmd)$/ ) {
$action = $2;
$minor = $1 ? 1 : 0;
Expand Down Expand Up @@ -110,10 +110,10 @@ sub process {
}
else {
$text =~ s/\\\n//gs;
my @ps = $query->param();
my @ps = $query->multi_param();
my $urps = {};
foreach my $p (@ps) {
my @vals = $query->param($p);
my @vals = $query->multi_param($p);

# We interpreted multi-value parameters as comma-separated
# lists. This is what checkboxes, select+multi etc. use.
Expand Down
8 changes: 4 additions & 4 deletions TablePlugin/lib/Foswiki/Plugins/TablePlugin/Core.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1864,9 +1864,9 @@ sub handler {

# Copy existing values
my ( @origSort, @origTable, @origUp );
@origSort = $cgi->param('sortcol');
@origTable = $cgi->param('table');
@origUp = $cgi->param('up'); # NOTE: internal parameter
@origSort = $cgi->multi_param('sortcol');
@origTable = $cgi->multi_param('table');
@origUp = $cgi->multi_param('up'); # NOTE: internal parameter
$cgi->delete( 'sortcol', 'table', 'up' );
$url = $cgi->url( -absolute => 1, -path => 1 ) . '?';
my $queryString = $cgi->query_string();
Expand All @@ -1878,7 +1878,7 @@ sub handler {
$cgi->param( -name => 'up', -value => \@origUp ) if @origUp;

$sortColFromUrl =
$cgi->param('sortcol'); # zero based: 0 is first column
$cgi->param('sortcol'); # zero based: 0 is first column
if ( defined $sortColFromUrl && $sortColFromUrl !~ m/^[0-9]+$/ ) {
$sortColFromUrl = 0;
}
Expand Down
14 changes: 7 additions & 7 deletions UnitTestContrib/test/unit/EngineTests.pm
Original file line number Diff line number Diff line change
Expand Up @@ -198,10 +198,10 @@ sub _fillSimpleParam {
sub _fillMultiParam {
my $req = shift;
$req->deleteAll();
$req->param( -name => 'p1', -value => [ 0, 0, 7 ] );
$req->param( -name => 'p2', -value => [ '0', 'v21' ] );
$req->param( -name => 'p+', -value => [ 'a.#<>;', "'<html>'" ] );
$req->param( -name => '0', -value => [ '', '' ] );
$req->multi_param( -name => 'p1', -value => [ 0, 0, 7 ] );
$req->multi_param( -name => 'p2', -value => [ '0', 'v21' ] );
$req->multi_param( -name => 'p+', -value => [ 'a.#<>;', "'<html>'" ] );
$req->multi_param( -name => '0', -value => [ '', '' ] );
return $req;
}

Expand All @@ -214,10 +214,10 @@ sub checkParam {
[ $result->param ],
'Wrong parameter names'
);
foreach my $p ( $req->param ) {
foreach my $p ( $req->multi_param ) {
$this->assert_deep_equals(
[ $req->param($p) ],
[ $result->param($p) ],
[ $req->multi_param($p) ],
[ $result->multi_param($p) ],
'Wrong parameter value'
);
}
Expand Down
14 changes: 7 additions & 7 deletions UnitTestContrib/test/unit/Fn_URLPARAM.pm
Original file line number Diff line number Diff line change
Expand Up @@ -135,48 +135,48 @@ sub test_multiple {
my @multiple = ( 'foo', 'bar', 'baz' );

$this->{request}
->param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
->multi_param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
$str =
$this->{test_topicObject}
->expandMacros('%URLPARAM{"multi" multiple="on"}%');
$this->assert_str_equals( "foo\nbar\nbaz", "$str" );

$this->{request}
->param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
->multi_param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
$str =
$this->{test_topicObject}
->expandMacros('%URLPARAM{"multi" multiple="on" separator=","}%');
$this->assert_str_equals( "foo,bar,baz", "$str" );

$this->{request}
->param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
->multi_param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
$str =
$this->{test_topicObject}
->expandMacros('%URLPARAM{"multi" multiple="on" separator=""}%');
$this->assert_str_equals( "foobarbaz", "$str" );

$this->{request}
->param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
->multi_param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
$str =
$this->{test_topicObject}
->expandMacros('%URLPARAM{"multi" multiple="-$item-" separator=" "}%');
$this->assert_str_equals( "-foo- -bar- -baz-", "$str" );

$this->{request}
->param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
->multi_param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
$str =
$this->{test_topicObject}
->expandMacros('%URLPARAM{"multi" multiple="-$item-" separator=""}%');
$this->assert_str_equals( "-foo--bar--baz-", "$str" );

$this->{request}
->param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
->multi_param( -name => 'multi', -value => [ 'foo', 'bar', 'baz' ] );
$str =
$this->{test_topicObject}->expandMacros(
'%URLPARAM{"multi" multiple="-$percnt$item-" encode="none"}%');
$this->assert_str_equals( "-%foo-\n-%bar-\n-%baz-", "$str" );

$this->{request}->param(
$this->{request}->multi_param(
-name => 'multi',
-value => [ 'f!"£$' . "\n" . '{}[]o', 'b%^&*:@;\'r', 'b()_+-=<>?,./|z' ]
);
Expand Down
4 changes: 2 additions & 2 deletions UnitTestContrib/test/unit/RegisterTests.pm
Original file line number Diff line number Diff line change
Expand Up @@ -2682,7 +2682,7 @@ sub verify_registerVerifyOKApproved {
# need to verify that we issue an approval.
my $query = Unit::Request->new(
{
'code' => [ $this->{session}->{request}->param('code') ],
'code' => [ scalar $this->{session}->{request}->param('code') ],
'action' => ['verify']
}
);
Expand Down Expand Up @@ -2820,7 +2820,7 @@ sub verify_registerVerifyOKDisapproved {
# need to verify that we issue an approval.
my $query = Unit::Request->new(
{
'code' => [ $this->{session}->{request}->param('code') ],
'code' => [ scalar $this->{session}->{request}->param('code') ],
'action' => ['verify']
}
);
Expand Down
11 changes: 7 additions & 4 deletions UnitTestContrib/test/unit/RequestCacheTests.pm
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,18 @@ sub test_simpleparams {
$this->assert($uid);
$req = new Foswiki::Request('');
$cache->load( $uid, $req );
my @values = $req->param('multi');
my @values = $req->multi_param('multi');
$this->assert_str_equals( 2, scalar @values, 'Wrong number of values' );
$this->assert_str_equals( 'm1', $values[0], 'Wrong parameter value' );
$this->assert_str_equals( 'm2', $values[1], 'Wrong parameter value' );

# Item12956: undef parameters are written out as "empty".
$this->assert_str_equals( '', $req->param('undef'),
'Wrong parameter value' );
@values = $req->param('multi_undef');
$this->assert_str_equals(
'',
scalar $req->param('undef'),
'Wrong parameter value'
);
@values = $req->multi_param('multi_undef');
$this->assert_str_equals( 0, scalar @values, 'Wrong parameter value' );
$this->assert_str_equals( "BURP", $req->method() );
$this->assert_str_equals( "/bad/wolf", $req->path_info() );
Expand Down
Loading

0 comments on commit 8c3ded3

Please sign in to comment.