1 package Koha::Authority;
3 # Copyright 2015 Koha Development Team
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
22 use base qw(Koha::Object);
24 use Koha::Authority::ControlledIndicators;
25 use Koha::SearchEngine::Search;
29 Koha::Authority - Koha Authority Object class
35 =head3 get_usage_count
37 $count = $self->get_usage_count;
39 Returns the number of linked biblio records.
45 return Koha::Authorities->get_usage_count({ authid => $self->authid });
48 =head3 linked_biblionumbers
50 my @biblios = $self->linked_biblionumbers({
51 [ max_results => $max ], [ offset => $offset ],
54 Returns an array of biblionumbers.
58 sub linked_biblionumbers {
59 my ( $self, $params ) = @_;
60 $params->{authid} = $self->authid;
61 return Koha::Authorities->linked_biblionumbers( $params );
64 =head3 controlled_indicators
66 Some authority types control the indicators of some corresponding
67 biblio fields (especially in MARC21).
68 For example, if you have a PERSO_NAME authority (report tag 100), the
69 first indicator of biblio field 600 directly comes from the authority,
70 and the second indicator depends on thesaurus settings in the authority
71 record. Use this method to obtain such controlled values. In this example
72 you should pass 600 in the biblio_tag parameter.
74 my $result = $self->controlled_indicators({
75 record => $auth_marc, biblio_tag => $bib_tag
77 my $ind1 = $result->{ind1};
78 my $ind2 = $result->{ind2};
79 my $subfield_2 = $result->{sub2}; # Optional subfield 2 when ind==7
81 If an indicator is not controlled, the result hash does not contain a key
82 for its value. (Same for the sub2 key for an optional subfield $2.)
84 Note: The record parameter is a temporary bypass in order to prevent
85 needless conversion of $self->marcxml.
89 sub controlled_indicators {
90 my ( $self, $params ) = @_;
91 my $tag = $params->{biblio_tag} // q{};
92 my $record = $params->{record};
94 my $flavour = C4::Context->preference('marcflavour') eq 'UNIMARC'
98 $record = $self->record;
101 if( !$self->{_report_tag} ) {
102 my $authtype = Koha::Authority::Types->find( $self->authtypecode );
103 return {} if !$authtype; # very exceptional
104 $self->{_report_tag} = $authtype->auth_tag_to_report;
107 $self->{_ControlledInds} //= Koha::Authority::ControlledIndicators->new;
108 return $self->{_ControlledInds}->get({
109 auth_record => $record,
110 report_tag => $self->{_report_tag},
116 =head3 get_identifiers
118 my $identifiers = $author->get_identifiers;
120 Return a list of identifiers of the authors which are in 024$2$a
124 sub get_identifiers {
125 my ( $self, $params ) = @_;
127 my $record = $self->record;
130 for my $field ( $record->field('024') ) {
131 my $sf_2 = $field->subfield('2');
132 my $sf_a = $field->subfield('a');
133 next unless $sf_2 && $sf_a;
134 push @identifiers, {source => $sf_2, number => $sf_a, };
137 return \@identifiers;
142 my $record = $authority->record()
144 Return the MARC::Record for this authority
151 my $flavour = $self->record_schema;
152 return MARC::Record->new_from_xml( $self->marcxml, 'UTF-8', $flavour );
157 my $schema = $biblio->record_schema();
159 Returns the record schema (MARC21 or UNIMARCAUTH).
166 return C4::Context->preference('marcflavour') eq 'UNIMARC'
171 =head3 to_api_mapping
173 This method returns the mapping for representing a Koha::Authority object
180 authid => 'authority_id',
182 authtypecode => 'framework_id',
183 datecreated => 'created_date',
187 modification_time => 'modified_date',
192 =head2 Internal methods