1 package Koha::Illrequest::Config;
3 # Copyright 2013,2014 PTFS Europe Ltd
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 use File::Basename qw/basename/;
28 Koha::Illrequest::Config - Koha ILL Configuration Object
32 Object-oriented class that giving access to the illconfig data derived
37 Config object providing abstract representation of the expected XML
40 In particular the config object uses a YAML file, whose path is
41 defined by <illconfig> in koha-conf.xml. That YAML file provides the
42 data structure exposed in this object.
44 By default the configured data structure complies with fields used by
45 the British Library Interlibrary Loan DSS API.
47 The config file also provides mappings for Record Object accessors.
55 my $config = Koha::Illrequest::Config->new();
57 Create a new Koha::Illrequest::Config object, with mapping data loaded from the
58 ILL configuration file.
66 $self->{configuration} = _load_configuration(
67 C4::Context->config("interlibrary_loans")
77 $backend = $config->backend($name);
78 $backend = $config->backend;
80 Standard setter/accessor for our backend.
85 my ( $self, $new ) = @_;
86 $self->{configuration}->{backend} = $new if $new;
87 return $self->{configuration}->{backend};
92 $backend_dir = $config->backend_dir($new_path);
93 $backend_dir = $config->backend_dir;
95 Standard setter/accessor for our backend_directory.
100 my ( $self, $new ) = @_;
101 $self->{configuration}->{backend_directory} = $new if $new;
102 return $self->{configuration}->{backend_directory};
105 =head3 available_backends
107 Return a list of available backends.
111 sub available_backends {
113 my $backend_dir = $self->backend_dir;
115 @backends = glob "$backend_dir/*" if ( $backend_dir );
116 @backends = map { basename($_) } @backends;
122 $partner_code = $config->partner_code($new_code);
123 $partner_code = $config->partner_code;
125 Standard setter/accessor for our partner_code.
130 my ( $self, $new ) = @_;
131 $self->{configuration}->{partner_code} = $new if $new;
132 return $self->{configuration}->{partner_code};
137 $limits = $config->limits($limitshash);
138 $limits = $config->limits;
140 Standard setter/accessor for our limits. No parsing is performed on
141 $LIMITSHASH, so caution should be exercised when using this setter.
146 my ( $self, $new ) = @_;
147 $self->{configuration}->{limits} = $new if $new;
148 return $self->{configuration}->{limits};
153 my $prefixes = $config->getPrefixes('brw_cat' | 'branch');
155 Return the prefix for ILLs defined by our config.
160 my ( $self, $type ) = @_;
161 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
162 my $values = $self->{configuration}->{prefixes}->{$type};
163 $values->{default} = $self->{configuration}->{prefixes}->{default};
169 my $rules = $config->getLimitRules('brw_cat' | 'branch')
171 Return the hash of ILL limit rules defined by our config.
176 my ( $self, $type ) = @_;
177 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
178 my $values = $self->{configuration}->{limits}->{$type};
179 $values->{default} = $self->{configuration}->{limits}->{default};
183 =head3 getDigitalRecipients
185 my $recipient_rules= $config->getDigitalRecipients('brw_cat' | 'branch');
187 Return the hash of digital_recipient settings defined by our config.
191 sub getDigitalRecipients {
192 my ( $self, $type ) = @_;
193 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
194 my $values = $self->{configuration}->{digital_recipients}->{$type};
196 $self->{configuration}->{digital_recipients}->{default};
202 my $censoredValues = $config->censorship($hash);
203 my $censoredValues = $config->censorship;
205 Standard setter/accessor for our limits. No parsing is performed on $HASH, so
206 caution should be exercised when using this setter.
208 Return our censorship values for the OPAC as loaded from the koha-conf.xml, or
209 the fallback value (no censorship).
214 my ( $self, $new ) = @_;
215 $self->{configuration}->{censorship} = $new if $new;
216 return $self->{configuration}->{censorship};
219 =head3 _load_configuration
221 my $configuration = $config->_load_configuration($config_from_xml);
223 Read the configuration values passed as the parameter, and populate a hashref
224 suitable for use with these.
226 A key task performed here is the parsing of the input in the configuration
227 file to ensure we have only valid input there.
231 sub _load_configuration {
232 my ( $xml_config ) = @_;
233 my $xml_backend_dir = $xml_config->{backend_directory};
235 # Default data structure to be returned
236 my $configuration = {
237 backend_directory => $xml_backend_dir,
239 censor_notes_staff => 0,
240 censor_reply_date => 0,
243 digital_recipients => {},
245 partner_code => 'ILLLIBS',
246 raw_config => $xml_config,
249 # Per Branch Configuration
250 my $branches = $xml_config->{branch};
251 if ( ref($branches) eq "ARRAY" ) {
252 # Multiple branch overrides defined
257 config => $configuration,
261 } elsif ( ref($branches) eq "HASH" ) {
262 # Single branch override defined
265 id => $branches->{code},
266 config => $configuration,
271 # Per Borrower Category Configuration
272 my $brw_cats = $xml_config->{borrower_category};
273 if ( ref($brw_cats) eq "ARRAY" ) {
274 # Multiple borrower category overrides defined
279 config => $configuration,
283 } elsif ( ref($brw_cats) eq "HASH" ) {
284 # Single branch override defined
287 id => $brw_cats->{code},
288 config => $configuration,
293 # Default Configuration
297 config => $configuration
301 my $staff_comments = $xml_config->{staff_request_comments} || 0;
302 $configuration->{censorship}->{censor_notes_staff} = 1
303 if ( $staff_comments && 'hide' eq $staff_comments );
304 my $reply_date = $xml_config->{reply_date} || 0;
305 $configuration->{censorship}->{censor_reply_date} = 1
306 if ( $reply_date && 'hide' eq $reply_date );
309 $configuration->{partner_code} = $xml_config->{partner_code} || 'ILLLIBS';
311 return $configuration;
314 =head3 _load_unit_config
316 my $configuration->{part} = _load_unit_config($params);
318 $PARAMS is a hashref with the following elements:
319 - unit: the part of the configuration we are parsing.
320 - id: the name within which we will store the parsed unit in config.
321 - config: the configuration we are augmenting.
322 - type: the type of config unit we are parsing. Assumed to be 'default'.
324 Read `unit', and augment `config' with these under `id'.
326 This is a helper for _load_configuration.
328 A key task performed here is the parsing of the input in the configuration
329 file to ensure we have only valid input there.
333 sub _load_unit_config {
335 my $unit = $params->{unit};
336 my $id = $params->{id};
337 my $config = $params->{config};
338 my $type = $params->{type};
339 die "TYPE should be either 'branch' or 'brw_cat' if ID is not 'default'."
340 if ( $id ne 'default' && ( $type ne 'branch' && $type ne 'brw_cat') );
341 return $config unless $id;
343 if ( $unit->{api_key} && $unit->{api_auth} ) {
344 $config->{credentials}->{api_keys}->{$id} = {
345 api_key => $unit->{api_key},
346 api_auth => $unit->{api_auth},
349 # Add request_limit rules.
350 # METHOD := 'annual' || 'active'
352 if ( ref $unit->{request_limit} eq 'HASH' ) {
353 my $method = $unit->{request_limit}->{method};
354 my $count = $unit->{request_limit}->{count};
355 if ( 'default' eq $id ) {
356 $config->{limits}->{$id}->{method} = $method
357 if ( $method && ( 'annual' eq $method || 'active' eq $method ) );
358 $config->{limits}->{$id}->{count} = $count
359 if ( $count && ( -1 <= $count ) );
361 $config->{limits}->{$type}->{$id}->{method} = $method
362 if ( $method && ( 'annual' eq $method || 'active' eq $method ) );
363 $config->{limits}->{$type}->{$id}->{count} = $count
364 if ( $count && ( -1 <= $count ) );
370 if ( $unit->{prefix} ) {
371 if ( 'default' eq $id ) {
372 $config->{prefixes}->{$id} = $unit->{prefix};
374 $config->{prefixes}->{$type}->{$id} = $unit->{prefix};
378 # Add digital_recipient rules.
379 # DIGITAL_RECIPIENT := borrower || branch (defaults to borrower)
380 if ( $unit->{digital_recipient} ) {
381 if ( 'default' eq $id ) {
382 $config->{digital_recipients}->{$id} = $unit->{digital_recipient};
384 $config->{digital_recipients}->{$type}->{$id} =
385 $unit->{digital_recipient};
394 Alex Sassmannshausen <alex.sassmannshausen@ptfs-europe.com>