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 {
72 my $all = @_ ? shift : 0;
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(@_);
88 my $attr_type = C4::Members::AttributeTypes->new($code, $description);
90 Create a new attribute type.
98 $self->{'code'} = shift;
99 $self->{'description'} = shift;
100 $self->{'repeatable'} = 0;
101 $self->{'unique_id'} = 0;
102 $self->{'opac_display'} = 0;
103 $self->{'password_allowed'} = 0;
104 $self->{'staff_searchable'} = 0;
105 $self->{'authorised_value_category'} = '';
113 my $attr_type = C4::Members::AttributeTypes->fetch($code);
115 Fetches an attribute type from the database. If no
116 type with the given C<$code> exists, returns undef.
124 my $dbh = C4::Context->dbh();
126 my $sth = $dbh->prepare_cached("SELECT * FROM borrower_attribute_types WHERE code = ?");
127 $sth->execute($code);
128 my $row = $sth->fetchrow_hashref;
130 return undef unless defined $row;
132 $self->{'code'} = $row->{'code'};
133 $self->{'description'} = $row->{'description'};
134 $self->{'repeatable'} = $row->{'repeatable'};
135 $self->{'unique_id'} = $row->{'unique_id'};
136 $self->{'opac_display'} = $row->{'opac_display'};
137 $self->{'password_allowed'} = $row->{'password_allowed'};
138 $self->{'staff_searchable'} = $row->{'staff_searchable'};
139 $self->{'authorised_value_category'} = $row->{'authorised_value_category'};
149 Stores attribute type in the database. If the type
150 previously retrieved from the database via the fetch()
151 method, the DB representation of the type is replaced.
158 my $dbh = C4::Context->dbh;
160 my $existing = __PACKAGE__->fetch($self->{'code'});
161 if (defined $existing) {
162 $sth = $dbh->prepare_cached("UPDATE borrower_attribute_types
167 password_allowed = ?,
168 staff_searchable = ?,
169 authorised_value_category = ?
172 $sth = $dbh->prepare_cached("INSERT INTO borrower_attribute_types
173 (description, repeatable, unique_id, opac_display, password_allowed,
174 staff_searchable, authorised_value_category, code)
175 VALUES (?, ?, ?, ?, ?,
178 $sth->bind_param(1, $self->{'description'});
179 $sth->bind_param(2, $self->{'repeatable'});
180 $sth->bind_param(3, $self->{'unique_id'});
181 $sth->bind_param(4, $self->{'opac_display'});
182 $sth->bind_param(5, $self->{'password_allowed'});
183 $sth->bind_param(6, $self->{'staff_searchable'});
184 $sth->bind_param(7, $self->{'authorised_value_category'});
185 $sth->bind_param(8, $self->{'code'});
192 my $code = $attr_type->code();
193 $attr_type->code($code);
195 Accessor. Note that the code is immutable once
196 a type is created or fetched from the database.
202 return $self->{'code'};
207 my $description = $attr_type->description();
208 $attr_type->description($description);
216 @_ ? $self->{'description'} = shift : $self->{'description'};
221 my $repeatable = $attr_type->repeatable();
222 $attr_type->repeatable($repeatable);
224 Accessor. The C<$repeatable> argument
225 is interpreted as a Perl boolean.
231 @_ ? $self->{'repeatable'} = ((shift) ? 1 : 0) : $self->{'repeatable'};
236 my $unique_id = $attr_type->unique_id();
237 $attr_type->unique_id($unique_id);
239 Accessor. The C<$unique_id> argument
240 is interpreted as a Perl boolean.
246 @_ ? $self->{'unique_id'} = ((shift) ? 1 : 0) : $self->{'unique_id'};
250 my $opac_display = $attr_type->opac_display();
251 $attr_type->opac_display($opac_display);
253 Accessor. The C<$opac_display> argument
254 is interpreted as a Perl boolean.
260 @_ ? $self->{'opac_display'} = ((shift) ? 1 : 0) : $self->{'opac_display'};
262 =head2 password_allowed
264 my $password_allowed = $attr_type->password_allowed();
265 $attr_type->password_allowed($password_allowed);
267 Accessor. The C<$password_allowed> argument
268 is interpreted as a Perl boolean.
272 sub password_allowed {
274 @_ ? $self->{'password_allowed'} = ((shift) ? 1 : 0) : $self->{'password_allowed'};
276 =head2 staff_searchable
278 my $staff_searchable = $attr_type->staff_searchable();
279 $attr_type->staff_searchable($staff_searchable);
281 Accessor. The C<$staff_searchable> argument
282 is interpreted as a Perl boolean.
286 sub staff_searchable {
288 @_ ? $self->{'staff_searchable'} = ((shift) ? 1 : 0) : $self->{'staff_searchable'};
291 =head2 authorised_value_category
293 my $authorised_value_category = $attr_type->authorised_value_category();
294 $attr_type->authorised_value_category($authorised_value_category);
300 sub authorised_value_category {
302 @_ ? $self->{'authorised_value_category'} = shift : $self->{'authorised_value_category'};
307 $attr_type->delete();
308 C4::Members::AttributeTypes->delete($code);
310 Delete an attribute type from the database. The attribute
311 type may be specified either by an object or by a code.
318 if (ref($arg) eq __PACKAGE__) {
319 $code = $arg->{'code'};
324 my $dbh = C4::Context->dbh;
325 my $sth = $dbh->prepare_cached("DELETE FROM borrower_attribute_types WHERE code = ?");
326 $sth->execute($code);
331 my $count = $attr_type->num_patrons();
333 Returns the number of patron records that use
341 my $dbh = C4::Context->dbh;
342 my $sth = $dbh->prepare_cached("SELECT COUNT(DISTINCT borrowernumber)
343 FROM borrower_attributes
345 $sth->execute($self->{code});
346 my ($count) = $sth->fetchrow_array;
353 my @borrowernumbers = $attr_type->get_patrons($attribute);
355 Returns the borrowernumber of the patron records that
356 have an attribute with the specifie value.
364 my $dbh = C4::Context->dbh;
365 my $sth = $dbh->prepare_cached("SELECT DISTINCT borrowernumber
366 FROM borrower_attributes
369 $sth->execute($self->{code}, $value);
371 while (my ($borrowernumber) = $sth->fetchrow_array) {
372 push @results, $borrowernumber;
379 Koha Development Team <http://koha-community.org/>
381 Galen Charlton <galen.charlton@liblime.com>