View | Details | Raw Unified | Return to bug 12267
Collapse All | Expand All

(-)a/C4/Members/AttributeTypes.pm (-31 / +15 lines)
Lines 37-43 C4::Members::AttributeTypes - mananage extended patron attribute types Link Here
37
  $attr_type->repeatable($repeatable);
37
  $attr_type->repeatable($repeatable);
38
  $attr_type->unique_id($unique_id);
38
  $attr_type->unique_id($unique_id);
39
  $attr_type->opac_display($opac_display);
39
  $attr_type->opac_display($opac_display);
40
  $attr_type->password_allowed($password_allowed);
41
  $attr_type->staff_searchable($staff_searchable);
40
  $attr_type->staff_searchable($staff_searchable);
42
  $attr_type->authorised_value_category($authorised_value_category);
41
  $attr_type->authorised_value_category($authorised_value_category);
43
  $attr_type->store();
42
  $attr_type->store();
Lines 123-129 sub new { Link Here
123
    $self->{'repeatable'} = 0;
122
    $self->{'repeatable'} = 0;
124
    $self->{'unique_id'} = 0;
123
    $self->{'unique_id'} = 0;
125
    $self->{'opac_display'} = 0;
124
    $self->{'opac_display'} = 0;
126
    $self->{'password_allowed'} = 0;
127
    $self->{'staff_searchable'} = 0;
125
    $self->{'staff_searchable'} = 0;
128
    $self->{'display_checkout'} = 0;
126
    $self->{'display_checkout'} = 0;
129
    $self->{'authorised_value_category'} = '';
127
    $self->{'authorised_value_category'} = '';
Lines 165-171 sub fetch { Link Here
165
    $self->{'repeatable'}                = $row->{'repeatable'};
163
    $self->{'repeatable'}                = $row->{'repeatable'};
166
    $self->{'unique_id'}                 = $row->{'unique_id'};
164
    $self->{'unique_id'}                 = $row->{'unique_id'};
167
    $self->{'opac_display'}              = $row->{'opac_display'};
165
    $self->{'opac_display'}              = $row->{'opac_display'};
168
    $self->{'password_allowed'}          = $row->{'password_allowed'};
169
    $self->{'staff_searchable'}          = $row->{'staff_searchable'};
166
    $self->{'staff_searchable'}          = $row->{'staff_searchable'};
170
    $self->{'display_checkout'}          = $row->{'display_checkout'};
167
    $self->{'display_checkout'}          = $row->{'display_checkout'};
171
    $self->{'authorised_value_category'} = $row->{'authorised_value_category'};
168
    $self->{'authorised_value_category'} = $row->{'authorised_value_category'};
Lines 206-212 sub store { Link Here
206
                                         repeatable = ?,
203
                                         repeatable = ?,
207
                                         unique_id = ?,
204
                                         unique_id = ?,
208
                                         opac_display = ?,
205
                                         opac_display = ?,
209
                                         password_allowed = ?,
210
                                         staff_searchable = ?,
206
                                         staff_searchable = ?,
211
                                         authorised_value_category = ?,
207
                                         authorised_value_category = ?,
212
                                         display_checkout = ?,
208
                                         display_checkout = ?,
Lines 215-237 sub store { Link Here
215
                                     WHERE code = ?");
211
                                     WHERE code = ?");
216
    } else {
212
    } else {
217
        $sth = $dbh->prepare_cached("INSERT INTO borrower_attribute_types 
213
        $sth = $dbh->prepare_cached("INSERT INTO borrower_attribute_types 
218
                                        (description, repeatable, unique_id, opac_display, password_allowed,
214
                                        (description, repeatable, unique_id, opac_display,
219
                                         staff_searchable, authorised_value_category, display_checkout, category_code, class, code)
215
                                         staff_searchable, authorised_value_category, display_checkout, category_code, class, code)
220
                                        VALUES (?, ?, ?, ?, ?,
216
                                        VALUES (?, ?, ?, ?,
221
                                                ?, ?, ?, ?, ?, ?)");
217
                                                ?, ?, ?, ?, ?, ?)");
222
    }
218
    }
223
    $sth->bind_param(1, $self->{'description'});
219
    $sth->execute(
224
    $sth->bind_param(2, $self->{'repeatable'});
220
        $self->{description},
225
    $sth->bind_param(3, $self->{'unique_id'});
221
        $self->{repeatable},
226
    $sth->bind_param(4, $self->{'opac_display'});
222
        $self->{unique_id},
227
    $sth->bind_param(5, $self->{'password_allowed'});
223
        $self->{opac_display},
228
    $sth->bind_param(6, $self->{'staff_searchable'});
224
        $self->{staff_searchable},
229
    $sth->bind_param(7, $self->{'authorised_value_category'});
225
        $self->{authorised_value_category},
230
    $sth->bind_param(8, $self->{'display_checkout'});
226
        $self->{display_checkout},
231
    $sth->bind_param(9, $self->{'category_code'} || undef);
227
        $self->{category_code} || undef,
232
    $sth->bind_param(10, $self->{'class'});
228
        $self->{class},
233
    $sth->bind_param(11, $self->{'code'});
229
        $self->{code},
234
    $sth->execute;
230
    );
235
231
236
    if ( defined $$self{branches} ) {
232
    if ( defined $$self{branches} ) {
237
        $sth = $dbh->prepare("DELETE FROM borrower_attribute_types_branches WHERE bat_code = ?");
233
        $sth = $dbh->prepare("DELETE FROM borrower_attribute_types_branches WHERE bat_code = ?");
Lines 323-328 sub unique_id { Link Here
323
    my $self = shift;
319
    my $self = shift;
324
    @_ ? $self->{'unique_id'} = ((shift) ? 1 : 0) : $self->{'unique_id'};
320
    @_ ? $self->{'unique_id'} = ((shift) ? 1 : 0) : $self->{'unique_id'};
325
}
321
}
322
326
=head2 opac_display
323
=head2 opac_display
327
324
328
  my $opac_display = $attr_type->opac_display();
325
  my $opac_display = $attr_type->opac_display();
Lines 337-356 sub opac_display { Link Here
337
    my $self = shift;
334
    my $self = shift;
338
    @_ ? $self->{'opac_display'} = ((shift) ? 1 : 0) : $self->{'opac_display'};
335
    @_ ? $self->{'opac_display'} = ((shift) ? 1 : 0) : $self->{'opac_display'};
339
}
336
}
340
=head2 password_allowed
341
342
  my $password_allowed = $attr_type->password_allowed();
343
  $attr_type->password_allowed($password_allowed);
344
345
Accessor.  The C<$password_allowed> argument
346
is interpreted as a Perl boolean.
347
337
348
=cut
349
350
sub password_allowed {
351
    my $self = shift;
352
    @_ ? $self->{'password_allowed'} = ((shift) ? 1 : 0) : $self->{'password_allowed'};
353
}
354
=head2 staff_searchable
338
=head2 staff_searchable
355
339
356
  my $staff_searchable = $attr_type->staff_searchable();
340
  my $staff_searchable = $attr_type->staff_searchable();
(-)a/C4/Members/Attributes.pm (-12 / +5 lines)
Lines 59-65 code (attribute type code) Link Here
59
description (attribute type description)
59
description (attribute type description)
60
value (attribute value)
60
value (attribute value)
61
value_description (attribute value description (if associated with an authorised value))
61
value_description (attribute value description (if associated with an authorised value))
62
password (password, if any, associated with attribute
63
62
64
If the C<$opac_only> parameter is present and has a true value, only the attributes
63
If the C<$opac_only> parameter is present and has a true value, only the attributes
65
marked for OPAC display are returned.
64
marked for OPAC display are returned.
Lines 71-77 sub GetBorrowerAttributes { Link Here
71
    my $opac_only = @_ ? shift : 0;
70
    my $opac_only = @_ ? shift : 0;
72
71
73
    my $dbh = C4::Context->dbh();
72
    my $dbh = C4::Context->dbh();
74
    my $query = "SELECT code, description, attribute, lib, password, display_checkout, category_code, class
73
    my $query = "SELECT code, description, attribute, lib, display_checkout, category_code, class
75
                 FROM borrower_attributes
74
                 FROM borrower_attributes
76
                 JOIN borrower_attribute_types USING (code)
75
                 JOIN borrower_attribute_types USING (code)
77
                 LEFT JOIN authorised_values ON (category = authorised_value_category AND attribute = authorised_value)
76
                 LEFT JOIN authorised_values ON (category = authorised_value_category AND attribute = authorised_value)
Lines 87-93 sub GetBorrowerAttributes { Link Here
87
            description       => $row->{'description'},
86
            description       => $row->{'description'},
88
            value             => $row->{'attribute'},
87
            value             => $row->{'attribute'},
89
            value_description => $row->{'lib'},
88
            value_description => $row->{'lib'},
90
            password          => $row->{'password'},
91
            display_checkout  => $row->{'display_checkout'},
89
            display_checkout  => $row->{'display_checkout'},
92
            category_code     => $row->{'category_code'},
90
            category_code     => $row->{'category_code'},
93
            class             => $row->{'class'},
91
            class             => $row->{'class'},
Lines 205-211 sub CheckUniqueness { Link Here
205
203
206
=head2 SetBorrowerAttributes 
204
=head2 SetBorrowerAttributes 
207
205
208
  SetBorrowerAttributes($borrowernumber, [ { code => 'CODE', value => 'value', password => 'password' }, ... ] );
206
  SetBorrowerAttributes($borrowernumber, [ { code => 'CODE', value => 'value' }, ... ] );
209
207
210
Set patron attributes for the patron identified by C<$borrowernumber>,
208
Set patron attributes for the patron identified by C<$borrowernumber>,
211
replacing any that existed previously.
209
replacing any that existed previously.
Lines 221-231 sub SetBorrowerAttributes { Link Here
221
219
222
    DeleteBorrowerAttributes( $borrowernumber, $no_branch_limit );
220
    DeleteBorrowerAttributes( $borrowernumber, $no_branch_limit );
223
221
224
    my $sth = $dbh->prepare("INSERT INTO borrower_attributes (borrowernumber, code, attribute, password)
222
    my $sth = $dbh->prepare("INSERT INTO borrower_attributes (borrowernumber, code, attribute)
225
                             VALUES (?, ?, ?, ?)");
223
                             VALUES (?, ?, ?)");
226
    foreach my $attr (@$attr_list) {
224
    foreach my $attr (@$attr_list) {
227
        $attr->{password} = undef unless exists $attr->{password};
225
        $sth->execute($borrowernumber, $attr->{code}, $attr->{value});
228
        $sth->execute($borrowernumber, $attr->{code}, $attr->{value}, $attr->{password});
229
        if ($sth->err) {
226
        if ($sth->err) {
230
            warn sprintf('Database returned the following error: %s', $sth->errstr);
227
            warn sprintf('Database returned the following error: %s', $sth->errstr);
231
            return; # bail immediately on errors
228
            return; # bail immediately on errors
Lines 301-310 sub UpdateBorrowerAttribute { Link Here
301
    my $dbh = C4::Context->dbh;
298
    my $dbh = C4::Context->dbh;
302
    my $query = "INSERT INTO borrower_attributes SET attribute = ?, code = ?, borrowernumber = ?";
299
    my $query = "INSERT INTO borrower_attributes SET attribute = ?, code = ?, borrowernumber = ?";
303
    my @params = ( $attribute->{attribute}, $attribute->{code}, $borrowernumber );
300
    my @params = ( $attribute->{attribute}, $attribute->{code}, $borrowernumber );
304
    if ( defined $attribute->{password} ) {
305
        $query .= ", password = ?";
306
        push @params, $attribute->{password};
307
    }
308
    my $sth = $dbh->prepare( $query );
301
    my $sth = $dbh->prepare( $query );
309
302
310
    $sth->execute( @params );
303
    $sth->execute( @params );
(-)a/admin/patron-attr-types.pl (-8 lines)
Lines 113-121 sub error_add_attribute_type_form { Link Here
113
    if ($input->param('unique_id')) {
113
    if ($input->param('unique_id')) {
114
        $template->param(unique_id_checked => 1);
114
        $template->param(unique_id_checked => 1);
115
    }
115
    }
116
    if ($input->param('password_allowed')) {
117
        $template->param(password_allowed_checked => 1);
118
    }
119
    if ($input->param('opac_display')) {
116
    if ($input->param('opac_display')) {
120
        $template->param(opac_display_checked => 1);
117
        $template->param(opac_display_checked => 1);
121
    }
118
    }
Lines 167-174 sub add_update_attribute_type { Link Here
167
    $attr_type->staff_searchable($staff_searchable);
164
    $attr_type->staff_searchable($staff_searchable);
168
    my $authorised_value_category = $input->param('authorised_value_category');
165
    my $authorised_value_category = $input->param('authorised_value_category');
169
    $attr_type->authorised_value_category($authorised_value_category);
166
    $attr_type->authorised_value_category($authorised_value_category);
170
    my $password_allowed = $input->param('password_allowed');
171
    $attr_type->password_allowed($password_allowed);
172
    my $display_checkout = $input->param('display_checkout');
167
    my $display_checkout = $input->param('display_checkout');
173
    $attr_type->display_checkout($display_checkout);
168
    $attr_type->display_checkout($display_checkout);
174
    $attr_type->category_code($input->param('category_code'));
169
    $attr_type->category_code($input->param('category_code'));
Lines 242-250 sub edit_attribute_type_form { Link Here
242
        $template->param(unique_id_checked => 1);
237
        $template->param(unique_id_checked => 1);
243
    }
238
    }
244
    $template->param(unique_id_disabled => 1);
239
    $template->param(unique_id_disabled => 1);
245
    if ($attr_type->password_allowed()) {
246
        $template->param(password_allowed_checked => 1);
247
    }
248
    if ($attr_type->opac_display()) {
240
    if ($attr_type->opac_display()) {
249
        $template->param(opac_display_checked => 1);
241
        $template->param(opac_display_checked => 1);
250
    }
242
    }
(-)a/installer/data/mysql/atomicupdate/bug_12267.perl (+17 lines)
Line 0 Link Here
1
my $dbh = C4::Context->dbh;
2
my ( $column_has_been_used ) = $dbh->selectrow_array(q|
3
    SELECT COUNT(*)
4
    FROM borrower_attributes
5
    WHERE password IS NOT NULL
6
|);
7
8
if ( $column_has_been_used ) {
9
    warn q|WARNING: The columns borrower_attribute_types.password_allowed and borrower_attributes.column have been removed from the Koha codebase. There were not used. However your installation has at least 1 borrower_attributes.password defined. In order not to alter your data, the columns have been kept, please remove them manually if you do not use them this feature.|;
10
} else {
11
    $dbh->do(q|
12
        ALTER TABLE borrower_attribute_types DROP column password_allowed
13
    |);
14
    $dbh->do(q|
15
        ALTER TABLE borrower_attributes DROP column password;
16
    |);
17
}
(-)a/installer/data/mysql/kohastructure.sql (-2 lines)
Lines 292-298 CREATE TABLE `borrower_attribute_types` ( -- definitions for custom patron field Link Here
292
  `repeatable` tinyint(1) NOT NULL default 0, -- defines whether one patron/borrower can have multiple values for this custom field  (1 for yes, 0 for no)
292
  `repeatable` tinyint(1) NOT NULL default 0, -- defines whether one patron/borrower can have multiple values for this custom field  (1 for yes, 0 for no)
293
  `unique_id` tinyint(1) NOT NULL default 0, -- defines if this value needs to be unique (1 for yes, 0 for no)
293
  `unique_id` tinyint(1) NOT NULL default 0, -- defines if this value needs to be unique (1 for yes, 0 for no)
294
  `opac_display` tinyint(1) NOT NULL default 0, -- defines if this field is visible to patrons on their account in the OPAC (1 for yes, 0 for no)
294
  `opac_display` tinyint(1) NOT NULL default 0, -- defines if this field is visible to patrons on their account in the OPAC (1 for yes, 0 for no)
295
  `password_allowed` tinyint(1) NOT NULL default 0, -- defines if it is possible to associate a password with this custom field (1 for yes, 0 for no)
296
  `staff_searchable` tinyint(1) NOT NULL default 0, -- defines if this field is searchable via the patron search in the staff client (1 for yes, 0 for no)
295
  `staff_searchable` tinyint(1) NOT NULL default 0, -- defines if this field is searchable via the patron search in the staff client (1 for yes, 0 for no)
297
  `authorised_value_category` varchar(32) default NULL, -- foreign key from authorised_values that links this custom field to an authorized value category
296
  `authorised_value_category` varchar(32) default NULL, -- foreign key from authorised_values that links this custom field to an authorized value category
298
  `display_checkout` tinyint(1) NOT NULL default 0,-- defines if this field displays in checkout screens
297
  `display_checkout` tinyint(1) NOT NULL default 0,-- defines if this field displays in checkout screens
Lines 311-317 CREATE TABLE `borrower_attributes` ( -- values of custom patron fields known as Link Here
311
  `borrowernumber` int(11) NOT NULL, -- foreign key from the borrowers table, defines which patron/borrower has this attribute
310
  `borrowernumber` int(11) NOT NULL, -- foreign key from the borrowers table, defines which patron/borrower has this attribute
312
  `code` varchar(10) NOT NULL, -- foreign key from the borrower_attribute_types table, defines which custom field this value was entered for
311
  `code` varchar(10) NOT NULL, -- foreign key from the borrower_attribute_types table, defines which custom field this value was entered for
313
  `attribute` varchar(255) default NULL, -- custom patron field value
312
  `attribute` varchar(255) default NULL, -- custom patron field value
314
  `password` varchar(64) default NULL, -- password associated with this field
315
  KEY `borrowernumber` (`borrowernumber`),
313
  KEY `borrowernumber` (`borrowernumber`),
316
  KEY `code_attribute` (`code`, `attribute`),
314
  KEY `code_attribute` (`code`, `attribute`),
317
  CONSTRAINT `borrower_attributes_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
315
  CONSTRAINT `borrower_attributes_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tt (-8 lines)
Lines 139-152 function CheckAttributeTypeForm(f) { Link Here
139
            <span>If checked, attribute will be a unique identifier &mdash; if a value is given to a patron record, the same value
139
            <span>If checked, attribute will be a unique identifier &mdash; if a value is given to a patron record, the same value
140
                  cannot be given to a different record.  This setting cannot be changed after an attribute is defined.</span>
140
                  cannot be given to a different record.  This setting cannot be changed after an attribute is defined.</span>
141
       </li>
141
       </li>
142
       <li><label for="password_allowed">Allow password: </label>
143
          [% IF ( password_allowed_checked ) %]
144
            <input type="checkbox" id="password_allowed" name="password_allowed" checked="checked" />
145
          [% ELSE %]
146
            <input type="checkbox" id="password_allowed" name="password_allowed" />
147
          [% END %]
148
            <span>Check to make it possible to associate a password with this attribute.</span>
149
       </li>
150
       <li><label for="opac_display">Display in OPAC: </label>
142
       <li><label for="opac_display">Display in OPAC: </label>
151
          [% IF ( opac_display_checked ) %]
143
          [% IF ( opac_display_checked ) %]
152
            <input type="checkbox" id="opac_display" name="opac_display" checked="checked" />
144
            <input type="checkbox" id="opac_display" name="opac_display" checked="checked" />
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt (-4 lines)
Lines 1062-1071 function select_user(borrowernumber, borrower) { Link Here
1062
                        [% ELSE %]
1062
                        [% ELSE %]
1063
                            <textarea rows="2" cols="30" id="[% patron_attribute.form_id %]" name="[% patron_attribute.form_id %]">[% patron_attribute.value %]</textarea>
1063
                            <textarea rows="2" cols="30" id="[% patron_attribute.form_id %]" name="[% patron_attribute.form_id %]">[% patron_attribute.value %]</textarea>
1064
                        [% END %]
1064
                        [% END %]
1065
                        [% IF ( patron_attribute.password_allowed ) %]
1066
                            (<label class="yesno" for="[% patron_attribute.form_id %]_password">Password:</label> <input type="password" maxlength="64" value="[% patron_attribute.password %]"
1067
                                   id="[% patron_attribute.form_id %]_password" name="[% patron_attribute.form_id %]_password" />)
1068
                        [% END %]
1069
                        <a href="#" onclick="clear_entry(this); return false;"><i class="fa fa-fw fa-trash"></i> Clear</a>
1065
                        <a href="#" onclick="clear_entry(this); return false;"><i class="fa fa-fw fa-trash"></i> Clear</a>
1070
                        [% IF ( patron_attribute.repeatable ) %]
1066
                        [% IF ( patron_attribute.repeatable ) %]
1071
                        <a href="#" onclick="clone_entry(this); return false;"><i class="fa fa-fw fa-plus"></i> New</a>
1067
                        <a href="#" onclick="clone_entry(this); return false;"><i class="fa fa-fw fa-plus"></i> New</a>
(-)a/members/memberentry.pl (-5 / +1 lines)
Lines 718-728 sub parse_extended_patron_attributes { Link Here
718
    foreach my $key (@patron_attr) {
718
    foreach my $key (@patron_attr) {
719
        my $value = $input->param($key);
719
        my $value = $input->param($key);
720
        next unless defined($value) and $value ne '';
720
        next unless defined($value) and $value ne '';
721
        my $password = $input->param("${key}_password");
722
        my $code     = $input->param("${key}_code");
721
        my $code     = $input->param("${key}_code");
723
        next if exists $dups{$code}->{$value};
722
        next if exists $dups{$code}->{$value};
724
        $dups{$code}->{$value} = 1;
723
        $dups{$code}->{$value} = 1;
725
        push @attr, { code => $code, value => $value, password => $password };
724
        push @attr, { code => $code, value => $value };
726
    }
725
    }
727
    return \@attr;
726
    return \@attr;
728
}
727
}
Lines 756-771 sub patron_attributes_form { Link Here
756
            code              => $attr_type->code(),
755
            code              => $attr_type->code(),
757
            description       => $attr_type->description(),
756
            description       => $attr_type->description(),
758
            repeatable        => $attr_type->repeatable(),
757
            repeatable        => $attr_type->repeatable(),
759
            password_allowed  => $attr_type->password_allowed(),
760
            category          => $attr_type->authorised_value_category(),
758
            category          => $attr_type->authorised_value_category(),
761
            category_code     => $attr_type->category_code(),
759
            category_code     => $attr_type->category_code(),
762
            password          => '',
763
        };
760
        };
764
        if (exists $attr_hash{$attr_type->code()}) {
761
        if (exists $attr_hash{$attr_type->code()}) {
765
            foreach my $attr (@{ $attr_hash{$attr_type->code()} }) {
762
            foreach my $attr (@{ $attr_hash{$attr_type->code()} }) {
766
                my $newentry = { %$entry };
763
                my $newentry = { %$entry };
767
                $newentry->{value} = $attr->{value};
764
                $newentry->{value} = $attr->{value};
768
                $newentry->{password} = $attr->{password};
769
                $newentry->{use_dropdown} = 0;
765
                $newentry->{use_dropdown} = 0;
770
                if ($attr_type->authorised_value_category()) {
766
                if ($attr_type->authorised_value_category()) {
771
                    $newentry->{use_dropdown} = 1;
767
                    $newentry->{use_dropdown} = 1;
(-)a/t/Members_AttributeTypes.t (-3 / +3 lines)
Lines 48-60 fixtures_ok [ Link Here
48
    [
48
    [
49
        'code',             'description',
49
        'code',             'description',
50
        'repeatable',       'unique_id',
50
        'repeatable',       'unique_id',
51
        'opac_display',     'password_allowed',
51
        'opac_display',
52
        'staff_searchable', 'authorised_value_category',
52
        'staff_searchable', 'authorised_value_category',
53
        'display_checkout', 'category_code',
53
        'display_checkout', 'category_code',
54
        'class'
54
        'class'
55
    ],
55
    ],
56
    [ 'one', 'ISBN', '1', '1', '1', '1', '1', 'red',  '1', 'orange', 'green' ],
56
    [ 'one', 'ISBN', '1', '1', '1', '1', 'red',  '1', 'orange', 'green' ],
57
    [ 'two', 'ISSN', '0', '0', '0', '0', '0', 'blue', '0', 'yellow', 'silver' ]
57
    [ 'two', 'ISSN', '0', '0', '0', '0', 'blue', '0', 'yellow', 'silver' ]
58
58
59
    ],
59
    ],
60
], 'add fixtures';
60
], 'add fixtures';
(-)a/t/Members_Attributes.t (-7 lines)
Lines 17-23 INIT { Link Here
17
                       'opac_display' => '1',
17
                       'opac_display' => '1',
18
                       'staff_searchable' => '1',
18
                       'staff_searchable' => '1',
19
                       'description' => 'Grade level',
19
                       'description' => 'Grade level',
20
                       'password_allowed' => '0',
21
                       'authorised_value_category' => '',
20
                       'authorised_value_category' => '',
22
                       'repeatable' => '0',
21
                       'repeatable' => '0',
23
                       'code' => 'grade',
22
                       'code' => 'grade',
Lines 27-33 INIT { Link Here
27
                           'opac_display' => '0',
26
                           'opac_display' => '0',
28
                           'staff_searchable' => '1',
27
                           'staff_searchable' => '1',
29
                           'description' => 'Deans List (annual)',
28
                           'description' => 'Deans List (annual)',
30
                           'password_allowed' => '0',
31
                           'authorised_value_category' => '',
29
                           'authorised_value_category' => '',
32
                           'repeatable' => '1',
30
                           'repeatable' => '1',
33
                           'code' => 'deanslist',
31
                           'code' => 'deanslist',
Lines 37-43 INIT { Link Here
37
                           'opac_display' => '0',
35
                           'opac_display' => '0',
38
                           'staff_searchable' => '0',
36
                           'staff_searchable' => '0',
39
                           'description' => 'Some Ext. Attribute',
37
                           'description' => 'Some Ext. Attribute',
40
                           'password_allowed' => '0',
41
                           'authorised_value_category' => '',
38
                           'authorised_value_category' => '',
42
                           'repeatable' => '0',
39
                           'repeatable' => '0',
43
                           'code' => 'somedata',
40
                           'code' => 'somedata',
Lines 47-53 INIT { Link Here
47
                           'opac_display' => '0',
44
                           'opac_display' => '0',
48
                           'staff_searchable' => '0',
45
                           'staff_searchable' => '0',
49
                           'description' => 'Another Ext. Attribute',
46
                           'description' => 'Another Ext. Attribute',
50
                           'password_allowed' => '0',
51
                           'authorised_value_category' => '',
47
                           'authorised_value_category' => '',
52
                           'repeatable' => '0',
48
                           'repeatable' => '0',
53
                           'code' => 'extradata',
49
                           'code' => 'extradata',
Lines 57-63 INIT { Link Here
57
                           'opac_display' => '1',
53
                           'opac_display' => '1',
58
                           'staff_searchable' => '1',
54
                           'staff_searchable' => '1',
59
                           'description' => 'School ID Number',
55
                           'description' => 'School ID Number',
60
                           'password_allowed' => '0',
61
                           'authorised_value_category' => '',
56
                           'authorised_value_category' => '',
62
                           'repeatable' => '0',
57
                           'repeatable' => '0',
63
                           'code' => 'school_id',
58
                           'code' => 'school_id',
Lines 67-73 INIT { Link Here
67
                          'opac_display' => '1',
62
                          'opac_display' => '1',
68
                          'staff_searchable' => '1',
63
                          'staff_searchable' => '1',
69
                          'description' => 'Homeroom',
64
                          'description' => 'Homeroom',
70
                          'password_allowed' => '0',
71
                          'authorised_value_category' => '',
65
                          'authorised_value_category' => '',
72
                          'repeatable' => '0',
66
                          'repeatable' => '0',
73
                          'code' => 'homeroom',
67
                          'code' => 'homeroom',
74
- 

Return to bug 12267