From 4264f99b0207d56b5a0f1e7c6d221986094b6094 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 --- 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 b609c20d83..9ce082e45a 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'; @@ -48,10 +54,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( @@ -83,11 +93,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; @@ -96,12 +127,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.28.0