Bug 14670: Add Cite-option to detail page in OPAC
Adds a "cite" option in the tools menu in OPAC detail page for easy citations. Test plan: 1. Apply this patch 2. Got to OPAC detail page 3. In the tools menu to the right, click the new "Cite" link 4. A modal should appear with four different citation styles (APA, Chicago, Harvard, MLA) Sponsored-by: Regionbibliotek Halland / County library of Halland Signed-off-by: Nicole Engard <nengard@bywatersolutions.com> Signed-off-by: Hugo Agud <hagud@orex.es> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
parent
4e1784c663
commit
7fc709a7fe
108
C4/Record.pm
108
C4/Record.pm
|
|
@ -58,6 +58,7 @@ use vars qw(@ISA @EXPORT);
|
|||
marc2madsxml
|
||||
marc2bibtex
|
||||
marc2csv
|
||||
marc2cites
|
||||
marcrecord2csv
|
||||
changeEncoding
|
||||
);
|
||||
|
|
@ -844,6 +845,113 @@ sub marc2bibtex {
|
|||
return $tex;
|
||||
}
|
||||
|
||||
=head2 marc2cites - Convert from MARC21 and UNIMARC to citations
|
||||
|
||||
my $cites = marc2cites($record);
|
||||
|
||||
Returns hashref of citation from MARC data, suitable to pass to templates.
|
||||
Hash keys store citation system names, hash values citation string.
|
||||
|
||||
C<$record> - a MARC::Record object
|
||||
|
||||
=cut
|
||||
|
||||
sub marc2cites {
|
||||
my $record = shift;
|
||||
my $marcflavour = C4::Context->preference("marcflavour");
|
||||
my %cites = ();
|
||||
my @authors = ();
|
||||
my $re_clean = qr/(^[\.,:;\/\-\s]+|[\.,:;\/\-\s]+$)/;
|
||||
|
||||
my @authors;
|
||||
my @authorFields = ('100','110','111','700','710','711');
|
||||
@authorFields = ('700','701','702','710','711','721') if ( $marcflavour eq "UNIMARC" );
|
||||
|
||||
foreach my $ftag ( @authorFields ) {
|
||||
foreach my $field ($record->field($ftag)) {
|
||||
my $author = '';
|
||||
if ( $marcflavour eq "UNIMARC" ) {
|
||||
$author = join ', ',
|
||||
( $field->subfield("a"), $field->subfield("b") );
|
||||
} else {
|
||||
$author = $field->subfield("a");
|
||||
}
|
||||
if($author =~ /([^,]+),?(.*)/) {
|
||||
my %a;
|
||||
($a{'surname'} = $1) =~ s/$re_clean//g;
|
||||
$a{'forenames'} = [map {s/$re_clean//g;$_} split ' ', $2];
|
||||
push(@authors, \%a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my %publication;
|
||||
if ( $marcflavour eq "UNIMARC" ) {
|
||||
%publication = (
|
||||
title => $record->subfield("200", "a") || "",
|
||||
place => $record->subfield("210", "a") || "",
|
||||
publisher => $record->subfield("210", "c") || "",
|
||||
date => $record->subfield("210", "d") || $record->subfield("210", "h") || ""
|
||||
);
|
||||
} else {
|
||||
%publication = (
|
||||
title => $record->subfield("245", "a") || "",
|
||||
place => $record->subfield("260", "a") || "",
|
||||
publisher => $record->subfield("264", "b") || $record->subfield("260", "b") || "",
|
||||
date => $record->subfield("264", "c") || $record->subfield("260", "c") || $record->subfield("260", "g") || ""
|
||||
);
|
||||
}
|
||||
|
||||
$publication{$_} =~ s/$re_clean//g for keys %publication;
|
||||
$publication{'date'} =~ s/[\D-]//g;
|
||||
|
||||
my $i = $#authors;
|
||||
my $last = 0;
|
||||
my $seclast = 0;
|
||||
for my $author (@authors) {
|
||||
$cites{'Harvard'} .= $author->{'surname'} . ' ';
|
||||
$cites{'Harvard'} .= substr($_, 0, 1) . '. ' for @{$author->{'forenames'}};
|
||||
$cites{'Harvard'} =~ s/\s+$//;
|
||||
$cites{'Harvard'} .= $last ? '' : ($seclast ? ' and ' : ', ');
|
||||
$cites{'Chicago'} .= $author->{'surname'} . ' ';
|
||||
$cites{'Chicago'} .= $_ . ' ' for @{$author->{'forenames'}};
|
||||
$cites{'Chicago'} =~ s/\s+$//;
|
||||
$cites{'Chicago'} .= $last ? '' : ($seclast ? ' and ' : ', ');
|
||||
$cites{'MLA'} .= $author->{'surname'} . ' ';
|
||||
$cites{'MLA'} .= $_ . ' ' for @{$author->{'forenames'}};
|
||||
$cites{'MLA'} =~ s/\s+$//;
|
||||
$cites{'MLA'} .= $last ? '' : ($seclast ? ' and ' : ', ');
|
||||
$cites{'APA'} .= $author->{'surname'} . ' ';
|
||||
$cites{'APA'} .= substr($_, 0, 1) . '. ' for @{$author->{'forenames'}};
|
||||
$cites{'APA'} =~ s/\s+$//;
|
||||
$cites{'APA'} .= $last ? '' : ($seclast ? ' & ' : ', ');
|
||||
$seclast = $#authors > 1 && $i-- == 2;
|
||||
$last = $i == 0;
|
||||
}
|
||||
$cites{$_} =~ s/([^\.])$/$1./ for keys %cites;
|
||||
|
||||
$cites{'Harvard'} .= ' (' . $publication{'date'} . '). ';
|
||||
$cites{'Chicago'} .= ' ' . $publication{'date'} . '. ';
|
||||
$cites{'MLA'} .= ' ' . $publication{'title'} . '. ';
|
||||
$cites{'APA'} .= ' (' . $publication{'date'} . '). ';
|
||||
$cites{'Harvard'} .= $publication{'title'} . '. ';
|
||||
$cites{'Chicago'} .= $publication{'title'} . '. ';
|
||||
$cites{'MLA'} .= $publication{'place'} . ': ';
|
||||
$cites{'APA'} .= $publication{'title'} . '. ';
|
||||
$cites{'Harvard'} .= $publication{'place'} . ': ';
|
||||
$cites{'Chicago'} .= $publication{'place'} . ': ';
|
||||
$cites{'MLA'} .= $publication{'publisher'} . '. ';
|
||||
$cites{'APA'} .= $publication{'place'} . ': ';
|
||||
$cites{'Harvard'} .= $publication{'publisher'};
|
||||
$cites{'Chicago'} .= $publication{'publisher'};
|
||||
$cites{'MLA'} .= $publication{'date'};
|
||||
$cites{'APA'} .= $publication{'publisher'};
|
||||
$cites{$_} =~ s/ +/ / for keys %cites;
|
||||
$cites{$_} =~ s/([^\.])$/$1./ for keys %cites;
|
||||
|
||||
return \%cites;
|
||||
}
|
||||
|
||||
|
||||
=head1 INTERNAL FUNCTIONS
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,21 @@
|
|||
[% USE raw %]
|
||||
[% USE Biblio %]
|
||||
|
||||
<div id="citemodal" class="modal hide" role="dialog" aria-labelledby="citeLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h2 id="citeLabel">[% title OR 'Citation' | html %]</h2>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
[% FOREACH system IN cites.keys.sort %]
|
||||
<h3>[% system %]</h3>
|
||||
<p>[% cites.$system | html %]</p>
|
||||
[% END %]
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul id="action">
|
||||
[% IF Koha.Preference( 'opacuserlogin' ) == 1 %]
|
||||
[% IF Koha.Preference( 'OPACHoldRequests' ) == 1 %]
|
||||
|
|
@ -15,6 +31,7 @@
|
|||
[% END %]
|
||||
|
||||
<li><a class="print-large btn btn-link btn-lg" href="#"><i class="fa fa-fw fa-print" aria-hidden="true"></i> Print</a></li>
|
||||
<li><a href="#citemodal" id="cite" data-toggle="modal">Cite</a></li>
|
||||
|
||||
[% IF Koha.Preference( 'opacuserlogin' ) == 1 %]
|
||||
[% IF artreqpossible %]
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ use C4::Biblio qw(
|
|||
GetMarcISSN
|
||||
TransformMarcToKoha
|
||||
);
|
||||
use C4::Record;
|
||||
use C4::Reserves qw( IsAvailableForItemLevelRequest );
|
||||
use C4::Serials qw( CountSubscriptionFromBiblionumber SearchSubscriptions GetLatestSerials );
|
||||
use C4::Koha qw(
|
||||
|
|
@ -229,4 +230,7 @@ if( C4::Context->preference('ArticleRequests') ) {
|
|||
$template->param( artreqpossible => $artreqpossible );
|
||||
}
|
||||
|
||||
# Cites
|
||||
$template->{VARS}->{'cites'} = marc2cites($record);
|
||||
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ use C4::Biblio qw(
|
|||
GetMarcStructure
|
||||
TransformMarcToKoha
|
||||
);
|
||||
use C4::Record;
|
||||
use C4::Reserves qw( IsAvailableForItemLevelRequest );
|
||||
use C4::Members;
|
||||
use C4::Koha qw( GetNormalizedISBN );
|
||||
|
|
@ -388,4 +389,7 @@ $template->param(
|
|||
borrowernumber => $loggedinuser,
|
||||
);
|
||||
|
||||
# Cites
|
||||
$template->{VARS}->{'cites'} = marc2cites($record);
|
||||
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ use C4::Biblio qw(
|
|||
GetMarcSubjects
|
||||
GetMarcUrls
|
||||
);
|
||||
use C4::Record;
|
||||
use C4::Tags qw( get_tags );
|
||||
use C4::XISBN qw( get_xisbns );
|
||||
use C4::External::Amazon qw( get_amazon_tld );
|
||||
|
|
@ -1260,4 +1261,7 @@ if ( C4::Context->preference('OPACAuthorIdentifiersAndInformation') ) {
|
|||
$template->param( author_information => \@author_information );
|
||||
}
|
||||
|
||||
# Cites
|
||||
$template->{VARS}->{'cites'} = marc2cites($record);
|
||||
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
Loading…
Reference in New Issue