});
}
+=head3 get_identifiers
+
+ my $identifiers = $author->get_identifiers;
+
+Return a list of identifiers of the authors which are in 024$2$a
+
+=cut
+
+sub get_identifiers {
+ my ( $self, $params ) = @_;
+
+ my $flavour =
+ C4::Context->preference('marcflavour') eq 'UNIMARC'
+ ? 'UNIMARCAUTH'
+ : 'MARC21';
+ my $record =
+ MARC::Record->new_from_xml( $self->marcxml, 'UTF-8', $flavour );
+
+ my @identifiers;
+ for my $field ( $record->field('024') ) {
+ my $sf_2 = $field->subfield('2');
+ my $sf_a = $field->subfield('a');
+ my $sf_6 = $field->subfield('6');
+ next unless $sf_2 && $sf_a;
+ push @identifiers, {source => $sf_2, number => $sf_a, linkage => $sf_6};
+ }
+
+ return \@identifiers;
+}
+
=head2 Class Methods
=head3 type
[% INCLUDE 'navigation.inc' %]
</div>
</div>
- <div class="col-lg-10 order-first order-md-first order-lg-2">
+ [% IF Koha.Preference( 'OPACAuthorIdentifiers' ) && author_identifiers.size %]
+ <div class="col-lg-5 order-first order-md-first order-lg-2">
+ [% ELSE %]
+ <div class="col-lg-10 order-first order-md-first order-lg-2">
+ [% END %]
+ [% ELSIF Koha.Preference( 'OPACAuthorIdentifiers' ) && author_identifiers.size %]
+ <div class="col-lg-6 order-first order-md-first order-lg-2">
[% ELSE %]
<div class="col order-first order-md-first order-lg-2">
[% END %]
</div>
</div> <!-- / .#userauthdetails -->
</div> <!-- / .col-lg-10/12 -->
+ [% IF Koha.Preference( 'OPACAuthorIdentifiers' ) && author_identifiers.size %]
+ [% IF ( OpacNav || OpacNavBottom ) %]
+ <div class="col-lg-5 order-lg-3">
+ [% ELSE %]
+ <div class="col-lg-6 order-lg-3">
+ [% END %]
+ <div class="author_identifier">
+ <span>Identifiers</span>
+ <ul>
+ [% FOR identifier IN author_identifiers %]
+ <li>
+ [% SWITCH identifier.source.lower %]
+ [% CASE 'orcid' %]ORCID: <a href="https://orcid.org/[% identifier.number | url %]">[% identifier.number | html %]</a>
+ [% CASE %][% identifier.source | html %]: [% identifier.number | html %]
+ [% END %]
+ </li>
+ [% END %]
+ </ul>
+ </div>
+ </div>
+ [% END %]
</div> <!-- / .row -->
</div> <!-- / .container-fluid -->
</div> <!-- / .main -->
</a>
</li>
[% END %]
+
+ [% IF Koha.Preference( 'OPACAuthorIdentifiers' ) && author_identifiers.size %]
+ <li id="tab_author_identifiers"><a href="#author_identifiers">Author identifiers</a></li>
+ [% END %]
+
</ul>
<div class="tab-content">
</div><!-- / #images -->
[% END # / IF OPACLocalCoverImages && localimages.size %]
+ [% IF Koha.Preference( 'OPACAuthorIdentifiers' ) && author_identifiers.size %]
+ <div id="author_identifiers" class="tab-pane" role="tabpanel" aria-labelledby="tab_author_identifiers-tab">
+ [% FOR author IN author_identifiers %]
+ <div class="author_identifier">
+ <span class="author_name"><a href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% author.authid | uri %]">[% author.name | html %]</a></span>
+ <ul>
+ [% FOR identifier IN author.identifiers %]
+ <li>
+ [% SWITCH identifier.source.lower %]
+ [% CASE 'orcid' %]ORCID:
+ [% CASE 'scopus' %]ScopusID:
+ [% CASE 'loop' %]loop:
+ [% CASE 'rid' %]Publons:
+ [% CASE %][% identifier.source | html %]:
+ [% END %]
+ [% IF identifier.linkage %]
+ <a href="[% identifier.linkage | uri %]">[% identifier.number | html %]</a>
+ [% ELSE %]
+ [% identifier.number | html %]
+ [% END %]
+ </li>
+ [% END %]
+ </ul>
+ </div>
+ [% END %]
+ </div>
+ [% END %]
+
</div> <!-- / #bibliodescriptions -->
[% IF ( NovelistSelectProfile && NovelistSelectView == 'below' && ( normalized_isbn || normalized_upc ) ) %]
} else {
my $summary = BuildSummary($record, $authid, $authtypecode);
$template->{VARS}->{'summary'} = $summary;
+
+ if ( C4::Context->preference('OPACAuthorIdentifiers') ) {
+ my $authority = Koha::Authorities->find($authid);
+ my $identifiers = $authority->get_identifiers;
+ $template->param( author_identifiers => $identifiers );
+ }
}
output_html_with_http_headers $query, $cookie, $template->output;
'OpacLocationBranchToDisplay' => C4::Context->preference('OpacLocationBranchToDisplay'),
);
+if ( C4::Context->preference('OPACAuthorIdentifiers') ) {
+ my @author_identifiers;
+ for my $author ( @{ $biblio->get_marc_authors } ) {
+ my $authid = $author->{authoritylink};
+ my $authority = Koha::Authorities->find($authid);
+ next unless $authority;
+ my $identifiers = $authority->get_identifiers;
+ next unless $identifiers && @$identifiers;
+ my ($name) =
+ map { $_->{value} }
+ grep { $_->{code} eq 'a' ? $_ : () }
+ @{ $author->{MARCAUTHOR_SUBFIELDS_LOOP} };
+ push @author_identifiers,
+ { authid => $authid, name => $name, identifiers => $identifiers };
+ }
+ $template->param( author_identifiers => \@author_identifiers );
+}
+
output_html_with_http_headers $query, $cookie, $template->output;
use Modern::Perl;
-use Test::More tests => 7;
+use Test::More tests => 8;
use MARC::Field;
use MARC::File::XML;
use MARC::Record;
return [ $marc ];
}
+subtest 'get_identifiers' => sub {
+ plan tests => 1;
+
+ t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' );
+ my $record = MARC::Record->new();
+ $record->add_fields(
+ [
+ '100', ' ', ' ',
+ a => 'Lastname, Firstname',
+ b => 'b',
+ c => 'c',
+ i => 'i'
+ ],
+ [
+ '024', '', '',
+ a => '0000-0002-1234-5678',
+ 2 => 'orcid',
+ 6 => 'https://orcid.org/0000-0002-1234-5678'
+ ],
+ [
+ '024', '', '',
+ a => '01234567890',
+ 2 => 'scopus',
+ 6 => 'https://www.scopus.com/authid/detail.uri?authorId=01234567890'
+ ],
+ );
+ my $authid = C4::AuthoritiesMarc::AddAuthority($record, undef, 'PERSO_NAME');
+ my $authority = Koha::Authorities->find($authid);
+ is_deeply(
+ $authority->get_identifiers,
+ [
+ {
+ source => 'orcid',
+ number => '0000-0002-1234-5678',
+ linkage => 'https://orcid.org/0000-0002-1234-5678'
+ },
+ {
+ source => 'scopus',
+ number => '01234567890',
+ linkage => 'https://www.scopus.com/authid/detail.uri?authorId=01234567890'
+ }
+ ]
+ );
+};
+
$schema->storage->txn_rollback;