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 }
19 # helper functions inserted into the TT environment
22 # turns a date into something TT can understand
25 $date = DateTime::Format::ISO8601->new->parse_datetime(clense_ISO8601($date));
27 "%0.2d:%0.2d:%0.2d %0.2d-%0.2d-%0.4d",
37 # escapes a string for inclusion in an XML document. escapes &, <, and > characters
40 $str =~ s/&/&/sog;
46 # returns the calculated user locale
47 get_user_locale => sub {
49 return $U->get_user_locale($user_id);
52 # returns the calculated copy price
53 get_copy_price => sub {
55 return $U->get_copy_price(new_editor(), $copy_id);
58 # given a copy, returns the title and author in a hash
59 get_copy_bib_basics => sub {
61 my $copy = new_editor()->retrieve_asset_copy([
66 acp => ['call_number'],
71 if($copy->call_number->id == -1) {
73 title => $copy->dummy_title,
74 author => $copy->dummy_author,
77 my $mvr = $U->record_to_mvr($copy->call_number->record);
80 author => $mvr->author
85 # returns the org unit setting value
86 get_org_setting => sub {
87 my($org_id, $setting) = @_;
88 return $U->ou_ancestor_setting_value($org_id, $setting);
93 # processes templates. Returns template output on success, undef on error
98 return undef unless $env->{template};
102 my $tt = Template->new;
103 $env->{helpers} = $_TT_helpers;
105 unless( $tt->process(\$env->{template}, $env, \$output) ) {
107 ($error = $tt->error) =~ s/\n/ /og;
108 $logger->error("Error processing Trigger template: $error");
111 if ( $error or (!$nostore && $output) ) {
112 my $t_o = Fieldmapper::action_trigger::event_output->new;
113 $t_o->data( ($error) ? $error : $output );
114 $t_o->is_error( ($error) ? 't' : 'f' );
116 $env->{EventProcessor}->editor->xact_begin;
117 $t_o = $env->{EventProcessor}->editor->create_action_trigger_event_output( $t_o );
119 my $state = (ref $$env{event} eq 'ARRAY') ? $$env{event}->[0]->state : $env->{event}->state;
120 my $key = ($error) ? 'error_output' : 'template_output';
121 $env->{EventProcessor}->update_state( $state, { $key => $t_o->id } );