View | Details | Raw Unified | Return to bug 7804
Collapse All | Expand All

(-)a/C4/Auth.pm (+2 lines)
Lines 203-208 sub get_template_and_user { Link Here
203
            $template->param( CAN_user_serials          => 1 );
203
            $template->param( CAN_user_serials          => 1 );
204
            $template->param( CAN_user_reports          => 1 );
204
            $template->param( CAN_user_reports          => 1 );
205
            $template->param( CAN_user_staffaccess      => 1 );
205
            $template->param( CAN_user_staffaccess      => 1 );
206
            $template->param( CAN_user_plugins          => 1 );
206
            foreach my $module (keys %$all_perms) {
207
            foreach my $module (keys %$all_perms) {
207
                foreach my $subperm (keys %{ $all_perms->{$module} }) {
208
                foreach my $subperm (keys %{ $all_perms->{$module} }) {
208
                    $template->param( "CAN_user_${module}_${subperm}" => 1 );
209
                    $template->param( "CAN_user_${module}_${subperm}" => 1 );
Lines 364-369 sub get_template_and_user { Link Here
364
            OPACLocalCoverImages        => C4::Context->preference('OPACLocalCoverImages'),
365
            OPACLocalCoverImages        => C4::Context->preference('OPACLocalCoverImages'),
365
            AllowMultipleCovers         => C4::Context->preference('AllowMultipleCovers'),
366
            AllowMultipleCovers         => C4::Context->preference('AllowMultipleCovers'),
366
            EnableBorrowerFiles         => C4::Context->preference('EnableBorrowerFiles'),
367
            EnableBorrowerFiles         => C4::Context->preference('EnableBorrowerFiles'),
368
            UseKohaPlugins              => C4::Context->preference('UseKohaPlugins'),
367
        );
369
        );
368
    }
370
    }
369
    else {
371
    else {
(-)a/C4/Installer/PerlDependencies.pm (+30 lines)
Lines 634-639 our $PERL_DEPS = { Link Here
634
        'required' => '0',
634
        'required' => '0',
635
        'min_ver'  => '0.22',
635
        'min_ver'  => '0.22',
636
    },
636
    },
637
    'File::Temp' => {
638
        'usage'    => 'Plugins',
639
        'required' => '0',
640
        'min_ver'  => '0.22',
641
    },
642
    'File::Copy' => {
643
        'usage'    => 'Plugins',
644
        'required' => '0',
645
        'min_ver'  => '2.08',
646
    },
647
    'Archive::Extract' => {
648
        'usage'    => 'Plugins',
649
        'required' => '0',
650
        'min_ver'  => '0.60',
651
    },
652
    'Archive::Zip' => {
653
        'usage'    => 'Plugins',
654
        'required' => '0',
655
        'min_ver'  => '1.30',
656
    },
657
    'Module::Load::Conditional' => {
658
        'usage'    => 'Plugins',
659
        'required' => '0',
660
        'min_ver'  => '0.38',
661
    },
662
    'Module::Pluggable' => {
663
        'usage'    => 'Plugins',
664
        'required' => '0',
665
        'min_ver'  => '3.9',
666
    },
637
};
667
};
638
668
639
1;
669
1;
(-)a/Koha/Plugins.pm (+93 lines)
Line 0 Link Here
1
package Koha::Plugins;
2
3
# Copyright 2012 Kyle Hall
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use Modern::Perl;
21
22
use Module::Load::Conditional qw(can_load);
23
use Module::Pluggable search_path => ['Koha::Plugin'];
24
25
use C4::Context;
26
use C4::Output;
27
28
BEGIN {
29
    die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") );
30
31
    push @INC, C4::Context->config("pluginsdir");
32
}
33
34
=head1 NAME
35
36
Koha::Plugins - Module for loading and managing plugins.
37
38
=cut
39
40
sub new {
41
    my ( $class, $args ) = @_;
42
    my $self = bless( {}, $class );
43
44
    $args->{'pluginsdir'} = C4::Context->config("pluginsdir");
45
46
    # TODO: Decide what metadata will be required ( $args->{metadata} ) and add a check for those keys
47
48
    return bless( $args, $class );
49
}
50
51
=item GetPlugins()
52
53
This will return a list of all the available plugins of the passed type.
54
55
Usage: my @plugins = C4::Plugins::GetPlugins( $method );
56
57
At the moment, the available types are 'report' and 'tool'.
58
=cut
59
60
sub GetPlugins {
61
    my $self = shift;
62
63
    my $method  = shift;
64
    my $version = C4::Context->preference("Version");
65
66
    my @plugin_classes = $self->plugins();
67
    my @plugins;
68
69
    foreach my $plugin_class (@plugin_classes) {
70
        if ( can_load( modules => { $plugin_class => undef } ) ) {
71
            my $plugin = $plugin_class->new();
72
73
            if ( defined($method) && $plugin->can($method) ) {
74
                push( @plugins, $plugin );
75
            } else {
76
                push( @plugins, $plugin );
77
            }
78
        }
79
    }
80
81
    return @plugins;
82
}
83
84
1;
85
__END__
86
87
=back
88
89
=head1 AUTHOR
90
91
Kyle M Hall <kyle.m.hall@gmail.com>
92
93
=cut
(-)a/Koha/Plugins/Base.pm (+158 lines)
Line 0 Link Here
1
package Koha::Plugins::Base;
2
3
# Copyright 2012 Kyle Hall
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use Modern::Perl;
21
22
use Module::Pluggable require => 1;
23
24
use base qw{Module::Bundled::Files};
25
26
use Template;
27
28
use C4::Context;
29
30
BEGIN {
31
    die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") );
32
33
    push @INC, C4::Context->config("pluginsdir");
34
}
35
36
=head1 NAME
37
38
C4::Plugins::Base - Base Module for plugins
39
40
=cut
41
42
sub new {
43
    my ( $class, $args ) = @_;
44
45
    $args->{'class'} = $class;
46
    $args->{'template'} = Template->new( { ABSOLUTE => 1 } );
47
48
    my $self = bless( $args, $class );
49
50
    ## Run the installation method if it exists and hasn't been run before
51
    if ( $self->can('install') && !$self->retrieve_data('__INSTALLED__') ) {
52
        if ( $self->install() ) {
53
            $self->store_data( { '__INSTALLED__' => 1 } );
54
        } else {
55
            warn "Plugin $class failed during installation!";
56
        }
57
    }
58
59
    return $self;
60
}
61
62
=head2 store_data
63
64
set_data allows a plugin to store key value pairs in the database for future use.
65
66
usage: $self->set_data({ param1 => 'param1val', param2 => 'param2value' })
67
68
=cut
69
70
sub store_data {
71
    my ( $self, $data ) = @_;
72
73
    my $dbh = C4::Context->dbh;
74
    my $sql = "REPLACE INTO plugin_data SET plugin_class = ?, plugin_key = ?, plugin_value = ?";
75
    my $sth = $dbh->prepare($sql);
76
77
    foreach my $key ( keys %$data ) {
78
        $sth->execute( $self->{'class'}, $key, $data->{$key} );
79
    }
80
}
81
82
=head2 retrieve_data
83
84
retrieve_data allows a plugin to read the values that were previously saved with store_data
85
86
usage: my $value = $self->retrieve_data( $key );
87
88
=cut
89
90
sub retrieve_data {
91
    my ( $self, $key ) = @_;
92
93
    my $dbh = C4::Context->dbh;
94
    my $sql = "SELECT plugin_value FROM plugin_data WHERE plugin_class = ? AND plugin_key = ?";
95
    my $sth = $dbh->prepare($sql);
96
    $sth->execute( $self->{'class'}, $key );
97
    my $row = $sth->fetchrow_hashref();
98
99
    return $row->{'plugin_value'};
100
}
101
102
=head2 get_template
103
104
get_template returns a Template object. Eventually this will probably be calling
105
C4:Template, but at the moment, it does not.
106
107
=cut
108
109
sub get_template {
110
    my ( $self, $args ) = @_;
111
112
    return Template->new( { ABSOLUTE => 1 } );
113
}
114
115
sub get_metadata {
116
    my ( $self, $args ) = @_;
117
118
    return $self->{'metadata'};
119
}
120
121
=head2 get_qualified_table_name
122
123
To avoid naming conflict, each plugins tables should use a fully qualified namespace.
124
To avoid hardcoding and make plugins more flexible, this method will return the proper
125
fully qualified table name.
126
127
usage: my $table = $self->get_qualified_table_name( 'myTable' );
128
129
=cut
130
131
sub get_qualified_table_name {
132
    my ( $self, $table_name ) = @_;
133
134
    return lc( join( '_', split( '::', $self->{'class'} ), $table_name ) );
135
}
136
137
=head2
138
139
   go_home is a quick redirect to the Koha plugins home page
140
141
=cut
142
143
sub go_home {
144
    my ( $self, $params ) = @_;
145
146
    print $self->{'cgi'}->redirect("/cgi-bin/koha/plugins/plugins-home.pl");
147
}
148
149
1;
150
__END__
151
152
=back
153
154
=head1 AUTHOR
155
156
Kyle M Hall <kyle.m.hall@gmail.com>
157
158
=cut
(-)a/Koha/Plugins/Handler.pm (+89 lines)
Line 0 Link Here
1
package Koha::Plugins::Handler;
2
3
# Copyright 2012 Kyle Hall
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use Modern::Perl;
21
22
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
23
24
use Module::Load::Conditional qw(can_load);
25
26
use C4::Context;
27
28
BEGIN {
29
    die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") );
30
31
    push @INC, C4::Context->config("pluginsdir");
32
}
33
34
=head1 NAME
35
36
C4::Plugins::Handler - Handler Module for running plugins
37
38
=head1 SYNOPSIS
39
40
  Koha::Plugins::Handler->run({ class => $class, method => $method, cgi => $cgi });
41
  $p->run();
42
43
=over 2
44
45
=cut
46
47
#sub new {
48
#    my ( $class, %args ) = @_;
49
#    my $self = bless( {}, $class );
50
#
51
#    $self->{'pluginsdir'} = C4::Context->config("pluginsdir");
52
#    $self->{'class'} = $args{'class'};
53
#
54
#    return $self;
55
#}
56
57
=item run()
58
59
Runs a plugin
60
61
=cut
62
63
sub run {
64
    my ( $class, $args ) = @_;
65
    my $plugin_class  = $args->{'class'};
66
    my $plugin_method = $args->{'method'};
67
    my $cgi           = $args->{'cgi'};
68
69
    if ( can_load( modules => { $plugin_class => undef } ) ) {
70
        my $plugin = $plugin_class->new( { cgi => $cgi } );
71
        if ( $plugin->can($plugin_method) ) {
72
            $plugin->$plugin_method();
73
        }
74
    } else {
75
76
        #TODO: Add
77
    }
78
}
79
80
1;
81
__END__
82
83
=back
84
85
=head1 AUTHOR
86
87
Kyle M Hall <kyle.m.hall@gmail.com>
88
89
=cut
(-)a/Makefile.PL (-1 / +9 lines)
Lines 230-235 Directory for Apache and Zebra logs produced by Koha. Link Here
230
230
231
Directory for backup files produced by Koha.
231
Directory for backup files produced by Koha.
232
232
233
=item PLUGINS_DIR
234
235
Directory for external Koha plugins.
236
233
=item PAZPAR2_CONF_DIR
237
=item PAZPAR2_CONF_DIR
234
238
235
Directory for PazPar2 configuration files.
239
Directory for PazPar2 configuration files.
Lines 309-314 my $target_map = { Link Here
309
  './skel/var/lib/koha/zebradb/biblios/register'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
313
  './skel/var/lib/koha/zebradb/biblios/register'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
310
  './skel/var/lib/koha/zebradb/biblios/shadow'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
314
  './skel/var/lib/koha/zebradb/biblios/shadow'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
311
  './skel/var/lib/koha/zebradb/biblios/tmp'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
315
  './skel/var/lib/koha/zebradb/biblios/tmp'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
316
  './skel/var/lib/koha/plugins' => { target => 'PLUGINS_DIR', trimdir => 6 },
312
  './sms'                       => 'INTRANET_CGI_DIR',
317
  './sms'                       => 'INTRANET_CGI_DIR',
313
  './suggestion'                => 'INTRANET_CGI_DIR',
318
  './suggestion'                => 'INTRANET_CGI_DIR',
314
  './svc'                       => 'INTRANET_CGI_DIR',
319
  './svc'                       => 'INTRANET_CGI_DIR',
Lines 1235-1240 sub get_target_directories { Link Here
1235
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1240
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1236
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1241
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1237
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'spool');
1242
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'spool');
1243
        $dirmap{'PLUGINS_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'koha', 'plugins');
1238
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1244
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1239
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1245
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1240
    } elsif ($mode eq 'dev') {
1246
    } elsif ($mode eq 'dev') {
Lines 1265-1270 sub get_target_directories { Link Here
1265
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1271
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1266
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1272
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1267
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'spool');
1273
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'spool');
1274
        $dirmap{'PLUGINS_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'plugins');
1268
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1275
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1269
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1276
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1270
    } else {
1277
    } else {
Lines 1287-1292 sub get_target_directories { Link Here
1287
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
1294
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
1288
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
1295
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
1289
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'spool', $package);
1296
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'spool', $package);
1297
        $dirmap{'PLUGINS_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'plugins');
1290
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
1298
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
1291
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
1299
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
1292
    }
1300
    }
Lines 1560-1566 make_upgrade_backup :: Link Here
1560
\t\$(NOECHO) umask 022; \$(MOD_BACKUP) \\
1568
\t\$(NOECHO) umask 022; \$(MOD_BACKUP) \\
1561
/;
1569
/;
1562
    foreach my $key (qw/KOHA_CONF_DIR INTRANET_TMPL_DIR INTRANET_WWW_DIR OPAC_TMPL_DIR OPAC_WWW_DIR
1570
    foreach my $key (qw/KOHA_CONF_DIR INTRANET_TMPL_DIR INTRANET_WWW_DIR OPAC_TMPL_DIR OPAC_WWW_DIR
1563
                     PAZPAR2_CONF_DIR ZEBRA_CONF_DIR/) {
1571
                     PAZPAR2_CONF_DIR ZEBRA_CONF_DIR PLUGINS_DIR/) {
1564
    	$upgrade .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n"
1572
    	$upgrade .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n"
1565
            unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or
1573
            unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or
1566
                   exists $skip_directories->{$key} or
1574
                   exists $skip_directories->{$key} or
(-)a/debian/templates/koha-conf-site.xml.in (+2 lines)
Lines 257-262 Link Here
257
 <biblioservershadow>1</biblioservershadow>
257
 <biblioservershadow>1</biblioservershadow>
258
 <authorityserver>authorities</authorityserver>
258
 <authorityserver>authorities</authorityserver>
259
 <authorityservershadow>1</authorityservershadow>
259
 <authorityservershadow>1</authorityservershadow>
260
 <pluginsdir>__PLUGINS_DIR__</pluginsdir>
261
 <enable_plugins>0</enable_plugins>
260
 <intranetdir>/usr/share/koha/intranet/cgi-bin</intranetdir>
262
 <intranetdir>/usr/share/koha/intranet/cgi-bin</intranetdir>
261
 <opacdir>/usr/share/koha/opac/cgi-bin/opac</opacdir>
263
 <opacdir>/usr/share/koha/opac/cgi-bin/opac</opacdir>
262
 <opachtdocs>/usr/share/koha/opac/htdocs/opac-tmpl</opachtdocs>
264
 <opachtdocs>/usr/share/koha/opac/htdocs/opac-tmpl</opachtdocs>
(-)a/etc/koha-conf.xml (+1 lines)
Lines 276-281 __PAZPAR2_TOGGLE_XML_POST__ Link Here
276
 <biblioservershadow>1</biblioservershadow>
276
 <biblioservershadow>1</biblioservershadow>
277
 <authorityserver>authorities</authorityserver>
277
 <authorityserver>authorities</authorityserver>
278
 <authorityservershadow>1</authorityservershadow>
278
 <authorityservershadow>1</authorityservershadow>
279
 <pluginsdir>__PLUGINS_DIR__</pluginsdir>
279
 <intranetdir>__INTRANET_CGI_DIR__</intranetdir>
280
 <intranetdir>__INTRANET_CGI_DIR__</intranetdir>
280
 <opacdir>__OPAC_CGI_DIR__/opac</opacdir>
281
 <opacdir>__OPAC_CGI_DIR__/opac</opacdir>
281
 <opachtdocs>__OPAC_TMPL_DIR__</opachtdocs>
282
 <opachtdocs>__OPAC_TMPL_DIR__</opachtdocs>
(-)a/installer/data/mysql/kohastructure.sql (+11 lines)
Lines 3056-3061 CREATE TABLE IF NOT EXISTS `borrower_modifications` ( Link Here
3056
  KEY `borrowernumber` (`borrowernumber`)
3056
  KEY `borrowernumber` (`borrowernumber`)
3057
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3057
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3058
3058
3059
--
3060
-- Table structure for table 'plugin_data'
3061
--
3062
3063
CREATE TABLE IF NOT EXISTS plugin_data (
3064
  plugin_class varchar(255) NOT NULL,
3065
  plugin_key varchar(255) NOT NULL,
3066
  plugin_value text,
3067
  PRIMARY KEY (plugin_class,plugin_key)
3068
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3069
3059
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
3070
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
3060
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
3071
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
3061
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
3072
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
(-)a/installer/data/mysql/sysprefs.sql (+1 lines)
Lines 406-408 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES(' Link Here
406
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('NotesBlacklist','','List of notes fields that should not appear in the title notes/description separator of details',NULL,'free');
406
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('NotesBlacklist','','List of notes fields that should not appear in the title notes/description separator of details',NULL,'free');
407
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('SCOUserCSS', '', NULL, 'Add CSS to be included in the SCO module in an embedded <style> tag.', 'free');
407
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('SCOUserCSS', '', NULL, 'Add CSS to be included in the SCO module in an embedded <style> tag.', 'free');
408
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('SCOUserJS', '', NULL, 'Define custom javascript for inclusion in the SCO module', 'free');
408
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('SCOUserJS', '', NULL, 'Define custom javascript for inclusion in the SCO module', 'free');
409
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseKohaPlugins','1','Enable or disable the ability to use Koha Plugins.','','YesNo');
(-)a/installer/data/mysql/updatedatabase.pl (+19 lines)
Lines 6339-6344 if ( CheckVersion($DBversion) ) { Link Here
6339
   SetVersion ($DBversion);
6339
   SetVersion ($DBversion);
6340
}
6340
}
6341
6341
6342
$DBversion = "3.11.00.XXX";
6343
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6344
    $dbh->do("INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES ('19', 'plugins', 'Koha Plugins', '0')");
6345
    $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('19', 'manage', 'Manage Plugins'), ('19', 'tools', 'Use Tool Plugins'), ('19', 'reports', 'Use Report Plugins')");
6346
    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseKohaPlugins','1','Enable or disable the ability to use Koha Plugins.','','YesNo')");
6347
6348
    $dbh->do("
6349
        CREATE TABLE IF NOT EXISTS plugin_data (
6350
            plugin_class varchar(255) NOT NULL,
6351
            plugin_key varchar(255) NOT NULL,
6352
            plugin_value text,
6353
            PRIMARY KEY (plugin_class,plugin_key)
6354
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6355
    ");  
6356
6357
    print "Upgrade to $DBversion done (Added plugin system.)\n";
6358
    SetVersion($DBversion);
6359
}
6360
6342
=head1 FUNCTIONS
6361
=head1 FUNCTIONS
6343
6362
6344
=head2 TableExists($table)
6363
=head2 TableExists($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc (+3 lines)
Lines 34-39 Link Here
34
                            [% IF ( CAN_user_tools ) %]
34
                            [% IF ( CAN_user_tools ) %]
35
                            <li><a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a></li>
35
                            <li><a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a></li>
36
                            [% END %]
36
                            [% END %]
37
                            [% IF ( UseKohaPlugins && CAN_user_plugins ) %]
38
                            <li><a href="/cgi-bin/koha/plugins/plugins-home.pl">Plugins</a></li>
39
                            [% END %]
37
                            [% IF ( CAN_user_parameters ) %]
40
                            [% IF ( CAN_user_parameters ) %]
38
                            <li><a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a></li>
41
                            <li><a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a></li>
39
                            [% END %]
42
                            [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/enhanced_content.pref (+7 lines)
Lines 300-302 Enhanced Content: Link Here
300
            - pref: HTML5MediaExtensions
300
            - pref: HTML5MediaExtensions
301
              class: multi
301
              class: multi
302
            - (separated with |).
302
            - (separated with |).
303
    Plugins:
304
        -
305
            - pref: UseKohaPlugins
306
              choices:
307
                  yes: Enable
308
                  no: "Don't enable"
309
            - the ability to use Koha Plugins. Note, the plugin system must also be enabled in the Koha configuration file to be fully enabled.
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt (+93 lines)
Line 0 Link Here
1
[% USE KohaDates %]
2
[% INCLUDE 'doc-head-open.inc' %]
3
<title>Koha &rsaquo; Tools &rsaquo; Plugins </title>
4
[% INCLUDE 'doc-head-close.inc' %]
5
[% INCLUDE 'calendar.inc' %]
6
</head>
7
8
<body>
9
[% INCLUDE 'header.inc' %]
10
[% INCLUDE 'circ-search.inc' %]
11
12
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a>
13
&rsaquo; Plugins
14
</div>
15
16
<div id="doc3" class="yui-t1">
17
    <div id="bd">
18
        <div id="yui-main">
19
            <div class="yui-b">
20
                <div class="details">
21
                    <h1>Plugins</h1>
22
23
                    [% UNLESS ( plugins ) %]
24
                        <h2>No Plugins Exist.</h2>
25
                        <p>Please upload one or more Koha Plugin files (.kpz) before using.</p>
26
                    [% ELSE %]
27
                        <table>
28
                            <tr>
29
                                <th>Name</th>
30
                                <th>&nbsp;</th>
31
                                <th>Description</th>
32
                                <th>Author</th>
33
                                <th>Plugin Version</th>
34
                                <th>Minimum Koha Version</th>
35
                                <th>Maximum Koha Version</th>
36
                                <th>Last Updated</th>
37
                                <th>Configure</th>
38
                            </tr>
39
40
                            [% FOREACH plugin IN plugins %]
41
                                <tr>
42
                                    <td><strong>[% plugin.metadata.name %]</strong></td>
43
                                    <td>
44
                                        [% IF plugin.can('report') %]
45
                                            <p style="white-space:nowrap"><a href="/cgi-bin/koha/plugins/run.pl?class=[% plugin.class %]&method=report">Run report</a></p>
46
                                        [% END %]
47
48
                                        [% IF plugin.can('tool') %]
49
                                            <p style="white-space:nowrap"><a href="/cgi-bin/koha/plugins/run.pl?class=[% plugin.class %]&method=tool">Run tool</a></p>
50
                                        [% END %]
51
                                    </td>
52
                                    <td>
53
                                        [% plugin.metadata.description %]
54
55
                                        <!-- FIXME: The version checking is borked at the moment -->
56
                                        [% IF ( plugin.db_version_too_old ) %]
57
                                            <div class="error">Warning: This report was written for a newer version of Koha. Run at your own risk.</div>
58
                                        [% END %]
59
60
                                        [% IF ( plugin.db_version_too_new ) %]
61
                                            <div class="error">Warning: This report was written for an older version of Koha. Run at your own risk.</div>
62
                                        [% END %]
63
                                    </td>
64
                                    <td>[% plugin.metadata.author %]</td>
65
                                    <td>[% plugin.metadata.version %]</td>
66
                                    <td>[% plugin.metadata.minimum_version %]</td>
67
                                    <td>[% plugin.metadata.maximum_version %]</td>
68
                                    <td>[% plugin.metadata.date_updated | $KohaDates %]</td>
69
                                    <td>
70
                                        [% IF plugin.can('configure') %]
71
                                            <a href="/cgi-bin/koha/plugins/run.pl?class=[% plugin.class %]&method=configure">Configure</a>
72
                                        [% END %]
73
                                    </td>
74
75
                            [% END %]
76
                        </table>
77
                    [% END %]
78
                </div>
79
            </div>
80
        </div>
81
82
        <div class="yui-b noprint">
83
            <div id="navmenu">
84
                <ul id="navmenulist">
85
                    <li><a href="plugins-upload.pl">Upload a plugin</a></li>
86
                </ul>
87
            </div>
88
        </div>
89
    </div>
90
</div>
91
92
93
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-upload.tt (+55 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Tools &rsaquo; Plugins &rsaquo; Upload Plugin
3
 </title>
4
[% INCLUDE 'doc-head-close.inc' %]
5
[% INCLUDE 'calendar.inc' %]
6
</head>
7
8
<body>
9
[% INCLUDE 'header.inc' %]
10
[% INCLUDE 'circ-search.inc' %]
11
12
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a>
13
&rsaquo; <a href="/cgi-bin/koha/plugins/plugins-home.pl">Plugins</a>
14
&rsaquo; Upload Plugins
15
</div>
16
17
<div id="doc3" class="yui-t2">
18
    <div id="bd">
19
        <div id="yui-main">
20
    <div class="yui-b">
21
        <div class="yui-g">
22
            <div class="yui-u first">
23
                <h1>Upload Koha Plugin</h1>
24
                [% IF ( ERRORS ) %]
25
                <div class="dialog alert">
26
                    [% FOREACH ERROR IN ERRORS %]
27
                        [% IF ( ERROR.NOTKPZ ) %]<li><b>The upload file does not appear to be a kpz file.  The extention is not '.kpz'.</b></li>
28
                        [% ELSIF ( ERROR.NOWRITETEMP ) %]<li><b>This script is not able to create/write to the necessary temporary directory.</b></li>
29
                        [% ELSIF ( ERROR.EMPTYUPLOAD ) %]<li><b>The upload file appears to be empty.</b></li>
30
                        [% ELSIF ( ERROR.UZIPFAIL ) %]<li><b>[% ERROR.UZIPFAIL %] failed to unpack.<br />Please verify the integrity of the zip file and retry.</b></li>
31
                        [% ELSIF ( ERROR.NOWRITEPLUGINS ) %]<li><b>Cannot unpack file to the plugins directory.<br />Please verify that the Apache user can write to the plugins directory.</b></li>
32
                        [% ELSE %]<li><b>[% ERROR.CORERR %] An unknown error has occurred.<br />Please review the error log for more details.</b></li>[% END %]
33
                    [% END %]
34
                </div>
35
                [% END %]
36
                <form method="post" action="/cgi-bin/koha/plugins/plugins-upload.pl" enctype="multipart/form-data">
37
                    <fieldset class="brief">
38
                         <div class="hint"><b>NOTE:</b> Only KPZ file format is supported.</div>
39
                        <ol>
40
                            <li>
41
                                <label for="uploadfile">Select the file to upload: </label><input type="file" id="uploadfile" name="uploadfile" />
42
                            </li>
43
                        </ol>
44
                    </fieldset>
45
                    <fieldset class="action">
46
                        <input type="hidden" name="op" value="Upload" />
47
                        <input type="submit" value="Upload" class="submit" />
48
                    </fieldset>
49
                </form>
50
51
            </div>
52
        </div>
53
    </div>
54
</div>
55
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/report-plugins.tt (+54 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Reports &rsaquo; Report Plugins </title>
3
[% INCLUDE 'doc-head-close.inc' %]
4
[% INCLUDE 'calendar.inc' %]
5
</head>
6
7
<body>
8
[% INCLUDE 'header.inc' %]
9
[% INCLUDE 'circ-search.inc' %]
10
11
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a>
12
&rsaquo; <a href="/cgi-bin/koha/reports/reports-home.pl">Reports</a>
13
&rsaquo; Plugins
14
</div>
15
16
<div id="doc3" class="yui-t1">
17
        <div id="bd">
18
                <div id="yui-main">
19
                        <div class="details">
20
                                <h1>Report Plugins</h1>
21
22
                                [% IF ( ERROR_NO_REPORTS ) %]
23
                                        <h2>No Report Plugins Exist.</h2>
24
                                [% ELSE %]
25
                                        <table>
26
                                                <tr>
27
                                                        <th>Name</th>
28
                                                        <th>Description</th>
29
                                                        <th>Author</th>
30
                                                        <th>Last Update</th>
31
                                                </tr>
32
33
                                                [% FOREACH REPORTS_LOO IN REPORTS_LOOP %]
34
                                                        <tr>
35
                                                                <td><a href="/cgi-bin/koha/plugins/run/[% REPORTS_LOO.start %]">[% REPORTS_LOO.name %]</a></td>
36
                                                                <td>
37
                                                                        [% REPORTS_LOO.description %]
38
                                                                        [% IF ( REPORTS_LOO.db_version_too_old ) %]
39
                                                                                <div class="error">Warning: This report was written for a newer version of Koha. Run at your own risk.</div>
40
                                                                        [% END %]
41
                                                                </td>
42
                                                                <td>[% REPORTS_LOO.author %]</td>
43
                                                                <td>[% REPORTS_LOO.date_updated %]</td>
44
                                                [% END %]
45
                                        </table>
46
                                [% END %]
47
                        </div>
48
                </div>
49
        </div>
50
</div>
51
52
53
54
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reports-home.tt (-1 / +10 lines)
Lines 35-41 Link Here
35
		<li><a href="/cgi-bin/koha/reports/issues_stats.pl">Circulation</a></li>
35
		<li><a href="/cgi-bin/koha/reports/issues_stats.pl">Circulation</a></li>
36
		<li><a href="/cgi-bin/koha/reports/serials_stats.pl">Serials</a></li>
36
		<li><a href="/cgi-bin/koha/reports/serials_stats.pl">Serials</a></li>
37
		<li><a href="/cgi-bin/koha/reports/reserves_stats.pl">Holds</a></li>
37
		<li><a href="/cgi-bin/koha/reports/reserves_stats.pl">Holds</a></li>
38
	</ul></div>
38
      </ul>
39
40
        [% IF UseKohaPlugins %]
41
        <h2>Report Plugins</h2>
42
        <ul>
43
                <li><a href="/cgi-bin/koha/reports/report-plugins.pl">View Report Plugins</a></li>
44
        </ul>
45
        [% END %]
46
47
    </div>
39
48
40
    <div class="yui-u"><h2>Top lists</h2>
49
    <div class="yui-u"><h2>Top lists</h2>
41
	<ul>
50
	<ul>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tool-plugins.tt (+54 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Tools &rsaquo; Tool Plugins </title>
3
[% INCLUDE 'doc-head-close.inc' %]
4
[% INCLUDE 'calendar.inc' %]
5
</head>
6
7
<body>
8
[% INCLUDE 'header.inc' %]
9
[% INCLUDE 'circ-search.inc' %]
10
11
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a>
12
&rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a>
13
&rsaquo; Plugins
14
</div>
15
16
<div id="doc3" class="yui-t1">
17
        <div id="bd">
18
                <div id="yui-main">
19
                        <div class="details">
20
                                <h1>Tool Plugins</h1>
21
22
                                [% IF ( ERROR_NO_TOOLS ) %]
23
                                        <h2>No Tool Plugins Exist.</h2>
24
                                [% ELSE %]
25
                                        <table>
26
                                                <tr>
27
                                                        <th>Name</th>
28
                                                        <th>Description</th>
29
                                                        <th>Author</th>
30
                                                        <th>Last Update</th>
31
                                                </tr>
32
33
                                                [% FOREACH TOOLS_LOO IN TOOLS_LOOP %]
34
                                                        <tr>
35
                                                                <td><a href="/cgi-bin/koha/plugins/run/[% TOOLS_LOO.start %]">[% TOOLS_LOO.name %]</a></td>
36
                                                                <td>
37
                                                                        [% TOOLS_LOO.description %]
38
                                                                        [% IF ( TOOLS_LOO.db_version_too_old ) %]
39
                                                                                <div class="error">Warning: This report was written for a newer version of Koha. Run at your own risk.</div>
40
                                                                        [% END %]
41
                                                                </td>
42
                                                                <td>[% TOOLS_LOO.author %]</td>
43
                                                                <td>[% TOOLS_LOO.date_updated %]</td>
44
                                                [% END %]
45
                                        </table>
46
                                [% END %]
47
                        </div>
48
                </div>
49
        </div>
50
</div>
51
52
53
54
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt (+5 lines)
Lines 97-102 Link Here
97
    <dd>Quote editor for Quote-of-the-day feature in OPAC</dd>
97
    <dd>Quote editor for Quote-of-the-day feature in OPAC</dd>
98
    [% END %]
98
    [% END %]
99
99
100
    [% IF ( UseKohaPlugins && CAN_user_plugins_tools ) %]
101
    <dt><a href="/cgi-bin/koha/tools/tool-plugins.pl">Tool Plugins</a></dt>
102
    <dd>Use tool plugins</dd>
103
    [% END %]
104
100
</dl>
105
</dl>
101
</div>
106
</div>
102
<div class="yui-u">
107
<div class="yui-u">
(-)a/plugins/plugins-home.pl (+51 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2010 Kyle M Hall <kyle.m.hall@gmail.com>
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use strict;
21
use warnings;
22
23
use CGI;
24
25
use Koha::Plugins;
26
use C4::Auth;
27
use C4::Output;
28
use C4::Dates;
29
use C4::Debug;
30
use C4::Context;
31
32
die("Koha plugins are disabled!")
33
  unless C4::Context->preference('UseKohaPlugins');
34
35
my $input = new CGI;
36
37
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
38
    {   template_name   => "plugins/plugins-home.tmpl",
39
        query           => $input,
40
        type            => "intranet",
41
        authnotrequired => 0,
42
        flagsrequired   => { plugins => "manage" },
43
        debug           => 1,
44
    }
45
);
46
47
my @plugins = Koha::Plugins->new()->GetPlugins();
48
49
$template->param( plugins => \@plugins );
50
51
output_html_with_http_headers( $input, $cookie, $template->output );
(-)a/plugins/plugins-upload.pl (+97 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
#
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it under the
6
# terms of the GNU General Public License as published by the Free Software
7
# Foundation; either version 2 of the License, or (at your option) any later
8
# version.
9
#
10
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
11
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License along
15
# with Koha; if not, write to the Free Software Foundation, Inc.,
16
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
18
use strict;
19
use warnings;
20
21
use Archive::Extract;
22
use File::Temp;
23
use File::Copy;
24
use CGI;
25
26
use C4::Context;
27
use C4::Auth;
28
use C4::Output;
29
use C4::Members;
30
use C4::Debug;
31
use Koha::Plugins;
32
33
die("Koha plugins are disabled!")
34
  unless C4::Context->preference('UseKohaPlugins');
35
36
my $input = new CGI;
37
38
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
39
    {   template_name   => "plugins/plugins-upload.tmpl",
40
        query           => $input,
41
        type            => "intranet",
42
        authnotrequired => 0,
43
        flagsrequired   => { plugins => 'manage' },
44
        debug           => 1,
45
    }
46
);
47
48
my $uploadfilename = $input->param('uploadfile');
49
my $uploadfile     = $input->upload('uploadfile');
50
my $op             = $input->param('op');
51
52
my ( $total, $handled, @counts, $tempfile, $tfh );
53
54
my %errors;
55
56
if ( ( $op eq 'Upload' ) && $uploadfile ) {
57
    my $plugins_dir = C4::Context->config("pluginsdir");
58
59
    my $dirname = File::Temp::tempdir( CLEANUP => 1 );
60
    $debug and warn "dirname = $dirname";
61
62
    my $filesuffix = $1 if $uploadfilename =~ m/(\..+)$/i;
63
    ( $tfh, $tempfile ) = File::Temp::tempfile( SUFFIX => $filesuffix, UNLINK => 1 );
64
65
    $debug and warn "tempfile = $tempfile";
66
67
    $errors{'NOTKPZ'} = 1 if ( $uploadfilename !~ /\.kpz$/i );
68
    $errors{'NOWRITETEMP'}    = 1 unless ( -w $dirname );
69
    $errors{'NOWRITEPLUGINS'} = 1 unless ( -w $plugins_dir );
70
    $errors{'EMPTYUPLOAD'}    = 1 unless ( length($uploadfile) > 0 );
71
72
    if (%errors) {
73
        $template->param( ERRORS => [ \%errors ] );
74
    } else {
75
        while (<$uploadfile>) {
76
            print $tfh $_;
77
        }
78
        close $tfh;
79
80
        my $ae = Archive::Extract->new( archive => $tempfile, type => 'zip' );
81
        unless ( $ae->extract( to => $plugins_dir ) ) {
82
            warn "ERROR: " . $ae->error;
83
            $errors{'UZIPFAIL'} = $uploadfilename;
84
            $template->param( ERRORS => [ \%errors ] );
85
            output_html_with_http_headers $input, $cookie, $template->output;
86
            exit;
87
        }
88
    }
89
} elsif ( ( $op eq 'Upload' ) && !$uploadfile ) {
90
    warn "Problem uploading file or no file uploaded.";
91
}
92
93
if ( $uploadfile && !%errors && !$template->param('ERRORS') ) {
94
    print $input->redirect("/cgi-bin/koha/plugins/plugins-home.pl");
95
} else {
96
    output_html_with_http_headers $input, $cookie, $template->output;
97
}
(-)a/plugins/run.pl (+49 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2010 Kyle M Hall <kyle.m.hall@gmail.com>
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use strict;
21
use warnings;
22
23
use CGI;
24
25
use Koha::Plugins::Handler;
26
use C4::Auth;
27
use C4::Output;
28
use C4::Dates;
29
use C4::Debug;
30
use C4::Context;
31
32
die("Koha plugins are disabled!")
33
  unless C4::Context->preference('UseKohaPlugins');
34
35
my $cgi = new CGI;
36
37
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
38
    {   template_name   => "plugins/plugins-home.tmpl",
39
        query           => $cgi,
40
        type            => "intranet",
41
        authnotrequired => 0,
42
        flagsrequired   => { plugins => "reports" },
43
        debug           => 1,
44
    }
45
);
46
47
my $class  = $cgi->param('class');
48
my $method = $cgi->param('method');
49
my $plugin = Koha::Plugins::Handler->run( { class => $class, method => $method, cgi => $cgi } );
(-)a/reports/report-plugins.pl (+47 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2010 Kyle M Hall <kyle.m.hall@gmail.com>
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use strict;
21
use warnings;
22
23
use CGI;
24
25
use Koha::Plugins;
26
use C4::Auth;
27
use C4::Output;
28
use C4::Dates;
29
use C4::Debug;
30
31
my $input = new CGI;
32
33
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
34
    {   template_name   => "reports/report-plugins.tmpl",
35
        query           => $input,
36
        type            => "intranet",
37
        authnotrequired => 0,
38
        flagsrequired   => { plugins => "reports" },
39
        debug           => 1,
40
    }
41
);
42
43
my @plugins = Koha::Plugins->new()->GetPlugins('report');
44
45
$template->param( plugins => \@plugins );
46
47
output_html_with_http_headers( $input, $cookie, $template->output );
(-)a/rewrite-config.PL (-1 / +2 lines)
Lines 43-49 guesses worked out by the script. Link Here
43
The following configuration keywords are available:
43
The following configuration keywords are available:
44
44
45
PREFIX,
45
PREFIX,
46
BASE_DIR, CGI_DIR, LOG_DIR, INSTALL_BASE,
46
BASE_DIR, CGI_DIR, LOG_DIR, PLUGINS_DIR, INSTALL_BASE,
47
DB_TYPE, DB_HOST, DB_PORT, DB_NAME, DB_PASS, DB_USER, WEBMASTER_EMAIL, WEBSERVER_DOMAIN,
47
DB_TYPE, DB_HOST, DB_PORT, DB_NAME, DB_PASS, DB_USER, WEBMASTER_EMAIL, WEBSERVER_DOMAIN,
48
WEBSERVER_HOST, WEBSERVER_IP, WEBSERVER_PORT, WEBSERVER_PORT_LIBRARIAN, ZEBRA_PASS, ZEBRA_USER
48
WEBSERVER_HOST, WEBSERVER_IP, WEBSERVER_PORT, WEBSERVER_PORT_LIBRARIAN, ZEBRA_PASS, ZEBRA_USER
49
49
Lines 82-87 $prefix = $ENV{'INSTALL_BASE'} || "/usr"; Link Here
82
%configuration = (
82
%configuration = (
83
  "__KOHA_INSTALLED_VERSION__" => "no_version_found",
83
  "__KOHA_INSTALLED_VERSION__" => "no_version_found",
84
  "__LOG_DIR__" => "/var/log",
84
  "__LOG_DIR__" => "/var/log",
85
  "__PLUGINS_DIR__" => "/var/lib/koha/plugins",
85
  "__DB_TYPE__" => "mysql",
86
  "__DB_TYPE__" => "mysql",
86
  "__DB_NAME__" => "koha",
87
  "__DB_NAME__" => "koha",
87
  "__DB_HOST__" => $myhost,
88
  "__DB_HOST__" => $myhost,
(-)a/skel/var/lib/koha/plugins/.htaccess (+2 lines)
Line 0 Link Here
1
AddHandler cgi-script .pl
2
AddHandler send-as-is .css .js .gif .jpg
(-)a/skel/var/lib/koha/plugins/README (+1 lines)
Line 0 Link Here
1
plugins dir
(-)a/tools/tool-plugins.pl (-1 / +47 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
# Copyright 2010 Kyle M Hall <kyle.m.hall@gmail.com>
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use strict;
21
use warnings;
22
23
use CGI;
24
25
use Koha::Plugins;
26
use C4::Auth;
27
use C4::Output;
28
use C4::Dates;
29
use C4::Debug;
30
31
my $input = new CGI;
32
33
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
34
    {   template_name   => "tools/tool-plugins.tmpl",
35
        query           => $input,
36
        type            => "intranet",
37
        authnotrequired => 0,
38
        flagsrequired   => { plugins => "tools" },
39
        debug           => 1,
40
    }
41
);
42
43
my @plugins = Koha::Plugins->new()->GetPlugins('tool');
44
45
$template->param( plugins => \@plugins );
46
47
output_html_with_http_headers( $input, $cookie, $template->output );

Return to bug 7804