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.
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"),
68 C4::Context->preference("UnmediatedILL")
78 $backend = $config->backend($name);
79 $backend = $config->backend;
81 Standard setter/accessor for our backend.
86 my ( $self, $new ) = @_;
87 $self->{configuration}->{backend} = $new if $new;
88 return $self->{configuration}->{backend};
93 $backend_dir = $config->backend_dir($new_path);
94 $backend_dir = $config->backend_dir;
96 Standard setter/accessor for our backend_directory.
101 my ( $self, $new ) = @_;
102 $self->{configuration}->{backend_directory} = $new if $new;
103 return $self->{configuration}->{backend_directory};
106 =head3 available_backends
108 Return a list of available backends.
112 sub available_backends {
114 my $backend_dir = $self->backend_dir;
116 @backends = glob "$backend_dir/*" if ( $backend_dir );
117 @backends = map { basename($_) } @backends;
123 $partner_code = $config->partner_code($new_code);
124 $partner_code = $config->partner_code;
126 Standard setter/accessor for our partner_code.
131 my ( $self, $new ) = @_;
132 $self->{configuration}->{partner_code} = $new if $new;
133 return $self->{configuration}->{partner_code};
138 $limits = $config->limits($limitshash);
139 $limits = $config->limits;
141 Standard setter/accessor for our limits. No parsing is performed on
142 $LIMITSHASH, so caution should be exercised when using this setter.
147 my ( $self, $new ) = @_;
148 $self->{configuration}->{limits} = $new if $new;
149 return $self->{configuration}->{limits};
154 my $prefixes = $config->getPrefixes('brw_cat' | 'branch');
156 Return the prefix for ILLs defined by our config.
161 my ( $self, $type ) = @_;
162 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
163 my $values = $self->{configuration}->{prefixes}->{$type};
164 $values->{default} = $self->{configuration}->{prefixes}->{default};
170 my $rules = $config->getLimitRules('brw_cat' | 'branch')
172 Return the hash of ILL limit rules defined by our config.
177 my ( $self, $type ) = @_;
178 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
179 my $values = $self->{configuration}->{limits}->{$type};
180 $values->{default} = $self->{configuration}->{limits}->{default};
184 =head3 getDigitalRecipients
186 my $recipient_rules= $config->getDigitalRecipients('brw_cat' | 'branch');
188 Return the hash of digital_recipient settings defined by our config.
192 sub getDigitalRecipients {
193 my ( $self, $type ) = @_;
194 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
195 my $values = $self->{configuration}->{digital_recipients}->{$type};
197 $self->{configuration}->{digital_recipients}->{default};
203 my $censoredValues = $config->censorship($hash);
204 my $censoredValues = $config->censorship;
206 Standard setter/accessor for our limits. No parsing is performed on $HASH, so
207 caution should be exercised when using this setter.
209 Return our censorship values for the OPAC as loaded from the koha-conf.xml, or
210 the fallback value (no censorship).
215 my ( $self, $new ) = @_;
216 $self->{configuration}->{censorship} = $new if $new;
217 return $self->{configuration}->{censorship};
220 =head3 _load_configuration
222 my $configuration = $config->_load_configuration($config_from_xml);
224 Read the configuration values passed as the parameter, and populate a hashref
225 suitable for use with these.
227 A key task performed here is the parsing of the input in the configuration
228 file to ensure we have only valid input there.
232 sub _load_configuration {
233 my ( $xml_config, $unmediated ) = @_;
234 my $xml_backend_dir = $xml_config->{backend_directory};
236 # Default data structure to be returned
237 my $configuration = {
238 backend_directory => $xml_backend_dir,
240 censor_notes_staff => 0,
241 censor_reply_date => 0,
244 digital_recipients => {},
246 partner_code => 'ILLLIBS',
247 raw_config => $xml_config,
250 # Per Branch Configuration
251 my $branches = $xml_config->{branch};
252 if ( ref($branches) eq "ARRAY" ) {
253 # Multiple branch overrides defined
258 config => $configuration,
262 } elsif ( ref($branches) eq "HASH" ) {
263 # Single branch override defined
266 id => $branches->{code},
267 config => $configuration,
272 # Per Borrower Category Configuration
273 my $brw_cats = $xml_config->{borrower_category};
274 if ( ref($brw_cats) eq "ARRAY" ) {
275 # Multiple borrower category overrides defined
280 config => $configuration,
284 } elsif ( ref($brw_cats) eq "HASH" ) {
285 # Single branch override defined
288 id => $brw_cats->{code},
289 config => $configuration,
294 # Default Configuration
298 config => $configuration
302 my $staff_comments = $xml_config->{staff_request_comments} || 0;
303 $configuration->{censorship}->{censor_notes_staff} = 1
304 if ( $staff_comments && 'hide' eq $staff_comments );
305 my $reply_date = $xml_config->{reply_date} || 0;
306 $configuration->{censorship}->{censor_reply_date} = 1
307 if ( $reply_date && 'hide' eq $reply_date );
310 $configuration->{partner_code} = $xml_config->{partner_code} || 'ILLLIBS';
312 die "No DEFAULT_FORMATS has been defined in koha-conf.xml, but UNMEDIATEDILL is active."
313 if ( $unmediated && !$configuration->{default_formats}->{default} );
315 return $configuration;
318 =head3 _load_unit_config
320 my $configuration->{part} = _load_unit_config($params);
322 $PARAMS is a hashref with the following elements:
323 - unit: the part of the configuration we are parsing.
324 - id: the name within which we will store the parsed unit in config.
325 - config: the configuration we are augmenting.
326 - type: the type of config unit we are parsing. Assumed to be 'default'.
328 Read `unit', and augment `config' with these under `id'.
330 This is a helper for _load_configuration.
332 A key task performed here is the parsing of the input in the configuration
333 file to ensure we have only valid input there.
337 sub _load_unit_config {
339 my $unit = $params->{unit};
340 my $id = $params->{id};
341 my $config = $params->{config};
342 my $type = $params->{type};
343 die "TYPE should be either 'branch' or 'brw_cat' if ID is not 'default'."
344 if ( $id ne 'default' && ( $type ne 'branch' && $type ne 'brw_cat') );
345 return $config unless $id;
347 if ( $unit->{api_key} && $unit->{api_auth} ) {
348 $config->{credentials}->{api_keys}->{$id} = {
349 api_key => $unit->{api_key},
350 api_auth => $unit->{api_auth},
353 # Add request_limit rules.
354 # METHOD := 'annual' || 'active'
356 if ( ref $unit->{request_limit} eq 'HASH' ) {
357 my $method = $unit->{request_limit}->{method};
358 my $count = $unit->{request_limit}->{count};
359 if ( 'default' eq $id ) {
360 $config->{limits}->{$id}->{method} = $method
361 if ( $method && ( 'annual' eq $method || 'active' eq $method ) );
362 $config->{limits}->{$id}->{count} = $count
363 if ( $count && ( -1 <= $count ) );
365 $config->{limits}->{$type}->{$id}->{method} = $method
366 if ( $method && ( 'annual' eq $method || 'active' eq $method ) );
367 $config->{limits}->{$type}->{$id}->{count} = $count
368 if ( $count && ( -1 <= $count ) );
374 if ( $unit->{prefix} ) {
375 if ( 'default' eq $id ) {
376 $config->{prefixes}->{$id} = $unit->{prefix};
378 $config->{prefixes}->{$type}->{$id} = $unit->{prefix};
382 # Add digital_recipient rules.
383 # DIGITAL_RECIPIENT := borrower || branch (defaults to borrower)
384 if ( $unit->{digital_recipient} ) {
385 if ( 'default' eq $id ) {
386 $config->{digital_recipients}->{$id} = $unit->{digital_recipient};
388 $config->{digital_recipients}->{$type}->{$id} =
389 $unit->{digital_recipient};
398 Alex Sassmannshausen <alex.sassmannshausen@ptfs-europe.com>