]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/EX.pm
more holds capturing, transits, etc.
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / EX.pm
1 package OpenILS::EX;
2 use strict; use warnings;
3 use Template qw(:template);
4 use OpenSRF::Utils::SettingsClient;
5 use OpenILS::Utils::Fieldmapper;
6
7 # ----------------------------------------------------------------------------------
8 # These exceptions are not thrown.  They are returned as request result objects
9 # ----------------------------------------------------------------------------------
10
11 my %ex_types = (
12         UNKNOWN                                                                 => 1,
13         SEARCH_TOO_LARGE                                                => 2,
14         UNKNOWN_BARCODE                                         => 3,
15         DUPLICATE_INVALID_USER_BARCODE  => 4,
16         DUPLICATE_USER_USERNAME                         => 5,
17         USER_WRONG_PASSWORD                                     => 6,
18         PERMISSION_DENIED                                               => 7,
19         UNKNOWN_USER                                                    => 8, 
20         MAX_RENEWALS_REACHED                                    => 9,
21         COPY_NEEDED_FOR_HOLD                                    => 10,
22         NO_HOLD_FOUND                                                   => 11,
23 );
24
25 use overload ( '""' => sub { $_[0]->ex()->err_msg(); } );
26
27 sub new {
28
29         my($class, $type) = @_;
30         $class = ref($class) || $class;
31
32         my $self = {};
33         bless($self, $class);
34
35         $self->{ex} = new Fieldmapper::ex;
36         $self->{ex}->type($ex_types{$type});
37         $self->{ex}->err_msg($self->run());
38         warn "type is $type\n";
39
40         return $self;
41 }
42
43
44 sub ex { return shift()->{ex}; }
45
46 sub run {
47
48         my $self = shift;
49
50         my $result;
51         my $conf = OpenSRF::Utils::SettingsClient->new;
52
53         my $script = $conf->config_value("ex_script");
54
55         my $template = Template->new(
56                 { 
57                         ABSOLUTE                => 1, 
58                         OUTPUT          => \$result,
59                         PRE_CHOMP       => 1,
60                         POST_CHOMP      => 1,
61                 }
62         );
63
64         my $status = $template->process($script, 
65                         { ex_types => \%ex_types, type => $self->{ex}->type });
66
67         if(!$status) {
68                 return "Unable to process exception script.  No meaningful data to return..." .
69                         " Error is:\n" . $template->error() . "\n";
70         }
71
72         $result =~ s/^\s*//og;
73         warn " -|-|-|- Exception result [$result]\n";
74
75         return $result;
76 }
77
78
79
80
81
82