From 3120e258a9a859bba3b64e493cf6d922d8b49e4c Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 20 Feb 2018 14:18:01 -0800 Subject: fix broadband reporting with giant query URLs (large numbers of package defs, etc.), RT#76765 --- httemplate/elements/create_uri_query | 23 ++++++++++++++++++++++- httemplate/elements/email-link.html | 13 +++++++------ httemplate/elements/handle_uri_query | 12 +++++++++++- 3 files changed, 40 insertions(+), 8 deletions(-) (limited to 'httemplate/elements') diff --git a/httemplate/elements/create_uri_query b/httemplate/elements/create_uri_query index ce6249e0e..4d360b255 100644 --- a/httemplate/elements/create_uri_query +++ b/httemplate/elements/create_uri_query @@ -1,3 +1,24 @@ +<%doc> + +Instead of: + + my $link = $self_url. '?'. $cgi->query_string; + +which will fail when the query string exceeds ~2k (browser-dependent) + + +Usage: + + my $query = $m->scomp('/elements/create_uri_query'); + my $link = $self_url. '?'. $query; + +You can also pass an optional 'secure'=>1 parameter to force handling as +session data, even for short query strings. + + +See also handle_uri_query which needs to be used by the target page. + + <% $query %>\ <%init> @@ -14,7 +35,7 @@ if ( $opt{secure} ) { } -my $query = $cgi->query_string; +my $query = $opt{query} || $cgi->query_string; if ( length($query) > 1920 || $opt{secure} ) { #stupid IE 2083 URL limit diff --git a/httemplate/elements/email-link.html b/httemplate/elements/email-link.html index 16935cf98..012afff1a 100644 --- a/httemplate/elements/email-link.html +++ b/httemplate/elements/email-link.html @@ -1,18 +1,19 @@ % if ( $FS::CurrentUser::CurrentUser->access_right('Bulk send customer notices') ) { -<%$label%> +<%$label%> % } <%init> my %opt = @_; -my $table = $opt{'table'}; -my $agent_virt_agentnum = $opt{'agent_virt_agentnum'}; my $search_hash = $opt{'search_hash'}; -die "'table' required" if !$table; +die "'table' required" if !$opt{'table'}; die "'search_hash' required" if !$search_hash; my $uri = new URI; my @params = map { $_, $search_hash->{$_} } sort keys %$search_hash; -$uri->query_form(@params); -my $query = $uri->query; +$uri->query_form( @params, + table => $opt{'table'}, + agent_virt_agentnum => $opt{'agent_virt_agentnum'} + ); +my $query = $m->scomp('/elements/create_uri_query', query=>$uri->query); my $label = ($opt{'label'} || 'Email a notice to these customers'); diff --git a/httemplate/elements/handle_uri_query b/httemplate/elements/handle_uri_query index 2dea96a6d..b86ef0092 100644 --- a/httemplate/elements/handle_uri_query +++ b/httemplate/elements/handle_uri_query @@ -1,9 +1,17 @@ +<%doc> + +Usage (before accessing any $cgi parameters): + +$m->comp('/elements/handle_uri_query'); + + <%init> -my %opt = @_; +#my %opt = @_; if ( $cgi->param('redirect') ) { my $session = $cgi->param('redirect'); + my $maxrecords = $cgi->param('maxrecords'); my $pref = $FS::CurrentUser::CurrentUser->option("redirect$session"); die "unknown redirect session $session\n" unless length($pref); @@ -16,5 +24,7 @@ if ( $cgi->param('redirect') ) { $cgi->param($param, $decrypted); } + $cgi->param('maxrecords', $maxrecords) if $maxrecords =~ /^(\d+)$/; + } -- cgit v1.2.1