# HG changeset patch # User Vincent Tondellier # Date 1482088471 -3600 # Node ID 5a99941ed0caa1bbc287b3c8659163c3305e4c09 # Parent 1a0fa98037fa64245f2594bf39a9741b0b8a2c72 Display an error message instead of a 500 page when the search string is invalid diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/Controller/CrashGroups.pm --- a/lib/CrashTest/Controller/CrashGroups.pm Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/Controller/CrashGroups.pm Sun Dec 18 20:14:31 2016 +0100 @@ -24,7 +24,13 @@ $self->validation->required('page')->like(qr/^[0-9]+$/); $page = scalar $self->validation->param("page") if $self->validation->is_valid('page'); - my ($results, $pager) = $self->crash_groups->index($page, $crashs_per_page, $self->req->param('search')); + my ($results, $pager, $err) = $self->crash_groups->index($page, $crashs_per_page, $self->req->param('search')); + + if($err) { + $self->app->log->info($err); + $self->stash(error => "Syntax error in search string: $err"); + } + #$self->app->log->debug(dumper $results); @@ -51,12 +57,17 @@ my $search = $self->req->param('search'); if(defined($search) && $search ne "") { - $search .= " AND " . "group_id=$group->{id}"; + $search = "(" . $search . ") AND " . "group_id=$group->{id}"; } else { $search = "group_id=$group->{id}"; } - my ($results, $pager) = $self->crash_reports->index($page, $crashs_per_page, $search); + my ($results, $pager, $err) = $self->crash_reports->index($page, $crashs_per_page, $search); + + if($err) { + $self->app->log->info($err); + $self->stash(warning => "Syntax error in search string: $err"); + } #$self->app->log->debug(dumper $results); diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/Controller/CrashReports.pm --- a/lib/CrashTest/Controller/CrashReports.pm Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/Controller/CrashReports.pm Sun Dec 18 20:14:31 2016 +0100 @@ -30,7 +30,12 @@ $self->validation->required('page')->like(qr/^[0-9]+$/); $page = scalar $self->validation->param("page") if $self->validation->is_valid('page'); - my ($results, $pager) = $self->crash_reports->index($page, $crashs_per_page, $self->req->param('search')); + my ($results, $pager, $err) = $self->crash_reports->index($page, $crashs_per_page, $self->req->param('search')); + + if($err) { + $self->app->log->info($err); + $self->stash(error => "Syntax error in search string: $err"); + } #$self->app->log->debug(dumper $results); diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm --- a/lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm Sun Dec 18 20:14:31 2016 +0100 @@ -52,10 +52,14 @@ my $where = ""; my @values = (); + my $err; if(defined($search_str) && $search_str ne "") { - my $q = $self->_build_query_from_search_string($search_str); - $where = "WHERE " . $q->[0]; - @values = @{$q->[1]}; + eval { + my $q = $self->_build_query_from_search_string($search_str); + $where = "WHERE " . $q->[0]; + @values = @{$q->[1]}; + }; + $err = $@; } my $count = $self->db->query(" @@ -102,7 +106,7 @@ @values, $pager->skipped, $pager->entries_per_page )->expand->hashes; - return ($results, $pager); + return ($results, $pager, $err); } sub get { diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm --- a/lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm Sun Dec 18 20:14:31 2016 +0100 @@ -57,10 +57,14 @@ my $where = ""; my @values = (); + my $err; if(defined($search_str) && $search_str ne "") { - my $q = $self->_build_query_from_search_string($search_str); - $where = "WHERE " . $q->[0]; - @values = @{$q->[1]}; + eval { + my $q = $self->_build_query_from_search_string($search_str); + $where = "WHERE " . $q->[0]; + @values = @{$q->[1]}; + }; + $err = $@; } my $count = $self->db->query(" @@ -101,7 +105,7 @@ $pager->skipped, $pager->entries_per_page )->expand->hashes; - return ($results, $pager); + return ($results, $pager, $err); } sub get { diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/Plugin/Storage/Sql/Utils.pm --- a/lib/CrashTest/Plugin/Storage/Sql/Utils.pm Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/Plugin/Storage/Sql/Utils.pm Sun Dec 18 20:14:31 2016 +0100 @@ -74,8 +74,18 @@ strict => 1, ); - my $query = $parser->parse($search, 1) - or die "Error in query: " . $parser->err; + my $query; + eval { + $query = $parser->parse($search, 1); + }; + if($@) { + # strip file and line info from message + $@ =~ /(.+)(?:\s+at\s+[^\s]+\s+line\s+\d+\.)$/; + my $msg = $1 || $@; + die($msg . "\n"); + } elsif(!defined($query)) { + die($parser->err . "\n"); + } # reset before calling dbi @values = (); diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/files/templates/layouts/_messages.html.ep --- a/lib/CrashTest/files/templates/layouts/_messages.html.ep Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/files/templates/layouts/_messages.html.ep Sun Dec 18 20:14:31 2016 +0100 @@ -1,41 +1,18 @@ -% content_for 'success_messages' => begin - % if ( defined($self->session->{success_messages}) && ( scalar( @{ $self->session->{success_messages}} ) > 0 ) ){ - %foreach my $notice ( @{ $self->session->{success_messages}} ){ -
- × -

<%= $notice; %>

-
- %} - %delete($self->session->{success_messages}); - %} -%end - -% content_for 'noticed_messages' => begin - % if ( defined($self->session->{notice_messages}) && ( scalar( @{ $self->session->{notice_messages}} ) > 0 ) ){ - %foreach my $notice ( @{ $self->session->{notice_messages}} ){ -
- × -

<%= $notice; %>

-
- %} - %delete($self->session->{notice_messages}); - %} -%end - -% content_for 'error_messages' => begin - % if ( defined($self->session->{error_messages}) && ( scalar( @{ $self->session->{error_messages}} ) > 0 ) ){ -
- %foreach my $error ( @{ $self->session->{error_messages}} ){ -
- × -

<%= $error; %>

-
- %} - %delete($self->session->{error_messages}); -
- %} -%end - -<%= content_for 'error_messages' %> -<%= content_for 'noticed_messages' %> -<%= content_for 'success_messages' %> +% for my $msgtype (qw) { +% my $msg = stash($msgtype); +% unless($msg) { +% $msg = flash($msgtype); +% } +% my $alert_class = $msgtype; +% $alert_class =~ s/error/danger/; +% if($msg) { + %=t div => (class => "alert alert-$alert_class") => begin + %=t button => (type => "button", class => "close", 'data-dismiss' => "alert", 'aria-label' => "Close") => begin + %=t span => ('aria-hidden' => "true") => begin + × + % end + % end + %=t p => $msg + % end +% } +% } diff -r 1a0fa98037fa -r 5a99941ed0ca lib/CrashTest/files/templates/layouts/main.html.ep --- a/lib/CrashTest/files/templates/layouts/main.html.ep Sun Dec 04 01:16:39 2016 +0100 +++ b/lib/CrashTest/files/templates/layouts/main.html.ep Sun Dec 18 20:14:31 2016 +0100 @@ -20,6 +20,7 @@ %= include("layouts/_navbar")
<%= content_for 'hero_unit' %> + %= include("layouts/_messages") <%= content %>