1 package Koha::Patron::Category;
3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21 use List::MoreUtils qw(any);
23 use C4::Members::Messaging;
28 use base qw(Koha::Object Koha::Object::Limit::Library);
32 Koha::Patron;;Category - Koha Patron;;Category Object class
40 =head3 effective_BlockExpiredPatronOpacActions
42 my $BlockExpiredPatronOpacActions = $category->effective_BlockExpiredPatronOpacActions
44 Return the effective BlockExpiredPatronOpacActions value.
48 sub effective_BlockExpiredPatronOpacActions {
50 return C4::Context->preference('BlockExpiredPatronOpacActions') if $self->BlockExpiredPatronOpacActions == -1;
51 return $self->BlockExpiredPatronOpacActions
61 $self->dateofbirthrequired(undef)
62 if not defined $self->dateofbirthrequired
63 or $self->dateofbirthrequired eq '';
65 $self->upperagelimit(undef)
66 if not defined $self->upperagelimit
67 or $self->upperagelimit eq '';
69 $self->checkprevcheckout('inherit')
70 unless defined $self->checkprevcheckout;
72 return $self->SUPER::store;
75 =head3 default_messaging
77 my $messaging = $category->default_messaging();
81 sub default_messaging {
83 my $messaging_options = C4::Members::Messaging::GetMessagingOptions();
85 foreach my $option (@$messaging_options) {
86 my $pref = C4::Members::Messaging::GetMessagingPreferences(
88 categorycode => $self->categorycode,
89 message_name => $option->{message_name}
92 next unless $pref->{transports};
94 message_attribute_id => $option->{message_attribute_id},
95 message_name => $option->{message_name},
96 $option->{'message_name'} => 1,
98 foreach my $transport ( keys %{ $pref->{transports} } ) {
99 push @{ $brief_pref->{transports} }, { transport => $transport };
101 push @messaging, $brief_pref;
106 sub get_expiry_date {
107 my ($self, $date ) = @_;
108 if ( $self->enrolmentperiod ) {
109 $date ||= dt_from_string;
110 $date = dt_from_string( $date ) unless ref $date;
111 return $date->add( months => $self->enrolmentperiod, end_of_month => 'limit' );
113 return $self->enrolmentperioddate;
117 =head3 effective_reset_password
119 Returns if patrons in this category can reset their password. If set in $self->reset_password
120 or, if undef, falls back to the OpacResetPassword system preference.
124 sub effective_reset_password {
127 return $self->reset_password // C4::Context->preference('OpacResetPassword');
130 =head3 effective_change_password
132 Returns if patrons in this category can change their password. If set in $self->change_password
133 or, if undef, falls back to the OpacPasswordChange system preference.
137 sub effective_change_password {
140 return $self->change_password // C4::Context->preference('OpacPasswordChange');
143 =head3 effective_min_password_length
145 $category->effective_min_password_length()
147 Retrieve category's password length if set, or minPasswordLength otherwise
151 sub effective_min_password_length {
154 return $self->min_password_length // C4::Context->preference('minPasswordLength');
157 =head3 effective_require_strong_password
159 $category->effective_require_strong_password()
161 Retrieve category's password strength if set, or RequireStrongPassword otherwise
165 sub effective_require_strong_password {
168 return $self->require_strong_password // C4::Context->preference('RequireStrongPassword');
171 =head3 override_hidden_items
173 if ( $patron->category->override_hidden_items ) {
177 Returns a boolean that if patrons of this category are exempt from the OPACHiddenItems policies
179 TODO: Remove on bug 22547
183 sub override_hidden_items {
185 return any { $_ eq $self->categorycode }
186 split( /\|/, C4::Context->preference('OpacHiddenItemsExceptions') );
189 =head2 Internal methods
191 =head3 _library_limits
193 configure library limits
197 sub _library_limits {
199 class => "CategoriesBranch",
200 id => "categorycode",
201 library => "branchcode",