Tomas Cohen Arazi
69be1f3848
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 <kyle@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
206 lines
6.1 KiB
Perl
Executable file
206 lines
6.1 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Copyright 2000-2002 Katipo Communications
|
|
# Copyright 2015 Koha Development Team
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
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 = CGI->new;
|
|
my $branchcode = $input->param('branchcode');
|
|
my $categorycode = $input->param('categorycode');
|
|
my $op = $input->param('op') || 'list';
|
|
my @messages;
|
|
|
|
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
|
|
{ template_name => "admin/branches.tt",
|
|
query => $input,
|
|
type => "intranet",
|
|
flagsrequired => { parameters => 'manage_libraries' },
|
|
debug => 1,
|
|
}
|
|
);
|
|
|
|
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,
|
|
smtp_servers => \@smtp_servers
|
|
);
|
|
} elsif ( $op eq 'add_validate' ) {
|
|
my @fields = qw(
|
|
branchname
|
|
branchaddress1
|
|
branchaddress2
|
|
branchaddress3
|
|
branchzip
|
|
branchcity
|
|
branchstate
|
|
branchcountry
|
|
branchphone
|
|
branchfax
|
|
branchemail
|
|
branchreplyto
|
|
branchreturnpath
|
|
branchurl
|
|
issuing
|
|
branchip
|
|
branchnotes
|
|
opac_info
|
|
marcorgcode
|
|
pickup_location
|
|
);
|
|
my $is_a_modif = $input->param('is_a_modif');
|
|
|
|
if ($is_a_modif) {
|
|
my $library = Koha::Libraries->find($branchcode);
|
|
for my $field (@fields) {
|
|
$library->$field( scalar $input->param($field) );
|
|
}
|
|
|
|
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 {
|
|
$branchcode =~ s|\s||g;
|
|
my $library = Koha::Library->new(
|
|
{ branchcode => $branchcode,
|
|
( map { $_ => scalar $input->param($_) || undef } @fields )
|
|
}
|
|
);
|
|
|
|
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' ) {
|
|
my $library = Koha::Libraries->find($branchcode);
|
|
my $items_count = Koha::Items->search(
|
|
{ -or => {
|
|
holdingbranch => $branchcode,
|
|
homebranch => $branchcode
|
|
},
|
|
}
|
|
)->count;
|
|
my $patrons_count = Koha::Patrons->search( { branchcode => $branchcode, } )->count;
|
|
|
|
if ( $items_count or $patrons_count ) {
|
|
push @messages,
|
|
{ type => 'alert',
|
|
code => 'cannot_delete_library',
|
|
data => {
|
|
items_count => $items_count,
|
|
patrons_count => $patrons_count,
|
|
},
|
|
};
|
|
$op = 'list';
|
|
} else {
|
|
$template->param(
|
|
library => $library,
|
|
items_count => $items_count,
|
|
patrons_count => $patrons_count,
|
|
);
|
|
}
|
|
} elsif ( $op eq 'delete_confirmed' ) {
|
|
my $library = Koha::Libraries->find($branchcode);
|
|
|
|
my $deleted = eval { $library->delete; };
|
|
|
|
if ( $@ or not $deleted ) {
|
|
push @messages, { type => 'alert', code => 'error_on_delete' };
|
|
} else {
|
|
push @messages, { type => 'message', code => 'success_on_delete' };
|
|
}
|
|
$op = 'list';
|
|
} else {
|
|
$op = 'list';
|
|
}
|
|
|
|
$template->param( libraries_count => Koha::Libraries->search->count )
|
|
if $op eq 'list';
|
|
|
|
$template->param(
|
|
messages => \@messages,
|
|
op => $op,
|
|
);
|
|
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|