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
39 my @attribute_types = C4::Members::AttributeTypes::GetAttributeTypes();
41 my $attr_type = C4::Members::AttributeTypes->new($code, $description);
42 $attr_type->code($code);
43 $attr_type->description($description);
44 $attr_type->repeatable($repeatable);
45 $attr_type->unique_id($unique_id);
46 $attr_type->opac_display($opac_display);
47 $attr_type->password_allowed($password_allowed);
48 $attr_type->staff_searchable($staff_searchable);
49 $attr_type->authorised_value_category($authorised_value_category);
53 my $attr_type = C4::Members::AttributeTypes->fetch($code);
54 $attr_type = C4::Members::AttributeTypes->delete($code);
60 =head2 GetAttributeTypes
64 my @attribute_types = C4::Members::AttributeTypes::GetAttributeTypes($all_fields);
68 Returns an array of hashrefs of each attribute type defined
69 in the database. The array is sorted by code. Each hashref contains
70 at least the following fields:
75 If $all_fields is true, then each hashref also contains the other fields from borrower_attribute_types.
79 sub GetAttributeTypes {
80 my $all = @_ ? shift : 0;
81 my $select = $all ? '*' : 'code, description';
82 my $dbh = C4::Context->dbh;
83 my $sth = $dbh->prepare("SELECT $select FROM borrower_attribute_types ORDER by code");
85 my $results = $sth->fetchall_arrayref({});
89 sub GetAttributeTypes_hashref {
90 my %hash = map {$_->{code} => $_} GetAttributeTypes(@_);
98 my $attr_type = C4::Members::AttributeTypes->new($code, $description);
102 Create a new attribute type.
110 $self->{'code'} = shift;
111 $self->{'description'} = shift;
112 $self->{'repeatable'} = 0;
113 $self->{'unique_id'} = 0;
114 $self->{'opac_display'} = 0;
115 $self->{'password_allowed'} = 0;
116 $self->{'staff_searchable'} = 0;
117 $self->{'authorised_value_category'} = '';
127 my $attr_type = C4::Members::AttributeTypes->fetch($code);
131 Fetches an attribute type from the database. If no
132 type with the given C<$code> exists, returns undef.
140 my $dbh = C4::Context->dbh();
142 my $sth = $dbh->prepare_cached("SELECT * FROM borrower_attribute_types WHERE code = ?");
143 $sth->execute($code);
144 my $row = $sth->fetchrow_hashref;
146 return undef unless defined $row;
148 $self->{'code'} = $row->{'code'};
149 $self->{'description'} = $row->{'description'};
150 $self->{'repeatable'} = $row->{'repeatable'};
151 $self->{'unique_id'} = $row->{'unique_id'};
152 $self->{'opac_display'} = $row->{'opac_display'};
153 $self->{'password_allowed'} = $row->{'password_allowed'};
154 $self->{'staff_searchable'} = $row->{'staff_searchable'};
155 $self->{'authorised_value_category'} = $row->{'authorised_value_category'};
169 Stores attribute type in the database. If the type
170 previously retrieved from the database via the fetch()
171 method, the DB representation of the type is replaced.
178 my $dbh = C4::Context->dbh;
180 my $existing = __PACKAGE__->fetch($self->{'code'});
181 if (defined $existing) {
182 $sth = $dbh->prepare_cached("UPDATE borrower_attribute_types
187 password_allowed = ?,
188 staff_searchable = ?,
189 authorised_value_category = ?
192 $sth = $dbh->prepare_cached("INSERT INTO borrower_attribute_types
193 (description, repeatable, unique_id, opac_display, password_allowed,
194 staff_searchable, authorised_value_category, code)
195 VALUES (?, ?, ?, ?, ?,
198 $sth->bind_param(1, $self->{'description'});
199 $sth->bind_param(2, $self->{'repeatable'});
200 $sth->bind_param(3, $self->{'unique_id'});
201 $sth->bind_param(4, $self->{'opac_display'});
202 $sth->bind_param(5, $self->{'password_allowed'});
203 $sth->bind_param(6, $self->{'staff_searchable'});
204 $sth->bind_param(7, $self->{'authorised_value_category'});
205 $sth->bind_param(8, $self->{'code'});
214 my $code = $attr_type->code();
215 $attr_type->code($code);
219 Accessor. Note that the code is immutable once
220 a type is created or fetched from the database.
226 return $self->{'code'};
233 my $description = $attr_type->description();
234 $attr_type->description($description);
244 @_ ? $self->{'description'} = shift : $self->{'description'};
251 my $repeatable = $attr_type->repeatable();
252 $attr_type->repeatable($repeatable);
256 Accessor. The C<$repeatable> argument
257 is interpreted as a Perl boolean.
263 @_ ? $self->{'repeatable'} = ((shift) ? 1 : 0) : $self->{'repeatable'};
270 my $unique_id = $attr_type->unique_id();
271 $attr_type->unique_id($unique_id);
275 Accessor. The C<$unique_id> argument
276 is interpreted as a Perl boolean.
282 @_ ? $self->{'unique_id'} = ((shift) ? 1 : 0) : $self->{'unique_id'};
288 my $opac_display = $attr_type->opac_display();
289 $attr_type->opac_display($opac_display);
293 Accessor. The C<$opac_display> argument
294 is interpreted as a Perl boolean.
300 @_ ? $self->{'opac_display'} = ((shift) ? 1 : 0) : $self->{'opac_display'};
302 =head2 password_allowed
306 my $password_allowed = $attr_type->password_allowed();
307 $attr_type->password_allowed($password_allowed);
311 Accessor. The C<$password_allowed> argument
312 is interpreted as a Perl boolean.
316 sub password_allowed {
318 @_ ? $self->{'password_allowed'} = ((shift) ? 1 : 0) : $self->{'password_allowed'};
320 =head2 staff_searchable
324 my $staff_searchable = $attr_type->staff_searchable();
325 $attr_type->staff_searchable($staff_searchable);
329 Accessor. The C<$staff_searchable> argument
330 is interpreted as a Perl boolean.
334 sub staff_searchable {
336 @_ ? $self->{'staff_searchable'} = ((shift) ? 1 : 0) : $self->{'staff_searchable'};
339 =head2 authorised_value_category
343 my $authorised_value_category = $attr_type->authorised_value_category();
344 $attr_type->authorised_value_category($authorised_value_category);
352 sub authorised_value_category {
354 @_ ? $self->{'authorised_value_category'} = shift : $self->{'authorised_value_category'};
361 $attr_type->delete();
362 C4::Members::AttributeTypes->delete($code);
366 Delete an attribute type from the database. The attribute
367 type may be specified either by an object or by a code.
374 if (ref($arg) eq __PACKAGE__) {
375 $code = $arg->{'code'};
380 my $dbh = C4::Context->dbh;
381 my $sth = $dbh->prepare_cached("DELETE FROM borrower_attribute_types WHERE code = ?");
382 $sth->execute($code);
389 my $count = $attr_type->num_patrons();
393 Returns the number of patron records that use
401 my $dbh = C4::Context->dbh;
402 my $sth = $dbh->prepare_cached("SELECT COUNT(DISTINCT borrowernumber)
403 FROM borrower_attributes
405 $sth->execute($self->{code});
406 my ($count) = $sth->fetchrow_array;
415 my @borrowernumbers = $attr_type->get_patrons($attribute);
419 Returns the borrowernumber of the patron records that
420 have an attribute with the specifie value.
428 my $dbh = C4::Context->dbh;
429 my $sth = $dbh->prepare_cached("SELECT DISTINCT borrowernumber
430 FROM borrower_attributes
433 $sth->execute($self->{code}, $value);
435 while (my ($borrowernumber) = $sth->fetchrow_array) {
436 push @results, $borrowernumber;
443 Koha Development Team <http://koha-community.org/>
445 Galen Charlton <galen.charlton@liblime.com>