adding new event code
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Event.pm
1 package OpenILS::Event;
2 use strict; use warnings;
3 use XML::LibXML;
4 use OpenSRF::Utils::SettingsClient;
5 use OpenSRF::Utils::Logger;
6 my $logger = "OpenSRF::Utils::Logger";
7
8
9 # Creates a new Event object.  
10 # The first param is the event name
11 # Following the first param is an optional hash of params:
12 #               perm => the name of the permission error for permimssion errors
13 #               permloc => the location of the permission error for permission errors
14 #               payload => the payload to be returned on successfull events
15
16
17 my $events = undef;
18 sub new {
19         my( $class, $event, %params ) = @_;
20
21         my $perm = $params{perm};
22         my $permloc = $params{permloc};
23         my $payload = $params{payload};
24
25         _load_events() unless $events;
26
27         if( $event ne 'SUCCESS' ) {
28                 my $p = (defined $perm) ? $perm : "(none)";
29                 my $pl = (defined $permloc) ? $permloc  : "(none)";
30                 my $pa = (defined $payload) ? $payload : "(none)";
31                 $logger->warn("Returning event object $event " . 
32                         "{ ilsperm => $p, ilspermloc => $pl, payload => $pa }");
33         }
34
35         my $e = $events->{$event};
36         throw OpenSRF::EX 
37                 ("No event defined with textcode: $event") unless defined $e;
38
39         my $h = { ilsevent => $e };
40         $h->{paylod}            = $payload if defined $payload;
41         $h->{ilsperm}           = $perm if defined $perm;
42         $h->{ilspermloc}        = $permloc if defined $permloc;
43         $h->{textcode}          = $event;
44
45         return $h;
46 }
47
48 sub _load_events {
49         my $settings_client = OpenSRF::Utils::SettingsClient->new();
50         my $eventsxml =  $settings_client->config_value( "ils_events" );
51 #       my $eventsxml =  "/openils/conf/ils_events.xml";
52
53         if(!$eventsxml) { 
54                 throw OpenSRF::EX ("No ils_events file found in settings config"); 
55         }
56
57         $logger->info("Loading events xml file $eventsxml");
58
59         my $doc = XML::LibXML->new->parse_file($eventsxml);
60
61         my @nodes = $doc->documentElement->findnodes('//event');
62         for my $node (@nodes) {
63                 $events->{$node->getAttribute('textcode')} = 
64                         $node->getAttribute('code');
65         }
66 }
67
68 1;