Bug 29844: Fix ->search occurrences
[koha.git] / Koha / Patron / Category.pm
1 package Koha::Patron::Category;
2
3 # This file is part of Koha.
4 #
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.
9 #
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.
14 #
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>.
17
18 use Modern::Perl;
19
20 use List::MoreUtils qw( any );
21
22 use C4::Members::Messaging;
23
24 use Koha::Database;
25 use Koha::DateUtils qw( dt_from_string );
26
27 use base qw(Koha::Object Koha::Object::Limit::Library);
28
29 =head1 NAME
30
31 Koha::Patron;;Category - Koha Patron;;Category Object class
32
33 =head1 API
34
35 =head2 Class Methods
36
37 =cut
38
39 =head3 effective_BlockExpiredPatronOpacActions
40
41 my $BlockExpiredPatronOpacActions = $category->effective_BlockExpiredPatronOpacActions
42
43 Return the effective BlockExpiredPatronOpacActions value.
44
45 =cut
46
47 sub effective_BlockExpiredPatronOpacActions {
48     my( $self) = @_;
49     return C4::Context->preference('BlockExpiredPatronOpacActions') if $self->BlockExpiredPatronOpacActions == -1;
50     return $self->BlockExpiredPatronOpacActions
51 }
52
53 =head3 store
54
55 =cut
56
57 sub store {
58     my ($self) = @_;
59
60     $self->dateofbirthrequired(undef)
61       if not defined $self->dateofbirthrequired
62       or $self->dateofbirthrequired eq '';
63
64     $self->upperagelimit(undef)
65       if not defined $self->upperagelimit
66       or $self->upperagelimit eq '';
67
68     $self->checkprevcheckout('inherit')
69       unless defined $self->checkprevcheckout;
70
71     return $self->SUPER::store;
72 }
73
74 =head3 default_messaging
75
76 my $messaging = $category->default_messaging();
77
78 =cut
79
80 sub default_messaging {
81     my ( $self ) = @_;
82     my $messaging_options = C4::Members::Messaging::GetMessagingOptions();
83     my @messaging;
84     foreach my $option (@$messaging_options) {
85         my $pref = C4::Members::Messaging::GetMessagingPreferences(
86             {
87                 categorycode => $self->categorycode,
88                 message_name => $option->{message_name}
89             }
90         );
91         next unless $pref->{transports};
92         my $brief_pref = {
93             message_attribute_id      => $option->{message_attribute_id},
94             message_name              => $option->{message_name},
95             $option->{'message_name'} => 1,
96         };
97         foreach my $transport ( keys %{ $pref->{transports} } ) {
98             push @{ $brief_pref->{transports} }, { transport => $transport };
99         }
100         push @messaging, $brief_pref;
101     }
102     return \@messaging;
103 }
104
105 sub get_expiry_date {
106     my ($self, $date ) = @_;
107     if ( $self->enrolmentperiod ) {
108         $date ||= dt_from_string;
109         $date = dt_from_string( $date ) unless ref $date;
110         return $date->add( months => $self->enrolmentperiod, end_of_month => 'limit' );
111     } else {
112         return $self->enrolmentperioddate;
113     }
114 }
115
116 =head3 effective_reset_password
117
118 Returns if patrons in this category can reset their password. If set in $self->reset_password
119 or, if undef, falls back to the OpacResetPassword system preference.
120
121 =cut
122
123 sub effective_reset_password {
124     my ($self) = @_;
125
126     return $self->reset_password // C4::Context->preference('OpacResetPassword');
127 }
128
129 =head3 effective_change_password
130
131 Returns if patrons in this category can change their password. If set in $self->change_password
132 or, if undef, falls back to the OpacPasswordChange system preference.
133
134 =cut
135
136 sub effective_change_password {
137     my ($self) = @_;
138
139     return $self->change_password // C4::Context->preference('OpacPasswordChange');
140 }
141
142 =head3 effective_min_password_length
143
144     $category->effective_min_password_length()
145
146 Retrieve category's password length if set, or minPasswordLength otherwise
147
148 =cut
149
150 sub effective_min_password_length {
151     my ($self) = @_;
152
153     return $self->min_password_length // C4::Context->preference('minPasswordLength');
154 }
155
156 =head3 effective_require_strong_password
157
158     $category->effective_require_strong_password()
159
160 Retrieve category's password strength if set, or RequireStrongPassword otherwise
161
162 =cut
163
164 sub effective_require_strong_password {
165     my ($self) = @_;
166
167     return $self->require_strong_password // C4::Context->preference('RequireStrongPassword');
168 }
169
170 =head3 override_hidden_items
171
172     if ( $patron->category->override_hidden_items ) {
173         ...
174     }
175
176 Returns a boolean that if patrons of this category are exempt from the OPACHiddenItems policies
177
178 TODO: Remove on bug 22547
179
180 =cut
181
182 sub override_hidden_items {
183     my ($self) = @_;
184     return any { $_ eq $self->categorycode }
185     split( /\|/, C4::Context->preference('OpacHiddenItemsExceptions') );
186 }
187
188 =head2 Internal methods
189
190 =head3 _library_limits
191
192  configure library limits
193
194 =cut
195
196 sub _library_limits {
197     return {
198         class => "CategoriesBranch",
199         id => "categorycode",
200         library => "branchcode",
201     };
202 }
203
204 =head3 type
205
206 =cut
207
208 sub _type {
209     return 'Category';
210 }
211
212 1;