1 package OpenILS::Application::Trigger::Reactor;
2 use strict; use warnings;
5 use DateTime::Format::ISO8601;
6 use OpenSRF::Utils qw/:datetime/;
7 use OpenSRF::Utils::Logger qw(:logger);
8 use OpenILS::Application::AppUtils;
9 use OpenILS::Utils::CStoreEditor qw/:funcs/;
10 my $U = 'OpenILS::Application::AppUtils';
12 sub fourty_two { return 42 }
13 sub NOOP_True { return 1 }
14 sub NOOP_False { return 0 }
18 # helper functions inserted into the TT environment
21 # turns a date into something TT can understand
24 $date = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($date));
26 "%0.2d:%0.2d:%0.2d %0.2d-%0.2d-%0.4d",
36 # escapes a string for inclusion in an XML document. escapes &, <, and > characters
39 $str =~ s/&/&/sog;
45 # returns the calculated user locale
46 get_user_locale => sub {
48 return $U->get_user_locale($user_id);
51 # returns the calculated copy price
52 get_copy_price => sub {
54 return $U->get_copy_price(new_editor(), $copy_id);
57 # given a copy, returns the title and author in a hash
58 get_copy_bib_basics => sub {
60 my $copy = new_editor()->retrieve_asset_copy([
65 acp => ['call_number'],
70 if($copy->call_number->id == -1) {
72 title => $copy->dummy_title,
73 author => $copy->dummy_author,
76 my $mvr = $U->record_to_mvr($copy->call_number->record);
79 author => $mvr->author
84 # returns the org unit setting value
85 get_org_setting => sub {
86 my($org_id, $setting) = @_;
87 return $U->ou_ancestor_setting_value($org_id, $setting);
90 # returns matching line item attribute, or undef
92 my ($name, $type, $attr) = @_;
93 # use Data::Dumper; $logger->warn("get_li_attr: " . Dumper($attr));
94 ($name and @$attr) or return;
96 $_->attr_name eq $name or next;
97 return $_->attr_value if (! $type) or $type eq $_->attr_type;
104 # processes templates. Returns template output on success, undef on error
109 return undef unless $env->{template};
113 my $tt = Template->new;
114 $env->{helpers} = $_TT_helpers;
116 unless( $tt->process(\$env->{template}, $env, \$output) ) {
118 ($error = $tt->error) =~ s/\n/ /og;
119 $logger->error("Error processing Trigger template: $error");
122 if ( $error or (!$nostore && $output) ) {
123 my $t_o = Fieldmapper::action_trigger::event_output->new;
124 $t_o->data( ($error) ? $error : $output );
125 $t_o->is_error( ($error) ? 't' : 'f' );
127 $env->{EventProcessor}->editor->xact_begin;
128 $t_o = $env->{EventProcessor}->editor->create_action_trigger_event_output( $t_o );
130 my $state = (ref $$env{event} eq 'ARRAY') ? $$env{event}->[0]->state : $env->{event}->state;
131 my $key = ($error) ? 'error_output' : 'template_output';
132 $env->{EventProcessor}->update_state( $state, { $key => $t_o->id } );