From 7394028b27a36b55fd85285a87c8d2f00649e6e9 Mon Sep 17 00:00:00 2001 From: Alex Arnaud Date: Fri, 28 Dec 2018 17:50:14 +0100 Subject: [PATCH] Bug 22053: ability to enable/disable some plugins Test plan: - apply this patch(es), - launch an updatedabase, - go to plugins/plugins-home.pl and deal with enable/disable method - install a plugin like KitchenSink https://github.com/bywatersolutions/koha-plugin-kitchen-sink - once installed, the plugin change the background color of the staff client to orange. - disable the plugin, - background color should be set back to the original one Rebased-on: 2019-03-25 Alex Arnaud Signed-off-by: Claire Gravely Signed-off-by: Agustin Moyano Signed-off-by: Tomas Cohen Arazi Signed-off-by: Nick Clemens --- Koha/Plugins.pm | 10 +++++ Koha/Plugins/Base.pm | 32 +++++++++++++- .../prog/css/src/staff-global.scss | 2 +- .../prog/en/modules/plugins/plugins-home.tt | 14 ++++++- plugins/plugins-enable.pl | 42 +++++++++++++++++++ plugins/plugins-home.pl | 1 + 6 files changed, 98 insertions(+), 3 deletions(-) create mode 100755 plugins/plugins-enable.pl diff --git a/Koha/Plugins.pm b/Koha/Plugins.pm index c0aaa9cb37..be6bf3304d 100644 --- a/Koha/Plugins.pm +++ b/Koha/Plugins.pm @@ -79,6 +79,16 @@ sub GetPlugins { my $plugin = $plugin_class->new({ enable_plugins => $self->{'enable_plugins'} }); + my $plugin_enabled = $plugin->retrieve_data('__ENABLED__'); + $plugin->{enabled} = $plugin_enabled; + + # Want all plugins. Not only enabled ones. + if ( defined($params->{all}) && $params->{all} ) { + $plugin_enabled = 1; + } + + next unless $plugin_enabled; + # Limit results by method or metadata next if $method && !$plugin->can($method); my $plugin_metadata = $plugin->get_metadata; diff --git a/Koha/Plugins/Base.pm b/Koha/Plugins/Base.pm index 2cebe636d9..20d8b79829 100644 --- a/Koha/Plugins/Base.pm +++ b/Koha/Plugins/Base.pm @@ -50,7 +50,7 @@ sub new { ## Run the installation method if it exists and hasn't been run before if ( $self->can('install') && !$self->retrieve_data('__INSTALLED__') ) { if ( $self->install() ) { - $self->store_data( { '__INSTALLED__' => 1 } ); + $self->store_data( { '__INSTALLED__' => 1, '__ENABLED__' => 1 } ); if ( my $version = $plugin_version ) { $self->store_data({ '__INSTALLED_VERSION__' => $version }); } @@ -272,6 +272,36 @@ sub _version_compare { return 0; } +=head2 enable + +Method for enabling plugin + +$plugin->enable + +=cut + +sub enable { + my ($self) = @_; + + $self->store_data( {'__ENABLED__' => 1} ); + + return $self; +} + +=head2 disable + +Method for disabling plugin + +$plugin->disable + +=cut + +sub disable { + my ($self) = @_; + + $self->store_data( {'__ENABLED__' => 0} ); +} + 1; __END__ diff --git a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss b/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss index 1dd3c6ca49..0ac6b70d48 100644 --- a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss +++ b/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss @@ -524,7 +524,7 @@ input { } label, -.label { +.label:not(.label-primary):not(.label-default) { color: #000; display: inline; font-size: inherit; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt index 7d5d89c28a..2c2d556388 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt @@ -77,7 +77,14 @@ [% FOREACH plugin IN plugins %] - [% plugin.metadata.name | html %] + + [% IF ( plugin.enabled ) %] + ENABLED + [% ELSE %] + DISABLED + [% END %] + [% plugin.metadata.name | html %] + [% plugin.metadata.description | html %] @@ -124,6 +131,11 @@ [% END %] [% IF ( CAN_user_plugins_manage ) %]
  • Uninstall
  • + [% IF ( plugin.enabled ) %] +
  • Disable
  • + [% ELSE %] +
  • Enable
  • + [% END %] [% END %] diff --git a/plugins/plugins-enable.pl b/plugins/plugins-enable.pl new file mode 100755 index 0000000000..30d1e3eaad --- /dev/null +++ b/plugins/plugins-enable.pl @@ -0,0 +1,42 @@ +#!/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 . + +use Modern::Perl; + +use CGI qw ( -utf8 ); + +use C4::Context; +use C4::Auth qw(check_cookie_auth); +use Koha::Plugins::Handler; + +die("Koha plugins are disabled!") + unless C4::Context->preference('UseKohaPlugins'); + +my $input = new CGI; + +my ( $auth_status, $sessionID ) = + check_cookie_auth( $input->cookie('CGISESSID'), { plugins => 'manage' } ); + +my $class = $input->param('class'); +my $method = $input->param('method'); + +Koha::Plugins::Handler->run({ + class => $class, + method => $method +}); + +print $input->redirect("/cgi-bin/koha/plugins/plugins-home.pl"); diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index a7d4ce00dc..1136a2c717 100755 --- a/plugins/plugins-home.pl +++ b/plugins/plugins-home.pl @@ -51,6 +51,7 @@ if ($plugins_enabled) { my @plugins = Koha::Plugins->new()->GetPlugins({ method => $method, + all => 1, }); $template->param( plugins => \@plugins, ); -- 2.39.5