
jesse at bestpractical
Nov 6, 2009, 12:53 PM
Post #1 of 1
(84 views)
Permalink
|
|
rt branch, librarize-search-logic, updated. 12204037e3c29765fbbca46eeced23cdf27b8543
|
|
The branch, librarize-search-logic has been updated via 12204037e3c29765fbbca46eeced23cdf27b8543 (commit) via b0b6def3db958817ff6705ef75de887757b66701 (commit) from 297ef780c6f9f7de719ff69a0e02414e38b9d53d (commit) Summary of changes: lib/RT/Interface/Web/QueryBuilder.pm | 52 ++++++++++++++++++++++ share/html/Search/Build.html | 78 ++++------------------------------ 2 files changed, 60 insertions(+), 70 deletions(-) - Log ----------------------------------------------------------------- commit b0b6def3db958817ff6705ef75de887757b66701 Author: Jesse Vincent <jesse[at]bestpractical.com> Date: Fri Nov 6 15:33:52 2009 -0500 extract query update into a sub diff --git a/share/html/Search/Build.html b/share/html/Search/Build.html index 8232943..f05d75a 100644 --- a/share/html/Search/Build.html +++ b/share/html/Search/Build.html @@ -77,17 +77,11 @@ <input type="hidden" class="hidden" name="saved_search_id" value="<% $saved_search->{'id'} || '' %>" /> <input type="hidden" class="hidden" name="query" value="<% $query{'query'} || '' %>" /> <input type="hidden" class="hidden" name="format" value="<% $query{'format'} || '' %>" /> - - - - <div id="pick-criteria"> <& Elements/PickCriteria, query => $query{'query'}, queues => $queues &> </div> <& /Elements/Submit, label => _('Add these terms'), name => 'add_clause'&> <& /Elements/Submit, label => _('Add these terms and Search'), name => 'do_search'&> - - <div id="editquery"> <& Elements/EditQuery, %ARGS, @@ -99,22 +93,15 @@ <div id="editsearches"> <& Elements/EditSearches, %$saved_search, current_search => \%query &> </div> - - - <span id="display-options"> - <& Elements/DisplayOptions, %ARGS, %query, available_columns => $available_columns, current_format => $current_format, &> - <& /Elements/Submit, label => _('Update format and Search'), name => 'do_search', id=>"formatbuttons"&> </span> - </form> - </&> <%INIT> my $saved_search = {}; @@ -122,7 +109,6 @@ my %query = map { $_ => $ARGS{$_} } qw(query format order_by order rows_per_page my @actions = RT::Interface::Web::QueryBuilder->load_saved_search( \%ARGS, \%query, $saved_search ); if ($new_query) { - # Wipe all data-carrying variables clear if we want a new # search, or we're deleting an old one.. %query = (); @@ -139,16 +125,14 @@ if ($new_query) { my $prefs = Jifty->web->current_user->user_object->preferences("SearchDisplay") || {}; my $default = { query => '', format => '', order_by => 'id', order => 'ASC', rows_per_page => 50 }; - for (qw(query format order_by order rows_per_page)) { - $query{$_} = $current->{$_} unless defined $query{$_}; - $query{$_} = $prefs->{$_} unless defined $query{$_}; - $query{$_} = $default->{$_} unless defined $query{$_}; + for my $param (qw(query format order_by order rows_per_page)) { + $query{$param} = $current->{$param} unless defined $query{$param}; + $query{$param} = $prefs->{$param} unless defined $query{$param}; + $query{$param} = $default->{$param} unless defined $query{$param}; } - for (qw(order order_by)) { - if ( ref $query{$_} eq "ARRAY" ) { - $query{$_} = join( '|', @{ $query{$_} } ); - } + for my $param (qw(order order_by)) { + $query{$param} = join( '|', @{ $query{$param} } ) if ( ref $query{$param} eq "ARRAY" ) } $query{'format'} = RT::Interface::Web->scrub_html( $query{'format'} ) if ( $query{'format'} ); @@ -160,55 +144,60 @@ push @actions, $tree->parse_sql( query => $query{query} ); my @options = $tree->get_displayed_nodes; my @current_values = grep defined, @options[@clauses]; -my @new_values = (); -foreach my $arg ( keys %ARGS ) { - # Try to find if we're adding a clause - next - unless $arg =~ m/^value_of_(\w+|'CF.{.*?}')$/ - && ( ref $ARGS{$arg} eq "ARRAY" ? grep $_ ne '', @{ $ARGS{$arg} } : $ARGS{$arg} ne '' ); +my $process_args = sub { + my $cgi_args = shift; + my @new_values; + foreach my $arg ( keys %$cgi_args ) { - my $field = $1; + # Try to find if we're adding a clause + next + unless $arg =~ m/^value_of_(\w+|'CF.{.*?}')$/ + && ( ref $cgi_args->{$arg} eq "ARRAY" + ? grep $_ ne '', @{ $cgi_args->{$arg} } + : $cgi_args->{$arg} ne '' ); - #figure out if it's a grouping - my $keyword = $ARGS{ $field . "_field" } || $field; + my $field = $1; - my $op_name = $field . "_op"; - my $op_value = 'value_of_' . $field; + #figure out if it's a grouping + my $keyword = $cgi_args->{ $field . "_field" } || $field; + my $op_name = $field . "_op"; + my $op_value = 'value_of_' . $field; - # we may have many keys/values to iterate over, because there - # may be more than one CF with the same name. - my @ops = ref $ARGS{$op_value} ? @{ $ARGS{$op_name} } : $ARGS{$op_name}; - my @values = ref $ARGS{$op_value} ? @{ $ARGS{$op_value} } : $ARGS{$op_value}; + # we may have many keys/values to iterate over, because there + # may be more than one CF with the same name. + my @ops = ref $cgi_args->{$op_value} ? @{ $cgi_args->{$op_name} } : $cgi_args->{$op_name}; + my @values = ref $cgi_args->{$op_value} ? @{ $cgi_args->{$op_value} } : $cgi_args->{$op_value}; - Jifty->log->debug("Bad Parameters passed into Query Builder") unless @ops == @values; + Jifty->log->debug("Bad Parameters passed into Query Builder") unless @ops == @values; - for ( my $i = 0; $i < @ops; $i++ ) { - my ( $op, $value ) = ( $ops[$i], $values[$i] ); - next if !defined $value || $value eq ''; + for ( my $i = 0; $i < @ops; $i++ ) { + my ( $op, $value ) = ( $ops[$i], $values[$i] ); + next if !defined $value || $value eq ''; - if ( $value eq 'NULL' && $op =~ /=/ ) { - if ( $op eq '=' ) { + if ( $value eq 'NULL' && $op eq '=' ) { $op = "IS"; - } elsif ( $op eq '!=' ) { + } elsif ( $value eq 'NULL' && $op eq '!=' ) { $op = "IS NOT"; - } - } else { - $value =~ s/'/\\'/g; - $value = "'$value'" unless $value =~ /^\d+$/; - } - - push @new_values, RT::Interface::Web::QueryBuilder::Tree->new( - { Key => $keyword, - Op => $op, - Value => $value + } else { + $value =~ s/'/\\'/g; + $value = "'$value'" unless $value =~ /^\d+$/; } - ); - } -} + push @new_values, + RT::Interface::Web::QueryBuilder::Tree->new( + { Key => $keyword, + Op => $op, + Value => $value + } + ); + } + } + return @new_values; +}; +my @new_values = $process_args->(\%ARGS); push @actions, RT::Interface::Web::QueryBuilder->process_query( \%ARGS, $tree, \@current_values, \@new_values, ); # Rebuild $Query based on the additions / movements @@ -231,8 +220,7 @@ push @actions, RT::Interface::Web::QueryBuilder->save_search( \%ARGS, \%query, $ # Push the updates into the session so we don't loose 'em -Jifty->web->session->set( 'CurrentSearchHash', - { %query, +Jifty->web->session->set( 'CurrentSearchHash', { %query, search_id => $saved_search->{'id'}, object => $saved_search->{'object'}, description => $saved_search->{'description'}, commit 12204037e3c29765fbbca46eeced23cdf27b8543 Author: Jesse Vincent <jesse[at]bestpractical.com> Date: Fri Nov 6 15:52:47 2009 -0500 move "get new query bits" out of <%init> and into lib diff --git a/lib/RT/Interface/Web/QueryBuilder.pm b/lib/RT/Interface/Web/QueryBuilder.pm index d59cb09..c38d01f 100644 --- a/lib/RT/Interface/Web/QueryBuilder.pm +++ b/lib/RT/Interface/Web/QueryBuilder.pm @@ -160,6 +160,58 @@ sub process_query { return @results; } +sub process_query_additions { + my $self = shift; + my $cgi_args = shift; + my @new_values; + foreach my $arg ( keys %$cgi_args ) { + + # Try to find if we're adding a clause + next + unless $arg =~ m/^value_of_(\w+|'CF.{.*?}')$/ + && (ref $cgi_args->{$arg} eq "ARRAY" + ? grep $_ ne '', @{ $cgi_args->{$arg} } + : $cgi_args->{$arg} ne '' + ); + + my $field = $1; + + #figure out if it's a grouping + my $keyword = $cgi_args->{ $field . "_field" } || $field; + my $op_name = $field . "_op"; + my $op_value = 'value_of_' . $field; + + # we may have many keys/values to iterate over, because there + # may be more than one CF with the same name. + my @ops = ref $cgi_args->{$op_value} ? @{ $cgi_args->{$op_name} } : $cgi_args->{$op_name}; + my @values = ref $cgi_args->{$op_value} ? @{ $cgi_args->{$op_value} } : $cgi_args->{$op_value}; + + Jifty->log->debug("Bad Parameters passed into Query Builder") unless @ops == @values; + + for ( my $i = 0; $i < @ops; $i++ ) { + my ( $op, $value ) = ( $ops[$i], $values[$i] ); + next if !defined $value || $value eq ''; + + if ( $value eq 'NULL' && $op eq '=' ) { + $op = "IS"; + } elsif ( $value eq 'NULL' && $op eq '!=' ) { + $op = "IS NOT"; + } else { + $value =~ s/'/\\'/g; + $value = "'$value'" unless $value =~ /^\d+$/; + } + + push @new_values, + RT::Interface::Web::QueryBuilder::Tree->new( + { Key => $keyword, + Op => $op, + Value => $value + } + ); + } + } + return @new_values; +}; sub load_saved_search { my $self = shift; diff --git a/share/html/Search/Build.html b/share/html/Search/Build.html index f05d75a..176d843 100644 --- a/share/html/Search/Build.html +++ b/share/html/Search/Build.html @@ -146,58 +146,8 @@ my @options = $tree->get_displayed_nodes; my @current_values = grep defined, @options[@clauses]; -my $process_args = sub { - my $cgi_args = shift; - my @new_values; - foreach my $arg ( keys %$cgi_args ) { - - # Try to find if we're adding a clause - next - unless $arg =~ m/^value_of_(\w+|'CF.{.*?}')$/ - && ( ref $cgi_args->{$arg} eq "ARRAY" - ? grep $_ ne '', @{ $cgi_args->{$arg} } - : $cgi_args->{$arg} ne '' ); - - my $field = $1; - - #figure out if it's a grouping - my $keyword = $cgi_args->{ $field . "_field" } || $field; - my $op_name = $field . "_op"; - my $op_value = 'value_of_' . $field; - - # we may have many keys/values to iterate over, because there - # may be more than one CF with the same name. - my @ops = ref $cgi_args->{$op_value} ? @{ $cgi_args->{$op_name} } : $cgi_args->{$op_name}; - my @values = ref $cgi_args->{$op_value} ? @{ $cgi_args->{$op_value} } : $cgi_args->{$op_value}; - - Jifty->log->debug("Bad Parameters passed into Query Builder") unless @ops == @values; - - for ( my $i = 0; $i < @ops; $i++ ) { - my ( $op, $value ) = ( $ops[$i], $values[$i] ); - next if !defined $value || $value eq ''; - - if ( $value eq 'NULL' && $op eq '=' ) { - $op = "IS"; - } elsif ( $value eq 'NULL' && $op eq '!=' ) { - $op = "IS NOT"; - } else { - $value =~ s/'/\\'/g; - $value = "'$value'" unless $value =~ /^\d+$/; - } - - push @new_values, - RT::Interface::Web::QueryBuilder::Tree->new( - { Key => $keyword, - Op => $op, - Value => $value - } - ); - } - } - return @new_values; -}; - -my @new_values = $process_args->(\%ARGS); + +my @new_values = RT::Interface::Web::QueryBuilder->process_query_additions( \%ARGS ); push @actions, RT::Interface::Web::QueryBuilder->process_query( \%ARGS, $tree, \@current_values, \@new_values, ); # Rebuild $Query based on the additions / movements ----------------------------------------------------------------------- _______________________________________________ Rt-commit mailing list Rt-commit[at]lists.bestpractical.com http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit
|