Browse Source

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 <alex.arnaud@biblibre.com>

Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de>
Signed-off-by: Agustin Moyano <agustinmoyano@theke.io>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
19.05.x
Alex Arnaud 4 years ago
committed by Nick Clemens
parent
commit
7394028b27
  1. 10
      Koha/Plugins.pm
  2. 32
      Koha/Plugins/Base.pm
  3. 2
      koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
  4. 14
      koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt
  5. 42
      plugins/plugins-enable.pl
  6. 1
      plugins/plugins-home.pl

10
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;

32
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__

2
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;

14
koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt

@ -77,7 +77,14 @@
[% FOREACH plugin IN plugins %]
<tr>
<td><strong>[% plugin.metadata.name | html %]</strong></td>
<td>
[% IF ( plugin.enabled ) %]
<span class="label label-primary">ENABLED</span>
[% ELSE %]
<span class="label label-default">DISABLED</span>
[% END %]
<strong>[% plugin.metadata.name | html %]</strong>
</td>
<td>
[% plugin.metadata.description | html %]
@ -124,6 +131,11 @@
[% END %]
[% IF ( CAN_user_plugins_manage ) %]
<li><a class="uninstall_plugin" data-plugin-name="[% plugin.metadata.name | html %]" href="/cgi-bin/koha/plugins/plugins-uninstall.pl?class=[% plugin.class | html %]"><i class="fa fa-trash"></i> Uninstall</a></li>
[% IF ( plugin.enabled ) %]
<li><a class="enable_plugin" data-plugin-name="[% plugin.metadata.name | html %]" href="/cgi-bin/koha/plugins/plugins-enable.pl?class=[% plugin.class | html %]&method=disable"><i class="fa fa-pause"></i> Disable</a></li>
[% ELSE %]
<li><a class="enable_plugin" data-plugin-name="[% plugin.metadata.name | html %]" href="/cgi-bin/koha/plugins/plugins-enable.pl?class=[% plugin.class | html %]&method=enable"><i class="fa fa-play"></i> Enable</a></li>
[% END %]
[% END %]
</ul>
</div>

42
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 <http://www.gnu.org/licenses>.
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");

1
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, );

Loading…
Cancel
Save