[Koha-patches] [PATCH] [PATCH][3.2][Replace Previous] (bug #1578) Add the (quasi)full COinS(Zotero) support
Nahuel ANGELINETTI
nahuel.angelinetti at biblibre.com
Thu Jan 8 11:38:01 CET 2009
this patch do a lot of things :
* Add the function GetCOinSBiblio in C4::Biblio, return the COinS value that must be put in a span title
This will be usefull for OpenURL support.
* Replace the span in opac-detail, and put the var get from GetCOinSBiblio
* Fix an <img> tag that wasn't autoclosed
* Add the COinS in search result
* Full COinS support of UNIMARC, the MARC21 support should be improved to provide all kind of document types
---
C4/Biblio.pm | 118 ++++++++++++++++++++
.../opac-tmpl/prog/en/modules/opac-detail.tmpl | 15 ++-
.../opac-tmpl/prog/en/modules/opac-results.tmpl | 6 +-
opac/opac-detail.pl | 7 +-
opac/opac-search.pl | 2 +
5 files changed, 135 insertions(+), 13 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index d8d5dfe..9f1c228 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -62,6 +62,7 @@ BEGIN {
GetMarcUrls
&GetUsedMarcStructure
&GetXmlBiblio
+ &GetCOinSBiblio
&GetAuthorisedValueDesc
&GetMarcStructure
@@ -884,6 +885,123 @@ sub GetXmlBiblio {
return $marcxml;
}
+=head2 GetCOinSBiblio
+
+=over 4
+
+my $coins = GetCOinSBiblio($biblionumber);
+
+Returns the COinS(a span) which can be included in a biblio record
+
+=back
+
+=cut
+
+sub GetCOinSBiblio {
+ my ( $biblionumber ) = @_;
+ my $record = GetMarcBiblio($biblionumber);
+
+ # get the coin format
+ my $pos7 = substr $record->leader(), 7,1;
+ my $pos6 = substr $record->leader(), 6,1;
+ my $mtx;
+ my $genre;
+ my ($aulast, $aufirst) = ('','');
+ my $oauthors;
+ my $title;
+ my $pubyear;
+ my $isbn;
+ my $issn;
+ my $publisher;
+
+ if ( C4::Context->preference("marcflavour") eq "UNIMARC" ){
+ my $fmts6;
+ my $fmts7;
+ %$fmts6 = (
+ 'a' => 'book',
+ 'b' => 'manuscript',
+ 'c' => 'book',
+ 'd' => 'manuscript',
+ 'e' => 'map',
+ 'f' => 'map',
+ 'g' => 'film',
+ 'i' => 'audioRecording',
+ 'j' => 'audioRecording',
+ 'k' => 'artwork',
+ 'l' => 'document',
+ 'm' => 'computerProgram',
+ 'r' => 'document',
+
+ );
+ %$fmts7 = (
+ 'a' => 'journalArticle',
+ 's' => 'journal',
+ );
+
+ $genre = $fmts6->{$pos6} ? $fmts6->{$pos6} : 'book' ;
+
+ if( $genre eq 'book' ){
+ $genre = $fmts7->{$pos7} if $fmts7->{$pos7};
+ }
+
+ ##### We must transform mtx to a valable mtx and document type ####
+ if( $genre eq 'book' ){
+ $mtx = 'book';
+ }elsif( $genre eq 'journal' ){
+ $mtx = 'journal';
+ }elsif( $genre eq 'journalArticle' ){
+ $mtx = 'journal';
+ $genre = 'article';
+ }else{
+ $mtx = 'dc';
+ }
+
+ $genre = ($mtx eq 'dc') ? "&rft.type=$genre" : "&rft.genre=$genre";
+
+ # Setting datas
+ $aulast = $record->subfield('700','a');
+ $aufirst = $record->subfield('700','b');
+ $oauthors = "&rft.au=$aufirst $aulast";
+ # others authors
+ if($record->field('200')){
+ for my $au ($record->field('200')->subfield('g')){
+ $oauthors .= "&rft.au=$au";
+ }
+ }
+ $title = ( $mtx eq 'dc' ) ? "&rft.title=".$record->subfield('200','a') :
+ "&rft.title=".$record->subfield('200','a')."&rft.btitle=".$record->subfield('200','a');
+ $pubyear = $record->subfield('210','d');
+ $publisher = $record->subfield('210','c');
+ $isbn = $record->subfield('010','a');
+ $issn = $record->subfield('011','a');
+ }else{
+ # MARC21 need some improve
+ my $fmts;
+ $mtx = 'book';
+ $genre = "&rft.genre=book";
+
+ # Setting datas
+ $oauthors .= "&rft.au=".$record->subfield('100','a');
+ # others authors
+ if($record->field('700')){
+ for my $au ($record->field('700')->subfield('a')){
+ $oauthors .= "&rft.au=$au";
+ }
+ }
+ $title = "&rft.btitle=".$record->subfield('245','a');
+ $pubyear = $record->subfield('260','c') or "";
+ $publisher = $record->subfield('260','b') or "";
+ $isbn = $record->subfield('020','a') or "";
+ $issn = $record->subfield('022','a') or "";
+
+ }
+ my $coins_value = "ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A$mtx$genre$title&rft.isbn=$isbn&rft.issn=$issn&rft.aulast=$aulast&rft.aufirst=$aufirst$oauthors&rft.pub=$publisher&rft.date=$pubyear";
+ $coins_value =~ s/(\ |&[^a])/\+/g;
+ #<!-- TMPL_VAR NAME="ocoins_format" -->&rft.au=<!-- TMPL_VAR NAME="author" -->&rft.btitle=<!-- TMPL_VAR NAME="title" -->&rft.date=<!-- TMPL_VAR NAME="publicationyear" -->&rft.pages=<!-- TMPL_VAR NAME="pages" -->&rft.isbn=<!-- TMPL_VAR NAME=amazonisbn -->&rft.aucorp=&rft.place=<!-- TMPL_VAR NAME="place" -->&rft.pub=<!-- TMPL_VAR NAME="publishercode" -->&rft.edition=<!-- TMPL_VAR NAME="edition" -->&rft.series=<!-- TMPL_VAR NAME="series" -->&rft.genre="
+
+ return $coins_value;
+}
+
=head2 GetAuthorisedValueDesc
=over 4
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
index 45a9780..5130653 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
@@ -113,11 +113,14 @@
<!-- TMPL_IF NAME="pages" --><span class="results_summary"><span class="label">Physical details:</span> <!-- TMPL_VAR NAME="pages" --> <!-- TMPL_VAR NAME="illus" --> <!-- TMPL_VAR NAME="size" --></span><!-- /TMPL_IF -->
<!-- COinS / OpenURL -->
- <!-- TMPL_IF NAME="ocoins_format" -->
- <span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A<!-- TMPL_VAR NAME="ocoins_format" -->&rft.au=<!-- TMPL_VAR NAME="author" -->&rft.btitle=<!-- TMPL_VAR NAME="title" -->&rft.date=<!-- TMPL_VAR NAME="publicationyear" -->&rft.pages=<!-- TMPL_VAR NAME="pages" -->&rft.isbn=<!-- TMPL_VAR NAME=amazonisbn -->&rft.aucorp=&rft.place=<!-- TMPL_VAR NAME="place" -->&rft.pub=<!-- TMPL_VAR NAME="publishercode" -->&rft.edition=<!-- TMPL_VAR NAME="edition" -->&rft.series=<!-- TMPL_VAR NAME="series" -->&rft.genre="></span><!-- /TMPL_IF -->
- <!-- TMPL_IF name="isbn" -->
- <!-- unAPI <abbr/> tag -->
- <span class="results_summary"><span class="label">ISBN: </span><abbr class="unapi-id" title="koha:isbn:<!-- TMPL_VAR NAME="isbn" -->"><!-- TMPL_VAR NAME="isbn" --></abbr></span><!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="ocoins" -->
+ <span class="Z3988" title="<!-- TMPL_VAR NAME="ocoins" -->"></span>
+ <!-- TMPL_ELSE -->
+ <!-- TMPL_IF name="isbn" -->
+ <!-- unAPI <abbr/> tag -->
+ <span class="results_summary"><span class="label">ISBN: </span><abbr class="unapi-id" title="koha:isbn:<!-- TMPL_VAR NAME="isbn" -->"><!-- TMPL_VAR NAME="isbn" --></abbr></span>
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
<!-- TMPL_IF name="issn" -->
<span class="results_summary"><span class="label">ISSN:</span><!-- TMPL_VAR NAME="issn" --></span>
<!-- /TMPL_IF -->
@@ -152,7 +155,7 @@
<!-- TMPL_IF name="copyrightdate" -->
<span class="results_summary"><span class="label">Year : </span><!-- TMPL_VAR NAME="copyrightdate" --></span>
<!-- /TMPL_IF -->
- <!-- TMPL_UNLESS NAME="item-level_itypes" --><img src="<!-- TMPL_VAR NAME="imageurl" -->" alt="<!-- TMPL_VAR NAME="description" -->" title="<!-- TMPL_VAR NAME="description" -->">
+ <!-- TMPL_UNLESS NAME="item-level_itypes" --><img src="<!-- TMPL_VAR NAME="imageurl" -->" alt="<!-- TMPL_VAR NAME="description" -->" title="<!-- TMPL_VAR NAME="description" -->" />
<span class="results_summary"><span class="label">Item type : </span>
<!-- TMPL_IF name="description" -->
<!-- TMPL_VAR NAME="description" -->
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
index d23a64f..9647f0c 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
@@ -203,6 +203,10 @@ $(document).ready(function(){
<!-- /TMPL_IF -->
<td>
+ <!-- TMPL_IF NAME="coins" -->
+ <!-- COinS / OpenURL --><span class="Z3988" title="<!-- TMPL_VAR NAME="coins" -->">aaa</span>
+ <!-- /TMPL_IF -->
+
<!-- TMPL_IF NAME="XSLTResultsDisplay" -->
<!-- TMPL_VAR NAME="XSLTResultsRecord" -->
<!-- TMPL_ELSE -->
@@ -223,7 +227,7 @@ $(document).ready(function(){
<!-- TMPL_IF name="size" --> <!-- TMPL_VAR name="size" --><!-- /TMPL_IF -->
<!-- TMPL_IF name="timestamp" --> <i>(modified on <!-- TMPL_VAR name="timestamp" -->)</i><!-- /TMPL_IF -->
</span>
- <!-- TMPL_IF NAME="copyrightdate" --><span class="results_summary"><span class="label">Date:</span><!-- TMPL_VAR NAME="copyrightdate" --></span><!-- COinS / OpenURL --><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.au=<!-- TMPL_VAR NAME="author_nospan" -->&rft.btitle=<!-- TMPL_VAR NAME="title_nospan" ESCAPE="url" -->&rft.date=<!-- TMPL_VAR NAME="publicationyear" -->&rft.tpages=<!-- TMPL_VAR NAME="size" -->&rft.isbn=<!-- TMPL_VAR NAME="isbn" ESCAPE="url" -->&rft.aucorp=&rft.place=<!-- TMPL_VAR NAME="place" -->&rft.pub=<!-- TMPL_VAR NAME="publisher" ESCAPE="url" -->&rft.edition=<!-- TMPL_VAR NAME="edition" -->&rft.series=<!-- TMPL_VAR NAME="series" -->&rft.genre="></span><!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="copyrightdate" --><span class="results_summary"><span class="label">Date:</span><!-- TMPL_VAR NAME="copyrightdate" --></span><!-- /TMPL_IF -->
<span class="results_summary">
<span class="label">Availability:</span>
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index de61ce3..794dea7 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -188,13 +188,8 @@ foreach ( keys %{$dat} ) {
}
# COinS format FIXME: for books Only
-my $coins_format;
-my $fmt = substr $record->leader(), 6,2;
-my $fmts;
-$fmts->{'am'} = 'book';
-$coins_format = $fmts->{$fmt};
$template->param(
- ocoins_format => $coins_format,
+ ocoins => GetCOinSBiblio($biblionumber),
);
my $reviews = getreviews( $biblionumber, 1 );
diff --git a/opac/opac-search.pl b/opac/opac-search.pl
index e5e916d..13c3b59 100755
--- a/opac/opac-search.pl
+++ b/opac/opac-search.pl
@@ -370,6 +370,7 @@ my $total; # the total results for the whole set
my $facets; # this object stores the faceted results that display on the left-hand of the results page
my @results_array;
my $results_hashref;
+my @coins;
if ($tag) {
my $taglist = get_tags({term=>$tag, approved=>1});
@@ -432,6 +433,7 @@ for (my $i=0;$i<=@servers;$i++) {
}
}
foreach (@newresults) {
+ $_->{coins} = GetCOinSBiblio($_->{'biblionumber'});
my $clean = $_->{isbn} or next;
unless (
$clean =~ /\b(\d{13})\b/ or
--
1.5.6.3
More information about the Koha-patches
mailing list