From 40ddb798bd97b511d825dba291ee4c26996c2fac Mon Sep 17 00:00:00 2001 From: erickson Date: Thu, 15 Dec 2005 23:10:45 +0000 Subject: [PATCH] more advanced search fun marc search added and tested breaking up opac into smaller manageable chunks git-svn-id: svn://svn.open-ils.org/ILS/trunk@2414 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/extras/fieldmapper.pl | 2 +- .../OpenILS/Application/Search/Biblio.pm | 2 +- Open-ILS/web/opac/common/js/config.js | 11 +- Open-ILS/web/opac/common/js/opac_utils.js | 10 +- Open-ILS/web/opac/skin/default/js/mresult.js | 60 +++++---- .../web/opac/skin/default/js/result_common.js | 10 +- .../web/opac/skin/default/js/search_bar.js | 117 ++---------------- .../xml/advanced/advanced_location.xml | 4 +- .../default/xml/advanced/advanced_marc.xml | 7 +- .../default/xml/advanced/advanced_quick.xml | 4 +- .../skin/default/xml/common/libselect.xml | 4 + .../skin/default/xml/common/searchbar.xml | 3 +- .../opac/skin/default/xml/home/homesearch.xml | 2 + 13 files changed, 83 insertions(+), 153 deletions(-) diff --git a/Open-ILS/src/extras/fieldmapper.pl b/Open-ILS/src/extras/fieldmapper.pl index 23c719efcc..50589a5e26 100755 --- a/Open-ILS/src/extras/fieldmapper.pl +++ b/Open-ILS/src/extras/fieldmapper.pl @@ -12,7 +12,7 @@ if(!$web) { $web = ""; } # List of classes needed by the opac my @web_hints = qw/asv asva asvr asvq circ acp acpl acn ccs ahn - crcd crmf crrf mbts aoc aus mous/; + crcd crmf crrf mbts aoc aus mous mobts/; my @web_core = qw/ aou au perm_ex ex aout mvr ccs ahr aua ac actscecm /; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm b/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm index 539930a572..7cdb2b7dc4 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm @@ -633,7 +633,7 @@ sub biblio_search_class { if( !defined($org_id) or !$class or !$string ) { warn "not enbough args to metarecord search\n"; throw OpenSRF::EX::InvalidArg - ("Not enough args to open-ils.search.cat.biblio.class") + ("Not enough args to open-ils.search.biblio.class") } $class =~ s/\s+//g; diff --git a/Open-ILS/web/opac/common/js/config.js b/Open-ILS/web/opac/common/js/config.js index 60b6496455..994182d1f5 100644 --- a/Open-ILS/web/opac/common/js/config.js +++ b/Open-ILS/web/opac/common/js/config.js @@ -15,6 +15,7 @@ var PARAM_ORIGLOC = "ol"; /* the original location */ var PARAM_TOPRANK = "tr"; /* this highest ranking rank */ var PARAM_AUTHTIME = "at"; /* inactivity timeout in seconds */ var PARAM_ADVTERM = "adv"; /* advanced search term */ +var PARAM_ADVTYPE = "adt"; /* the advanced search type */ /* URL param values (see comments above) */ var TERM; @@ -31,6 +32,7 @@ var ORIGLOC; var TOPRANK; var AUTHTIME; var ADVTERM; +var ADVTYPE; /* cookie values */ var SBEXTRAS; @@ -56,11 +58,15 @@ var HOME = "home"; /* search type (STYPE) options */ var STYPE_AUTHOR = "author"; -var STYPE_TITLE = "title"; +var STYPE_TITLE = "title"; var STYPE_SUBJECT = "subject"; var STYPE_SERIES = "series"; var STYPE_KEYWORD = "keyword"; +/* types of advanced search */ +var ADVTYPE_MULTI = 'ml'; +var ADVTYPE_MARC = 'ma' + var LOGOUT_WARNING_TIME = 30; /* "head up" for session timeout */ @@ -213,10 +219,10 @@ var FETCH_TOC = "open-ils.search:open-ils.search.added_content.toc.retrieve var FETCH_ACONT_SUMMARY = "open-ils.search:open-ils.search.added_content.summary.retrieve"; var FETCH_USER_BYBARCODE = "open-ils.actor:open-ils.actor.user.fleshed.retrieve_by_barcode"; var FETCH_ADV_MRIDS = "open-ils.search:open-ils.search.biblio.multiclass:1"; +var FETCH_ADV_MARC_MRIDS = "open-ils.search:open-ils.search.biblio.marc:1"; /* ---------------------------------------------------------------------------- */ - /* ---------------------------------------------------------------------------- */ /* event callback functions. Other functions may be appended to these vars to for added functionality. */ @@ -270,6 +276,7 @@ createEvt("common", "loggedIn"); /* f() : user has just logged in */ createEvt('result', 'zeroHits'); createEvt('result', 'lowHits'); createEvt('rdetail', 'recordRetrieved'); /* we are about to draw the rdetail page */ +createEvt('common', 'depthChanged'); diff --git a/Open-ILS/web/opac/common/js/opac_utils.js b/Open-ILS/web/opac/common/js/opac_utils.js index 030fe0012c..f1b0a2ba8c 100644 --- a/Open-ILS/web/opac/common/js/opac_utils.js +++ b/Open-ILS/web/opac/common/js/opac_utils.js @@ -21,7 +21,7 @@ function showCanvas() { } hideMe(G.ui.common.loading); unHideMe(G.ui.common.canvas_main); - G.ui.searchbar.text.focus(); + try{G.ui.searchbar.text.focus();}catch(e){} } function swapCanvas(newNode) { @@ -81,6 +81,7 @@ function initParams() { TOPRANK = parseFloat(cgi.param(PARAM_TOPRANK)); AUTHTIME = parseInt(cgi.param(PARAM_AUTHTIME)); ADVTERM = cgi.param(PARAM_ADVTERM); + ADVTYPE = cgi.param(PARAM_ADVTYPE); /* set up some sane defaults */ if(isNaN(LOCATION)) LOCATION = 1; @@ -117,11 +118,11 @@ function getRid(){return RID;}; function getOrigLocation(){return ORIGLOC;} function getTopRank(){return TOPRANK;} function getAuthtime() { return AUTHTIME; } - function getSearchBarExtras(){return SBEXTRAS;} function getFontSize(){return FONTSIZE;}; function getSkin(){return SKIN;}; function getAdvTerm(){return ADVTERM;} +function getAdvType(){return ADVTYPE;} function findBasePath() { @@ -180,6 +181,7 @@ function buildOPACLink(args, slim, ssl) { string += _appendParam(TOPRANK, PARAM_TOPRANK, args, getTopRank, string); string += _appendParam(AUTHTIME, PARAM_AUTHTIME, args, getAuthtime, string); string += _appendParam(ADVTERM, PARAM_ADVTERM, args, getAdvTerm, string); + string += _appendParam(ADVTYPE, PARAM_ADVTYPE, args, getAdvType, string); return string.replace(/\&$/,'').replace(/\?\&/,"?"); } @@ -282,8 +284,8 @@ function grabUser(ses, force) { var at = getAuthtime(); if(isXUL()) at = xulG['authtime']; - //alert(at); - new AuthTimer(at).run(); + + //new AuthTimer(at).run(); /* needs debugging... */ return G.user; } diff --git a/Open-ILS/web/opac/skin/default/js/mresult.js b/Open-ILS/web/opac/skin/default/js/mresult.js index 29a4629e6b..52bebf9961 100644 --- a/Open-ILS/web/opac/skin/default/js/mresult.js +++ b/Open-ILS/web/opac/skin/default/js/mresult.js @@ -31,11 +31,17 @@ function mresultDoSearch() { table.appendChild(G.ui.result.row_template.cloneNode(true)); if(getOffset() == 0 || getHitCount() == null ) { - if( getAdvTerm() && !getTerm() ) mresultCollectAdvIds(1); + if( getAdvTerm() && !getTerm() ) { + if(getAdvType() == ADVTYPE_MULTI ) mresultCollectAdvIds(); + if(getAdvType() == ADVTYPE_MARC ) mresultCollectAdvMARCIds(); + } else mresultCollectIds(FETCH_MRIDS_FULL); } else { - if( getAdvTerm() && !getTerm()) mresultCollectAdvIds(); + if( getAdvTerm() && !getTerm() ) { + if(getAdvType() == ADVTYPE_MULTI ) mresultCollectAdvIds(); + if(getAdvType() == ADVTYPE_MARC ) mresultCollectAdvIds(); + } else mresultCollectIds(FETCH_MRIDS); } } @@ -57,24 +63,29 @@ function mresultHandleCount(r) { */ -/* performs the actual search */ -function mresultCollectIds(method) { - +function mresultLoadCachedSearch() { if( (getOffset() > 0) && (getOffset() < mresultPreCache) ) { - //alert('cached: ' + idsCookie.read(COOKIE_IDS)); var c = JSON2js(idsCookie.read(COOKIE_IDS)); if(c) { records = c[0]; ranks = c[1]; } } +} - if( getOffset() != 0 && - records[getOffset()] != null && +function mresultTryCachedSearch() { + mresultLoadCachedSearch(); + if( getOffset() != 0 && records[getOffset()] != null && records[resultFinalPageIndex()] != null) { - //alert('we have cookies... offset : ' + getOffset() ); - runEvt('result', 'hitCountReceived'); - mresultCollectRecords(); - } else { + runEvt('result', 'hitCountReceived'); + mresultCollectRecords(); + return true; + } + return false; +} + +/* performs the actual search */ +function mresultCollectIds(method) { + if(!mresultTryCachedSearch()) { var form = (getForm() == "all") ? null : getForm(); var req = new Request(method, getStype(), getTerm(), getLocation(), getDepth(), mresultPreCache, getOffset(), form ); @@ -85,20 +96,7 @@ function mresultCollectIds(method) { function mresultCollectAdvIds() { - - if( (getOffset() > 0) && (getOffset() < mresultPreCache) ) { - var c = JSON2js(idsCookie.read(COOKIE_IDS)); - if(c) { records = c[0]; ranks = c[1]; } - } - - if( getOffset() != 0 && - records[getOffset()] != null && - records[resultFinalPageIndex()] != null) { - runEvt('result', 'hitCountReceived'); - mresultCollectRecords(); - - } else { - + if(!mresultTryCachedSearch()) { var form = (getForm() == "all") ? null : getForm(); var req = new Request(FETCH_ADV_MRIDS, JSON2js(getAdvTerm()), getLocation(), form, mresultPreCache ); @@ -107,6 +105,16 @@ function mresultCollectAdvIds() { } } +function mresultCollectAdvMARCIds() { + if(!mresultTryCachedSearch()) { + var form = (getForm() == "all") ? null : getForm(); + var req = new Request(FETCH_ADV_MARC_MRIDS, + JSON2js(getAdvTerm()), getLocation(), form ); + req.callback(mresultHandleMRIds); + req.send(); + } +} + function mresultHandleMRIds(r) { diff --git a/Open-ILS/web/opac/skin/default/js/result_common.js b/Open-ILS/web/opac/skin/default/js/result_common.js index b9ceb2e9ef..0560621c2f 100644 --- a/Open-ILS/web/opac/skin/default/js/result_common.js +++ b/Open-ILS/web/opac/skin/default/js/result_common.js @@ -29,8 +29,11 @@ function resultFinalPageIndex() { /* set the search result info, number of hits, which results we're displaying, links to the next/prev pages, etc. */ function resultSetHitInfo() { + + try{searchTimer.stop()}catch(e){} + if( findCurrentPage() == MRESULT ) { - if(getHitCount() <= lowHitCount) + if(getHitCount() <= lowHitCount && getTerm()) runEvt('result', 'lowHits'); if(getHitCount() == 0) { runEvt('result', 'zeroHits'); @@ -55,7 +58,6 @@ function resultSetHitInfo() { } function resultLowHits() { - try{searchTimer.stop()}catch(e){} showCanvas(); unHideMe($('result_low_hits')); if(getHitCount() > 0) @@ -111,8 +113,10 @@ function resultLowHitXRef(r) { } function resultZeroHits() { + showCanvas(); + unHideMe($('result_low_hits')); unHideMe($('result_zero_hits_msg')); - resultExpandSearch(); + if(getTerm()) resultExpandSearch(); /* advanced search */ } function resultExpandSearch() { diff --git a/Open-ILS/web/opac/skin/default/js/search_bar.js b/Open-ILS/web/opac/skin/default/js/search_bar.js index 0aa23d0839..02cba3f78c 100644 --- a/Open-ILS/web/opac/skin/default/js/search_bar.js +++ b/Open-ILS/web/opac/skin/default/js/search_bar.js @@ -1,8 +1,7 @@ var searchBarExpanded = false; /* our search selector boxes */ -var _ts, _fs, _ds; +var _ts, _fs; -attachEvt( "common", "locationChanged", updateLoc ); var isFrontPage = false; @@ -14,136 +13,42 @@ G.evt.common.init.push(searchBarInit); var newSearchLocation; var newSearchDepth = null; + function searchBarInit() { _ts = G.ui.searchbar.type_selector; - _ds = G.ui.searchbar.depth_selector; _fs = G.ui.searchbar.form_selector; G.ui.searchbar.text.focus(); - //G.ui.searchbar.text.onkeypress = G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } }; G.ui.searchbar.submit.onclick = searchBarSubmit; - _ds.onchange = depthSelectorChanged; - - if( getLocation() == globalOrgTree.id() ) { - unHideMe( G.ui.searchbar.lib_sel_span ); - G.ui.searchbar.lib_sel_link.onclick = _opacHandleLocationTagClick; - } else { - unHideMe( G.ui.searchbar.depth_sel_span ); - buildLocationSelector(); - } - /* set up the selector objects, etc */ G.ui.searchbar.text.value = (getTerm() != null) ? getTerm() : ""; setSelector(_ts, getStype()); - setSelector(_ds, getDepth()); setSelector(_fs, getForm()); -} + depthSelInit(); -var orgTreeIsBuilt = false; -function _opacHandleLocationTagClick() { - /* - orgTreeSelector.openTo( - (newSearchLocation != null) ? parseInt(newSearchLocation) : getLocation(), true ); - */ - swapCanvas(G.ui.common.org_container); - - if(!orgTreeIsBuilt) { - drawOrgTree(); - orgTreeIsBuilt = true; - } -} - -function depthSelectorChanged() { - var i = _ds.selectedIndex; - if( i == _ds.options.length - 1 ) { - setSelector( _ds, getDepth() ); - _opacHandleLocationTagClick(); - - } else { - if(!isFrontPage && (findCurrentPage() != MYOPAC)) { - searchBarSubmit(); - } + if(!isFrontPage && (findCurrentPage() != MYOPAC)) { + attachEvt('common','depthChanged', searchBarSubmit); } } -var chooseAnotherNode; -function buildLocationSelector(newLoc) { - - var loc; - if(newLoc != null) loc = newLoc; - else loc = getLocation(); - - if( loc == globalOrgTree.id() ) return; - - var selector = G.ui.searchbar.depth_selector - if(!chooseAnotherNode) - chooseAnotherNode = selector.removeChild( - selector.getElementsByTagName("option")[0]); - var node = chooseAnotherNode; - removeChildren(selector); - - var location = findOrgUnit(loc); - var type = findOrgType(location.ou_type()); - - while( type && location ) { - var n = node.cloneNode(true); - n.setAttribute("value", type.depth()); - removeChildren(n); - n.appendChild(text(type.opac_label())); - selector.appendChild(n); - location = findOrgUnit(location.parent_ou()); - if(location) type = findOrgType(location.ou_type()); - else type = null; - } - - selector.appendChild(node); -} - -function updateLoc(location, depth) { - if( location != null ) - newSearchLocation = location; - - if( depth != null ) { - if(depth != 0 ){ - G.ui.searchbar.lib_sel_link.onclick = _opacHandleLocationTagClick; - if( location == globalOrgTree.id() ) { - hideMe( G.ui.searchbar.depth_sel_span ); - unHideMe( G.ui.searchbar.lib_sel_span ); - } else { - buildLocationSelector(location); - hideMe( G.ui.searchbar.lib_sel_span ); - unHideMe( G.ui.searchbar.depth_sel_span ); - } - } - - setSelector(G.ui.searchbar.depth_selector, depth); - newSearchDepth = depth; - } +function searchBarSubmit() { - runEvt('common','locationUpdated'); + var text = G.ui.searchbar.text.value; - /* - if(!isFrontPage && (findCurrentPage() != MYOPAC) - && (newSearchLocation != getLocation()) ) { - searchBarSubmit(); + if(!text) { /* assume it's an advaned search? */ + if(getAdvTerm()){} } - */ -} - -function searchBarSubmit() { - - var text = G.ui.searchbar.text.value; if(!text || text == "") return; - var d = (newSearchDepth != null) ? newSearchDepth : parseInt(_ds.options[_ds.selectedIndex].value); + var d = (newSearchDepth != null) ? newSearchDepth : depthSelGetDepth(); if(isNaN(d)) d = 0; var args = {}; @@ -151,7 +56,7 @@ function searchBarSubmit() { args[PARAM_OFFSET] = 0; args[PARAM_TERM] = text; args[PARAM_STYPE] = _ts.options[_ts.selectedIndex].value; - args[PARAM_LOCATION] = newSearchLocation; + args[PARAM_LOCATION] = depthSelGetNewLoc(); args[PARAM_DEPTH] = d; args[PARAM_FORM] = _fs.options[_fs.selectedIndex].value; diff --git a/Open-ILS/web/opac/skin/default/xml/advanced/advanced_location.xml b/Open-ILS/web/opac/skin/default/xml/advanced/advanced_location.xml index 6cda6a24df..70fc9d735e 100644 --- a/Open-ILS/web/opac/skin/default/xml/advanced/advanced_location.xml +++ b/Open-ILS/web/opac/skin/default/xml/advanced/advanced_location.xml @@ -1,9 +1,9 @@ + - +
Change search location
diff --git a/Open-ILS/web/opac/skin/default/xml/advanced/advanced_marc.xml b/Open-ILS/web/opac/skin/default/xml/advanced/advanced_marc.xml index 88a38333e4..7792b4386f 100644 --- a/Open-ILS/web/opac/skin/default/xml/advanced/advanced_marc.xml +++ b/Open-ILS/web/opac/skin/default/xml/advanced/advanced_marc.xml @@ -30,14 +30,13 @@ - - + - + diff --git a/Open-ILS/web/opac/skin/default/xml/advanced/advanced_quick.xml b/Open-ILS/web/opac/skin/default/xml/advanced/advanced_quick.xml index 3ee347150e..471cb2fef8 100644 --- a/Open-ILS/web/opac/skin/default/xml/advanced/advanced_quick.xml +++ b/Open-ILS/web/opac/skin/default/xml/advanced/advanced_quick.xml @@ -9,12 +9,12 @@ &opac.advanced.quick.isbn;: - + &opac.advanced.quick.issn;: - + diff --git a/Open-ILS/web/opac/skin/default/xml/common/libselect.xml b/Open-ILS/web/opac/skin/default/xml/common/libselect.xml index 7645516809..95291f0c4b 100644 --- a/Open-ILS/web/opac/skin/default/xml/common/libselect.xml +++ b/Open-ILS/web/opac/skin/default/xml/common/libselect.xml @@ -1,5 +1,9 @@ + + + Find results in + diff --git a/Open-ILS/web/opac/skin/default/xml/common/searchbar.xml b/Open-ILS/web/opac/skin/default/xml/common/searchbar.xml index 65f49ef89e..965e33e65e 100644 --- a/Open-ILS/web/opac/skin/default/xml/common/searchbar.xml +++ b/Open-ILS/web/opac/skin/default/xml/common/searchbar.xml @@ -4,8 +4,6 @@ diff --git a/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml b/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml index 421432c05c..a1151c6595 100644 --- a/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml +++ b/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml @@ -4,6 +4,7 @@ xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude"> +