From: dbs Date: Fri, 5 Mar 2010 02:34:47 +0000 (+0000) Subject: Backport the rel_1_6 Z39.50 server-sorting functionality for our sanity. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=e4b3309cf7969c510002542a83cb927329a7ae46;p=contrib%2FConifer.git Backport the rel_1_6 Z39.50 server-sorting functionality for our sanity. git-svn-id: svn://svn.open-ils.org/ILS-Contrib/conifer/branches/rel_1_6_0@822 6d9bc8c9-1ec2-4278-b937-99fde70a366f --- diff --git a/xul/server/cat/z3950.js b/xul/server/cat/z3950.js new file mode 100644 index 0000000000..b1ac1b025b --- /dev/null +++ b/xul/server/cat/z3950.js @@ -0,0 +1,1059 @@ +dump('entering cat.z3950.js\n'); + +function $(id) { return document.getElementById(id); } + +if (typeof cat == 'undefined') cat = {}; +cat.z3950 = function (params) { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + JSAN.use('util.error'); this.error = new util.error(); + JSAN.use('util.network'); this.network = new util.network(); + } catch(E) { + dump('cat.z3950: ' + E + '\n'); + } +} + +cat.z3950.prototype = { + + 'creds_version' : 2, + + 'number_of_result_sets' : 0, + + 'result_set' : [], + + 'limit' : 10, + + 'init' : function( params ) { + + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + JSAN.use('util.widgets'); + + var obj = this; + + JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'}); + + obj.load_creds(); + + JSAN.use('circ.util'); + var columns = circ.util.columns( + { + 'tcn' : { 'hidden' : false }, + 'isbn' : { 'hidden' : false }, + 'title' : { 'hidden' : false, 'flex' : '1' }, + 'author' : { 'hidden' : false }, + 'edition' : { 'hidden' : false }, + 'pubdate' : { 'hidden' : false }, + 'publisher' : { 'hidden' : false }, + 'service' : { 'hidden' : false } + } + ); + + JSAN.use('util.list'); obj.list = new util.list('results'); + obj.list.init( + { + 'columns' : columns, + 'map_row_to_columns' : circ.util.std_map_row_to_columns(), + 'on_select' : function(ev) { + try { + JSAN.use('util.functional'); + var sel = obj.list.retrieve_selection(); + document.getElementById('sel_clip').setAttribute('disabled', sel.length < 1); + var list = util.functional.map_list( + sel, + function(o) { return o.getAttribute('retrieve_id'); } + ); + obj.error.sdump('D_TRACE','cat/z3950: selection list = ' + js2JSON(list) ); + obj.controller.view.marc_import.disabled = false; + obj.controller.view.marc_import.setAttribute('retrieve_id',list[0]); + obj.data.init({'via':'stash'}); + if (obj.data.marked_record) { + obj.controller.view.marc_import_overlay.disabled = false; + } else { + obj.controller.view.marc_import_overlay.disabled = true; + } + obj.controller.view.marc_import_overlay.setAttribute('retrieve_id',list[0]); + obj.controller.view.marc_view_btn.disabled = false; + obj.controller.view.marc_view_btn.setAttribute('retrieve_id',list[0]); + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_list_init.list_construction_error'),E); + } + }, + } + ); + + JSAN.use('util.controller'); obj.controller = new util.controller(); + obj.controller.init( + { + control_map : { + 'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ], + 'sel_clip' : [ ['command'], function() { obj.list.clipboard(); } ], + 'cmd_z3950_csv_to_clipboard' : [ ['command'], function() { obj.list.dump_csv_to_clipboard(); } ], + 'cmd_z3950_csv_to_printer' : [ ['command'], function() { obj.list.dump_csv_to_printer(); } ], + 'cmd_z3950_csv_to_file' : [ ['command'], function() { obj.list.dump_csv_to_file( { 'defaultFileName' : 'z3950_results.txt' } ); } ], + 'cmd_broken' : [ + ['command'], + function() { alert('Not Yet Implemented'); } + ], + 'result_message' : [['render'],function(e){return function(){};}], + 'clear' : [ + ['command'], + function() { + obj.clear(); + } + ], + 'save_creds' : [ + ['command'], + function() { + obj.save_creds(); + setTimeout( function() { obj.focus(); }, 0 ); + } + ], + 'marc_view_btn' : [ + ['render'], + function(e) { + e.setAttribute('label', $("catStrings").getString('staff.cat.z3950.marc_view.label')); + e.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.marc_view.accesskey')); + } + ], + 'marc_view' : [ + ['command'], + function(ev) { + try { + var n = obj.controller.view.marc_view_btn; + if (n.getAttribute('toggle') == '1') { + document.getElementById('deck').selectedIndex = 0; + n.setAttribute('toggle','0'); + n.setAttribute('label', $("catStrings").getString('staff.cat.z3950.marc_view.label')); + n.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.marc_view.accesskey')); + document.getElementById('results').focus(); + } else { + document.getElementById('deck').selectedIndex = 1; + n.setAttribute('toggle','1'); + n.setAttribute('label', $("catStrings").getString('staff.cat.z3950.results_view.label')); + n.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.results_view.accesskey')); + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); + var f = get_contentWindow(document.getElementById('marc_frame')); + var retrieve_id = n.getAttribute('retrieve_id'); + var result_idx = retrieve_id.split('-')[0]; + var record_idx = retrieve_id.split('-')[1]; + f.xulG = { 'marcxml' : obj.result_set[result_idx].records[ record_idx ].marcxml }; + f.my_init(); + f.document.body.firstChild.focus(); + } + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_view_error'),E); + } + }, + ], + 'marc_import' : [ + ['command'], + function() { + try { + var retrieve_id = obj.controller.view.marc_import.getAttribute('retrieve_id'); + var result_idx = retrieve_id.split('-')[0]; + var record_idx = retrieve_id.split('-')[1]; + obj.spawn_marc_editor( + obj.result_set[ result_idx ].records[ record_idx ].marcxml, + obj.result_set[ result_idx ].records[ record_idx ].service /* FIXME: we want biblio_source here */ + ); + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_import_error'),E); + } + }, + ], + 'marc_import_overlay' : [ + ['command'], + function() { + try { + var retrieve_id = obj.controller.view.marc_import_overlay.getAttribute('retrieve_id'); + var result_idx = retrieve_id.split('-')[0]; + var record_idx = retrieve_id.split('-')[1]; + obj.spawn_marc_editor_for_overlay( + obj.result_set[ result_idx ].records[ record_idx ].marcxml, + obj.result_set[ result_idx ].records[ record_idx ].service /* FIXME: we want biblio_source here */ + ); + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_import_overlay_error'),E); + } + }, + ], + 'search' : [ + ['command'], + function() { + obj.initial_search(); + }, + ], + 'raw_search' : [ + ['command'], + function() { + var raw = window.prompt( + $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.msg'), + $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.default_value'), + $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.title') + ); + if (raw) obj.initial_raw_search(raw); + } + ], + 'page_next' : [ + ['command'], + function() { + obj.page_next(); + }, + ], + 'toggle_form_btn' : [ + ['render'], + function(e) { + e.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif"); + e.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label')); + e.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey')); + } + ], + 'toggle_form' : [ + ['command'], + function() { + var x = document.getElementById('top_pane'); + document.getElementById('splitter_grippy2').doCommand(); + var n = obj.controller.view.toggle_form_btn; + if (x.collapsed) { + n.setAttribute('image',"/xul/server/skin/media/images/down_arrow.gif"); + n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.label')); + n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.accesskey')); + } else { + n.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif"); + n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label')); + n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey')); + } + }, + ], + 'splitter_grippy2' : [ + ['click'], + function() { + var x = document.getElementById('top_pane'); + var n = obj.controller.view.toggle_form_btn; + if (x.collapsed) { + n.setAttribute('image',"/xul/server/skin/media/images/down_arrow.gif"); + n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.label')); + n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.accesskey')); + } else { + n.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif"); + n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label')); + n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey')); + } + } + ], + 'service_rows' : [ + ['render'], + function(e) { + return function() { + try { + + function handle_switch(node) { + try { + $('search').setAttribute('disabled','true'); $('raw_search').setAttribute('disabled','true'); + obj.active_services = []; + var snl = document.getElementsByAttribute('mytype','service_class'); + for (var i = 0; i < snl.length; i++) { + var n = snl[i]; + if (n.nodeName == 'checkbox') { + if (n.checked) obj.active_services.push( n.getAttribute('service') ); + } + } + if (obj.active_services.length > 0) { + $('search').setAttribute('disabled','false'); + } + if (obj.active_services.length == 1) { + if (obj.active_services[0] != 'native-evergreen-catalog') { + $('raw_search').setAttribute('disabled','false'); + } + } + var nl = document.getElementsByAttribute('mytype','search_class'); + for (var i = 0; i < nl.length; i++) { nl[i].disabled = true; } + var attrs = {}; + for (var j = 0; j < obj.active_services.length; j++) { + if (obj.services[obj.active_services[j]]) for (var i in obj.services[obj.active_services[j]].attrs) { + var attr = obj.services[obj.active_services[j]].attrs[i]; + if (! attrs[i]) { + attrs[i] = { 'labels' : {} }; + } + if (attr.label) { + attrs[i].labels[ attr.label ] = true; + } else if (document.getElementById('commonStrings').testString('staff.z39_50.search_class.' + i)) { + attrs[i].labels[ document.getElementById('commonStrings').getString('staff.z39_50.search_class.' + i) ] = true; + } else if (attr.name) { + attrs[i].labels[ attr.name ] = true; + } else { + attrs[i].labels[ i ] = true; + } + + } + + } + + function set_label(x,attr) { + var labels = []; + for (var j in attrs[attr].labels) { + labels.push(j); + } + if (labels.length > 0) { + x.setAttribute('value',labels[0]); + x.setAttribute('tooltiptext',labels.join(',')); + if (labels.length > 1) x.setAttribute('class','multiple_labels'); + } + } + + for (var i in attrs) { + var x = document.getElementById(i + '_input'); + if (x) { + x.disabled = false; + var y = document.getElementById(i + '_label',i); + if (y) set_label(y,i); + } else { + var rows = document.getElementById('query_inputs'); + var row = document.createElement('row'); rows.appendChild(row); + var label = document.createElement('label'); + label.setAttribute('id',i+'_label'); + label.setAttribute('control',i+'_input'); + label.setAttribute('search_class',i); + label.setAttribute('style','-moz-user-focus: ignore'); + row.appendChild(label); + set_label(label,i); + label.addEventListener('click',function(ev){ + var a = ev.target.getAttribute('search_class'); + if (a) obj.default_attr = a; + },false + ); + var tb = document.createElement('textbox'); + tb.setAttribute('id',i+'_input'); + tb.setAttribute('mytype','search_class'); + tb.setAttribute('search_class',i); + row.appendChild(tb); + tb.addEventListener('keypress',function(ev) { return obj.handle_enter(ev); },false); + } + } + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.search_fields_error'),E); + } + } + + document.getElementById('native-evergreen-catalog_service').addEventListener('command',handle_switch,false); + + var robj = obj.network.simple_request( + 'RETRIEVE_Z3950_SERVICES', + [ ses() ] + ); + if (typeof robj.ilsevent != 'undefined') throw(robj); + obj.services = robj; + var x = document.getElementById('service_rows'); + var services = new Array(); + for (var i in obj.services) { + var label; + if (obj.services[i].label) { + label = obj.services[i].label; + } else if (obj.services[i].name) { + label = obj.services[i].name; + } else { + label = i; + } + var j = [label, i]; + services.push(j); + } + services.sort(); + for (var j=0; j < services.length; j++) { + var i = services[j][1]; + try { + if (i == 'native-evergreen-catalog') continue; + var r = document.createElement('row'); x.appendChild(r); + var cb = document.createElement('checkbox'); + cb.setAttribute('label',services[j][0]); + cb.setAttribute('tooltiptext',i + ' : ' + obj.services[i].db + '@' + obj.services[i].host + ':' + obj.services[i].port); + cb.setAttribute('mytype','service_class'); cb.setAttribute('service',i); + cb.setAttribute('id',i+'_service'); r.appendChild(cb); + cb.addEventListener('command',handle_switch,false); + var username = document.createElement('textbox'); username.setAttribute('id',i+'_username'); + if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[i]) username.setAttribute('value',obj.creds.hosts[ obj.data.server_unadorned ].services[i].username); + r.appendChild(username); + if (typeof obj.services[i].auth != 'undefined') username.hidden = ! get_bool( obj.services[i].auth ); + var password = document.createElement('textbox'); password.setAttribute('id',i+'_password'); + if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[i]) password.setAttribute('value',obj.creds.hosts[ obj.data.server_unadorned ].services[i].password); + password.setAttribute('type','password'); r.appendChild(password); + if (typeof obj.services[i].auth != 'undefined') password.hidden = ! get_bool( obj.services[i].auth ); + } catch(E) { + alert(E); + } + } + //obj.services[ 'native-evergreen-catalog' ] = { 'attrs' : { 'author' : {}, 'title' : {} } }; + setTimeout( + function() { + if (obj.creds.hosts[ obj.data.server_unadorned ]) { + for (var i = 0; i < obj.creds.hosts[ obj.data.server_unadorned ].default_services.length; i++) { + var x = document.getElementById(obj.creds.hosts[ obj.data.server_unadorned ].default_services[i]+'_service'); + if (x) x.checked = true; + } + } else if (obj.creds.default_service) { + var x = document.getElementById(obj.creds.default_service+'_service'); + if (x) x.checked = true; + } + handle_switch(); + },0 + ); + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.z39_service_error'),E); + } + } + } + ], + } + } + ); + + obj.controller.render(); + + setTimeout( function() { obj.focus(); }, 0 ); + + setInterval( + function() { + obj.data.init({'via':'stash'}); + if (obj.data.marked_record) { + var sel = obj.list.retrieve_selection(); + if (sel.length > 0) { obj.controller.view.marc_import_overlay.disabled = false; } + if ($("overlay_tcn_indicator")) { + if (obj.data.marked_record_mvr) { + $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getFormattedString('staff.cat.z3950.marked_record_for_overlay_indicator.tcn.label',[obj.data.marked_record_mvr.tcn()])); + } else { + $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getFormattedString('staff.cat.z3950.marked_record_for_overlay_indicator.record_id.label',[obj.data.marked_record])); + } + } + } else { + obj.controller.view.marc_import_overlay.disabled = true; + if ($("overlay_tcn_indicator")) { + $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getString('staff.cat.z3950.marked_record_for_overlay_indicator.no_record.label')); + } + } + }, 2000 + ); + + } catch(E) { + this.error.sdump('D_ERROR','cat.z3950.init: ' + E + '\n'); + } + }, + + 'focus' : function() { + var obj = this; + var focus_me; var or_focus_me; + for (var i = 0; i < obj.active_services.length; i++) { + if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[ obj.active_services[i] ]) { + var x = obj.creds.hosts[ obj.data.server_unadorned ].services[ obj.active_services[i] ].default_attr; + if (x) { focus_me = x; break; } + } + if (obj.services[ obj.active_services[i] ]) for (var i in obj.services[ obj.active_services[i] ].attr) { or_focus_me = i; } + } + if (! focus_me) focus_me = or_focus_me; + var xx = document.getElementById(focus_me+'_input'); if (xx) xx.focus(); + }, + + 'clear' : function() { + var obj = this; + var nl = document.getElementsByAttribute('mytype','search_class'); + for (var i = 0; i < nl.length; i++) { nl[i].value = ''; nl[i].setAttribute('value',''); } + obj.focus(); + }, + + 'search_params' : {}, + + 'initial_search' : function() { + try { + var obj = this; + obj.result_set = []; obj.number_of_result_sets = 0; + JSAN.use('util.widgets'); + util.widgets.remove_children( obj.controller.view.result_message ); + var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x); + if (obj.active_services.length < 1) { + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.no_search_selection'))); + return; + } + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.searching'))); + obj.search_params = {}; obj.list.clear(); + obj.controller.view.page_next.disabled = true; + obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','true'); + obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','true'); + obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','true'); + + obj.search_params.service_array = []; + obj.search_params.username_array = []; + obj.search_params.password_array = []; + for (var i = 0; i < obj.active_services.length; i++) { + obj.search_params.service_array.push( obj.active_services[i] ); + obj.search_params.username_array.push( document.getElementById( obj.active_services[i]+'_username' ).value ); + obj.search_params.password_array.push( document.getElementById( obj.active_services[i]+'_password' ).value ); + } + obj.search_params.limit = Math.ceil( obj.limit / obj.active_services.length ); + obj.search_params.offset = 0; + + obj.search_params.search = {}; + var nl = document.getElementsByAttribute('mytype','search_class'); + var count = 0; + for (var i = 0; i < nl.length; i++) { + if (nl[i].disabled) continue; + if (nl[i].value == '') continue; + count++; + obj.search_params.search[ nl[i].getAttribute('search_class') ] = nl[i].value; + } + if (count>0) { + obj.search(); + } else { + util.widgets.remove_children( obj.controller.view.result_message ); + } + } catch(E) { + this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.initial_search.failed_search'),E); + } + }, + + 'initial_raw_search' : function(raw) { + try { + var obj = this; + obj.result_set = []; obj.number_of_result_sets = 0; + JSAN.use('util.widgets'); + util.widgets.remove_children( obj.controller.view.result_message ); + var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x); + if (obj.active_services.length < 1) { + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.no_search_selection'))); + return; + } + if (obj.active_services.length > 1) { + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.too_many_selections'))); + return; + } + if (obj.active_services[0] == 'native-evergreen-catalog') { + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.raw_search_unsupported_for_native_catalog'))); + return; + } + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.searching'))); + obj.search_params = {}; obj.list.clear(); + obj.controller.view.page_next.disabled = true; + obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','true'); + obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','true'); + obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','true'); + + obj.search_params.service_array = []; + obj.search_params.username_array = []; + obj.search_params.password_array = []; + for (var i = 0; i < obj.active_services.length; i++) { + obj.search_params.service_array.push( obj.active_services[i] ); + obj.search_params.username_array.push( document.getElementById( obj.active_services[i]+'_username' ).value ); + obj.search_params.password_array.push( document.getElementById( obj.active_services[i]+'_password' ).value ); + } + obj.search_params.limit = Math.ceil( obj.limit / obj.active_services.length ); + obj.search_params.offset = 0; + + obj.search_params.query = raw; + + obj.search(); + } catch(E) { + this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.initial_search.failed_search'),E); + } + }, + + 'page_next' : function() { + try { + var obj = this; + JSAN.use('util.widgets'); + util.widgets.remove_children( obj.controller.view.result_message ); + var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x); + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.page_next.more_results'))); + obj.search_params.offset += obj.search_params.limit; + obj.search(); + } catch(E) { + this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.page_next.subsequent_search_error'),E); + } + }, + + 'search' : function() { + try { + var obj = this; + var method; + if (typeof obj.search_params.query == 'undefined') { + method = 'FM_BLOB_RETRIEVE_VIA_Z3950_SEARCH'; + obj.search_params.service = obj.search_params.service_array; + obj.search_params.username = obj.search_params.username_array; + obj.search_params.password = obj.search_params.password_array; + } else { + method = 'FM_BLOB_RETRIEVE_VIA_Z3950_RAW_SEARCH'; + obj.search_params.service = obj.search_params.service_array[0]; + obj.search_params.username = obj.search_params.username_array[0]; + obj.search_params.password = obj.search_params.password_array[0]; + } + obj.network.simple_request( + method, + [ ses(), obj.search_params ], + function(req) { + obj.handle_results(req.getResultObject()) + } + ); + document.getElementById('deck').selectedIndex = 0; + } catch(E) { + this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.search.search_error'),E); + } + }, + + 'handle_results' : function(results) { + var obj = this; + try { + JSAN.use('util.widgets'); + util.widgets.remove_children( obj.controller.view.result_message ); var x; + if (results == null) { + x = document.createElement('description'); obj.controller.view.result_message.appendChild(x); + x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.handle_results.null_server_error'))); + return; + } + if (typeof results.ilsevent != 'undefined') { + x = document.createElement('description'); obj.controller.view.result_message.appendChild(x); + x.appendChild( document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.server_error', [results.textcode, results.desc]))); + return; + } + obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','false'); + obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','false'); + obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','false'); + if (typeof results.length == 'undefined') results = [ results ]; + + var total_showing = 0; + var total_count = 0; + var tooltip_msg = ''; + + for (var i = 0; i < results.length; i++) { + if (results[i].query) { + tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.raw_query', [results[i].query]) + '\n'; + } + if (results[i].count) { + if (results[i].records) { + var showing = obj.search_params.offset + results[i].records.length; + total_showing += obj.search_params.offset + results[i].records.length; + total_count += results[i].count; + tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.showing_results', [(showing > results[i].count ? results[i].count : showing), results[i].count, results[i].service]) + '\n'; + } + if (obj.search_params.offset + obj.search_params.limit <= results[i].count) { + obj.controller.view.page_next.disabled = false; + } + } else { + tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.num_of_results', [(results[i].count ? results[i].count : 0)]) + '\n'; + } + if (results[i].records) { + obj.result_set[ ++obj.number_of_result_sets ] = results[i]; + obj.controller.view.marc_import.disabled = true; + obj.controller.view.marc_import_overlay.disabled = true; + var x = obj.controller.view.marc_view_btn; + if (x.getAttribute('toggle') == '0') x.disabled = true; + for (var j = 0; j < obj.result_set[ obj.number_of_result_sets ].records.length; j++) { + var f; + var n = obj.list.append( + { + 'retrieve_id' : String( obj.number_of_result_sets ) + '-' + String( j ), + 'row' : { + 'my' : { + 'mvr' : function(a){return a;}(obj.result_set[ obj.number_of_result_sets ].records[j].mvr), + 'service' : results[i].service + } + } + } + ); + if (!f) { n.my_node.parentNode.focus(); f = n; } + } + } else { + x = document.createElement('description'); obj.controller.view.result_message.appendChild(x); + x.appendChild( + document.createTextNode($("catStrings").getString('staff.cat.z3950.handle_results.result_error')) + ); + } + } + if (total_showing) { + x = document.createElement('description'); + x.setAttribute('crop','end'); + x.setAttribute('tooltiptext',tooltip_msg); + obj.controller.view.result_message.appendChild(x); + x.appendChild( + document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.showing_total_results', + [(total_showing > total_count ? total_count : total_showing), total_count])) + ); + } else { + x = document.createElement('description'); + x.setAttribute('crop','end'); + x.setAttribute('tooltiptext',tooltip_msg); + obj.controller.view.result_message.appendChild(x); + x.appendChild( + document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.num_of_results', [(total_count ? total_count : 0)])) + ); + } + + } catch(E) { + this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.handle_results.search_result_error'),E); + } + }, + + 'replace_tab_with_opac' : function(doc_id) { + var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id; + var content_params = { + 'session' : ses(), + 'authtime' : ses('authtime'), + 'opac_url' : opac_url, + }; + xulG.set_tab( + xulG.url_prefix(urls.XUL_OPAC_WRAPPER), + {'tab_name': $("catStrings").getString('staff.cat.z3950.replace_tab_with_opac.tab_name')}, + content_params + ); + }, + + 'spawn_marc_editor' : function(my_marcxml,biblio_source) { + var obj = this; + xulG.new_tab( + xulG.url_prefix(urls.XUL_MARC_EDIT), + { 'tab_name' : 'MARC Editor' }, + { + 'record' : { 'marc' : my_marcxml }, + 'fast_add_item' : function(doc_id,cn_label,cp_barcode) { + try { + JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode); + } catch(E) { + alert(E); + } + }, + 'save' : { + 'label' : 'Import Record', + 'func' : function (new_marcxml) { + try { + var r = obj.network.simple_request('MARC_XML_RECORD_IMPORT', [ ses(), new_marcxml, biblio_source ]); + if (typeof r.ilsevent != 'undefined') { + switch(Number(r.ilsevent)) { + case 1704 /* TCN_EXISTS */ : + var msg = $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor.same_tcn', [r.payload.tcn]); + var title = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.title'); + var btn1 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.btn1_overlay'); + var btn2 = typeof r.payload.new_tcn == 'undefined' ? null : $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor.btn2_import', [r.payload.new_tcn]); + if (btn2) { + obj.data.init({'via':'stash'}); + var robj = obj.network.simple_request( + 'PERM_CHECK',[ + ses(), + obj.data.list.au[0].id(), + obj.data.list.au[0].ws_ou(), + [ 'ALLOW_ALT_TCN' ] + ] + ); + if (typeof robj.ilsevent != 'undefined') { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.permission_error'),E); + } + if (robj.length != 0) btn2 = null; + } + var btn3 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.btn3_cancel_import'); + var p = obj.error.yns_alert(msg,title,btn1,btn2,btn3,$("catStrings").getString('staff.cat.z3950.spawn_marc_editor.confirm_action')); + obj.error.sdump('D_ERROR','option ' + p + 'chosen'); + switch(p) { + case 0: + var r3 = obj.network.simple_request('MARC_XML_RECORD_UPDATE', [ ses(), r.payload.dup_record, new_marcxml, biblio_source ]); + if (typeof r3.ilsevent != 'undefined') { + throw(r3); + } else { + alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_overlay')); + return { + 'id' : r3.id(), + 'on_complete' : function() { + try { + obj.replace_tab_with_opac(r3.id()); + } catch(E) { + alert(E); + } + } + }; + } + break; + case 1: + var r2 = obj.network.request( + api.MARC_XML_RECORD_IMPORT.app, + api.MARC_XML_RECORD_IMPORT.method + '.override', + [ ses(), new_marcxml, biblio_source ] + ); + if (typeof r2.ilsevent != 'undefined') { + throw(r2); + } else { + alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import_with_new_tcn')); + return { + 'id' : r2.id(), + 'on_complete' : function() { + try { + obj.replace_tab_with_opac(r2.id()); + } catch(E) { + alert(E); + } + } + }; + } + break; + case 2: + default: + alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_cancelled')); + break; + } + break; + default: + throw(r); + break; + } + } else { + alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import')); + return { + 'id' : r.id(), + 'on_complete' : function() { + try { + obj.replace_tab_with_opac(r.id()); + } catch(E) { + alert(E); + } + } + }; + } + } catch(E) { + obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_error'),E); + } + } + } + } + ); + }, + + 'confirm_overlay' : function(record_ids) { + var obj = this; // JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'}); + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite'); + var top_xml = ''; + top_xml += ''+$("catStrings").getString('staff.cat.z3950.confirm_overlay.description')+''; + top_xml += '