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

(-)a/Koha/MetaSearcher.pm (-2 / +23 lines)
Lines 221-227 sub _pqf_query_from_terms { Link Here
221
    my $query;
221
    my $query;
222
222
223
    while ( my ( $index, $value ) = each %$terms ) {
223
    while ( my ( $index, $value ) = each %$terms ) {
224
        $value =~ s/"/\\"/;
224
        next unless ( $_pqf_mapping->{$index} );
225
226
        $value =~ s/"/\\"/g;
225
227
226
        my $term = '@attr ' . $_pqf_mapping->{$index} . ' "' . $value . '"';
228
        my $term = '@attr ' . $_pqf_mapping->{$index} . ' "' . $value . '"';
227
229
Lines 239-245 sub _db_query_get_match_conditions { Link Here
239
    my ( $index, $value ) = @_;
241
    my ( $index, $value ) = @_;
240
242
241
    if ( $value =~ /\*/ ) {
243
    if ( $value =~ /\*/ ) {
242
        $value =~ s/\*/%/;
244
        $value =~ s/\*/%/g;
243
        return { -like => $value };
245
        return { -like => $value };
244
    } elsif ( $index eq 'isbn' ) {
246
    } elsif ( $index eq 'isbn' ) {
245
        return C4::Koha::GetNormalizedISBN($value) || $value;
247
        return C4::Koha::GetNormalizedISBN($value) || $value;
Lines 271-276 sub _batch_db_query_from_terms { Link Here
271
273
272
            # These are implicitly joined with OR because the arrayref doesn't start with -and
274
            # These are implicitly joined with OR because the arrayref doesn't start with -and
273
            push @db_terms, \@term;
275
            push @db_terms, \@term;
276
        } elsif ( $index =~ /^marc-(\w{3})(\w)?$/ ) {
277
            my $column;
278
279
            # Yes, this is MySQL-specific and ugly. There seems to be no other way to ask
280
            # SQL::Abstract to compare a function value.
281
            if ( defined $2 ) {
282
                $column = q{ExtractValue(marcxml, '//datafield[@tag="} . $1 . q{"]/subfield[@code="} . $2 . q{"]')};
283
            } else {
284
                $column = q{ExtractValue(marcxml, '//controlfield[@tag="} . $1 . q{"]')};
285
            }
286
287
            my $op = '=';
288
289
            if ( $value =~ /\*/ ) {
290
                $value =~ s/\*/%/g;
291
                $op = 'LIKE';
292
            }
293
294
            push @db_terms, \[ "$column $op ?", $value ];
274
        } elsif ( $_batch_db_mapping->{$index} ) {
295
        } elsif ( $_batch_db_mapping->{$index} ) {
275
            push @db_terms, $_batch_db_mapping->{$index} => [ -and => _db_query_get_match_conditions( $index, $value ) ];
296
            push @db_terms, $_batch_db_mapping->{$index} => [ -and => _db_query_get_match_conditions( $index, $value ) ];
276
        } else {
297
        } else {
(-)a/koha-tmpl/intranet-tmpl/prog/css/cateditor.css (+4 lines)
Lines 318-323 body { Link Here
318
    width: 14em;
318
    width: 14em;
319
}
319
}
320
320
321
#advanced-search-fields .marc-subfield-input {
322
    width: 4em;
323
}
324
321
.fa.fa-spinner {
325
.fa.fa-spinner {
322
    display: inline-block;
326
    display: inline-block;
323
    height: 16px;
327
    height: 16px;
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc (-6 / +19 lines)
Lines 485-495 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
485
        var terms = {};
485
        var terms = {};
486
486
487
        $('#advanced-search-ui .search-box').each( function() {
487
        $('#advanced-search-ui .search-box').each( function() {
488
            if ( !this.value ) return;
488
            if ( !this.value || !$(this).data('qualifier') ) return;
489
489
490
            terms[ $(this).data('qualifier') ] = this.value;
490
            terms[ $(this).data('qualifier') ] = this.value;
491
        } );
491
        } );
492
492
493
        var marc_subfield = $('#advanced-search-by-marc-subfield').val();
494
        var marc_term = $('#advanced-search-by-marc').val();
495
496
        // This mess (also used as a pattern="" in the form) allows 00X or XXXx).
497
        if ( /^(00[0-9A-Za-z]|([1-9A-Za-z][0-9A-Za-z]{2}|0[1-9A-Za-z][0-9A-Za-z])[0-9A-Za-z])$/.test(marc_subfield) && marc_term ) {
498
            terms[ 'marc-' + marc_subfield ] = marc_term;
499
        }
500
493
        if ( $.isEmptyObject(terms) ) return;
501
        if ( $.isEmptyObject(terms) ) return;
494
502
495
        if ( Search.Run( z3950Servers, terms ) ) {
503
        if ( Search.Run( z3950Servers, terms ) ) {
Lines 717-727 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
717
                // Macros loaded on first show of modal
725
                // Macros loaded on first show of modal
718
                break;
726
                break;
719
            case 'selected_search_targets':
727
            case 'selected_search_targets':
728
                var batch_selected_for_search = false;
720
                $.each( z3950Servers, function( server_id, server ) {
729
                $.each( z3950Servers, function( server_id, server ) {
721
                    var saved_val = Preferences.user.selected_search_targets[server_id];
730
                    var saved_val = Preferences.user.selected_search_targets[server_id];
722
731
723
                    if ( saved_val != null ) server.checked = saved_val;
732
                    if ( saved_val != null ) server.checked = saved_val;
733
734
                    if ( server.checked && /^batch:/.test(server_id) ) batch_selected_for_search = true;
724
                } );
735
                } );
736
737
                $('#arbitrary-marc-search').toggle( batch_selected_for_search );
725
                break;
738
                break;
726
            case 'selected_save_targets':
739
            case 'selected_save_targets':
727
                $.each( state.saveTargets, function( target_id, target ) {
740
                $.each( state.saveTargets, function( target_id, target ) {
Lines 737-743 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
737
        function _addHandler( sel, event, handler ) {
750
        function _addHandler( sel, event, handler ) {
738
            $( sel ).on( event, function (e) {
751
            $( sel ).on( event, function (e) {
739
                e.preventDefault();
752
                e.preventDefault();
740
                handler( e, Preferences.user[pref] );
753
                handler.call( this, e, Preferences.user[pref] );
741
                Preferences.Save( [% logged_in_user.borrowernumber %] );
754
                Preferences.Save( [% logged_in_user.borrowernumber %] );
742
                showPreference(pref);
755
                showPreference(pref);
743
            } );
756
            } );
Lines 747-753 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
747
            $( document ).on( event, sel, function (e) {
760
            $( document ).on( event, sel, function (e) {
748
                e.preventDefault();
761
                e.preventDefault();
749
                handler.call( this, e, Preferences.user[pref] );
762
                handler.call( this, e, Preferences.user[pref] );
750
                Preferences.Save( [% USER_INFO.borrowernumber %] );
763
                Preferences.Save( [% logged_in_user.borrowernumber %] );
751
                showPreference(pref);
764
                showPreference(pref);
752
            } );
765
            } );
753
        }
766
        }
Lines 779-792 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
779
                } );
792
                } );
780
                break;
793
                break;
781
            case 'selected_save_targets':
794
            case 'selected_save_targets':
782
                $( document ).on( 'change', 'input.save-toggle-target', function() {
795
                _addLiveHandler( 'input.save-toggle-target', 'change', function() {
783
                    var target_id = $( this ).data('target-id');
796
                    var target_id = $( this ).data('target-id');
784
                    Preferences.user.selected_save_targets[target_id] = this.checked;
797
                    Preferences.user.selected_save_targets[target_id] = this.checked;
785
                    Preferences.Save( [% USER_INFO.borrowernumber %] );
798
                    Preferences.Save( [% logged_in_user.borrowernumber %] );
786
                } );
799
                } );
787
                break;
800
                break;
788
            case 'selected_search_targets':
801
            case 'selected_search_targets':
789
                $( document ).on( 'change', 'input.search-toggle-server', function() {
802
                _addLiveHandler( 'input.search-toggle-server', 'change', function() {
790
                    var server_id = $( this ).closest('li').data('server-id');
803
                    var server_id = $( this ).closest('li').data('server-id');
791
                    Preferences.user.selected_search_targets[server_id] = this.checked;
804
                    Preferences.user.selected_search_targets[server_id] = this.checked;
792
                    Preferences.Save( [% logged_in_user.borrowernumber %] );
805
                    Preferences.Save( [% logged_in_user.borrowernumber %] );
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/editor.tt (-1 / +5 lines)
Lines 178-183 Link Here
178
                <label for="advanced-search-by-publication-date">Publication date:</label>
178
                <label for="advanced-search-by-publication-date">Publication date:</label>
179
                <input class="search-box" data-qualifier="date" id="advanced-search-by-publication-date" />
179
                <input class="search-box" data-qualifier="date" id="advanced-search-by-publication-date" />
180
            </li>
180
            </li>
181
            <li id="arbitrary-marc-search" style="display-none">
182
                <label for="advanced-search-by-marc">MARC field/subfield (XXXx):</label>
183
                <input class="marc-subfield-input" id="advanced-search-by-marc-subfield" pattern="00[0-9A-Za-z]|([1-9A-Za-z][0-9A-Za-z]{2}|0[1-9A-Za-z][0-9A-Za-z])[0-9A-Za-z]" />
184
                <input class="search-box" id="advanced-search-by-marc" />
185
            </li>
181
        </ul>
186
        </ul>
182
    </div>
187
    </div>
183
    </div>
188
    </div>
184
- 

Return to bug 19270