From: Nahuel ANGELINETTI <[email protected]> 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 Signed-off-by: Galen Charlton <[email protected]> --- 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 | 6 +- 5 files changed, 138 insertions(+), 14 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 0a702a3..e071c18 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -67,6 +67,7 @@ BEGIN { GetMarcUrls &GetUsedMarcStructure &GetXmlBiblio + &GetCOinSBiblio &GetAuthorisedValueDesc &GetMarcStructure @@ -1027,6 +1028,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 f7dfc19..f02a1a7 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl @@ -111,11 +111,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" --> <!-- TMPL_VAR NAME="subtitle"-->&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="normalized_isbn" --> - <!-- unAPI <abbr/> tag --> - <span class="results_summary"><span class="label">ISBN: </span><abbr class="unapi-id" title="koha:isbn:<!-- TMPL_VAR NAME="normalized_isbn" -->"><!-- TMPL_VAR NAME="normalized_isbn" --></abbr></span><!-- /TMPL_IF --> + <!-- TMPL_IF NAME="ocoins" --> + <span class="Z3988" title="<!-- TMPL_VAR NAME="ocoins" -->"></span> + <!-- TMPL_ELSE --> + <!-- TMPL_IF name="normalized_isbn" --> + <!-- unAPI <abbr/> tag --> + <span class="results_summary"><span class="label">ISBN: </span><abbr class="unapi-id" title="koha:isbn:<!-- TMPL_VAR NAME="normalized_isbn" -->"><!-- TMPL_VAR NAME="normalized_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 --> @@ -150,7 +153,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 1d592d1..244c3d5 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl @@ -331,6 +331,10 @@ $(document).ready(function(){ <!-- /TMPL_IF --> <td> + <!-- TMPL_IF NAME="coins" --> + <!-- COinS / OpenURL --><span class="Z3988" title="<!-- TMPL_VAR NAME="coins" -->"></span> + <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="XSLTResultsDisplay" --> <!-- TMPL_VAR NAME="XSLTResultsRecord" --> <!-- TMPL_ELSE --> @@ -351,7 +355,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="normalized_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 3e032de..b7818aa 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -224,13 +224,8 @@ $template->param( ); # 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 71cc28d..c2e9250 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -379,6 +379,7 @@ my $total = 0; # 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}); @@ -439,7 +440,10 @@ for (my $i=0;$i<=...@servers;$i++) { $_ ->{'TagLoop'} = get_tags({biblionumber=>$bibnum, approved=>1, 'sort'=>'-weight', limit=>$tag_quantity }); } - } + } + foreach (@newresults) { + $_->{coins} = GetCOinSBiblio($_->{'biblionumber'}); + } $total = $total + $results_hashref->{$server}->{"hits"} if $results_hashref->{$server}->{"hits"}; ## If there's just one result, redirect to the detail page if ($total == 1) { -- 1.5.6.5 _______________________________________________ Koha-patches mailing list [email protected] http://lists.koha.org/mailman/listinfo/koha-patches
