diff --git a/C4/Utils/DataTables/Members.pm b/C4/Utils/DataTables/Members.pm index 39d3743fcd..1f7facb470 100644 --- a/C4/Utils/DataTables/Members.pm +++ b/C4/Utils/DataTables/Members.pm @@ -12,7 +12,7 @@ sub search { my $firstletter = $params->{firstletter}; my $categorycode = $params->{categorycode}; my $branchcode = $params->{branchcode}; - my $searchtype = $params->{searchtype}; + my $searchtype = $params->{searchtype} || 'start_with'; my $searchfieldstype = $params->{searchfieldstype} || 'standard'; my $dt_params = $params->{dt_params}; @@ -58,8 +58,6 @@ sub search { push @where_args, $branchcode; } - # split on coma - $searchmember =~ s/,/ /g if $searchmember; my $searchfields = { standard => 'surname,firstname,othernames,cardnumber,userid', email => 'email,emailpro,B_email', @@ -71,14 +69,28 @@ sub search { sort1 => 'sort1', sort2 => 'sort2', }; - foreach my $term ( split / /, $searchmember) { + + # * is replaced with % for sql + $searchmember =~ s/\*/%/g; + + # split into search terms + my @terms; + # consider coma as space + $searchmember =~ s/,/ /g; + if ( $searchtype eq 'contain' ) { + @terms = split / /, $searchmember; + } else { + @terms = ($searchmember); + } + + foreach my $term (@terms) { next unless $term; - $searchmember =~ s/\*/%/g; # * is replaced with % for sql + $term .= '%' # end with anything if $term !~ /%$/; $term = "%$term" # begin with anythin unless start_with - if (defined $searchtype) && $searchtype eq "contain" - && $term !~ /^%/; + if $searchtype eq 'contain' && $term !~ /^%/; + my @where_strs_or; for my $searchfield ( split /,/, $searchfields->{$searchfieldstype} ) { push @where_strs_or, "borrowers." . $dbh->quote_identifier($searchfield) . " LIKE ?"; @@ -196,11 +208,11 @@ $params is a hashref with some keys: =item searchtype - Can be 'contain' or 'start_with'. Used for the searchmember parameter. + Can be 'contain' or 'start_with' (default value). Used for the searchmember parameter. =item searchfieldstype - Can be 'standard', 'email', 'borrowernumber', 'phone', 'address' or 'dateofbirth', 'sort1', 'sort2' + Can be 'standard' (default value), 'email', 'borrowernumber', 'phone', 'address' or 'dateofbirth', 'sort1', 'sort2' =item dt_params diff --git a/t/DataTables/Members.t b/t/DataTables/Members.t index 942f93f6eb..c9dcc7f8a8 100644 --- a/t/DataTables/Members.t +++ b/t/DataTables/Members.t @@ -6,7 +6,7 @@ use_ok( "C4::Utils::DataTables::Members" ); my $patrons = C4::Utils::DataTables::Members::search({ searchmember => "Doe", searchfieldstype => 'standard', - searchtype => 'contains' + searchtype => 'contain' }); isnt( $patrons->{iTotalDisplayRecords}, undef, "The iTotalDisplayRecords key is defined"); diff --git a/t/db_dependent/Utils/Datatables_Members.t b/t/db_dependent/Utils/Datatables_Members.t index 57b42f7aba..9f8cda8d54 100644 --- a/t/db_dependent/Utils/Datatables_Members.t +++ b/t/db_dependent/Utils/Datatables_Members.t @@ -104,7 +104,7 @@ my %dt_params = ( my $search_results = C4::Utils::DataTables::Members::search({ searchmember => "John Doe", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -120,7 +120,7 @@ ok( $search_results->{ patrons }[0]->{ cardnumber } eq $john_doe{ cardnumber } $search_results = C4::Utils::DataTables::Members::search({ searchmember => "Jane Doe", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -136,7 +136,7 @@ is( $search_results->{ patrons }[0]->{ cardnumber }, $search_results = C4::Utils::DataTables::Members::search({ searchmember => "John", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -156,7 +156,7 @@ is( $search_results->{ patrons }[1]->{ cardnumber }, $search_results = C4::Utils::DataTables::Members::search({ searchmember => "Doe", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -176,7 +176,7 @@ is( $search_results->{ patrons }[1]->{ cardnumber }, $search_results = C4::Utils::DataTables::Members::search({ searchmember => "john.doe", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -187,7 +187,7 @@ is( $search_results->{ iTotalDisplayRecords }, 1, $search_results = C4::Utils::DataTables::Members::search({ searchmember => "john.doe", searchfieldstype => 'userid', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -211,7 +211,7 @@ t::lib::Mocks::mock_preference('ExtendedPatronAttributes', 1); $search_results = C4::Utils::DataTables::Members::search({ searchmember => "common user", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params }); @@ -222,7 +222,7 @@ t::lib::Mocks::mock_preference('ExtendedPatronAttributes', 0); $search_results = C4::Utils::DataTables::Members::search({ searchmember => "common user", searchfieldstype => 'standard', - searchtype => 'contains', + searchtype => 'contain', branchcode => $branchcode, dt_params => \%dt_params });