diff options
author | Matthew Somerville <matthew@mysociety.org> | 2012-05-16 14:30:30 +0100 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2012-05-16 14:30:30 +0100 |
commit | d9f3bd47a94116871893f0417e7c836400bb04eb (patch) | |
tree | 1c140a6cb9ea3fd60dbf1532d2cb0bcfdaa703ad /perllib/FixMyStreet/App/Controller/Admin.pm | |
parent | 1ba0a33c9fa19f2fa46f16678785d1c90ed33eb0 (diff) | |
parent | 194173589eed229567646cedfc0e32621d18f1e7 (diff) |
Merge branch 'master' into bromley
Conflicts:
bin/send-reports
conf/crontab.ugly
conf/general.yml-example
db/schema.sql
perllib/FixMyStreet/App/Controller/Admin.pm
perllib/FixMyStreet/App/Controller/Report/New.pm
perllib/FixMyStreet/DB/Result/Comment.pm
perllib/FixMyStreet/DB/Result/Open311conf.pm
perllib/FixMyStreet/DB/Result/Problem.pm
perllib/FixMyStreet/DB/Result/User.pm
templates/web/default/js/validation_strings.html
templates/web/fixmystreet/auth/sign_out.html
templates/web/fixmystreet/report/new/councils_text_all.html
web/cobrands/fixmystreet/_base.scss
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Admin.pm')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 91 |
1 files changed, 63 insertions, 28 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index d6f613fd3..bbfa8170f 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -6,6 +6,7 @@ BEGIN { extends 'Catalyst::Controller'; } use POSIX qw(strftime strcoll); use Digest::MD5 qw(md5_hex); +use mySociety::EmailUtil qw(is_valid_email); use FixMyStreet::SendReport; @@ -486,17 +487,33 @@ sub search_reports : Path('search_reports') { $c->model('DB')->schema->storage->sql_maker->quote_char( '"' ); $c->model('DB')->schema->storage->sql_maker->name_sep( '.' ); + my $query; + if (is_valid_email($search)) { + $query = [ + 'user.email' => { ilike => $like_search }, + ]; + } elsif ($search =~ /^id:(\d+)$/) { + $query = [ + 'me.id' => int($1), + ]; + } elsif ($search =~ /^area:(\d+)$/) { + $query = [ + 'me.areas' => { like => "%,$1,%" } + ]; + } else { + $query = [ + 'me.id' => $search_n, + 'user.email' => { ilike => $like_search }, + 'me.name' => { ilike => $like_search }, + 'me.title' => { ilike => $like_search }, + detail => { ilike => $like_search }, + council => { like => $like_search }, + cobrand_data => { like => $like_search }, + ]; + } my $problems = $c->cobrand->problems->search( { - -or => [ - 'me.id' => $search_n, - 'user.email' => { ilike => $like_search }, - 'me.name' => { ilike => $like_search }, - 'me.title' => { ilike => $like_search }, - detail => { ilike => $like_search }, - council => { like => $like_search }, - cobrand_data => { like => $like_search }, - ] + -or => $query, }, { prefetch => 'user', @@ -512,26 +529,44 @@ sub search_reports : Path('search_reports') { $c->stash->{edit_council_contacts} = 1 if ( grep {$_ eq 'councilcontacts'} keys %{$c->stash->{allowed_pages}}); - my $updates = $c->model('DB::Comment')->search( - { - -or => [ - 'me.id' => $search_n, - 'problem.id' => $search_n, - 'user.email' => { ilike => $like_search }, - 'me.name' => { ilike => $like_search }, - text => { ilike => $like_search }, - 'me.cobrand_data' => { ilike => $like_search }, - %{ $site_restriction }, - ] - }, - { - -select => [ 'me.*', qw/problem.council problem.state/ ], - prefetch => [qw/user problem/], - order_by => [\"(me.state='hidden')",\"(problem.state='hidden')",'me.created'] - } - ); + if (is_valid_email($search)) { + $query = [ + 'user.email' => { ilike => $like_search }, + %{ $site_restriction }, + ]; + } elsif ($search =~ /^id:(\d+)$/) { + $query = [ + 'me.id' => int($1), + 'problem.id' => int($1), + %{ $site_restriction }, + ]; + } elsif ($search =~ /^area:(\d+)$/) { + $query = []; + } else { + $query = [ + 'me.id' => $search_n, + 'problem.id' => $search_n, + 'user.email' => { ilike => $like_search }, + 'me.name' => { ilike => $like_search }, + text => { ilike => $like_search }, + 'me.cobrand_data' => { ilike => $like_search }, + %{ $site_restriction }, + ]; + } - $c->stash->{updates} = [ $updates->all ]; + if (@$query) { + my $updates = $c->model('DB::Comment')->search( + { + -or => $query, + }, + { + -select => [ 'me.*', qw/problem.council problem.state/ ], + prefetch => [qw/user problem/], + order_by => [\"(me.state='hidden')",\"(problem.state='hidden')",'me.created'] + } + ); + $c->stash->{updates} = [ $updates->all ]; + } # Switch quoting back off. See above for explanation of this. $c->model('DB')->schema->storage->sql_maker->quote_char( '' ); |