diff --git a/lib/CXGN/Trait/Search.pm b/lib/CXGN/Trait/Search.pm index db51509eff..c3bf744e14 100644 --- a/lib/CXGN/Trait/Search.pm +++ b/lib/CXGN/Trait/Search.pm @@ -76,6 +76,11 @@ has 'trait_name_list' => ( is => 'rw', ); +has 'trait_synonym_list' => ( + isa => 'ArrayRef[Str]|Undef', + is =>'rw', +); + has 'trait_name_is_exact' => ( isa => 'Bool|Undef', is => 'rw', @@ -129,7 +134,9 @@ sub search { } if ($self->accession_list && scalar(@{$self->accession_list}) > 0){ - $and_conditions{'dbxref.accession'} = { -in => $self->accession_list }; + foreach my $term (@{$self->accession_list}) { + push @{$and_conditions{'dbxref.accession'}}, {'ilike' => '%' . $term . '%'}; + } } if ($self->trait_definition_list && scalar(@{$self->trait_definition_list}) > 0){ @@ -140,6 +147,20 @@ sub search { } } + if ($self->trait_synonym_list && scalar(@{$self->trait_synonym_list}) > 0){ + my @synonym_conditions; + + foreach (@{$self->trait_synonym_list}){ + my @words = split "\s+", $_; + my $match_string = join '%', @words; + + push @synonym_conditions, { + 'cvtermsynonyms.synonym' => { 'ilike' => '%' . $match_string . '%' } + }; + } + $and_conditions{'-or'} = \@synonym_conditions; + } + if ($self->trait_name_list && scalar(@{$self->trait_name_list}) > 0){ my $trait_name_is_exact = $self->trait_name_is_exact; if ($trait_name_is_exact){ @@ -173,10 +194,16 @@ sub search { $where_join{'type.name'} = 'VARIABLE_OF'; } + my @joins = ({'cvterm_relationship_subjects' => 'type'}, {'dbxref' => 'db'}); + + if ($self->trait_synonym_list && @{$self->trait_synonym_list}) { + push @joins, 'cvtermsynonyms'; + } + my $trait_rs = $schema->resultset("Cv::Cvterm")->search( \%and_conditions, { - join => [{'cvterm_relationship_subjects' => 'type'}, {'dbxref' => 'db'} ], + join => [{'cvterm_relationship_subjects' => 'type'}, {'dbxref' => 'db'}, 'cvtermsynonyms' ], where => \%where_join, order_by => { '-asc' => $order_by }, '+select' => ['db.name', 'dbxref.accession', 'type.name'], diff --git a/lib/SGN/Controller/AJAX/Search/Trait.pm b/lib/SGN/Controller/AJAX/Search/Trait.pm index 2c10f8715a..a6e77c7fef 100644 --- a/lib/SGN/Controller/AJAX/Search/Trait.pm +++ b/lib/SGN/Controller/AJAX/Search/Trait.pm @@ -50,6 +50,16 @@ sub search : Path('/ajax/search/traits') Args(0) { push @$subset_traits, $params->{trait_any_name}; } + my $trait_ids; + if ($params->{trait_id}){ + push @$trait_ids, $params->{trait_id}; + } + + my $trait_synonyms; + if ($params->{trait_synonym}){ + push @$trait_synonyms, $params->{trait_synonym}; + } + my $definitions; if ($params->{trait_definition}){ push @$definitions, $params->{trait_definition}; @@ -62,6 +72,8 @@ sub search : Path('/ajax/search/traits') Args(0) { limit => $limit, offset => $offset, trait_name_list => $subset_traits, + accession_list => $trait_ids, + trait_synonym_list => $trait_synonyms, trait_definition_list => $definitions }); my ($data, $records_total) = $trait_search->search(); diff --git a/lib/SGN/Controller/AJAX/Search/Treatment.pm b/lib/SGN/Controller/AJAX/Search/Treatment.pm index f998657fb8..ed362d3099 100644 --- a/lib/SGN/Controller/AJAX/Search/Treatment.pm +++ b/lib/SGN/Controller/AJAX/Search/Treatment.pm @@ -70,6 +70,16 @@ sub search : Path('/ajax/search/treatments') Args(0) { push @$subset_treatments, $params->{treatment_any_name}; } + my $treatment_ids; + if ($params->{treatment_id}){ + push @$treatment_ids, $params->{treatment_id}; + } + + my $treatment_synonyms; + if ($params->{treatment_synonym}){ + push @$treatment_synonyms, $params->{treatment_synonym}; + } + my $definitions; if ($params->{treatment_definition}){ push @$definitions, $params->{treatment_definition}; @@ -82,6 +92,8 @@ sub search : Path('/ajax/search/treatments') Args(0) { limit => $limit, offset => $offset, trait_name_list => $subset_treatments, + accession_list => $treatment_ids, + trait_synonym_list => $treatment_synonyms, trait_definition_list => $definitions }); my ($data, $records_total) = $trait_search->search(); diff --git a/mason/search/traits.mas b/mason/search/traits.mas index 644af7a8d0..cd5f707adc 100644 --- a/mason/search/traits.mas +++ b/mason/search/traits.mas @@ -21,6 +21,18 @@ +
+ +
+ +
+
+
+ +
+ +
+
@@ -161,6 +173,8 @@ jQuery(document).ready(function () { 'data': function(d) { d.trait_search_list_id = jQuery('#trait_search_list_select_list_select').val(); d.trait_any_name = jQuery('#trait_search_name').val(); + d.trait_id = jQuery('#trait_search_id').val(); + d.trait_synonym = jQuery('#trait_search_synonym').val(); d.trait_definition = jQuery('#trait_search_definition').val(); d.ontology_db_id = selectedontologies; } diff --git a/mason/search/treatments.mas b/mason/search/treatments.mas index 9f1c5cfa43..0160f7a71d 100644 --- a/mason/search/treatments.mas +++ b/mason/search/treatments.mas @@ -21,6 +21,18 @@
+
+ +
+ +
+
+
+ +
+ +
+
@@ -142,6 +154,8 @@ jQuery(document).ready(function () { 'data': function(d) { d.treatment_search_list_id = jQuery('#treatment_search_list_select_list_select').val(); d.treatment_any_name = jQuery('#treatment_search_name').val(); + d.treatment_id = jQuery('#treatment_search_id').val(); + d.treatment_synonym = jQuery('#treatment_search_synonym').val(); d.treatment_definition = jQuery('#treatment_search_definition').val(); d.ontology_db_id = selectedontologies; }