9026660451
This fixes the following issues: * Spaces are now allowed in indicators * Shift-Enter is available to insert a newline if needed * Item tags, if present, will prevent saving (as they are not correctly processed by the backend) * biblionumber tags (999 in MARC21) will be stripped before the record is saved to Koha, to prevent their modification Signed-off-by: Nick Clemens <nick@quecheelibrary.org> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
123 lines
3.8 KiB
JavaScript
123 lines
3.8 KiB
JavaScript
/**
|
|
* Copyright 2015 ByWater Solutions
|
|
*
|
|
* This file is part of Koha.
|
|
*
|
|
* Koha is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Koha is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
*/
|
|
|
|
define( [ 'koha-backend', 'marc-record' ], function( KohaBackend, MARC ) {
|
|
var _options;
|
|
var _records = {};
|
|
var _last;
|
|
|
|
var _pqfMapping = {
|
|
author: '1=1004', // s=al',
|
|
cn_dewey: '1=13',
|
|
cn_lc: '1=16',
|
|
date: '1=30', // r=r',
|
|
isbn: '1=7',
|
|
issn: '1=8',
|
|
lccn: '1=9',
|
|
local_number: '1=12',
|
|
music_identifier: '1=51',
|
|
standard_identifier: '1=1007',
|
|
subject: '1=21', // s=al',
|
|
term: '1=1016', // t=l,r s=al',
|
|
title: '1=4', // s=al',
|
|
}
|
|
|
|
var Search = {
|
|
Init: function( options ) {
|
|
_options = options;
|
|
},
|
|
JoinTerms: function( terms ) {
|
|
var q = '';
|
|
|
|
$.each( terms, function( i, term ) {
|
|
var term = '@attr ' + _pqfMapping[ term[0] ] + ' "' + term[1].replace( '"', '\\"' ) + '"'
|
|
|
|
if ( q ) {
|
|
q = '@and ' + q + ' ' + term;
|
|
} else {
|
|
q = term;
|
|
}
|
|
} );
|
|
|
|
return q;
|
|
},
|
|
Run: function( servers, q, options ) {
|
|
options = $.extend( {
|
|
offset: 0,
|
|
page_size: 20,
|
|
}, _options, options );
|
|
|
|
Search.includedServers = [];
|
|
_records = {};
|
|
_last = {
|
|
servers: servers,
|
|
q: q,
|
|
options: options,
|
|
};
|
|
|
|
var itemTag = KohaBackend.GetSubfieldForKohaField('items.itemnumber')[0];
|
|
|
|
$.each( servers, function ( id, info ) {
|
|
if ( info.checked ) Search.includedServers.push( id );
|
|
} );
|
|
|
|
if ( Search.includedServers.length == 0 ) return false;
|
|
|
|
$.get(
|
|
'/cgi-bin/koha/svc/cataloguing/metasearch',
|
|
{
|
|
q: q,
|
|
servers: Search.includedServers.join( ',' ),
|
|
offset: options.offset,
|
|
page_size: options.page_size,
|
|
sort_direction: options.sort_direction,
|
|
sort_key: options.sort_key,
|
|
resultset: options.resultset,
|
|
}
|
|
)
|
|
.done( function( data ) {
|
|
_last.options.resultset = data.resultset;
|
|
$.each( data.hits, function( undef, hit ) {
|
|
var record = new MARC.Record();
|
|
record.loadMARCXML( hit.record );
|
|
hit.record = record;
|
|
|
|
if ( hit.server == 'koha:biblioserver' ) {
|
|
// Remove item tags
|
|
while ( record.removeField(itemTag) );
|
|
}
|
|
} );
|
|
|
|
_options.onresults( data );
|
|
} )
|
|
.fail( function( error ) {
|
|
_options.onerror( error );
|
|
} );
|
|
|
|
return true;
|
|
},
|
|
Fetch: function( options ) {
|
|
if ( !_last ) return;
|
|
$.extend( _last.options, options );
|
|
return Search.Run( _last.servers, _last.q, _last.options );
|
|
}
|
|
};
|
|
|
|
return Search;
|
|
} );
|