From 4f57b495043b11819ba9fab7745515e24a9deb6b Mon Sep 17 00:00:00 2001 From: Drake Date: Wed, 6 Dec 2006 20:22:12 +0000 Subject: [PATCH] Fix form processing bug with HTTP proxy. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/HttpProxy.pm | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 42f848160..f6645d3c1 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -46,6 +46,7 @@ - fix: subscription dates - fix: Default Rich Editor setting not rendering correctly - fix: visitor name disappearing on preview in CS + - fix: HTTP proxy not passing form elements through - The Events Calendar is now the new Calendar with some fun new features. All your existing Events Calendars will be migrated automatically. - rfe: multiple redirects on a page - which one? diff --git a/lib/WebGUI/Asset/Wobject/HttpProxy.pm b/lib/WebGUI/Asset/Wobject/HttpProxy.pm index 50c43716a..1d1966a4d 100644 --- a/lib/WebGUI/Asset/Wobject/HttpProxy.pm +++ b/lib/WebGUI/Asset/Wobject/HttpProxy.pm @@ -31,7 +31,9 @@ sub appendToUrl { my $url = shift; my $paramSet = shift; my $seperator = ($self->get("useAmpersand")) ? "&" : ";"; - if ($url =~ /\?/) { + if (index($url, '?') == length($url)-1) { + $url .= $paramSet; + } elsif (index($url, '?') >= 0) { $url .= $seperator.$paramSet; } else { $url .= '?'.$paramSet; @@ -298,18 +300,21 @@ sub view { if($requestMethod=~/GET/i) { my $params = $self->session->form->paramsHashRef(); for my $key (keys %{$params}) { + my $value = $params->{$key}; next unless ($key =~ s/^HttpProxy_//); # Skip non-proxied params - if (ref $params->{$key} eq "ARRAY") { + if (ref $value eq "ARRAY") { # Param value is an array reference # Add all values to URL - for my $value (@{$params->{$key}}) { - $proxiedUrl = $self->appendToUrl($proxiedUrl,"$key=$value"); + for my $subvalue (@$value) { + $proxiedUrl = $self->appendToUrl($proxiedUrl,"$key=$subvalue"); } } else { - $proxiedUrl = $self->appendToUrl($proxiedUrl,"$key=".$params->{$key}); + $proxiedUrl = $self->appendToUrl($proxiedUrl,"$key=$value"); } } ### DEBUG + #require Data::Dumper; + #$self->session->errorHandler->warn("DEBUG: ".Data::Dumper::Dumper($params)); #$self->session->errorHandler->warn("URL: $proxiedUrl"); $request = HTTP::Request->new(GET => $proxiedUrl, $header) || return "wrong url"; # Create GET request