From b8df96082ec84097aac24e2128e6b8d1a34c463e Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 28 Jul 2016 14:28:43 +0200 Subject: [PATCH] Bug 16965: [Follow-up] Adjust get_object_class MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In many cases it should be possible to derive the Koha::Objects class name from the DBIx result class name in a trivial manner. If not, the DBIx result class should have a class method called koha_objects_class providing that non-trivial name, such as Libraries for Branch. Note: We are only interested in the plural form here (Koha::Objects). Test plan: Run t/db_dependent/Koha/Objects.t Signed-off-by: Marc Véron Signed-off-by: Tomas Cohen Arazi Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall --- Koha/Objects.pm | 26 ++++++++++++++------------ Koha/Schema/Result/Borrower.pm | 4 ++++ Koha/Schema/Result/Branch.pm | 5 +++++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Koha/Objects.pm b/Koha/Objects.pm index 3f2f64b4b4..73d3617088 100644 --- a/Koha/Objects.pm +++ b/Koha/Objects.pm @@ -142,19 +142,22 @@ Searches the specified relationship, optionally specifying a condition and attri sub search_related { my ( $self, $rel_name, @params ) = @_; + return if !$rel_name; if (wantarray) { my @dbic_rows = $self->_resultset()->search_related($rel_name, @params); - my $object_class = get_object_class( $dbic_rows[0]->result_class )->[1]; + return if !@dbic_rows; + my $object_class = _get_objects_class( $dbic_rows[0]->result_class ); eval "require $object_class"; - return $object_class->_wrap(@dbic_rows); + return _wrap( $object_class, @dbic_rows ); } else { my $rs = $self->_resultset()->search_related($rel_name, @params); - my $object_class = get_object_class( $rs->result_class )->[1]; + return if !$rs; + my $object_class = _get_objects_class( $rs->result_class ); eval "require $object_class"; - return $object_class->_new_from_dbic($rs); + return _new_from_dbic( $object_class, $rs ); } } @@ -242,16 +245,15 @@ sub _resultset { } } -sub get_object_class { +sub _get_objects_class { my ( $type ) = @_; return unless $type; - $type =~ s|^Koha::Schema::Result::||; - my $mappings = { - Branch => [ qw( Koha::Library Koha::Libraries ) ], - Borrower => [ qw( Koha::Patron Koha::Patrons ) ], - OldIssue => [ qw( Koha::OldIssue Koha::OldIssues ) ], - }; - return $mappings->{$type}; + + if( $type->can('koha_objects_class') ) { + return $type->koha_objects_class; + } + $type =~ s|Schema::Result::||; + return "${type}s"; } =head3 columns diff --git a/Koha/Schema/Result/Borrower.pm b/Koha/Schema/Result/Borrower.pm index 85127533d8..de70e74022 100644 --- a/Koha/Schema/Result/Borrower.pm +++ b/Koha/Schema/Result/Borrower.pm @@ -1253,4 +1253,8 @@ __PACKAGE__->belongs_to( { borrowernumber => "guarantorid" }, ); +sub koha_objects_class { + 'Koha::Patrons'; +} + 1; diff --git a/Koha/Schema/Result/Branch.pm b/Koha/Schema/Result/Branch.pm index 9d84ab9036..b3e9e426c9 100644 --- a/Koha/Schema/Result/Branch.pm +++ b/Koha/Schema/Result/Branch.pm @@ -533,4 +533,9 @@ __PACKAGE__->many_to_many("categorycodes", "branchrelations", "categorycode"); # You can replace this text with custom code or comments, and it will be preserved on regeneration + +sub koha_objects_class { + 'Koha::Libraries'; +} + 1; -- 2.39.5