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 Return whether a 'branch' block is defined
128 return $self->{configuration
}->{raw_config
}->{branch
};
133 $partner_code = $config->partner_code($new_code);
134 $partner_code = $config->partner_code;
136 Standard setter/accessor for our partner_code.
141 my ( $self, $new ) = @_;
142 $self->{configuration
}->{partner_code
} = $new if $new;
143 return $self->{configuration
}->{partner_code
};
148 $limits = $config->limits($limitshash);
149 $limits = $config->limits;
151 Standard setter/accessor for our limits. No parsing is performed on
152 $LIMITSHASH, so caution should be exercised when using this setter.
157 my ( $self, $new ) = @_;
158 $self->{configuration
}->{limits
} = $new if $new;
159 return $self->{configuration
}->{limits
};
164 my $prefixes = $config->getPrefixes();
166 Return the branch prefix for ILLs defined by our config.
172 return $self->{configuration
}->{prefixes
}->{branch
};
177 my $rules = $config->getLimitRules('brw_cat' | 'branch')
179 Return the hash of ILL limit rules defined by our config.
184 my ( $self, $type ) = @_;
185 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
186 my $values = $self->{configuration
}->{limits
}->{$type};
187 $values->{default} = $self->{configuration
}->{limits
}->{default};
191 =head3 getDigitalRecipients
193 my $recipient_rules= $config->getDigitalRecipients('brw_cat' | 'branch');
195 Return the hash of digital_recipient settings defined by our config.
199 sub getDigitalRecipients
{
200 my ( $self, $type ) = @_;
201 die "Unexpected type." unless ( $type eq 'brw_cat' || $type eq 'branch' );
202 my $values = $self->{configuration
}->{digital_recipients
}->{$type};
204 $self->{configuration
}->{digital_recipients
}->{default};
210 my $censoredValues = $config->censorship($hash);
211 my $censoredValues = $config->censorship;
213 Standard setter/accessor for our limits. No parsing is performed on $HASH, so
214 caution should be exercised when using this setter.
216 Return our censorship values for the OPAC as loaded from the koha-conf.xml, or
217 the fallback value (no censorship).
222 my ( $self, $new ) = @_;
223 $self->{configuration
}->{censorship
} = $new if $new;
224 return $self->{configuration
}->{censorship
};
227 =head3 _load_configuration
229 my $configuration = $config->_load_configuration($config_from_xml);
231 Read the configuration values passed as the parameter, and populate a hashref
232 suitable for use with these.
234 A key task performed here is the parsing of the input in the configuration
235 file to ensure we have only valid input there.
239 sub _load_configuration
{
240 my ( $xml_config ) = @_;
241 my $xml_backend_dir = $xml_config->{backend_directory
};
243 # Default data structure to be returned
244 my $configuration = {
245 backend_directory
=> $xml_backend_dir,
247 censor_notes_staff
=> 0,
248 censor_reply_date
=> 0,
251 digital_recipients
=> {},
253 partner_code
=> 'ILLLIBS',
254 raw_config
=> $xml_config,
257 # Per Branch Configuration
258 my $branches = $xml_config->{branch
};
259 if ( ref($branches) eq "ARRAY" ) {
260 # Multiple branch overrides defined
265 config
=> $configuration,
269 } elsif ( ref($branches) eq "HASH" ) {
270 # Single branch override defined
273 id
=> $branches->{code
},
274 config
=> $configuration,
279 # Per Borrower Category Configuration
280 my $brw_cats = $xml_config->{borrower_category
};
281 if ( ref($brw_cats) eq "ARRAY" ) {
282 # Multiple borrower category overrides defined
287 config
=> $configuration,
291 } elsif ( ref($brw_cats) eq "HASH" ) {
292 # Single branch override defined
295 id
=> $brw_cats->{code
},
296 config
=> $configuration,
301 # Default Configuration
305 config
=> $configuration
309 my $staff_comments = $xml_config->{staff_request_comments
} || 0;
310 $configuration->{censorship
}->{censor_notes_staff
} = 1
311 if ( $staff_comments && 'hide' eq $staff_comments );
312 my $reply_date = $xml_config->{reply_date
} || 0;
313 $configuration->{censorship
}->{censor_reply_date
} = 1
314 if ( $reply_date && 'hide' eq $reply_date );
317 $configuration->{partner_code
} = $xml_config->{partner_code
} || 'ILLLIBS';
319 return $configuration;
322 =head3 _load_unit_config
324 my $configuration->{part} = _load_unit_config($params);
326 $PARAMS is a hashref with the following elements:
327 - unit: the part of the configuration we are parsing.
328 - id: the name within which we will store the parsed unit in config.
329 - config: the configuration we are augmenting.
330 - type: the type of config unit we are parsing. Assumed to be 'default'.
332 Read `unit', and augment `config' with these under `id'.
334 This is a helper for _load_configuration.
336 A key task performed here is the parsing of the input in the configuration
337 file to ensure we have only valid input there.
341 sub _load_unit_config
{
343 my $unit = $params->{unit
};
344 my $id = $params->{id
};
345 my $config = $params->{config
};
346 my $type = $params->{type
};
347 die "TYPE should be either 'branch' or 'brw_cat' if ID is not 'default'."
348 if ( $id ne 'default' && ( $type ne 'branch' && $type ne 'brw_cat') );
349 return $config unless $id;
351 if ( $unit->{api_key
} && $unit->{api_auth
} ) {
352 $config->{credentials
}->{api_keys
}->{$id} = {
353 api_key
=> $unit->{api_key
},
354 api_auth
=> $unit->{api_auth
},
357 # Add request_limit rules.
358 # METHOD := 'annual' || 'active'
360 if ( ref $unit->{request_limit
} eq 'HASH' ) {
361 my $method = $unit->{request_limit
}->{method
};
362 my $count = $unit->{request_limit
}->{count
};
363 if ( 'default' eq $id ) {
364 $config->{limits
}->{$id}->{method
} = $method
365 if ( $method && ( 'annual' eq $method || 'active' eq $method ) );
366 $config->{limits
}->{$id}->{count
} = $count
367 if ( $count && ( -1 <= $count ) );
369 $config->{limits
}->{$type}->{$id}->{method
} = $method
370 if ( $method && ( 'annual' eq $method || 'active' eq $method ) );
371 $config->{limits
}->{$type}->{$id}->{count
} = $count
372 if ( $count && ( -1 <= $count ) );
378 if ( $unit->{prefix
} ) {
379 if ( 'default' eq $id ) {
380 $config->{prefixes
}->{$id} = $unit->{prefix
};
382 $config->{prefixes
}->{$type}->{$id} = $unit->{prefix
};
386 # Add digital_recipient rules.
387 # DIGITAL_RECIPIENT := borrower || branch (defaults to borrower)
388 if ( $unit->{digital_recipient
} ) {
389 if ( 'default' eq $id ) {
390 $config->{digital_recipients
}->{$id} = $unit->{digital_recipient
};
392 $config->{digital_recipients
}->{$type}->{$id} =
393 $unit->{digital_recipient
};
402 Alex Sassmannshausen <alex.sassmannshausen@ptfs-europe.com>