From 07daff32b8a1505c4fd3e04c5f71c3f9f55c2e3f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 22 Feb 2013 15:45:10 +0100 Subject: [PATCH] Add a search feature This allows searching for projects, jobsets or jobs by name or description. --- src/lib/Hydra/Controller/Root.pm | 24 +++++++++++ src/root/layout.tt | 4 +- src/root/search.tt | 68 ++++++++++++++++++++++++++++++++ src/root/topbar.tt | 26 ++++++++---- 4 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 src/root/search.tt diff --git a/src/lib/Hydra/Controller/Root.pm b/src/lib/Hydra/Controller/Root.pm index c14a3005..9b1f1273 100644 --- a/src/lib/Hydra/Controller/Root.pm +++ b/src/lib/Hydra/Controller/Root.pm @@ -300,4 +300,28 @@ sub evals :Local Args(0) { } +sub search :Local Args(0) { + my ($self, $c) = @_; + $c->stash->{template} = 'search.tt'; + + my $query = trim $c->request->params->{"query"}; + + error($c, "Query is empty.") if $query eq ""; + error($c, "Invalid character in query.") + unless $query =~ /^[a-zA-Z0-9_\-]+$/; + + $c->stash->{projects} = [ $c->model('DB::Projects')->search( + { -or => [ name => { ilike => "%$query%" }, displayName => { ilike => "%$query%" }, description => { ilike => "%$query%" } ] }, + { order_by => ["name"] } ) ]; + + $c->stash->{jobsets} = [ $c->model('DB::Jobsets')->search( + { -or => [ name => { ilike => "%$query%" }, description => { ilike => "%$query%" } ] }, + { order_by => ["project", "name"] } ) ]; + + $c->stash->{jobs} = [ $c->model('DB::Jobs')->search( + { name => { ilike => "%$query%" } }, + { order_by => ["project", "jobset", "name"] } ) ]; +} + + 1; diff --git a/src/root/layout.tt b/src/root/layout.tt index 0c32cd85..970723f6 100644 --- a/src/root/layout.tt +++ b/src/root/layout.tt @@ -85,7 +85,7 @@