From: Emmanuel Lacour Date: Mon, 12 Oct 2015 15:36:40 +0000 (+0200) Subject: Fix empty file when exporting from simple search X-Git-Tag: 0.09~1 X-Git-Url: http://git.home-dn.net/?p=manu%2FRT-Extension-SearchResults-XLS.git;a=commitdiff_plain;h=e58295013fd9a1f43ce35d4b9a4638458bad809a Fix empty file when exporting from simple search To fix this big part of upstream Elements/Tabs code has been taken to manage the different way we can get query string/args. --- diff --git a/html/Callbacks/Results-XLS/Elements/Tabs/Privileged b/html/Callbacks/Results-XLS/Elements/Tabs/Privileged index 75eee5e..31b0f19 100644 --- a/html/Callbacks/Results-XLS/Elements/Tabs/Privileged +++ b/html/Callbacks/Results-XLS/Elements/Tabs/Privileged @@ -2,8 +2,8 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC -%# +%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# %# %# (Except where explicitly superseded by other copyright notices) %# @@ -56,26 +56,81 @@ my $query_string = sub { }; -if ( - ( - $request_path =~ m{^/Search/} - && $request_path !~ m{^/Search/Simple\.html} - ) - || ( $request_path =~ m{^/Search/Simple\.html} - && $DECODED_ARGS->{'q'} ) - ) { - +if ( + ( + $request_path =~ m{^/(?:Ticket|Search)/} + && $request_path !~ m{^/Search/Simple\.html} + ) + || ( $request_path =~ m{^/Search/Simple\.html} + && $DECODED_ARGS->{'q'} ) + ) +{ + + my $search = Menu()->child('search')->child('tickets'); + my $args = ''; my $has_query = ''; my $current_search = $session{"CurrentSearchHash"} || {}; + my $search_id = $DECODED_ARGS->{'SavedSearchLoad'} || $DECODED_ARGS->{'SavedSearchId'} || $current_search->{'SearchId'} || ''; + my $chart_id = $DECODED_ARGS->{'SavedChartSearchId'} || $current_search->{SavedChartSearchId}; + $has_query = 1 if ( $DECODED_ARGS->{'Query'} or $current_search->{'Query'} ); + my %query_args; + my %fallback_query_args = ( + SavedSearchId => ( $search_id eq 'new' ) ? undef : $search_id, + SavedChartSearchId => $chart_id, + ( + map { + my $p = $_; + $p => $DECODED_ARGS->{$p} || $current_search->{$p} + } qw(Query Format OrderBy Order Page) + ), + RowsPerPage => ( + defined $DECODED_ARGS->{'RowsPerPage'} + ? $DECODED_ARGS->{'RowsPerPage'} + : $current_search->{'RowsPerPage'} + ), + ); + + if ($DECODED_ARGS->{QueryString}) { + $args = '?' . $DECODED_ARGS->{QueryString}; + } + else { + my %final_query_args = (); + # key => callback to avoid unnecessary work + + for my $param (keys %fallback_query_args) { + $final_query_args{$param} = defined($DECODED_ARGS->{QueryArgs}->{$param}) + ? $DECODED_ARGS->{QueryArgs}->{$param} + : $fallback_query_args{$param}; + } + + for my $field (qw(Order OrderBy)) { + if ( ref( $final_query_args{$field} ) eq 'ARRAY' ) { + $final_query_args{$field} = join( "|", @{ $final_query_args{$field} } ); + } elsif (not defined $final_query_args{$field}) { + delete $final_query_args{$field}; + } + else { + $final_query_args{$field} ||= ''; + } + } + + $args = '?' . $query_string->(%final_query_args); + } + + my $current_search_menu; + if ( $request_path =~ m{^/Ticket} ) { + $current_search_menu = $search->child( 'current_search' ); + } else { + $current_search_menu = PageMenu(); + } if ( $has_query ) { - my $tabs = PageMenu; - my $feeds = $tabs->child('more'); - - $feeds->child( + my $more = $current_search_menu->child( 'more' ); + + $more->child( 'xls' => title => loc('XLS'), - path => '/Search/Results.xls?' . $query_string->( %{ $m->request_args } ) + path => '/Search/Results.xls?' . $args ); } }