summaryrefslogtreecommitdiff
path: root/httemplate/elements
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2018-02-20 14:17:55 -0800
committerIvan Kohler <ivan@freeside.biz>2018-02-20 14:17:55 -0800
commit266e0c3c894568fb06a15dfbcf4a4eb9bc6989b3 (patch)
treee4f587217458762bbb0a2f5da49f2eb9954e0f3b /httemplate/elements
parented2d4de2ea785d30a54fb069b29f9618a40113c9 (diff)
fix broadband reporting with giant query URLs (large numbers of package defs, etc.), RT#76765
Diffstat (limited to 'httemplate/elements')
-rw-r--r--httemplate/elements/create_uri_query23
-rw-r--r--httemplate/elements/email-link.html13
-rw-r--r--httemplate/elements/handle_uri_query12
3 files changed, 40 insertions, 8 deletions
diff --git a/httemplate/elements/create_uri_query b/httemplate/elements/create_uri_query
index ce6249e..4d360b2 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.
+
+</%doc>
<% $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 16935cf..012afff 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') ) {
-<A HREF="<%$p%>misc/email-customers.html?table=<%$table%>&agent_virt_agentnum=<%$agent_virt_agentnum%>&<%$query%>"><%$label%></A>
+<A HREF="<%$p%>misc/email-customers.html?<%$query%>"><%$label%></A>
% }
<%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');
</%init>
diff --git a/httemplate/elements/handle_uri_query b/httemplate/elements/handle_uri_query
index 2dea96a..b86ef00 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');
+
+</%doc>
<%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+)$/;
+
}
</%init>