@@ -, +, @@ --- C4/Utils/DataTables.pm | 22 ++++++++++++++++------ C4/Utils/DataTables/Members.pm | 4 +++- C4/Utils/DataTables/VirtualShelves.pm | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) --- a/C4/Utils/DataTables.pm +++ a/C4/Utils/DataTables.pm @@ -85,8 +85,7 @@ sub dt_build_orderby { my $param = shift; my $i = 0; - my $orderby; - my @orderbys; + my ( @orderbys, $sql_orderby, $es_orderby ); while(exists $param->{'iSortCol_'.$i}){ my $iSortCol = $param->{'iSortCol_'.$i}; my $sSortDir = $param->{'sSortDir_'.$i}; @@ -95,15 +94,26 @@ sub dt_build_orderby { ? split(' ', $param->{$mDataProp.'_sorton'}) : (); if(@sort_fields > 0) { - push @orderbys, "$_ $sSortDir" foreach (@sort_fields); + push @orderbys, {field => $_, order => $sSortDir} foreach (@sort_fields); } else { - push @orderbys, "$mDataProp $sSortDir"; + push @orderbys, {field => $mDataProp, order => $sSortDir}; } $i++; } - $orderby = " ORDER BY " . join(',', @orderbys) . " " if @orderbys; - return $orderby; + $sql_orderby = + " ORDER BY " + . join( ',', map { $_->{field} . " " . $_->{order} } @orderbys ) . " " + if @orderbys; + $es_orderby = [ + map { + my $f = $_->{field}; + $f =~ s|^.*\.||; # Remove table name + my $h = { $f => $_->{order} }; + $h + } @orderbys + ]; + return { sql => $sql_orderby, es => $es_orderby }; } =head2 dt_build_having --- a/C4/Utils/DataTables/Members.pm +++ a/C4/Utils/DataTables/Members.pm @@ -119,12 +119,14 @@ sub search { } @conditions = ('*') unless @conditions; + my $orderby = dt_build_orderby($dt_params); my $query = { query => { query_string => { query => join ' AND ', @conditions, } - } + }, + sort => $orderby->{es}, }; # Do not display more than 1000 patrons --- a/C4/Utils/DataTables/VirtualShelves.pm +++ a/C4/Utils/DataTables/VirtualShelves.pm @@ -81,7 +81,7 @@ sub search { my $where; $where = " WHERE " . join (" AND ", @where_strs) if @where_strs; - my $orderby = dt_build_orderby($dt_params); + my $orderby = dt_build_orderby($dt_params)->{sql}; $orderby =~ s|shelfnumber|vs.shelfnumber| if $orderby; my $limit; --