(bug #1578) Add the (quasi)full COinS(Zotero) support
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: Henri-Damien LAURENT <henridamien@koha-fr.org>
This commit is contained in:
parent
bb038e19d9
commit
a4fecfbefa
118
C4/Biblio.pm
118
C4/Biblio.pm
|
|
@ -64,6 +64,7 @@ BEGIN {
|
|||
GetMarcUrls
|
||||
&GetUsedMarcStructure
|
||||
&GetXmlBiblio
|
||||
&GetCOinSBiblio
|
||||
|
||||
&GetAuthorisedValueDesc
|
||||
&GetMarcStructure
|
||||
|
|
@ -886,6 +887,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');
|
||||
$publisher = $record->subfield('260','b');
|
||||
$isbn = $record->subfield('020','a');
|
||||
$issn = $record->subfield('022','a');
|
||||
|
||||
}
|
||||
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/\ /\+/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
|
||||
|
|
|
|||
|
|
@ -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" -->
|
||||
|
|
|
|||
|
|
@ -203,6 +203,8 @@ $(document).ready(function(){
|
|||
<!-- /TMPL_IF -->
|
||||
|
||||
<td>
|
||||
<!-- COinS / OpenURL --><span class="Z3988" title="<!-- TMPL_VAR NAME="coins" -->"></span>
|
||||
|
||||
<!-- TMPL_IF NAME="XSLTResultsDisplay" -->
|
||||
<!-- TMPL_VAR NAME="XSLTResultsRecord" -->
|
||||
<!-- TMPL_ELSE -->
|
||||
|
|
@ -223,7 +225,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>
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -436,6 +436,7 @@ for (my $i=0;$i<=@servers;$i++) {
|
|||
next;
|
||||
}
|
||||
$_ ->{'clean_isbn'} = $1;
|
||||
$_->{'coins'} = GetCOinSBiblio($_->{'biblionumber'});
|
||||
}
|
||||
$total = $total + $results_hashref->{$server}->{"hits"};
|
||||
## If there's just one result, redirect to the detail page
|
||||
|
|
|
|||
Loading…
Reference in New Issue