]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/lib/OpenILS/Event.pm
Update ContentCafe Added Content Module
[working/Evergreen.git] / Open-ILS / src / perlmods / lib / OpenILS / Event.pm
1 package OpenILS::Event;
2 # vim:noet:ts=4
3 use strict; use warnings;
4 use XML::LibXML;
5 use OpenSRF::Utils::SettingsClient;
6 use OpenSRF::Utils::Logger;
7 my $logger = "OpenSRF::Utils::Logger";
8
9
10 # Returns a new Event data hash (not a blessed object)
11 # The first param is the event name
12 # Following the first param is an optional hash of params:
13 #       perm => the name of the permission error for permimssion errors
14 #       permloc => the location of the permission error for permission errors
15 #       payload => the payload to be returned on successfull events
16
17
18 my $events = undef;
19 my $descs  = undef;
20
21 sub new {
22     my( $class, $event, %params ) = @_;
23     _load_events() unless $events;
24
25     throw OpenSRF::EX ("Bad event name: $event") unless $event;
26     my $e = $events->{$event};
27     $e = '' unless defined $e;
28
29     my(   $m,   $f,   $l ) = caller(0);
30     my(  $mm,  $ff,  $ll ) = caller(1);
31     my( $mmm, $fff, $lll ) = caller(2);
32
33     $f   ||= "";
34     $l   ||= "";
35     $ff  ||= "";
36     $ll  ||= "";
37     $fff ||= "";
38     $lll ||= "";
39
40     my $lang = 'en-US'; # assume english for now
41
42     my $t = CORE::localtime();
43
44     return { 
45         ilsevent   => $e, 
46         textcode   => $event, 
47         stacktrace => "$f:$l $ff:$ll $fff:$lll", 
48         desc       => $descs->{$lang}->{$e || ''} || '',
49         servertime => $t,
50         pid        => $$, %params
51     };
52 }
53
54 sub _load_events {
55     my $settings_client = OpenSRF::Utils::SettingsClient->new();
56     my $eventsxml =  $settings_client->config_value( "ils_events" );
57
58     if(!$eventsxml) { 
59         throw OpenSRF::EX ("No ils_events file found in settings config"); 
60     }
61
62     $logger->info("Loading events xml file $eventsxml");
63
64     my $doc = XML::LibXML->new->parse_file($eventsxml);
65
66     my @nodes = $doc->documentElement->findnodes('//event');
67     for my $node (@nodes) {
68         $events->{$node->getAttribute('textcode')} = 
69             $node->getAttribute('code');
70     }
71
72     $descs = {};
73     my @desc = $doc->documentElement->findnodes('//desc');
74     for my $d (@desc) {
75         my $lang = $d->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang');
76         my $code = $d->parentNode->getAttribute('code');
77         unless ($descs && $lang && exists $descs->{$lang}) {
78             $descs->{$lang} = {};
79             if (!$descs) {
80                 $logger->error("No error description nodes found in $eventsxml.");
81             }
82             if (!$lang) {
83                 $logger->error("No xml:lang attribute found for node in $eventsxml.");
84             }
85         }
86         $descs->{$lang}->{$code} = $d->textContent;
87     }
88 }
89
90
91 1;