aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin/Users.pm17
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/Comment.pm1
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/Problem.pm1
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/User.pm5
-rw-r--r--perllib/FixMyStreet/Roles/FullTextSearch.pm9
5 files changed, 15 insertions, 18 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin/Users.pm b/perllib/FixMyStreet/App/Controller/Admin/Users.pm
index 9fd4cd32d..a05e737ab 100644
--- a/perllib/FixMyStreet/App/Controller/Admin/Users.pm
+++ b/perllib/FixMyStreet/App/Controller/Admin/Users.pm
@@ -49,26 +49,11 @@ sub index :Path : Args(0) {
my $role = $c->get_param('role');
my $users = $c->cobrand->users;
if ($search || $role) {
- my $isearch;
if ($search) {
$search = $self->trim($search);
$search =~ s/^<(.*)>$/$1/; # In case email wrapped in <...>
$c->stash->{searched} = $search;
-
- $isearch = '%' . $search . '%';
- my $search_n = 0;
- $search_n = int($search) if $search =~ /^\d+$/;
-
- $users = $users->search(
- {
- -or => [
- email => { ilike => $isearch },
- phone => { ilike => $isearch },
- 'me.name' => { ilike => $isearch },
- from_body => $search_n,
- ]
- }
- );
+ $users = $users->search_text($search);
}
if ($role) {
$c->stash->{role_selected} = $role;
diff --git a/perllib/FixMyStreet/DB/ResultSet/Comment.pm b/perllib/FixMyStreet/DB/ResultSet/Comment.pm
index 0a4403e52..ea38b3e14 100644
--- a/perllib/FixMyStreet/DB/ResultSet/Comment.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/Comment.pm
@@ -9,6 +9,7 @@ with 'FixMyStreet::Roles::FullTextSearch';
__PACKAGE__->load_components('Helper::ResultSet::Me');
sub text_search_columns { qw(id problem_id name text) }
sub text_search_nulls { qw(name) }
+sub text_search_translate { '/.' }
sub to_body {
my ($rs, $bodies) = @_;
diff --git a/perllib/FixMyStreet/DB/ResultSet/Problem.pm b/perllib/FixMyStreet/DB/ResultSet/Problem.pm
index 3ac9187ee..a7c365c1e 100644
--- a/perllib/FixMyStreet/DB/ResultSet/Problem.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/Problem.pm
@@ -13,6 +13,7 @@ with 'FixMyStreet::Roles::FullTextSearch';
__PACKAGE__->load_components('Helper::ResultSet::Me');
sub text_search_columns { qw(id external_id bodies_str name title detail) }
sub text_search_nulls { qw(external_id bodies_str) }
+sub text_search_translate { '/.' }
my $site_key;
diff --git a/perllib/FixMyStreet/DB/ResultSet/User.pm b/perllib/FixMyStreet/DB/ResultSet/User.pm
index 9a8a50559..baae024bf 100644
--- a/perllib/FixMyStreet/DB/ResultSet/User.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/User.pm
@@ -5,6 +5,11 @@ use strict;
use warnings;
use Moo;
+with 'FixMyStreet::Roles::FullTextSearch';
+__PACKAGE__->load_components('Helper::ResultSet::Me');
+sub text_search_columns { qw(id name email phone) }
+sub text_search_nulls { qw(name email phone) }
+sub text_search_translate { '@.' }
# The database has a partial unique index on email (when email_verified is
# true), and phone (when phone_verified is true). In the code, we can only
diff --git a/perllib/FixMyStreet/Roles/FullTextSearch.pm b/perllib/FixMyStreet/Roles/FullTextSearch.pm
index dc7730798..871b1d185 100644
--- a/perllib/FixMyStreet/Roles/FullTextSearch.pm
+++ b/perllib/FixMyStreet/Roles/FullTextSearch.pm
@@ -5,6 +5,7 @@ use FixMyStreet;
requires 'text_search_columns';
requires 'text_search_nulls';
+requires 'text_search_translate';
sub search_text {
my ($rs, $query) = @_;
@@ -14,8 +15,12 @@ sub search_text {
$nulls{$_} ? "coalesce($col, '')" : $col;
} $rs->text_search_columns;
my $vector = join(" || ' ' || ", @cols);
- $vector = "translate($vector, '/.', ' ')";
- my $bind = "translate(?, '/.', ' ')";
+ my $bind = '?';
+ if (my $trans = $rs->text_search_translate) {
+ my $replace = ' ' x length $trans;
+ $vector = "translate($vector, '$trans', '$replace')";
+ $bind = "translate(?, '$trans', '$replace')";
+ }
my $config = FixMyStreet->config('DB_FULL_TEXT_SEARCH_CONFIG') || 'english';
$rs->search(\[ "to_tsvector('$config', $vector) @@ plainto_tsquery('$config', $bind)", $query ]);
}