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 @@