1 package OpenILS::Event;
3 use strict; use warnings;
5 use OpenSRF::Utils::SettingsClient;
6 use OpenSRF::Utils::Logger;
7 use OpenSRF::AppSession;
8 my $logger = "OpenSRF::Utils::Logger";
11 # Returns a new Event data hash (not a blessed object)
12 # The first param is the event name
13 # Following the first param is an optional hash of params:
14 # perm => the name of the permission error for permimssion errors
15 # permloc => the location of the permission error for permission errors
16 # payload => the payload to be returned on successfull events
23 my( $class, $event, %params ) = @_;
24 _load_events() unless $events;
26 throw OpenSRF::EX ("Bad event name: $event") unless $event;
27 my $e = $events->{$event};
28 $e = '' unless defined $e;
30 my( $m, $f, $l ) = caller(0);
31 my( $mm, $ff, $ll ) = caller(1);
32 my( $mmm, $fff, $lll ) = caller(2);
41 my $lang = OpenSRF::AppSession->default_locale;
42 $lang = 'en-US' if (!exists($$descs{$lang})); # just in case...
44 my $t = CORE::localtime();
49 stacktrace => "$f:$l $ff:$ll $fff:$lll",
50 desc => $descs->{$lang}->{$e || ''} || '',
57 my $settings_client = OpenSRF::Utils::SettingsClient->new();
58 my $eventsxml = $settings_client->config_value( "ils_events" );
61 throw OpenSRF::EX ("No ils_events file found in settings config");
64 $logger->info("Loading events xml file $eventsxml");
66 my $doc = XML::LibXML->new->parse_file($eventsxml);
68 my @nodes = $doc->documentElement->findnodes('//event');
69 for my $node (@nodes) {
70 $events->{$node->getAttribute('textcode')} =
71 $node->getAttribute('code');
75 my @desc = $doc->documentElement->findnodes('//desc');
77 my $lang = $d->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang');
78 my $code = $d->parentNode->getAttribute('code');
79 unless ($descs && $lang && exists $descs->{$lang}) {
82 $logger->error("No error description nodes found in $eventsxml.");
85 $logger->error("No xml:lang attribute found for node in $eventsxml.");
88 $descs->{$lang}->{$code} = $d->textContent;