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

(-)a/Koha/MetaSearcher.pm (-2 / +23 lines)
Lines 219-225 sub _pqf_query_from_terms { Link Here
219
    my $query;
219
    my $query;
220
220
221
    while ( my ( $index, $value ) = each %$terms ) {
221
    while ( my ( $index, $value ) = each %$terms ) {
222
        $value =~ s/"/\\"/;
222
        next unless ( $_pqf_mapping->{$index} );
223
224
        $value =~ s/"/\\"/g;
223
225
224
        my $term = '@attr ' . $_pqf_mapping->{$index} . ' "' . $value . '"';
226
        my $term = '@attr ' . $_pqf_mapping->{$index} . ' "' . $value . '"';
225
227
Lines 237-243 sub _db_query_get_match_conditions { Link Here
237
    my ( $index, $value ) = @_;
239
    my ( $index, $value ) = @_;
238
240
239
    if ( $value =~ /\*/ ) {
241
    if ( $value =~ /\*/ ) {
240
        $value =~ s/\*/%/;
242
        $value =~ s/\*/%/g;
241
        return { -like => $value };
243
        return { -like => $value };
242
    } elsif ( $index eq 'isbn' ) {
244
    } elsif ( $index eq 'isbn' ) {
243
        return C4::Koha::GetNormalizedISBN($value) || $value;
245
        return C4::Koha::GetNormalizedISBN($value) || $value;
Lines 269-274 sub _batch_db_query_from_terms { Link Here
269
271
270
            # These are implicitly joined with OR because the arrayref doesn't start with -and
272
            # These are implicitly joined with OR because the arrayref doesn't start with -and
271
            push @db_terms, \@term;
273
            push @db_terms, \@term;
274
        } elsif ( $index =~ /^marc-(\w{3})(\w)?$/ ) {
275
            my $column;
276
277
            # Yes, this is MySQL-specific and ugly. There seems to be no other way to ask
278
            # SQL::Abstract to compare a function value.
279
            if ( defined $2 ) {
280
                $column = q{ExtractValue(marcxml, '//datafield[@tag="} . $1 . q{"]/subfield[@code="} . $2 . q{"]')};
281
            } else {
282
                $column = q{ExtractValue(marcxml, '//controlfield[@tag="} . $1 . q{"]')};
283
            }
284
285
            my $op = '=';
286
287
            if ( $value =~ /\*/ ) {
288
                $value =~ s/\*/%/g;
289
                $op = 'LIKE';
290
            }
291
292
            push @db_terms, \[ "$column $op ?", $value ];
272
        } elsif ( $_batch_db_mapping->{$index} ) {
293
        } elsif ( $_batch_db_mapping->{$index} ) {
273
            push @db_terms, $_batch_db_mapping->{$index} => [ -and => _db_query_get_match_conditions( $index, $value ) ];
294
            push @db_terms, $_batch_db_mapping->{$index} => [ -and => _db_query_get_match_conditions( $index, $value ) ];
274
        } else {
295
        } else {
(-)a/koha-tmpl/intranet-tmpl/prog/css/cateditor.css (+4 lines)
Lines 311-316 body { Link Here
311
    width: 14em;
311
    width: 14em;
312
}
312
}
313
313
314
#advanced-search-fields .marc-subfield-input {
315
    width: 4em;
316
}
317
314
.fa.fa-spinner {
318
.fa.fa-spinner {
315
    display: inline-block;
319
    display: inline-block;
316
    height: 16px;
320
    height: 16px;
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc (-5 / +17 lines)
Lines 477-487 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
477
        var terms = {};
477
        var terms = {};
478
478
479
        $('#advanced-search-ui .search-box').each( function() {
479
        $('#advanced-search-ui .search-box').each( function() {
480
            if ( !this.value ) return;
480
            if ( !this.value || !$(this).data('qualifier') ) return;
481
481
482
            terms[ $(this).data('qualifier') ] = this.value;
482
            terms[ $(this).data('qualifier') ] = this.value;
483
        } );
483
        } );
484
484
485
        var marc_subfield = $('#advanced-search-by-marc-subfield').val();
486
        var marc_term = $('#advanced-search-by-marc').val();
487
488
        // This mess (also used as a pattern="" in the form) allows 00X or XXXx).
489
        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 ) {
490
            terms[ 'marc-' + marc_subfield ] = marc_term;
491
        }
492
485
        if ( $.isEmptyObject(terms) ) return;
493
        if ( $.isEmptyObject(terms) ) return;
486
494
487
        if ( Search.Run( z3950Servers, terms ) ) {
495
        if ( Search.Run( z3950Servers, terms ) ) {
Lines 709-719 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
709
                // Macros loaded on first show of modal
717
                // Macros loaded on first show of modal
710
                break;
718
                break;
711
            case 'selected_search_targets':
719
            case 'selected_search_targets':
720
                var batch_selected_for_search = false;
712
                $.each( z3950Servers, function( server_id, server ) {
721
                $.each( z3950Servers, function( server_id, server ) {
713
                    var saved_val = Preferences.user.selected_search_targets[server_id];
722
                    var saved_val = Preferences.user.selected_search_targets[server_id];
714
723
715
                    if ( saved_val != null ) server.checked = saved_val;
724
                    if ( saved_val != null ) server.checked = saved_val;
725
726
                    if ( server.checked && /^batch:/.test(server_id) ) batch_selected_for_search = true;
716
                } );
727
                } );
728
729
                $('#arbitrary-marc-search').toggle( batch_selected_for_search );
717
                break;
730
                break;
718
            case 'selected_save_targets':
731
            case 'selected_save_targets':
719
                $.each( state.saveTargets, function( target_id, target ) {
732
                $.each( state.saveTargets, function( target_id, target ) {
Lines 729-735 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
729
        function _addHandler( sel, event, handler ) {
742
        function _addHandler( sel, event, handler ) {
730
            $( sel ).on( event, function (e) {
743
            $( sel ).on( event, function (e) {
731
                e.preventDefault();
744
                e.preventDefault();
732
                handler( e, Preferences.user[pref] );
745
                handler.call( this, e, Preferences.user[pref] );
733
                Preferences.Save( [% USER_INFO.borrowernumber %] );
746
                Preferences.Save( [% USER_INFO.borrowernumber %] );
734
                showPreference(pref);
747
                showPreference(pref);
735
            } );
748
            } );
Lines 771-787 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
771
                } );
784
                } );
772
                break;
785
                break;
773
            case 'selected_save_targets':
786
            case 'selected_save_targets':
774
                $( document ).on( 'change', 'input.save-toggle-target', function() {
787
                _addLiveHandler( 'input.save-toggle-target', 'change', function() {
775
                    var target_id = $( this ).data('target-id');
788
                    var target_id = $( this ).data('target-id');
776
                    Preferences.user.selected_save_targets[target_id] = this.checked;
789
                    Preferences.user.selected_save_targets[target_id] = this.checked;
777
                    Preferences.Save( [% USER_INFO.borrowernumber %] );
790
                    Preferences.Save( [% USER_INFO.borrowernumber %] );
778
                } );
791
                } );
779
                break;
792
                break;
780
            case 'selected_search_targets':
793
            case 'selected_search_targets':
781
                $( document ).on( 'change', 'input.search-toggle-server', function() {
794
                _addLiveHandler( 'input.search-toggle-server', 'change', function() {
782
                    var server_id = $( this ).closest('li').data('server-id');
795
                    var server_id = $( this ).closest('li').data('server-id');
783
                    Preferences.user.selected_search_targets[server_id] = this.checked;
796
                    Preferences.user.selected_search_targets[server_id] = this.checked;
784
                    Preferences.Save( [% USER_INFO.borrowernumber %] );
785
                } );
797
                } );
786
                break;
798
                break;
787
        }
799
        }
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/editor.tt (-1 / +5 lines)
Lines 176-181 Link Here
176
                <label for="advanced-search-by-publication-date">Publication date:</label>
176
                <label for="advanced-search-by-publication-date">Publication date:</label>
177
                <input class="search-box" data-qualifier="date" id="advanced-search-by-publication-date" />
177
                <input class="search-box" data-qualifier="date" id="advanced-search-by-publication-date" />
178
            </li>
178
            </li>
179
            <li id="arbitrary-marc-search" style="display-none">
180
                <label for="advanced-search-by-marc">MARC field/subfield (XXXx):</label>
181
                <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]" />
182
                <input class="search-box" id="advanced-search-by-marc" />
183
            </li>
179
        </ul>
184
        </ul>
180
    </div>
185
    </div>
181
    </div>
186
    </div>
182
- 

Return to bug 19270