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 (+40 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
    'File::Find::Rule' => {
663
        'usage'    => 'Plugins',
664
        'required' => '0',
665
        'min_ver'  => '0.32',
666
    },
667
    'Config::General' => {
668
        'usage'    => 'Plugins',
669
        'required' => '0',
670
        'min_ver'  => '2.48',
671
    },
672
    'File::Spec' => {
673
        'usage'    => 'Plugins',
674
        'required' => '0',
675
        'min_ver'  => '3.30',
676
    },
637
};
677
};
638
678
639
1;
679
1;
(-)a/Koha/Plugins.pm (+96 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 vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
23
24
use File::Find::Rule;
25
use Config::General qw(ParseConfig);
26
use Module::Load::Conditional qw(can_load);
27
use Module::Pluggable search_path => ['Koha::Plugin'];
28
use Module::Metadata;
29
30
use C4::Context;
31
use C4::Output;
32
33
BEGIN {
34
    push @INC, C4::Context->config("pluginsdir");
35
}
36
37
=head1 NAME
38
39
Koha::Plugins - Module for loading and managing plugins.
40
41
=cut
42
43
sub new {
44
    my ( $class, $args ) = @_;
45
    my $self = bless( {}, $class );
46
47
    $args->{'pluginsdir'} = C4::Context->config("pluginsdir");
48
49
    # TODO: Decide what metadata will be required ( $args->{metadata} ) and add a check for those keys
50
51
    return bless( $args, $class );
52
}
53
54
=item GetPlugins()
55
56
This will return a list of all the available plugins of the passed type.
57
58
Usage: my @plugins = C4::Plugins::GetPlugins( $method );
59
60
At the moment, the available types are 'report' and 'tool'.
61
=cut
62
63
sub GetPlugins {
64
    my $self = shift;
65
66
    my $method  = shift;
67
    my $version = C4::Context->preference("Version");
68
69
    my @plugin_classes = $self->plugins();
70
    my @plugins;
71
72
    foreach my $plugin_class (@plugin_classes) {
73
        if ( can_load( modules => { $plugin_class => undef } ) ) {
74
            my $plugin = $plugin_class->new();
75
76
            if ( defined($method) && $plugin->can($method) ) {
77
                push( @plugins, $plugin );
78
            } else {
79
                push( @plugins, $plugin );
80
            }
81
        }
82
    }
83
84
    return @plugins;
85
}
86
87
1;
88
__END__
89
90
=back
91
92
=head1 AUTHOR
93
94
Kyle M Hall <kyle.m.hall@gmail.com>
95
96
=cut
(-)a/Koha/Plugins/Base.pm (+156 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
    push @INC, C4::Context->config("pluginsdir");
32
}
33
34
=head1 NAME
35
36
C4::Plugins::Base - Base Module for plugins
37
38
=cut
39
40
sub new {
41
    my ( $class, $args ) = @_;
42
43
    $args->{'class'} = $class;
44
    $args->{'template'} = Template->new( { ABSOLUTE => 1 } );
45
46
    my $self = bless( $args, $class );
47
48
    ## Run the installation method if it exists and hasn't been run before
49
    if ( $self->can('install') && !$self->retrieve_data('__INSTALLED__') ) {
50
        if ( $self->install() ) {
51
            $self->store_data( { '__INSTALLED__' => 1 } );
52
        } else {
53
            warn "Plugin $class failed during installation!";
54
        }
55
    }
56
57
    return $self;
58
}
59
60
=head2 store_data
61
62
set_data allows a plugin to store key value pairs in the database for future use.
63
64
usage: $self->set_data({ param1 => 'param1val', param2 => 'param2value' })
65
66
=cut
67
68
sub store_data {
69
    my ( $self, $data ) = @_;
70
71
    my $dbh = C4::Context->dbh;
72
    my $sql = "REPLACE INTO plugin_data SET plugin_class = ?, plugin_key = ?, plugin_value = ?";
73
    my $sth = $dbh->prepare($sql);
74
75
    foreach my $key ( keys %$data ) {
76
        $sth->execute( $self->{'class'}, $key, $data->{$key} );
77
    }
78
}
79
80
=head2 retrieve_data
81
82
retrieve_data allows a plugin to read the values that were previously saved with store_data
83
84
usage: my $value = $self->retrieve_data( $key );
85
86
=cut
87
88
sub retrieve_data {
89
    my ( $self, $key ) = @_;
90
91
    my $dbh = C4::Context->dbh;
92
    my $sql = "SELECT plugin_value FROM plugin_data WHERE plugin_class = ? AND plugin_key = ?";
93
    my $sth = $dbh->prepare($sql);
94
    $sth->execute( $self->{'class'}, $key );
95
    my $row = $sth->fetchrow_hashref();
96
97
    return $row->{'plugin_value'};
98
}
99
100
=head2 get_template
101
102
get_template returns a Template object. Eventually this will probably be calling
103
C4:Template, but at the moment, it does not.
104
105
=cut
106
107
sub get_template {
108
    my ( $self, $args ) = @_;
109
110
    return Template->new( { ABSOLUTE => 1 } );
111
}
112
113
sub get_metadata {
114
    my ( $self, $args ) = @_;
115
116
    return $self->{'metadata'};
117
}
118
119
=head2 get_qualified_table_name
120
121
To avoid naming conflict, each plugins tables should use a fully qualified namespace.
122
To avoid hardcoding and make plugins more flexible, this method will return the proper
123
fully qualified table name.
124
125
usage: my $table = $self->get_qualified_table_name( 'myTable' );
126
127
=cut
128
129
sub get_qualified_table_name {
130
    my ( $self, $table_name ) = @_;
131
132
    return lc( join( '_', split( '::', $self->{'class'} ), $table_name ) );
133
}
134
135
=head2
136
137
   go_home is a quick redirect to the Koha plugins home page
138
139
=cut
140
141
sub go_home {
142
    my ( $self, $params ) = @_;
143
144
    print $self->{'cgi'}->redirect("/cgi-bin/koha/plugins/plugins-home.pl");
145
}
146
147
1;
148
__END__
149
150
=back
151
152
=head1 AUTHOR
153
154
Kyle M Hall <kyle.m.hall@gmail.com>
155
156
=cut
(-)a/Koha/Plugins/Handler.pm (+87 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
    push @INC, C4::Context->config("pluginsdir");
30
}
31
32
=head1 NAME
33
34
C4::Plugins::Handler - Handler Module for running plugins
35
36
=head1 SYNOPSIS
37
38
  Koha::Plugins::Handler->run({ class => $class, method => $method, cgi => $cgi });
39
  $p->run();
40
41
=over 2
42
43
=cut
44
45
#sub new {
46
#    my ( $class, %args ) = @_;
47
#    my $self = bless( {}, $class );
48
#
49
#    $self->{'pluginsdir'} = C4::Context->config("pluginsdir");
50
#    $self->{'class'} = $args{'class'};
51
#
52
#    return $self;
53
#}
54
55
=item run()
56
57
Runs a plugin
58
59
=cut
60
61
sub run {
62
    my ( $class, $args ) = @_;
63
    my $plugin_class  = $args->{'class'};
64
    my $plugin_method = $args->{'method'};
65
    my $cgi           = $args->{'cgi'};
66
67
    if ( can_load( modules => { $plugin_class => undef } ) ) {
68
        my $plugin = $plugin_class->new( { cgi => $cgi } );
69
        if ( $plugin->can($plugin_method) ) {
70
            $plugin->$plugin_method();
71
        }
72
    } else {
73
74
        #TODO: Add
75
    }
76
}
77
78
1;
79
__END__
80
81
=back
82
83
=head1 AUTHOR
84
85
Kyle M Hall <kyle.m.hall@gmail.com>
86
87
=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 (+1 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>
260
 <intranetdir>/usr/share/koha/intranet/cgi-bin</intranetdir>
261
 <intranetdir>/usr/share/koha/intranet/cgi-bin</intranetdir>
261
 <opacdir>/usr/share/koha/opac/cgi-bin/opac</opacdir>
262
 <opacdir>/usr/share/koha/opac/cgi-bin/opac</opacdir>
262
 <opachtdocs>/usr/share/koha/opac/htdocs/opac-tmpl</opachtdocs>
263
 <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/install_misc/debian.packages (+1 lines)
Lines 137-139 make install Link Here
137
mysql-server install
137
mysql-server install
138
yaz-doc	install
138
yaz-doc	install
139
yaz	install
139
yaz	install
140
libconfig-simple-perl install
(-)a/install_misc/ubuntu.12.04.packages (+1 lines)
Lines 156-158 libxml-simple-perl install Link Here
156
libxml-xslt-perl			install
156
libxml-xslt-perl			install
157
libyaml-perl				install
157
libyaml-perl				install
158
libyaml-syck-perl			install
158
libyaml-syck-perl			install
159
libconfig-simple-perl                   install
(-)a/install_misc/ubuntu.packages (+1 lines)
Lines 156-158 libxml-simple-perl install Link Here
156
libxml-xslt-perl			install
156
libxml-xslt-perl			install
157
libyaml-perl				install
157
libyaml-perl				install
158
libyaml-syck-perl			install
158
libyaml-syck-perl			install
159
libconfig-simple-perl                   install
(-)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.
(-)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