]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Event.pm
added additional layer of caller info for debugging
[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 my $descs = undef;
19
20 sub new {
21         my( $class, $event, %params ) = @_;
22
23         _load_events() unless $events;
24
25         if( $event ne 'SUCCESS' ) {
26                 $logger->info("Returning non-success event object: $event ");  
27         }
28
29         my $e = $events->{$event};
30         throw OpenSRF::EX 
31                 ("No event defined with textcode: $event") unless defined $e;
32
33         my( $m, $f, $l ) = caller(0);
34         my( $mm, $ff, $ll ) = caller(1);
35         my( $mmm, $fff, $lll ) = caller(1);
36
37         $f  ||= "";
38         $l  ||= "";
39         $ff ||= "";
40         $ll ||= "";
41         $fff ||= "";
42         $lll ||= "";
43
44         my $lang = 'en-US'; # assume english for now
45
46         my $t = CORE::localtime();
47
48         return { 
49                 ilsevent                => $e, 
50                 textcode                => $event, 
51                 stacktrace      => "$f:$l $ff:$ll $fff:$lll", 
52                 desc                    => $descs->{$lang}->{$e},
53                 servertime      => $t,
54                 pid                     => $$, %params };
55 }
56
57 sub _load_events {
58         my $settings_client = OpenSRF::Utils::SettingsClient->new();
59         my $eventsxml =  $settings_client->config_value( "ils_events" );
60
61         if(!$eventsxml) { 
62                 throw OpenSRF::EX ("No ils_events file found in settings config"); 
63         }
64
65         $logger->info("Loading events xml file $eventsxml");
66
67         my $doc = XML::LibXML->new->parse_file($eventsxml);
68
69         my @nodes = $doc->documentElement->findnodes('//event');
70         for my $node (@nodes) {
71                 $events->{$node->getAttribute('textcode')} = 
72                         $node->getAttribute('code');
73         }
74
75         $descs = {};
76         my @desc = $doc->documentElement->findnodes('//desc');
77         for my $d (@desc) {
78                 my $lang = $d->getAttribute('lang');
79                 my $code = $d->parentNode->getAttribute('code');
80                 $descs->{$lang} = {} unless $descs->{$lang};
81                 $descs->{$lang}->{$code} = $d->textContent;
82         }
83 }
84
85
86
87
88 1;