X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FSearch%2FBuild.html;h=cffcbf4261439ed20699b14d9aaa86428950c6bd;hp=b200f90505e706b2bf0ba8d45713cc2d663fd3a8;hb=5b5eb87bf66f1fac003a13dc2db48e8970c5c986;hpb=85e677b86fc37c54e6de2b06340351a28f5a5916 diff --git a/rt/share/html/Search/Build.html b/rt/share/html/Search/Build.html index b200f9050..cffcbf426 100644 --- a/rt/share/html/Search/Build.html +++ b/rt/share/html/Search/Build.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -53,7 +53,7 @@ %# Build/Edit.html (Advanced).) %# %# After doing some stuff with default arguments and saved searches, the ParseQuery -%# function (which is similar to, but not the same as, _parser in lib/RT/Tickets_SQL.pm) +%# function (which is similar to, but not the same as, _parser in lib/RT/Tickets.pm) %# converts the Query into a RT::Interface::Web::QueryBuilder::Tree. This mason file %# then adds stuff to or modifies the tree based on the actions that had been requested %# by clicking buttons. It then calls GetQueryAndOptionList on the tree to generate @@ -67,7 +67,6 @@ %# <& /Elements/Header, Title => $title &> <& /Elements/Tabs, %TabArgs &> -
@@ -140,7 +139,11 @@ if ( $NewQuery ) { my $current = $session{'CurrentSearchHash'}; my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {}; - my $default = { Query => '', Format => '', OrderBy => 'id', Order => 'ASC', RowsPerPage => 50 }; + my $default = { Query => '', + Format => '', + OrderBy => RT->Config->Get('DefaultSearchResultOrderBy'), + Order => RT->Config->Get('DefaultSearchResultOrder'), + RowsPerPage => 50 }; for( qw(Query Format OrderBy Order RowsPerPage) ) { $query{$_} = $current->{$_} unless defined $query{$_}; @@ -188,9 +191,15 @@ my @options = $tree->GetDisplayedNodes; my @current_values = grep defined, @options[@clauses]; my @new_values = (); +my $cf_field_names = + join "|", + map quotemeta, + grep { $RT::Tickets::FIELD_METADATA{$_}->[0] eq 'CUSTOMFIELD' } + sort keys %RT::Tickets::FIELD_METADATA; + # Try to find if we're adding a clause foreach my $arg ( keys %ARGS ) { - next unless $arg =~ m/^ValueOf([\w\.]+|'CF.{.*?}')$/ + next unless $arg =~ m/^ValueOf([\w\.]+|($cf_field_names).\{.*?\})$/ && ( ref $ARGS{$arg} eq "ARRAY" ? grep $_ ne '', @{ $ARGS{$arg} } : $ARGS{$arg} ne '' ); @@ -220,8 +229,9 @@ foreach my $arg ( keys %ARGS ) { for ( my $i = 0; $i < @ops; $i++ ) { my ( $op, $value ) = ( $ops[$i], $values[$i] ); next if !defined $value || $value eq ''; + my $rawvalue = $value; - if ( $value eq 'NULL' && $op =~ /=/ ) { + if ( $value =~ /^NULL$/i && $op =~ /=/ ) { if ( $op eq '=' ) { $op = "IS"; } @@ -234,16 +244,15 @@ foreach my $arg ( keys %ARGS ) { $value = "'$value'"; } - if ($keyword =~ /^'CF\.{(.*)}'/) { - my $cf = $1; - $cf =~ s/(['\\])/\\$1/g; - $keyword = "'CF.{$cf}'"; + if ($keyword =~ s/(['\\])/\\$1/g or $keyword =~ /[^{}\w\.]/) { + $keyword = "'$keyword'"; } my $clause = { Key => $keyword, Op => $op, - Value => $value + Value => $value, + RawValue => $rawvalue, }; push @new_values, RT::Interface::Web::QueryBuilder::Tree->new($clause);