Bugzilla – Attachment 169050 Details for
Bug 30657
Make patron attributes available via Template Toolkit in notices
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 30657: Dynamically add attribute accessors
Bug-30657-Dynamically-add-attribute-accessors.patch (text/plain), 3.42 KB, created by
Martin Renvoize (ashimema)
on 2024-07-16 15:49:55 UTC
(
hide
)
Description:
Bug 30657: Dynamically add attribute accessors
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2024-07-16 15:49:55 UTC
Size:
3.42 KB
patch
obsolete
>From 7fa9b24569066c34915ed94e1bfc5e0c61c2516c Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Tue, 16 Jul 2024 14:02:45 +0100 >Subject: [PATCH] Bug 30657: Dynamically add attribute accessors > >This patch adds dynamic creation of accessors for extended patron >attributes based on attribute code. > >It should work for Koha::Patron objects resulting from calls to >Koha::Patron->new(), Koha::Patrons->search, Koha::Patrons->find and any >relations that return a Koha::Patron object. > >We return a single value for non-repeatable attributes and an arrayref >of values for repeatable ones. > >This should make it simple to access such attributes in Koha Notice >Templates. > >Simply use the 'code' in your variables.. example: > >You've added a 'smartcard' extended attribute to your system, you would >refer to it in your notice as [% patron.smartcard | html %] >--- > Koha/Patron.pm | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 56 insertions(+), 2 deletions(-) > >diff --git a/Koha/Patron.pm b/Koha/Patron.pm >index 98dd05a4bbf..ade57ce9d29 100644 >--- a/Koha/Patron.pm >+++ b/Koha/Patron.pm >@@ -108,14 +108,68 @@ Koha::Patron - Koha Patron Object class > > =head2 Class Methods > >-=head3 new >+=head3 new, _new_from_dbic, _add_dynamic_methods >+ >+These methods are used internally. They dynamically add accessors to Koha::Patron objects resulting from >+calls to ->new, ->find and ->search for any defined extended patron attributes. Said accessors will be named >+after the 'code' of the attribute type and will return either the single value or an array of values for >+attribute types that are repeatable. > > =cut > > sub new { > my ( $class, $params ) = @_; > >- return $class->SUPER::new($params); >+ my $self = $class->next::method($params); >+ >+ $self->_add_dynamic_methods; >+ >+ return $self; >+} >+ >+sub _new_from_dbic { >+ my $self = shift; >+ my ( $source, $data, $prefetch ) = @_; >+ >+ my $obj = $self->next::method(@_); >+ >+ $obj->_add_dynamic_methods; >+ >+ return $obj; >+} >+ >+sub _add_dynamic_methods { >+ my $self = shift; >+ >+ # Fetch attributes dynamically >+ my $attribute_types = Koha::Patron::Attribute::Types->search(); >+ while ( my $attr = $attribute_types->next ) { >+ my $code = $attr->code; >+ >+ # Dynamically create accessor method >+ no strict 'refs'; >+ if ( !defined *{ ref($self) . "::$code" }{CODE} ) { >+ if ( $attr->repeatable ) { >+ *{ ref($self) . "::$code" } = sub { >+ my ($self) = @_; >+ return $self->_result->get_column($code) if $self->_result->has_column($code); >+ my $attributes = $self->_result->borrower_attributes->search( { code => $code } ); >+ my $values = []; >+ while ( my $attribute = $attributes->next ) { >+ push @$values, $attribute->attribute; >+ } >+ return $values; >+ }; >+ } else { >+ *{ ref($self) . "::$code" } = sub { >+ my ($self) = @_; >+ return $self->_result->get_column($code) if $self->_result->has_column($code); >+ my $attribute = $self->_result->borrower_attributes->search( { code => $code } )->first; >+ return $attribute ? $attribute->attribute : undef; >+ }; >+ } >+ } >+ } > } > > =head3 fixup_cardnumber >-- >2.45.2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 30657
:
169049
|
169050
|
169056
|
169057
|
173817
|
173818
|
173819
|
173901
|
173902
|
173910
|
173911
|
173912
|
173913
|
173914