# Koha; if not, write to the Free Software Foundation, Inc., 51 Franklin
# Street, Fifth Floor, Boston, MA 02110-1301 USA.
-# use Modern::Perl;
+use Modern::Perl;
use Clone 'clone';
-use File::Basename qw/basename/;
+use File::Basename qw( basename );
+use Encode qw( encode );
+use Mail::Sendmail;
+use Try::Tiny;
+
use Koha::Database;
use Koha::Email;
-use Koha::Illrequest;
+use Koha::Exceptions::Ill;
use Koha::Illrequestattributes;
use Koha::Patron;
-use Mail::Sendmail;
-use Try::Tiny;
use base qw(Koha::Object);
All methods should return a hashref in the following format:
+=over
+
=item * error
This should be set to 1 if an error was encountered.
The value returned by the method.
-=over
+=back
=head2 Interface Status Messages
The interface's request method returned saying that the desired item is not
available for request.
-=head2 Class Methods
+=back
-=cut
+=head2 Class methods
-=head3 type
+=head3 illrequestattributes
=cut
-sub _type {
- return 'Illrequest';
-}
-
sub illrequestattributes {
my ( $self ) = @_;
return Koha::Illrequestattributes->_new_from_dbic(
);
}
+=head3 patron
+
+=cut
+
sub patron {
my ( $self ) = @_;
return Koha::Patron->_new_from_dbic(
);
}
+=head3 load_backend
+
+Require "Base.pm" from the relevant ILL backend.
+
+=cut
+
sub load_backend {
my ( $self, $backend_id ) = @_;
my @raw = qw/Koha Illbackends/; # Base Path
my $backend_name = $backend_id || $self->backend;
- $location = join "/", @raw, $backend_name, "Base.pm"; # File to load
- $backend_class = join "::", @raw, $backend_name, "Base"; # Package name
+
+ unless ( defined $backend_name && $backend_name ne '' ) {
+ Koha::Exceptions::Ill::InvalidBackendId->throw(
+ "An invalid backend ID was requested ('')");
+ }
+
+ my $location = join "/", @raw, $backend_name, "Base.pm"; # File to load
+ my $backend_class = join "::", @raw, $backend_name, "Base"; # Package name
require $location;
$self->{_my_backend} = $backend_class->new({ config => $self->_config });
return $self;
}
+
=head3 _backend
my $backend = $abstract->_backend($new_backend);
my $status_graph = clone($core_status_graph);
foreach my $backend_status_key ( keys %{$backend_status_graph} ) {
- $backend_status = $backend_status_graph->{$backend_status_key};
+ my $backend_status = $backend_status_graph->{$backend_status_key};
# Add to new status graph
$status_graph->{$backend_status_key} = $backend_status;
# Update all core methods' next_actions.
return 0;
}
+=head3 available_backends
+
+Return a list of available backends.
+
+=cut
+
sub available_backends {
my ( $self ) = @_;
- my $backend_dir = $self->_config->backend_dir;
- my @backends = ();
- @backends = <$backend_dir/*> if ( $backend_dir );
- @backends = map { basename($_) } @backends;
- return \@backends;
+ my $backends = $self->_config->available_backends;
+ return $backends;
}
+=head3 available_actions
+
+Return a list of available actions.
+
+=cut
+
sub available_actions {
my ( $self ) = @_;
my $current_action = $self->capabilities($self->status);
return \@available_actions;
}
+=head3 mark_completed
+
+Mark a request as completed (status = COMP).
+
+=cut
+
sub mark_completed {
my ( $self ) = @_;
$self->status('COMP')->store;
};
}
+=head2 backend_confirm
+
+Confirm a request. The backend handles setting of mandatory fields in the commit stage:
+
+=over
+
+=item * orderid
+
+=item * accessurl, cost (if available).
+
+=back
+
+=cut
+
sub backend_confirm {
my ( $self, $params ) = @_;
- # The backend handles setting of mandatory fields in the commit stage:
- # - orderid
- # - accessurl, cost (if available).
my $response = $self->_backend->confirm({
request => $self,
other => $params,
return $self->expandTemplate($response);
}
+=head3 backend_update_status
+
+=cut
+
sub backend_update_status {
my ( $self, $params ) = @_;
return $self->expandTemplate($self->_backend->update_status($params));
backend => $self->_backend->name
}
};
- } elsif ( $params->{stage} eq 'copyrightclearance' ) {
+ } elsif ( defined $params->{stage}
+ && $params->{stage} eq 'copyrightclearance' ) {
$params->{stage} = 'init';
}
my ( $self, $params ) = @_;
my $limits = $self->_config->getLimitRules($params->{type});
- return $limits->{$params->{value}}
- || $limits->{default}
- || { count => -1, method => 'active' };
+ if ( defined $params->{value}
+ && defined $limits->{$params->{value}} ) {
+ return $limits->{$params->{value}};
+ }
+ else {
+ return $limits->{default} || { count => -1, method => 'active' };
+ }
}
=head3 getPrefix
} else { # assume 'active'
# XXX: This status list is ugly. There should be a method in config
# to return these.
- $where = { status => { -not_in => [ 'QUEUED', 'COMP' ] } };
+ my $where = { status => { -not_in => [ 'QUEUED', 'COMP' ] } };
$resultset = Koha::Illrequests->search({ %{$target}, %{$where} });
}
} elsif ( 'draft' eq $params->{stage} ) {
# Create the to header
my $to = $params->{partners};
- $to =~ s/^\x00//; # Strip leading NULLs
- $to =~ s/\x00/; /; # Replace others with '; '
- die "No target email addresses found. Either select at least one partner or check your ILL partner library records." if ( !$to );
+ if ( defined $to ) {
+ $to =~ s/^\x00//; # Strip leading NULLs
+ $to =~ s/\x00/; /; # Replace others with '; '
+ }
+ Koha::Exceptions::Ill::NoTargetEmail->throw(
+ "No target email addresses found. Either select at least one partner or check your ILL partner library records.")
+ if ( !$to );
# Create the from, replyto and sender headers
my $from = $branch->branchemail;
my $replyto = $branch->branchreplyto || $from;
- die "Your branch has no email address. Please set it."
- if ( !$from );
+ Koha::Exceptions::Ill::NoLibraryEmail->throw(
+ "Your library has no usable email address. Please set it.")
+ if ( !$from );
+
# Create the email
my $message = Koha::Email->new;
my %mail = $message->create_message_headers(
return $params;
}
+=head3 TO_JSON
+
+ $json = $illrequest->TO_JSON
+
+Overloaded I<TO_JSON> method that takes care of inserting calculated values
+into the unblessed representation of the object.
+
+=cut
+
+sub TO_JSON {
+ my ( $self, $embed ) = @_;
+
+ my $object = $self->SUPER::TO_JSON();
+ $object->{id_prefix} = $self->id_prefix;
+
+ if ( scalar (keys %$embed) ) {
+ # Augment the request response with patron details if appropriate
+ if ( $embed->{patron} ) {
+ my $patron = $self->patron;
+ $object->{patron} = {
+ firstname => $patron->firstname,
+ surname => $patron->surname,
+ cardnumber => $patron->cardnumber
+ };
+ }
+ # Augment the request response with metadata details if appropriate
+ if ( $embed->{metadata} ) {
+ $object->{metadata} = $self->metadata;
+ }
+ # Augment the request response with status details if appropriate
+ if ( $embed->{capabilities} ) {
+ $object->{capabilities} = $self->capabilities;
+ }
+ # Augment the request response with library details if appropriate
+ if ( $embed->{library} ) {
+ $object->{library} = Koha::Libraries->find(
+ $self->branchcode
+ )->TO_JSON;
+ }
+ }
+
+ return $object;
+}
+
+=head2 Internal methods
+
+=head3 _type
+
+=cut
+
+sub _type {
+ return 'Illrequest';
+}
+
=head1 AUTHOR
Alex Sassmannshausen <alex.sassmannshausen@ptfs-europe.com>