From 69be1f384881f031d2dde9a0288ab161c1086a9b Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 24 Aug 2020 10:48:56 -0300 Subject: [PATCH] Bug 22343: Allow choosing an SMTP server in branches.pl The missing piece on this patchset is choosing the desired SMTP server for each library. This patch adds the option on editing the library. The default one is picked for existing libraries, and you can pick the one you want. To test: 1. Apply the patchset 2. Run: $ updatedatabase => SUCCESS: Things go smooth 3. Notice the new permission for managing SMTP servers 4. Notice the entry in the admin page 5. Add/have a few SMTP servers defined. 6. Edit a library => SUCCESS: The 'Default' SMTP server is picked 7. Choose any server and save => SUCCESS: Saving doesn't explode 8. Edit the server => SUCCESS: Your selection is kept (this can also be checked on the DB, the library_smtp_server table) 9. Try (7) with many different options => SUCCESS: It works 10. Sign off :-D Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart --- admin/branches.pl | 71 ++++++++++++++++--- .../prog/en/modules/admin/branches.tt | 16 +++++ 2 files changed, 76 insertions(+), 11 deletions(-) diff --git a/admin/branches.pl b/admin/branches.pl index 3cfd60a08b..98a2d1f49f 100755 --- a/admin/branches.pl +++ b/admin/branches.pl @@ -19,16 +19,22 @@ # along with Koha; if not, see . use Modern::Perl; + use CGI qw ( -utf8 ); +use Try::Tiny; + use C4::Auth; use C4::Context; use C4::Output; use C4::Koha; + +use Koha::Database; use Koha::Patrons; use Koha::Items; use Koha::Libraries; +use Koha::SMTP::Servers; -my $input = new CGI; +my $input = CGI->new; my $branchcode = $input->param('branchcode'); my $categorycode = $input->param('categorycode'); my $op = $input->param('op') || 'list'; @@ -47,10 +53,14 @@ if ( $op eq 'add_form' ) { my $library; if ($branchcode) { $library = Koha::Libraries->find($branchcode); + $template->param( selected_smtp_server => $library->smtp_server ); } + my @smtp_servers = Koha::SMTP::Servers->search; + $template->param( - library => $library, + library => $library, + smtp_servers => \@smtp_servers ); } elsif ( $op eq 'add_validate' ) { my @fields = qw( @@ -82,11 +92,32 @@ if ( $op eq 'add_form' ) { for my $field (@fields) { $library->$field( scalar $input->param($field) ); } - eval { $library->store; }; - if ($@) { + + try { + Koha::Database->new->schema->txn_do( + sub { + $library->store->discard_changes; + # Deal with SMTP server + my $smtp_server_id = $input->param('smtp_server'); + + if ( $smtp_server_id ) { + if ( $smtp_server_id eq '*' ) { + $library->smtp_server({ smtp_server => undef }); + } + else { + my $smtp_server = Koha::SMTP::Servers->find( $smtp_server_id ); + Koha::Exceptions::BadParameter->throw( parameter => 'smtp_server' ) + unless $smtp_server; + $library->smtp_server({ smtp_server => $smtp_server }); + } + } + + push @messages, { type => 'message', code => 'success_on_update' }; + } + ); + } + catch { push @messages, { type => 'alert', code => 'error_on_update' }; - } else { - push @messages, { type => 'message', code => 'success_on_update' }; } } else { $branchcode =~ s|\s||g; @@ -95,12 +126,30 @@ if ( $op eq 'add_form' ) { ( map { $_ => scalar $input->param($_) || undef } @fields ) } ); - eval { $library->store; }; - if ($@) { - push @messages, { type => 'alert', code => 'error_on_insert' }; - } else { - push @messages, { type => 'message', code => 'success_on_insert' }; + + try { + Koha::Database->new->schema->txn_do( + sub { + $library->store->discard_changes; + + my $smtp_server_id = $input->param('smtp_server'); + + if ( $smtp_server_id ) { + if ( $smtp_server_id ne '*' ) { + my $smtp_server = Koha::SMTP::Servers->find( $smtp_server_id ); + Koha::Exceptions::BadParameter->throw( parameter => 'smtp_server' ) + unless $smtp_server; + $library->smtp_server({ smtp_server => $smtp_server }); + } + } + + push @messages, { type => 'message', code => 'success_on_insert' }; + } + ); } + catch { + push @messages, { type => 'alert', code => 'error_on_insert' }; + }; } $op = 'list'; } elsif ( $op eq 'delete_confirm' ) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt index bf140b2960..2d5d59ca91 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt @@ -141,6 +141,22 @@

  • Default: ReplyToDefault system preference

  • Default: ReturnpathDefault system preference
  • +
  • + +
  • Can be entered as a single IP, or a subnet such as 192.168.1.*
  • -- 2.39.5