use Modern::Perl;
-use Carp;
use C4::Context;
use Koha::Database;
use Koha::StockRotationStages;
+use Koha::SMTP::Servers;
use base qw(Koha::Object);
return Koha::StockRotationStages->_new_from_dbic( $rs );
}
+=head3 outgoing_transfers
+
+ my $outgoing_transfers = Koha::Library->outgoing_transfers;
+
+Returns the outgoing item transfers associated with this Library.
+
+=cut
+
+sub outgoing_transfers {
+ my ( $self ) = @_;
+ my $rs = $self->_result->branchtransfers_frombranches;
+ return Koha::Item::Transfers->_new_from_dbic( $rs );
+}
+
+=head3 inbound_transfers
+
+ my $inbound_transfers = Koha::Library->inbound_transfers;
+
+Returns the inbound item transfers associated with this Library.
+
+=cut
+
+sub inbound_transfers {
+ my ( $self ) = @_;
+ my $rs = $self->_result->branchtransfers_tobranches;
+ return Koha::Item::Transfers->_new_from_dbic( $rs );
+}
+
=head3 get_effective_marcorgcode
my $marcorgcode = Koha::Libraries->find( $library_id )->get_effective_marcorgcode();
return $self->marcorgcode || C4::Context->preference("MARCOrgCode");
}
-=head3 get_effective_email
+=head3 smtp_server
+
+ my $smtp_server = $library->smtp_server;
+ $library->smtp_server({ smtp_server => $smtp_server });
+ $library->smtp_server({ smtp_server => undef });
+
+Accessor for getting and setting the library's SMTP server.
+
+Returns the effective SMTP server configuration to be used on the library. The returned
+value is always a I<Koha::SMTP::Server> object.
+
+Setting it to undef will remove the link to a specific SMTP server and effectively
+make the library use the default setting
+
+=cut
+
+sub smtp_server {
+ my ( $self, $params ) = @_;
+
+ my $library_smtp_server_rs = $self->_result->library_smtp_server;
+
+ if ( exists $params->{smtp_server} ) {
+
+ $self->_result->result_source->schema->txn_do( sub {
+ $library_smtp_server_rs->delete
+ if $library_smtp_server_rs;
+
+ if ( defined $params->{smtp_server} ) {
+ # Set the new server
+ # Remove any already set SMTP server
+
+ my $smtp_server = $params->{smtp_server};
+ $smtp_server->_result->add_to_library_smtp_servers({ library_id => $self->id });
+ }
+ });
+ } # else => reset to default
+ else {
+ # Getter
+ if ( $library_smtp_server_rs ) {
+ return Koha::SMTP::Servers->find(
+ $library_smtp_server_rs->smtp_server_id );
+ }
+
+ return Koha::SMTP::Servers->get_default;
+ }
+
+ return $self;
+}
+
+=head3 from_email_address
+
+ my $from_email = Koha::Library->from_email_address;
+
+Returns the official 'from' email address for the branch.
- my $to_email = Koha::Library->get_effective_email;
+It may well be a 'noreply' or other inaccessible local domain
+address that is being used to satisfy spam protection filters.
+
+=cut
+
+sub from_email_address {
+ my ($self) = @_;
+
+ return
+ $self->branchemail
+ || C4::Context->preference('KohaAdminEmailAddress')
+ || undef;
+}
+
+=head3 inbound_email_address
+
+ my $to_email = Koha::Library->inbound_email_address;
Returns an effective email address which should be accessible to librarians at the branch.
+NOTE: This is the address to use for 'reply_to' or 'to' fields; It should not usually be
+used as the 'from' address for emails as it may lead to mail being caught by spam filters.
+
=cut
-sub get_effective_email {
+sub inbound_email_address {
my ($self) = @_;
return
$self->branchreplyto
|| $self->branchemail
|| C4::Context->preference('ReplytoDefault')
- || C4::Context->preference('KohaAdminEmailAddress');
+ || C4::Context->preference('KohaAdminEmailAddress')
+ || undef;
+}
+
+=head3 inbound_ill_address
+
+ my $to_email = Koha::Library->inbound_ill_address;
+
+Returns an effective email address which should be accessible to librarians at the branch
+for inter library loans communication.
+
+=cut
+
+sub inbound_ill_address {
+ my ($self) = @_;
+
+ return
+ $self->branchillemail
+ || C4::Context->preference('ILLDefaultStaffEmail')
+ || $self->inbound_email_address;
}
=head3 library_groups
return Koha::Cash::Registers->_new_from_dbic( $rs );
}
-=head3 to_api_mapping
-
-This method returns the mapping for representing a Koha::Library object
-on the API.
-
-=cut
-
-sub to_api_mapping {
- return {
- branchcode => 'library_id',
- branchname => 'name',
- branchaddress1 => 'address1',
- branchaddress2 => 'address2',
- branchaddress3 => 'address3',
- branchzip => 'postal_code',
- branchcity => 'city',
- branchstate => 'state',
- branchcountry => 'country',
- branchphone => 'phone',
- branchfax => 'fax',
- branchemail => 'email',
- branchreplyto => 'reply_to_email',
- branchreturnpath => 'return_path_email',
- branchurl => 'url',
- issuing => undef,
- branchip => 'ip',
- branchnotes => 'notes',
- marcorgcode => 'marc_org_code',
- };
-}
-
=head3 get_hold_libraries
Return all libraries (including self) that belong to the same hold groups
@hold_libraries =
grep { !$seen{ $_->id }++ } @hold_libraries;
- return @hold_libraries;
+ return Koha::Libraries->search({ branchcode => { '-in' => [ keys %seen ] } });
}
=head3 validate_hold_sibling
sub validate_hold_sibling {
my ( $self, $params ) = @_;
- my @hold_libraries = $self->get_hold_libraries;
-
- foreach (@hold_libraries) {
- my $hold_library = $_;
- my $is_valid = 1;
- foreach my $key (keys %$params) {
- unless($hold_library->$key eq $params->{$key}) {
- $is_valid=0;
- last;
- }
- }
- if($is_valid) {
- #Found one library that meets all search parameters
- return 1;
- }
- }
- return 0;
+
+ return 1 if $params->{branchcode} eq $self->id;
+
+ my $branchcode = $params->{branchcode};
+ return $self->get_hold_libraries->search( { branchcode => $branchcode } )
+ ->count > 0;
+}
+
+=head3 public_read_list
+
+This method returns the list of publicly readable database fields for both API and UI output purposes
+
+=cut
+
+sub public_read_list {
+ return [
+ 'branchcode', 'branchname', 'branchaddress1',
+ 'branchaddress2', 'branchaddress3', 'branchzip',
+ 'branchcity', 'branchstate', 'branchcountry',
+ 'branchfax', 'branchemail', 'branchurl'
+ ];
+}
+
+=head3 to_api_mapping
+
+This method returns the mapping for representing a Koha::Library object
+on the API.
+
+=cut
+
+sub to_api_mapping {
+ return {
+ branchcode => 'library_id',
+ branchname => 'name',
+ branchaddress1 => 'address1',
+ branchaddress2 => 'address2',
+ branchaddress3 => 'address3',
+ branchzip => 'postal_code',
+ branchcity => 'city',
+ branchstate => 'state',
+ branchcountry => 'country',
+ branchphone => 'phone',
+ branchfax => 'fax',
+ branchemail => 'email',
+ branchillemail => 'illemail',
+ branchreplyto => 'reply_to_email',
+ branchreturnpath => 'return_path_email',
+ branchurl => 'url',
+ issuing => undef,
+ branchip => 'ip',
+ branchnotes => 'notes',
+ marcorgcode => 'marc_org_code',
+ };
}
=head2 Internal methods