%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%# 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
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{$_};
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 '' );
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";
}
$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);