1 package C4::Members::AttributeTypes;
3 # Copyright (C) 2008 LibLime
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #use warnings; FIXME - Bug 2505
24 use vars qw($VERSION);
27 # set the version for version checking
33 C4::Members::AttributeTypes - mananage extended patron attribute types
37 my @attribute_types = C4::Members::AttributeTypes::GetAttributeTypes();
39 my $attr_type = C4::Members::AttributeTypes->new($code, $description);
40 $attr_type->code($code);
41 $attr_type->description($description);
42 $attr_type->repeatable($repeatable);
43 $attr_type->unique_id($unique_id);
44 $attr_type->opac_display($opac_display);
45 $attr_type->password_allowed($password_allowed);
46 $attr_type->staff_searchable($staff_searchable);
47 $attr_type->authorised_value_category($authorised_value_category);
51 my $attr_type = C4::Members::AttributeTypes->fetch($code);
52 $attr_type = C4::Members::AttributeTypes->delete($code);
56 =head2 GetAttributeTypes
58 my @attribute_types = C4::Members::AttributeTypes::GetAttributeTypes($all_fields);
60 Returns an array of hashrefs of each attribute type defined
61 in the database. The array is sorted by code. Each hashref contains
62 at least the following fields:
67 If $all_fields is true, then each hashref also contains the other fields from borrower_attribute_types.
71 sub GetAttributeTypes {
73 my $select = $all ? '*' : 'code, description';
74 my $dbh = C4::Context->dbh;
75 my $sth = $dbh->prepare("SELECT $select FROM borrower_attribute_types ORDER by code");
77 my $results = $sth->fetchall_arrayref({});
81 sub GetAttributeTypes_hashref {
82 my %hash = map {$_->{code} => $_} GetAttributeTypes(@_);
86 =head2 AttributeTypeExists
88 my $have_attr_xyz = C4::Members::AttributeTypes::AttributeTypeExists($code)
90 Returns true if we have attribute type C<$code>
95 sub AttributeTypeExists {
97 my $dbh = C4::Context->dbh;
98 my $exists = $dbh->selectrow_array("SELECT code FROM borrower_attribute_types WHERE code = ?", undef, $code);
104 my $attr_type = C4::Members::AttributeTypes->new($code, $description);
106 Create a new attribute type.
114 $self->{'code'} = shift;
115 $self->{'description'} = shift;
116 $self->{'repeatable'} = 0;
117 $self->{'unique_id'} = 0;
118 $self->{'opac_display'} = 0;
119 $self->{'password_allowed'} = 0;
120 $self->{'staff_searchable'} = 0;
121 $self->{'display_checkout'} = 0;
122 $self->{'authorised_value_category'} = '';
130 my $attr_type = C4::Members::AttributeTypes->fetch($code);
132 Fetches an attribute type from the database. If no
133 type with the given C<$code> exists, returns undef.
141 my $dbh = C4::Context->dbh();
143 my $sth = $dbh->prepare_cached("SELECT * FROM borrower_attribute_types WHERE code = ?");
144 $sth->execute($code);
145 my $row = $sth->fetchrow_hashref;
147 return undef unless defined $row;
149 $self->{'code'} = $row->{'code'};
150 $self->{'description'} = $row->{'description'};
151 $self->{'repeatable'} = $row->{'repeatable'};
152 $self->{'unique_id'} = $row->{'unique_id'};
153 $self->{'opac_display'} = $row->{'opac_display'};
154 $self->{'password_allowed'} = $row->{'password_allowed'};
155 $self->{'staff_searchable'} = $row->{'staff_searchable'};
156 $self->{'display_checkout'} = $row->{'display_checkout'};
157 $self->{'authorised_value_category'} = $row->{'authorised_value_category'};
167 Stores attribute type in the database. If the type
168 previously retrieved from the database via the fetch()
169 method, the DB representation of the type is replaced.
176 my $dbh = C4::Context->dbh;
178 my $existing = __PACKAGE__->fetch($self->{'code'});
179 if (defined $existing) {
180 $sth = $dbh->prepare_cached("UPDATE borrower_attribute_types
185 password_allowed = ?,
186 staff_searchable = ?,
187 authorised_value_category = ?,
191 $sth = $dbh->prepare_cached("INSERT INTO borrower_attribute_types
192 (description, repeatable, unique_id, opac_display, password_allowed,
193 staff_searchable, authorised_value_category, display_checkout, code)
194 VALUES (?, ?, ?, ?, ?,
197 $sth->bind_param(1, $self->{'description'});
198 $sth->bind_param(2, $self->{'repeatable'});
199 $sth->bind_param(3, $self->{'unique_id'});
200 $sth->bind_param(4, $self->{'opac_display'});
201 $sth->bind_param(5, $self->{'password_allowed'});
202 $sth->bind_param(6, $self->{'staff_searchable'});
203 $sth->bind_param(7, $self->{'authorised_value_category'});
204 $sth->bind_param(8, $self->{'display_checkout'});
205 $sth->bind_param(9, $self->{'code'});
212 my $code = $attr_type->code();
213 $attr_type->code($code);
215 Accessor. Note that the code is immutable once
216 a type is created or fetched from the database.
222 return $self->{'code'};
227 my $description = $attr_type->description();
228 $attr_type->description($description);
236 @_ ? $self->{'description'} = shift : $self->{'description'};
241 my $repeatable = $attr_type->repeatable();
242 $attr_type->repeatable($repeatable);
244 Accessor. The C<$repeatable> argument
245 is interpreted as a Perl boolean.
251 @_ ? $self->{'repeatable'} = ((shift) ? 1 : 0) : $self->{'repeatable'};
256 my $unique_id = $attr_type->unique_id();
257 $attr_type->unique_id($unique_id);
259 Accessor. The C<$unique_id> argument
260 is interpreted as a Perl boolean.
266 @_ ? $self->{'unique_id'} = ((shift) ? 1 : 0) : $self->{'unique_id'};
270 my $opac_display = $attr_type->opac_display();
271 $attr_type->opac_display($opac_display);
273 Accessor. The C<$opac_display> argument
274 is interpreted as a Perl boolean.
280 @_ ? $self->{'opac_display'} = ((shift) ? 1 : 0) : $self->{'opac_display'};
282 =head2 password_allowed
284 my $password_allowed = $attr_type->password_allowed();
285 $attr_type->password_allowed($password_allowed);
287 Accessor. The C<$password_allowed> argument
288 is interpreted as a Perl boolean.
292 sub password_allowed {
294 @_ ? $self->{'password_allowed'} = ((shift) ? 1 : 0) : $self->{'password_allowed'};
296 =head2 staff_searchable
298 my $staff_searchable = $attr_type->staff_searchable();
299 $attr_type->staff_searchable($staff_searchable);
301 Accessor. The C<$staff_searchable> argument
302 is interpreted as a Perl boolean.
306 sub staff_searchable {
308 @_ ? $self->{'staff_searchable'} = ((shift) ? 1 : 0) : $self->{'staff_searchable'};
311 =head2 display_checkout
315 my $display_checkout = $attr_type->display_checkout();
316 $attr_type->display_checkout($display_checkout);
320 Accessor. The C<$display_checkout> argument
321 is interpreted as a Perl boolean.
325 sub display_checkout {
327 @_ ? $self->{'display_checkout'} = ((shift) ? 1 : 0) : $self->{'display_checkout'};
330 =head2 authorised_value_category
332 my $authorised_value_category = $attr_type->authorised_value_category();
333 $attr_type->authorised_value_category($authorised_value_category);
339 sub authorised_value_category {
341 @_ ? $self->{'authorised_value_category'} = shift : $self->{'authorised_value_category'};
346 $attr_type->delete();
347 C4::Members::AttributeTypes->delete($code);
349 Delete an attribute type from the database. The attribute
350 type may be specified either by an object or by a code.
357 if (ref($arg) eq __PACKAGE__) {
358 $code = $arg->{'code'};
363 my $dbh = C4::Context->dbh;
364 my $sth = $dbh->prepare_cached("DELETE FROM borrower_attribute_types WHERE code = ?");
365 $sth->execute($code);
370 my $count = $attr_type->num_patrons();
372 Returns the number of patron records that use
380 my $dbh = C4::Context->dbh;
381 my $sth = $dbh->prepare_cached("SELECT COUNT(DISTINCT borrowernumber)
382 FROM borrower_attributes
384 $sth->execute($self->{code});
385 my ($count) = $sth->fetchrow_array;
392 my @borrowernumbers = $attr_type->get_patrons($attribute);
394 Returns the borrowernumber of the patron records that
395 have an attribute with the specifie value.
403 my $dbh = C4::Context->dbh;
404 my $sth = $dbh->prepare_cached("SELECT DISTINCT borrowernumber
405 FROM borrower_attributes
408 $sth->execute($self->{code}, $value);
410 while (my ($borrowernumber) = $sth->fetchrow_array) {
411 push @results, $borrowernumber;
418 Koha Development Team <http://koha-community.org/>
420 Galen Charlton <galen.charlton@liblime.com>