[Koha-bugs] [Bug 12802] Send notices using several email addresses
bugzilla-daemon at bugs.koha-community.org
bugzilla-daemon at bugs.koha-community.org
Mon Dec 18 12:12:17 CET 2023
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=12802
--- Comment #121 from Mathieu Saby <mathsabypro at gmail.com> ---
I applied the patch. With it, the notice mechanism is broken : when Koha try to
generate a notice after checkin, this message appears :
Error trace
Can't call method "borrowernumber" on unblessed reference at
/kohadevbox/koha/C4/Letters.pm line 961
in C4::Letters::EnqueueLetter at /kohadevbox/koha/C4/Letters.pm line 961
958: $from_address = $params->{from_address};
959: } elsif ( $params->{message_transport_type} eq 'email' ) {
960: if ( $params->{borrowernumber} ) {
961: my $patron = Koha::Patrons->find( $params->borrowernumber );
962: if ( $patron ) {
963: $from_address = $patron->library->from_email_address;
964: }
Show function arguments
in C4::Message::enqueue at /kohadevbox/koha/C4/Message.pm line 166
163: $letter->{content} = $metadata->{header} . $body .
$metadata->{footer};
164:
165: $letter->{metadata} = Encode::decode_utf8( Dump($metadata) );
166: C4::Letters::EnqueueLetter(
167: {
168: letter => $letter,
169: borrowernumber => $patron->id,
Show function arguments
in C4::Circulation::SendCirculationAlert at /kohadevbox/koha/C4/Circulation.pm
line 3787
3784: unless ( @messages ) {
3785: C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
3786: my $patron =
Koha::Patrons->find($borrower->{borrowernumber});
3787: C4::Message->enqueue($letter, $patron, $mtt);
3788: } else {
3789: foreach my $message (@messages) {
3790: $message->append($letter);
Show function arguments
in C4::Circulation::AddIssue at /kohadevbox/koha/C4/Circulation.pm line 1833
1830: item_type => $item_object->effective_itemtype,
1831: notification => 'CHECKOUT',
1832: );
1833: if ( $circulation_alert->is_enabled_for( \%conditions ) ) {
1834: SendCirculationAlert(
1835: {
1836: type => 'CHECKOUT',
Show function arguments
in (eval) at /kohadevbox/koha/circ/circulation.pl line 451
448: if ( my $booked = $question->{BOOKED_EARLY} //
$alerts->{BOOKED} ) {
449: $datedue = $booked->end_date;
450: }
451: my $issue = AddIssue(
452: $patron, $barcode, $datedue,
453: $cancelreserve,
454: undef, undef,
in CGI::Compile::ROOT::kohadevbox_koha_circ_circulation_2epl::__ANON__ at
/kohadevbox/koha/circ/circulation.pl line 2
1: #!/usr/bin/perl
2:
3: # script to execute issuing of books
4:
5: # Copyright 2000-2002 Katipo Communications
Show function arguments
in CGI::Compile::ROOT::kohadevbox_koha_circ_circulation_2epl::circulation_2epl
at /usr/share/perl5/CGI/Compile.pm line 151
148: # this is necessary for MSWin32
149: my $orig_warn = $SIG{__WARN__} || sub { warn(@_) };
150: local $SIG{__WARN__} = sub { $orig_warn->(@_) unless $_[0]
=~ /^No such signal/ };
151: $code->($self, $data, $path, $dir, \@args)
152: };
153: };
154:
in CGI::Emulate::PSGI::__ANON__ at /usr/share/perl5/CGI/Emulate/PSGI.pm line 30
27: local *STDOUT = $stdout;
28: local *STDERR = $env->{'psgi.errors'};
29:
30: $code->();
31: }
32: }
33:
Show function arguments
in Plack::App::WrapCGI::call at /usr/share/perl5/Plack/App/WrapCGI.pm line 95
92:
93: sub call {
94: my($self, $env) = @_;
95: $self->_app->($env);
96: }
97:
98: 1;
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::App::CGIBin::serve_path at /usr/share/perl5/Plack/App/CGIBin.pm line
50
47: my $app = $self->{_compiled}->{$file} ||= Plack::App::WrapCGI->new(
48: script => $file, execute => $self->would_exec($file),
49: )->to_app;
50: $app->($env);
51: }
52:
53: 1;
Show function arguments
in Plack::App::File::call at /usr/share/perl5/Plack/App/File.pm line 34
31: $env->{'plack.file.PATH_INFO'} = '';
32: }
33:
34: return $self->serve_path($env, $file);
35: }
36:
37: sub locate_file {
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::LogWarn::call at
/usr/share/perl5/Plack/Middleware/LogWarn.pm line 22
19: message => join '', @_
20: });
21: };
22: my $res = $self->app->($env);
23:
24: return $res;
25: }
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::Log4perl::call at
/usr/share/perl5/Plack/Middleware/Log4perl.pm line 30
27: $self->logger->$level($args->{message});
28: };
29:
30: $self->app->($env);
31: }
32:
33: 1;
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::HTTPExceptions::try {...} at
/usr/share/perl5/Plack/Middleware/HTTPExceptions.pm line 20
17: my($self, $env) = @_;
18:
19: my $res = try {
20: $self->app->($env);
21: } catch {
22: $self->transform_error($_, $env);
23: };
in (eval) at /usr/share/perl5/Try/Tiny.pm line 100
97: if ( $wantarray ) {
98: @ret = $try->();
99: } elsif ( defined $wantarray ) {
100: $ret[0] = $try->();
101: } else {
102: $try->();
103: };
in Try::Tiny::try at /usr/share/perl5/Try/Tiny.pm line 93
90:
91: # failed will be true if the eval dies, because 1 will not be returned
92: # from the eval body
93: my $failed = not eval {
94: $@ = $prev_error;
95:
96: # evaluate the try block in the correct context
Show function arguments
in Plack::Middleware::HTTPExceptions::call at
/usr/share/perl5/Plack/Middleware/HTTPExceptions.pm line 23
20: $self->app->($env);
21: } catch {
22: $self->transform_error($_, $env);
23: };
24:
25: return $res if ref $res eq 'ARRAY';
26:
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::ErrorDocument::call at
/usr/share/perl5/Plack/Middleware/ErrorDocument.pm line 15
12: my $self = shift;
13: my $env = shift;
14:
15: my $r = $self->app->($env);
16:
17: $self->response_cb($r, sub {
18: my $r = shift;
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::App::URLMap::call at /usr/share/perl5/Plack/App/URLMap.pm line 71
68: return $self->response_cb($app->($env), sub {
69: $env->{PATH_INFO} = $orig_path_info;
70: $env->{SCRIPT_NAME} = $orig_script_name;
71: });
72: }
73:
74: DEBUG && warn "All matching failed.\n";
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Koha::Middleware::RealIP::call at /kohadevbox/koha/Koha/Middleware/RealIP.pm
line 64
61: }
62: }
63:
64: return $self->app->($env);
65: }
66:
67: =head2 get_real_ip
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Koha::Middleware::SetEnv::call at /kohadevbox/koha/Koha/Middleware/SetEnv.pm
line 106
103: $env->{$key} = $setenvs{$key};
104: }
105:
106: return $self->app->($env);
107: }
108:
109: =head1 AUTHOR
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::Static::call at
/usr/share/perl5/Plack/Middleware/Static.pm line 18
15: return $res;
16: }
17:
18: return $self->app->($env);
19: }
20:
21: sub _handle_static {
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::ReverseProxy::call at
/usr/share/perl5/Plack/Middleware/ReverseProxy.pm line 68
65: }
66: }
67:
68: $self->app->($env);
69: }
70:
71: 1;
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::Lint::call at /usr/share/perl5/Plack/Middleware/Lint.pm
line 24
21: my $env = shift;
22:
23: $self->validate_env($env);
24: my $res = $self->app->($env);
25: return $self->validate_res($res);
26: }
27:
Show function arguments
in Plack::Middleware::StackTrace::try {...} at
/usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
in (eval) at /usr/share/perl5/Try/Tiny.pm line 100
97: if ( $wantarray ) {
98: @ret = $try->();
99: } elsif ( defined $wantarray ) {
100: $ret[0] = $try->();
101: } else {
102: $try->();
103: };
in Plack::Middleware::StackTrace::call at /usr/share/perl5/Try/Tiny.pm line 93
90:
91: # failed will be true if the eval dies, because 1 will not be returned
92: # from the eval body
93: my $failed = not eval {
94: $@ = $prev_error;
95:
96: # evaluate the try block in the correct context
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in Plack::Middleware::AccessLog::call at
/usr/share/perl5/Plack/Middleware/AccessLog.pm line 27
24: my $self = shift;
25: my($env) = @_;
26:
27: my $res = $self->app->($env);
28:
29: if ( ref($res) && ref($res) eq 'ARRAY' ) {
30: my $content_length = Plack::Util::content_length($res->[2]);
Show function arguments
in Plack::Component::__ANON__ at /usr/share/perl5/Plack/Component.pm line 50
47: sub to_app {
48: my $self = shift;
49: $self->prepare_app;
50: return sub { $self->call(@_) };
51: }
52:
53:
Show function arguments
in (eval) at /usr/share/perl5/Plack/Util.pm line 145
142: sub run_app($$) {
143: my($app, $env) = @_;
144:
145: return eval { $app->($env) } || do {
146: my $body = "Internal Server Error";
147: $env->{'psgi.errors'}->print($@);
148: [ 500, [ 'Content-Type' => 'text/plain', 'Content-Length' =>
length($body) ], [ $body ] ];
in Plack::Util::run_app at /usr/share/perl5/Plack/Util.pm line 145
142: sub run_app($$) {
143: my($app, $env) = @_;
144:
145: return eval { $app->($env) } || do {
146: my $body = "Internal Server Error";
147: $env->{'psgi.errors'}->print($@);
148: [ 500, [ 'Content-Type' => 'text/plain', 'Content-Length' =>
length($body) ], [ $body ] ];
Show function arguments
in Starman::Server::dispatch_request at /usr/share/perl5/Starman/Server.pm line
195
192: my ($self, $env) = @_;
193:
194: # Run PSGI apps
195: my $res = Plack::Util::run_app($self->{app}, $env);
196:
197: if (ref $res eq 'CODE') {
198: $res->(sub { $self->_finalize_response($env, $_[0]) });
Show function arguments
in Starman::Server::process_request at /usr/share/perl5/Starman/Server.pm line
298
295:
296: $self->_prepare_env($env);
297:
298: $self->dispatch_request($env);
299:
300: DEBUG && warn "[$$] Request done\n";
301:
Show function arguments
in Net::Server::run_client_connection at /usr/share/perl5/Net/Server.pm line 72
69: $self->post_accept_hook($c); # user customizable hook
70:
71: my $ok = $self->allow_deny($c) && $self->allow_deny_hook($c); # do
allow/deny check on client info
72: if ($ok) {
73: $self->process_request($c); # This is where the core
functionality of a Net::Server should be.
74: } else {
75: $self->request_denied_hook($c); # user customizable hook
Show function arguments
in (eval) at /usr/share/perl5/Net/Server/PreFork.pm line 225
222: $prop->{'connected'} = 1;
223: print $write "$$ processing\n";
224:
225: my $ok = eval { $self->run_client_connection; 1 };
226: if (! $ok) {
227: print $write "$$ exiting\n";
228: die $@;
in Net::Server::PreFork::run_child at /usr/share/perl5/Net/Server/PreFork.pm
line 225
222: $prop->{'connected'} = 1;
223: print $write "$$ processing\n";
224:
225: my $ok = eval { $self->run_client_connection; 1 };
226: if (! $ok) {
227: print $write "$$ exiting\n";
228: die $@;
Show function arguments
in Net::Server::PreFork::run_n_children at
/usr/share/perl5/Net/Server/PreFork.pm line 183
180: if ($prop->{'child_communication'}) {
181: $prop->{'parent_sock'} = $childsock;
182: }
183: $self->run_child;
184: }
185: }
186: }
Show function arguments
in Net::Server::PreFork::loop at /usr/share/perl5/Net/Server/PreFork.pm line
107
104:
105: my $start = $prop->{'min_servers'};
106: $self->log(3, "Beginning prefork ($start processes)");
107: $self->run_n_children($start);
108:
109: $self->run_parent;
110: }
Show function arguments
in Net::Server::run at /usr/share/perl5/Net/Server.pm line 58
55: $self->post_bind; # allow for chrooting, becoming a
different user and group
56:
57: $self->pre_loop_hook; # user customizable hook
58: $self->loop; # repeat accept/process cycle
59:
60: $self->server_close; # close the server and release the port
61: }
Show function arguments
in Starman::Server::run at /usr/share/perl5/Starman/Server.pm line 106
103: max_requests => $options->{max_requests} || 1000,
104: user => $options->{user} || $>,
105: group => $options->{group} || $),
106: listen => $options->{backlog} || 1024,
107: check_for_waiting => 1,
108: no_client_stdout => 1,
109: %extra
Show function arguments
in Plack::Handler::Starman::run at /usr/share/perl5/Plack/Handler/Starman.pm
line 25
22: }
23: $self->{net_server_args} = \%nsa if %nsa;
24:
25: Starman::Server->new->run($app, {%$self});
26: }
27:
28: 1;
Show function arguments
in Plack::Loader::Delayed::run at /usr/share/perl5/Plack/Loader/Delayed.pm line
20
17: };
18:
19: $server->{psgi_app_builder} = $self->{builder};
20: $server->run($app);
21: }
22:
23: 1;
Show function arguments
in Plack::Runner::run at /usr/share/perl5/Plack/Runner.pm line 279
276: $loader->preload_app($app);
277:
278: my $server = $self->load_server($loader);
279: $loader->run($server);
280: }
281:
282: 1;
Show function arguments
at /usr/bin/starman line 38
35: }
36:
37: $runner->set_options(argv => \@argv);
38: $runner->run;
39:
40: __END__
41:
--
You are receiving this mail because:
You are watching all bug changes.
More information about the Koha-bugs
mailing list