Bugzilla – Attachment 95013 Details for
Bug 23050
Add hook to add a tab in intranet biblio details page
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 23050: (QA follow-up) Add Koha::Plugins::Tab class
Bug-23050-QA-follow-up-Add-KohaPluginsTab-class.patch (text/plain), 6.78 KB, created by
Tomás Cohen Arazi (tcohen)
on 2019-11-04 15:03:25 UTC
(
hide
)
Description:
Bug 23050: (QA follow-up) Add Koha::Plugins::Tab class
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi (tcohen)
Created:
2019-11-04 15:03:25 UTC
Size:
6.78 KB
patch
obsolete
>From 3d09c4051cc2d8b50200fc150d0209918b25d8e9 Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@theke.io> >Date: Mon, 4 Nov 2019 11:52:33 -0300 >Subject: [PATCH] Bug 23050: (QA follow-up) Add Koha::Plugins::Tab class > >This minimal class encapsulates the tabs to be passed around to the >templates, so error checking on missing bits is done in a single place. > >It throws exceptions on errors > >Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> >--- > Koha/Plugins/Tab.pm | 72 +++++++++++++++++++++++++++++++++++++++ > catalogue/detail.pl | 18 +++++++--- > t/Koha/Plugins/Tab.t | 62 +++++++++++++++++++++++++++++++++ > t/lib/Koha/Plugin/Test.pm | 24 ++++++++++++- > 4 files changed, 170 insertions(+), 6 deletions(-) > create mode 100644 Koha/Plugins/Tab.pm > create mode 100644 t/Koha/Plugins/Tab.t > >diff --git a/Koha/Plugins/Tab.pm b/Koha/Plugins/Tab.pm >new file mode 100644 >index 0000000000..ec3c2eefa1 >--- /dev/null >+++ b/Koha/Plugins/Tab.pm >@@ -0,0 +1,72 @@ >+package Koha::Plugins::Tab; >+ >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 3 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along >+# with Koha; if not, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+ >+use Modern::Perl; >+ >+use Koha::Exceptions; >+ >+use base qw(Class::Accessor); >+ >+__PACKAGE__->mk_accessors(qw( title content id )); >+ >+=head1 NAME >+ >+Koha::Plugins::Tab - Simple base to abstract tabs to be generated by plugins >+ >+=head1 DESCRIPTION >+ >+Object-oriented class that represents tabs generated by plugins. Error handling on >+mandatory fields is handled here. >+ >+=head1 API >+ >+=head2 Class methods >+ >+=head3 new >+ >+ my $tab = Koha::Plugins::Tab->new( >+ { >+ title => 'A title', >+ content => 'Some content' >+ } >+ ); >+ >+Returns a Koha::Plugins::Tab object representing a plugin-generated tab. >+ >+=cut >+ >+sub new { >+ >+ my ( $class, $params ) = @_; >+ >+ Koha::Exceptions::MissingParameter->throw( "Mandatory parameter 'title' missing" ) >+ unless defined $params->{ title }; >+ >+ Koha::Exceptions::MissingParameter->throw( "Mandatory parameter 'content' missing") >+ unless defined $params->{content}; >+ >+ my $self = { >+ title => $params->{title}, >+ content => $params->{content} >+ }; >+ >+ bless $self, $class; >+ return $self; >+} >+ >+1; >diff --git a/catalogue/detail.pl b/catalogue/detail.pl >index d176f1088e..ee0cb8240d 100755 >--- a/catalogue/detail.pl >+++ b/catalogue/detail.pl >@@ -75,12 +75,20 @@ if ( C4::Context->preference('UseKohaPlugins') && > }); > my @tabs; > foreach my $tab_plugin (@tab_plugins) { >- my @biblio_tabs = $tab_plugin->intranet_catalog_biblio_tab(); >- foreach my $tab (@biblio_tabs) { >- $tab->{id} = 'tab-' . $tab->{title}; >- $tab->{id} =~ s/[^0-9A-Za-z]+/-/g; >- push @tabs, $tab, >+ my @biblio_tabs; >+ >+ try { >+ @biblio_tabs = $tab_plugin->intranet_catalog_biblio_tab(); >+ foreach my $tab (@biblio_tabs) { >+ my $tab_id = 'tab-' . $tab->title; >+ $tab_id =~ s/[^0-9A-Za-z]+/-/g; >+ $tab->id( $tab_id ); >+ push @tabs, $tab, >+ } > } >+ catch { >+ warn "Error calling 'intranet_catalog_biblio_tab' on the " . $tab_plugin->{class} . "plugin ($_)"; >+ }; > } > > $template->param( >diff --git a/t/Koha/Plugins/Tab.t b/t/Koha/Plugins/Tab.t >new file mode 100644 >index 0000000000..94b7097f23 >--- /dev/null >+++ b/t/Koha/Plugins/Tab.t >@@ -0,0 +1,62 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use Test::More tests => 1; >+use Test::Exception; >+ >+use Koha::Plugins::Tab; >+ >+subtest 'new() tests' => sub { >+ plan tests => 7; >+ >+ throws_ok { Koha::Plugins::Tab->new( { title => 'A title' } ); } >+ 'Koha::Exceptions::MissingParameter', >+ 'Exception is thrown on missing content'; >+ >+ is( >+ "$@", >+ "Mandatory parameter 'content' missing", >+ 'Exception message is correct' >+ ); >+ >+ throws_ok { Koha::Plugins::Tab->new( { content => 'Some content' } ); } >+ 'Koha::Exceptions::MissingParameter', >+ 'Exception is thrown on missing title'; >+ >+ is( >+ "$@", >+ "Mandatory parameter 'title' missing", >+ 'Exception message is correct' >+ ); >+ >+ my $tab = Koha::Plugins::Tab->new( >+ { >+ title => 'A title', >+ content => 'Some content' >+ } >+ ); >+ >+ is( $tab->title, 'A title', 'title accessor is correct' ); >+ is( $tab->content, 'Some content', 'content accessor is correct' ); >+ >+ my $id = 'calculated-id'; >+ $tab->id($id); >+ >+ is( $tab->id, $id, 'The id can be calculated and set on runtime' ); >+}; >diff --git a/t/lib/Koha/Plugin/Test.pm b/t/lib/Koha/Plugin/Test.pm >index 7a963d9565..3c2896b726 100644 >--- a/t/lib/Koha/Plugin/Test.pm >+++ b/t/lib/Koha/Plugin/Test.pm >@@ -4,6 +4,8 @@ package Koha::Plugin::Test; > use Modern::Perl; > > use Koha::Exceptions::Exception; >+use Koha::Plugins::Tab; >+ > use Mojo::JSON qw(decode_json); > > ## Required for all plugins >@@ -139,7 +141,6 @@ sub after_biblio_action { > } > } > >- > sub after_item_action { > my ( $self, $params ) = @_; > my $action = $params->{action} // ''; >@@ -228,6 +229,27 @@ sub check_password { > } > } > >+sub intranet_catalog_biblio_tab { >+ my @tabs; >+ push @tabs, >+ Koha::Plugins::Tab->new( >+ { >+ title => 'Tab 1', >+ content => 'This is content for tab 1' >+ } >+ ); >+ >+ push @tabs, >+ Koha::Plugins::Tab->new( >+ { >+ title => 'Tab 2', >+ content => 'This is content for tab 2' >+ } >+ ); >+ >+ return @tabs; >+} >+ > sub _private_sub { > return ""; > } >-- >2.24.0
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 23050
:
90337
|
90348
|
91523
|
91524
|
91525
|
93222
|
95004
|
95005
|
95006
|
95007
| 95013 |
95406