diff options
| author | ivan <ivan> | 2010-11-27 03:55:07 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2010-11-27 03:55:07 +0000 | 
| commit | 02a6bfc2dba1a1f9c1efcd7d7da258b33be76d30 (patch) | |
| tree | 8e17e022feffadaaed19a6db1d6e630d7656a5e5 | |
| parent | 4d510fab209dcfd9e6ec75a55ee653593e2d1435 (diff) | |
fix "URL limit exceeded" when errors are present on quick payment entry, RT#9917
| -rw-r--r-- | httemplate/elements/create_uri_query | 25 | ||||
| -rw-r--r-- | httemplate/elements/handle_uri_query | 8 | ||||
| -rw-r--r-- | httemplate/misc/batch-cust_pay.html | 4 | ||||
| -rw-r--r-- | httemplate/misc/process/batch-cust_pay.cgi | 5 | 
4 files changed, 39 insertions, 3 deletions
| diff --git a/httemplate/elements/create_uri_query b/httemplate/elements/create_uri_query new file mode 100644 index 000000000..32d8e2f87 --- /dev/null +++ b/httemplate/elements/create_uri_query @@ -0,0 +1,25 @@ +<% $query %>\ +<%init> + +my $query = $cgi->query_string; + +if ( length($query) > 1920 ) { #stupid IE 2083 URL limit + +  my $session = int(rand(4294967296)); #XXX +  my $pref = new FS::access_user_pref({ +    'usernum'    => $FS::CurrentUser::CurrentUser->usernum, +    'prefname'   => "redirect$session", +    'prefvalue'  => $query, +    'expiration' => time + 3600, #1h?  1m? +  }); +  my $pref_error = $pref->insert; +  if ( $pref_error ) { +    die "FATAL: couldn't even set redirect cookie: $pref_error". +        " attempting to set redirect$session to $query\n"; +  } + +  $query = "redirect=$session"; + +} + +</%init> diff --git a/httemplate/elements/handle_uri_query b/httemplate/elements/handle_uri_query new file mode 100644 index 000000000..eb7ea1ae1 --- /dev/null +++ b/httemplate/elements/handle_uri_query @@ -0,0 +1,8 @@ +<%init> +if ( $cgi->param('redirect') ) { +  my $session = $cgi->param('redirect'); +  my $pref = $FS::CurrentUser::CurrentUser->option("redirect$session"); +  die "unknown redirect session $session\n" unless length($pref); +  $cgi = new CGI($pref); +} +</%init> diff --git a/httemplate/misc/batch-cust_pay.html b/httemplate/misc/batch-cust_pay.html index 610f6e1db..c5ed6d852 100644 --- a/httemplate/misc/batch-cust_pay.html +++ b/httemplate/misc/batch-cust_pay.html @@ -107,7 +107,7 @@ my @footer  = ( '$', '_TOTAL', '' );  my @footer_align = ( 'c', 'r', 'r' );  my $custnum_update_callback = ''; -if ( FS::Record->scalar_sql('SELECT count(*) FROM part_pkg_discount') ) { +if ( FS::Record->scalar_sql('SELECT COUNT(*) FROM part_pkg_discount') ) {    push @header, '';    push @fields, 'discount_term';    push @types, 'immutable'; @@ -128,4 +128,6 @@ push @colors, '#ff0000';  push @footer, '';  push @footer_align, ''; +$m->comp('/elements/handle_uri_query'); +  </%init> diff --git a/httemplate/misc/process/batch-cust_pay.cgi b/httemplate/misc/process/batch-cust_pay.cgi index e51b9e6d7..aa371266c 100644 --- a/httemplate/misc/process/batch-cust_pay.cgi +++ b/httemplate/misc/process/batch-cust_pay.cgi @@ -54,9 +54,10 @@  %  %    my $erow=0;  %    $cgi->param('error'. $erow++, shift @errors) while @errors; -%  %     -<% $cgi->redirect($p.'batch-cust_pay.html?'. $cgi->query_string) +%    my $query = $m->scomp('/elements/create_uri_query'); +% +<% $cgi->redirect($p."batch-cust_pay.html?$query")    %>  % } else { | 
