View | Details | Raw Unified | Return to bug 23817
Collapse All | Expand All

(-)a/Koha/REST/Plugin/Objects.pm (+7 lines)
Lines 256-261 controller, and thus shouldn't be called twice in it. Link Here
256
            $c->stash('koha.pagination.base_total'   => $result_set->count);
256
            $c->stash('koha.pagination.base_total'   => $result_set->count);
257
            $c->stash('koha.pagination.query_params' => $args);
257
            $c->stash('koha.pagination.query_params' => $args);
258
258
259
            # Pre-process DBIC queries if controller supports it
260
            if ( $reserved_params->{'x-koha-request-id'} ){
261
                if ($c->can('preprocess_dbic_for_datatables')){
262
                    $c->preprocess_dbic_for_datatables($filtered_params,$attributes);
263
                }
264
            }
265
259
            # Generate the resultset
266
            # Generate the resultset
260
            my $objects_rs = $result_set->search( $filtered_params, $attributes );
267
            my $objects_rs = $result_set->search( $filtered_params, $attributes );
261
            # Stash the page total if requires, total otherwise
268
            # Stash the page total if requires, total otherwise
(-)a/Koha/REST/V1/Patrons.pm (+48 lines)
Lines 470-473 sub guarantors_can_see_checkouts { Link Here
470
    };
470
    };
471
}
471
}
472
472
473
sub _parse_dbic_query_for_dt {
474
    my ($q_params,$collector) = @_;
475
    if(ref($q_params) && ref($q_params) eq 'HASH') {
476
        foreach my $key (keys %{$q_params}) {
477
            #FIXME: The table preference is always required so we might want to handle other scenarios...
478
            if ($key eq 'me.phone'){
479
                my $query = $q_params->{$key};
480
                if ($query->{'like'}){
481
                    my $like = $query->{'like'};
482
                    #NOTE: Remove the hashref, and add a data structure to add to the WHERE clause via the attributes...
483
                    delete $q_params->{$key};
484
                    my $collection = \["regexp_replace(me.phone,?,?) LIKE ?","[^0-9]","",$like];
485
                    push(@$collector,$collection);
486
                    #NOTE: Rewrite the query to use a subquery where we can perform phone number normalization (but it's slow)
487
                    #$q_params->{$key} = {
488
                    #   '-in' => \["SELECT phone FROM borrowers WHERE regexp_replace(phone,?,?) LIKE ?","[^0-9]","",$query->{'like'}],
489
                    #};
490
                    #NOTE: Technically, you could replace the whole hashref, but that would nuke any OR query in the same hashref
491
                    #return \["regexp_replace(me.phone,?,?) LIKE ?","[^0-9]","",$query->{'like'}];
492
                }
493
            }
494
            else {
495
                $q_params->{$key} = _parse_dbic_query_for_dt($q_params->{$key},$collector);
496
            }
497
        }
498
       return $q_params;
499
    } elsif (ref($q_params) && ref($q_params) eq 'ARRAY') {
500
        foreach my $param (@$q_params){
501
            $param = _parse_dbic_query_for_dt($param,$collector);
502
        }
503
        return $q_params;
504
    } else {
505
        return $q_params;
506
    }
507
}
508
509
sub preprocess_dbic_for_datatables {
510
    my ($c,$q_params,$attributes) = @_;
511
    my @collector = ();
512
    my $rewritten_q_params = _parse_dbic_query_for_dt($q_params,\@collector);
513
    unless ($attributes->{where}){
514
        foreach my $collection (@collector){
515
            push(@{$attributes->{where}},$collection);
516
        }
517
    }
518
    return 1;
519
}
520
473
1;
521
1;
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc (-1 / +3 lines)
Lines 308-313 Link Here
308
                    if ( !search_fields ) {
308
                    if ( !search_fields ) {
309
                        search_fields = "[% Koha.Preference('DefaultPatronSearchFields') || 'firstname,middle_name,surname,othernames,cardnumber,userid' | html %]";
309
                        search_fields = "[% Koha.Preference('DefaultPatronSearchFields') || 'firstname,middle_name,surname,othernames,cardnumber,userid' | html %]";
310
                    }
310
                    }
311
                    if (search_fields == 'phone'){
312
                        patterns = [pattern.replace(/[^\+0-9]/g,'')];
313
                    }
311
314
312
                    let subquery_and = [];
315
                    let subquery_and = [];
313
                    patterns.forEach(function(pattern,i){
316
                    patterns.forEach(function(pattern,i){
314
- 

Return to bug 23817