From af94e2706c4724ce113023729213d9d8575f8fa7 Mon Sep 17 00:00:00 2001 From: dbs Date: Tue, 14 Jul 2009 02:37:04 +0000 Subject: [PATCH] Backport r13424 and r13580 from trunk: RefWorks export support Patch from Warren Layton implementing RefWorks export via SuperCat: "The patch a new transform, MARC21slim2MARCtxt.xsl, which converts MARC into the MARC-ish plain text format accepted by RefWorks (see [1]). The patch also adds a new feed to SuperCat, called "marctxt"." As well as a reworked patch for the default opac skin to expose this functionality as a link next to the "Place a Hold" link. git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6@13581 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm | 16 +++++- Open-ILS/src/perlmods/OpenILS/WWW/SuperCat/Feed.pm | 53 +++++++++++++++++ Open-ILS/web/opac/locale/en-US/opac.dtd | 1 + Open-ILS/web/opac/skin/default/js/rdetail.js | 66 ++++++++++++++-------- .../web/opac/skin/default/xml/page_rdetail.xml | 3 + Open-ILS/xsl/MARC21slim2MARCtxt.xsl | 36 ++++++++++++ 6 files changed, 150 insertions(+), 25 deletions(-) create mode 100644 Open-ILS/xsl/MARC21slim2MARCtxt.xsl diff --git a/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm b/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm index 20b5f088bc..d2f5888eee 100644 --- a/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm +++ b/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm @@ -145,7 +145,7 @@ sub child_init { ->gather(1); $list = [ map { (keys %$_)[0] } @$list ]; - push @$list, 'htmlholdings','html'; + push @$list, 'htmlholdings','html', 'marctxt'; for my $browse_axis ( qw/title author subject topic series item-age/ ) { for my $record_browse_format ( @$list ) { @@ -259,6 +259,7 @@ sub unapi { + FORMATS } elsif ($type eq 'metarecord') { $body .= <<" FORMATS"; @@ -313,6 +314,7 @@ sub unapi { + FORMATS @@ -405,7 +407,7 @@ sub unapi { @{ $supercat->request("open-ils.supercat.$type.formats")->gather(1) } and !grep { $_ eq $base_format } - qw/opac html htmlholdings/ + qw/opac html htmlholdings marctxt/ ) { print "Content-type: text/html; charset=utf-8\n\n"; $apache->custom_response( 406, <<" HTML"); @@ -547,6 +549,10 @@ sub supercat { html-full text/html + + + marctxt + text/plain "; } @@ -612,6 +618,10 @@ sub supercat { html-full text/html + + + marctxt + text/plain "; for my $h (@$list) { @@ -1222,7 +1232,7 @@ sub create_record_feed { $feed->unapi($unapi) if ($flesh); $type = 'atom' if ($type eq 'html'); - $type = 'marcxml' if ($type eq 'htmlholdings'); + $type = 'marcxml' if (($type eq 'htmlholdings') || ($type eq 'marctxt')); #$records = $supercat->request( "open-ils.supercat.record.object.retrieve", $records )->gather(1); diff --git a/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat/Feed.pm b/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat/Feed.pm index 27f9d6b032..5c1687243d 100644 --- a/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat/Feed.pm +++ b/Open-ILS/src/perlmods/OpenILS/WWW/SuperCat/Feed.pm @@ -744,4 +744,57 @@ sub new { package OpenILS::WWW::SuperCat::Feed::htmlholdings::item; use base 'OpenILS::WWW::SuperCat::Feed::htmlcard::item'; + +package OpenILS::WWW::SuperCat::Feed::marctxt; +use base 'OpenILS::WWW::SuperCat::Feed::marcxml'; + +sub new { + my $class = shift; + my $self = $class->SUPER::new; + $self->{type} = 'text/plain'; + $self->{xsl} = "/MARC21slim2MARCtxt.xsl"; + return $self; +} + + +our ($_parser, $_xslt, $xslt_file); + +sub toString { + my $self = shift; + my $base = $self->base || ''; + my $root = $self->root || ''; + my $search = $self->search || ''; + my $class = $self->class || ''; + my $lib = $self->lib || '-'; + + $self->composeDoc; + + $_parser ||= new XML::LibXML; + $_xslt ||= new XML::LibXSLT; + + $xslt_file ||= + OpenSRF::Utils::SettingsClient + ->new + ->config_value( dirs => 'xsl' ). + $self->{xsl}; + + # parse the MARC text xslt ... + my $marctxt_xslt = $_xslt->parse_stylesheet( $_parser->parse_file($xslt_file) ); + + my $new_doc = $marctxt_xslt->transform( + $self->{doc}, + base_dir => "'$root'", + lib => "'$lib'", + searchTerms => "'$search'", + searchClass => "'$class'", + ); + + return $marctxt_xslt->output_string($new_doc); +} + + +package OpenILS::WWW::SuperCat::Feed::marctxt::item; +use base 'OpenILS::WWW::SuperCat::Feed::marcxml::item'; + + 1; diff --git a/Open-ILS/web/opac/locale/en-US/opac.dtd b/Open-ILS/web/opac/locale/en-US/opac.dtd index fdaf6562a3..f920c1e111 100644 --- a/Open-ILS/web/opac/locale/en-US/opac.dtd +++ b/Open-ILS/web/opac/locale/en-US/opac.dtd @@ -434,6 +434,7 @@ Please see a librarian to renew your account."> + diff --git a/Open-ILS/web/opac/skin/default/js/rdetail.js b/Open-ILS/web/opac/skin/default/js/rdetail.js index 5c81e45f30..c2db9d87e3 100644 --- a/Open-ILS/web/opac/skin/default/js/rdetail.js +++ b/Open-ILS/web/opac/skin/default/js/rdetail.js @@ -1,12 +1,21 @@ /* */ - detachAllEvt('common', 'run'); attachEvt("common", "run", rdetailDraw); attachEvt("rdetail", "recordDrawn", rdetailBuildStatusColumns); attachEvt("rdetail", "recordDrawn", rdetailBuildInfoRows); attachEvt("rdetail", "recordDrawn", rdetailGetPageIds); +/* Per-skin configuration settings */ +var rdetailLocalOnly = true; +var rdetailShowLocal = true; +var rdetailShowCopyLocation = true; +var rdetailGoogleBookPreview = true; +var rdetailDisplaySerialHoldings = true; +var rdetailEnableRefWorks = true; +var rdetailRefWorksHost = 'http://www.refworks.com'; + +/* vars vars vars */ var record = null; var cp_statuses = null; var recordsCache = []; @@ -17,33 +26,14 @@ var statusRow = null; var numStatuses = null; var defaultCN; var callnumberCache = {}; -var rdetailLocalOnly = true; var globalCNCache = {}; var localTOC; var cachedRecords; var _statusPositions = {}; - -var rdetailShowLocal = true; -var rdetailShowCopyLocation = true; -var googleBookPreview = true; -var displaySerialHoldings = true; var opac_strings; -/* serials are currently the only use of Dojo strings in the OPAC */ -if (displaySerialHoldings) { - dojo.requireLocalization("openils.opac", "opac"); - opac_strings = dojo.i18n.getLocalization("openils.opac", "opac"); -} - var nextContainerIndex; -function rdetailReload() { - var args = {}; - args[PARAM_LOCATION] = getNewSearchLocation(); - args[PARAM_DEPTH] = depthSelGetDepth(); - goTo(buildOPACLink(args)); -} - var nextRecord; var prevRecord; @@ -52,7 +42,18 @@ var rdetailNext = null; var rdetailStart = null; var rdetailEnd = null; +/* serials are currently the only use of Dojo strings in the OPAC */ +if (rdetailDisplaySerialHoldings) { + dojo.requireLocalization("openils.opac", "opac"); + opac_strings = dojo.i18n.getLocalization("openils.opac", "opac"); +} +function rdetailReload() { + var args = {}; + args[PARAM_LOCATION] = getNewSearchLocation(); + args[PARAM_DEPTH] = depthSelGetDepth(); + goTo(buildOPACLink(args)); +} /* looks to see if we have a next and/or previous record in the record cache, if so, set up the nav links */ @@ -124,7 +125,7 @@ function rdetailDraw() { req.callback(_rdetailDraw); req.send(); - if (displaySerialHoldings) { + if (rdetailDisplaySerialHoldings) { var req = new Request(FETCH_MFHD_SUMMARY, getRid()); req.callback(_holdingsDraw); req.send(); @@ -368,6 +369,27 @@ function _rdetailDraw(r) { $('rdetail_place_hold').setAttribute( 'href','javascript:holdsDrawEditor({record:"'+record.doc_id()+'",type:"T"});'); + var RW = $('rdetail_exp_refworks'); + if (RW && rdetailEnableRefWorks) { + + var here = (findOrgUnit(getLocation())).name(); + var org_name = here.replace(" ", "+"); + var cgi = new CGI(); + + RW.setAttribute( + 'href', + rdetailRefWorksHost + '/express/expressimport.asp?vendor=' + + org_name + + '&filter=MARC+Format&database=All+MARC+Formats&encoding=65001&url=http%3A%2F%2F' + + cgi.server_name + '/opac/extras/supercat/marctxt/record/' + + record.doc_id() + ); + + RW.setAttribute('target', 'RefWorksMain'); + + unHideMe($('rdetail_exp_refworks_span')); + } + $('rdetail_img_link').setAttribute('href', buildISBNSrc(cleanISBN(record.isbn()), 'large')); G.ui.rdetail.image.setAttribute("src", buildISBNSrc(cleanISBN(record.isbn()))); runEvt("rdetail", "recordDrawn"); @@ -914,7 +936,7 @@ function _rdetailSortStatuses(a, b) { * Check for a Google Book preview */ function rdetailCheckForGBPreview() { - if (!googleBookPreview) return; + if (!rdetailGoogleBookPreview) return; searchForGBPreview( cleanISBN(record.isbn()) ); } diff --git a/Open-ILS/web/opac/skin/default/xml/page_rdetail.xml b/Open-ILS/web/opac/skin/default/xml/page_rdetail.xml index 9d259ce59f..88b7a24387 100644 --- a/Open-ILS/web/opac/skin/default/xml/page_rdetail.xml +++ b/Open-ILS/web/opac/skin/default/xml/page_rdetail.xml @@ -52,6 +52,9 @@ + + &opac.holds.exportRefWorks; + &opac.holds.placeHold; diff --git a/Open-ILS/xsl/MARC21slim2MARCtxt.xsl b/Open-ILS/xsl/MARC21slim2MARCtxt.xsl new file mode 100644 index 0000000000..5cf6d93b43 --- /dev/null +++ b/Open-ILS/xsl/MARC21slim2MARCtxt.xsl @@ -0,0 +1,36 @@ + + + + + + LEADER + + + + + + + + + + + + + + + + + + + + | + + + + + + + + + + -- 2.11.0