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 272-277 sub _batch_db_query_from_terms { Link Here
272
274
273
            # These are implicitly joined with OR because the arrayref doesn't start with -and
275
            # These are implicitly joined with OR because the arrayref doesn't start with -and
274
            push @db_terms, \@term;
276
            push @db_terms, \@term;
277
        } elsif ( $index =~ /^marc-(\w{3})(\w)?$/ ) {
278
            my $column;
279
280
            # Yes, this is MySQL-specific and ugly. There seems to be no other way to ask
281
            # SQL::Abstract to compare a function value.
282
            if ( defined $2 ) {
283
                $column = q{ExtractValue(marcxml, '//datafield[@tag="} . $1 . q{"]/subfield[@code="} . $2 . q{"]')};
284
            } else {
285
                $column = q{ExtractValue(marcxml, '//controlfield[@tag="} . $1 . q{"]')};
286
            }
287
288
            my $op = '=';
289
290
            if ( $value =~ /\*/ ) {
291
                $value =~ s/\*/%/g;
292
                $op = 'LIKE';
293
            }
294
295
            push @db_terms, \[ "$column $op ?", $value ];
275
        } elsif ( $_batch_db_mapping->{$index} ) {
296
        } elsif ( $_batch_db_mapping->{$index} ) {
276
            push @db_terms, $_batch_db_mapping->{$index} => [ -and => _db_query_get_match_conditions( $index, $value ) ];
297
            push @db_terms, $_batch_db_mapping->{$index} => [ -and => _db_query_get_match_conditions( $index, $value ) ];
277
        } else {
298
        } else {
(-)a/koha-tmpl/intranet-tmpl/prog/css/cateditor.css (+4 lines)
Lines 329-334 body { Link Here
329
    width: 14em;
329
    width: 14em;
330
}
330
}
331
331
332
#advanced-search-fields .marc-subfield-input {
333
    width: 4em;
334
}
335
332
336
333
/*> Search results */
337
/*> Search results */
334
338
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc (-4 / +17 lines)
Lines 505-515 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
505
        var terms = {};
505
        var terms = {};
506
506
507
        $('#advanced-search-ui .search-box').each( function() {
507
        $('#advanced-search-ui .search-box').each( function() {
508
            if ( !this.value ) return;
508
            if ( !this.value || !$(this).data('qualifier') ) return;
509
509
510
            terms[ $(this).data('qualifier') ] = this.value;
510
            terms[ $(this).data('qualifier') ] = this.value;
511
        } );
511
        } );
512
512
513
        var marc_subfield = $('#advanced-search-by-marc-subfield').val();
514
        var marc_term = $('#advanced-search-by-marc').val();
515
516
        // This mess (also used as a pattern="" in the form) allows 00X or XXXx).
517
        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 ) {
518
            terms[ 'marc-' + marc_subfield ] = marc_term;
519
        }
520
513
        if ( $.isEmptyObject(terms) ) return;
521
        if ( $.isEmptyObject(terms) ) return;
514
522
515
        if ( Search.Run( z3950Servers, terms ) ) {
523
        if ( Search.Run( z3950Servers, terms ) ) {
Lines 739-749 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
739
                // Macros loaded on first show of modal
747
                // Macros loaded on first show of modal
740
                break;
748
                break;
741
            case 'selected_search_targets':
749
            case 'selected_search_targets':
750
                var batch_selected_for_search = false;
742
                $.each( z3950Servers, function( server_id, server ) {
751
                $.each( z3950Servers, function( server_id, server ) {
743
                    var saved_val = Preferences.user.selected_search_targets[server_id];
752
                    var saved_val = Preferences.user.selected_search_targets[server_id];
744
753
745
                    if ( saved_val != null ) server.checked = saved_val;
754
                    if ( saved_val != null ) server.checked = saved_val;
755
756
                    if ( server.checked && /^batch:/.test(server_id) ) batch_selected_for_search = true;
746
                } );
757
                } );
758
759
                $('#arbitrary-marc-search').toggle( batch_selected_for_search );
747
                break;
760
                break;
748
            case 'selected_save_targets':
761
            case 'selected_save_targets':
749
                $.each( state.saveTargets, function( target_id, target ) {
762
                $.each( state.saveTargets, function( target_id, target ) {
Lines 759-765 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
759
        function _addHandler( sel, event, handler ) {
772
        function _addHandler( sel, event, handler ) {
760
            $( sel ).on( event, function (e) {
773
            $( sel ).on( event, function (e) {
761
                e.preventDefault();
774
                e.preventDefault();
762
                handler( e, Preferences.user[pref] );
775
                handler.call( this, e, Preferences.user[pref] );
763
                Preferences.Save( [% logged_in_user.borrowernumber | html %] );
776
                Preferences.Save( [% logged_in_user.borrowernumber | html %] );
764
                showPreference(pref);
777
                showPreference(pref);
765
            } );
778
            } );
Lines 801-814 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
801
                } );
814
                } );
802
                break;
815
                break;
803
            case 'selected_save_targets':
816
            case 'selected_save_targets':
804
                $( document ).on( 'change', 'input.save-toggle-target', function() {
817
                _addLiveHandler( 'input.save-toggle-target', 'change', function() {
805
                    var target_id = $( this ).data('target-id');
818
                    var target_id = $( this ).data('target-id');
806
                    Preferences.user.selected_save_targets[target_id] = this.checked;
819
                    Preferences.user.selected_save_targets[target_id] = this.checked;
807
                    Preferences.Save( [% loggelogged_in_user.borrowernumber %] );
820
                    Preferences.Save( [% loggelogged_in_user.borrowernumber %] );
808
                } );
821
                } );
809
                break;
822
                break;
810
            case 'selected_search_targets':
823
            case 'selected_search_targets':
811
                $( document ).on( 'change', 'input.search-toggle-server', function() {
824
                _addLiveHandler( 'input.search-toggle-server', 'change', function() {
812
                    var server_id = $( this ).closest('li').data('server-id');
825
                    var server_id = $( this ).closest('li').data('server-id');
813
                    Preferences.user.selected_search_targets[server_id] = this.checked;
826
                    Preferences.user.selected_search_targets[server_id] = this.checked;
814
                    Preferences.Save( [% logged_in_user.borrowernumber | html %] );
827
                    Preferences.Save( [% logged_in_user.borrowernumber | html %] );
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/editor.tt (-1 / +5 lines)
Lines 192-197 Link Here
192
                <label for="advanced-search-by-publication-date">Publication date:</label>
192
                <label for="advanced-search-by-publication-date">Publication date:</label>
193
                <input class="search-box" data-qualifier="date" id="advanced-search-by-publication-date" />
193
                <input class="search-box" data-qualifier="date" id="advanced-search-by-publication-date" />
194
            </li>
194
            </li>
195
            <li id="arbitrary-marc-search" style="display-none">
196
                <label for="advanced-search-by-marc">MARC field/subfield (XXXx):</label>
197
                <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]" />
198
                <input class="search-box" id="advanced-search-by-marc" />
199
            </li>
195
        </ul>
200
        </ul>
196
    </div>
201
    </div>
197
    </div>
202
    </div>
198
- 

Return to bug 19270