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

(-)a/C4/Auth.pm (+1 lines)
Lines 201-206 sub get_template_and_user { Link Here
201
            $template->param( CAN_user_serials          => 1 );
201
            $template->param( CAN_user_serials          => 1 );
202
            $template->param( CAN_user_reports          => 1 );
202
            $template->param( CAN_user_reports          => 1 );
203
            $template->param( CAN_user_staffaccess      => 1 );
203
            $template->param( CAN_user_staffaccess      => 1 );
204
            $template->param( CAN_user_plugins          => 1 );
204
            foreach my $module (keys %$all_perms) {
205
            foreach my $module (keys %$all_perms) {
205
                foreach my $subperm (keys %{ $all_perms->{$module} }) {
206
                foreach my $subperm (keys %{ $all_perms->{$module} }) {
206
                    $template->param( "CAN_user_${module}_${subperm}" => 1 );
207
                    $template->param( "CAN_user_${module}_${subperm}" => 1 );
(-)a/C4/Installer/PerlDependencies.pm (+10 lines)
Lines 514-519 our $PERL_DEPS = { Link Here
514
        'required' => '1',
514
        'required' => '1',
515
        'min_ver'  => '0.09',
515
        'min_ver'  => '0.09',
516
      },
516
      },
517
    'File::Temp' => {
518
        'usage'    => 'Plugins',
519
        'required' => '0',
520
        'min_ver'  => '0.22',
521
      },
522
    'File::Copy' => {
523
        'usage'    => 'Plugins',
524
        'required' => '0',
525
        'min_ver'  => '2.08',
526
      },
517
};
527
};
518
528
519
1;
529
1;
(-)a/Koha/Plugins.pm (+181 lines)
Line 0 Link Here
1
package Koha::Plugins;
2
3
# Copyright 2010 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 C4::Context;
25
use C4::Output;
26
use C4::Dates;
27
use C4::Debug;
28
29
BEGIN {
30
31
    # set the version for version checking
32
    $VERSION = 0.01;
33
    require Exporter;
34
    @ISA    = qw(Exporter);
35
    @EXPORT = qw(
36
      GetPlugins
37
      GetPluginsDir
38
    );
39
40
    my $debug = C4::Context->preference("DebugLevel");
41
}
42
43
=head1 NAME
44
45
C4::Plugins - Module for loading and managing plugins.
46
47
=head1 SYNOPSIS
48
49
  use C4::Plugins;
50
51
=over 2
52
53
=cut
54
55
sub new {
56
    my ( $class, %args ) = @_;
57
    my $self = bless({}, $class );
58
 
59
    $self->{'pluginsdir'} = C4::Context->config("pluginsdir");
60
 
61
    return $self;   
62
}
63
64
=item GetPlugins()
65
66
This will return a list of all the available plugins of the passed type.
67
68
Usage: my ( $plugins_hasref, $plugins_count ) = C4::Plugins::GetPlugins( $type );
69
70
At the moment, the available types are 'report' and 'tool'.
71
=cut
72
73
sub GetPlugins {
74
    my $self = shift;
75
    
76
    my $type      = shift;
77
    my @plugins_ini = $self->_GetPluginIniFiles();
78
    my $version     = C4::Context->preference("Version");
79
80
    my @plugins;
81
    foreach my $plugin_ini (@plugins_ini) {
82
        my $ini_hashref = $self->_ParsePluginIni($plugin_ini);
83
        chomp( $ini_hashref->{'minimum_version'} );
84
        chomp( $ini_hashref->{'maximum_version'} );
85
86
        if ( ( defined $type && $ini_hashref->{'type'} eq $type )
87
            || !defined $type )
88
        {
89
            $ini_hashref->{'date_updated'} =
90
              C4::Dates->new( $ini_hashref->{'date_updated'}, "iso" )->output();
91
            if ( $ini_hashref->{'minimum_version'} > $version ) {
92
                $ini_hashref->{'db_version_too_old'} = 1;
93
            }
94
            if (   $ini_hashref->{'maximum_version'}
95
                && $ini_hashref->{'maximum_version'} < $version )
96
            {
97
                $ini_hashref->{'db_version_too_new'} = 1;
98
            }
99
            push( @plugins, $ini_hashref );
100
        }
101
    }
102
103
    @plugins = sort { $a->{name} cmp $b->{name} } @plugins;
104
105
    my $count = @plugins;
106
    return ( \@plugins, $count );
107
}
108
109
=item GetPluginsDir()
110
111
Returns the path of the plugins directory.
112
113
=cut
114
115
sub GetPluginsDir {
116
    my $self = shift;
117
    return $self->{'pluginsdir'};    
118
}
119
120
=item _GetPluginIniFiles()
121
122
This will return an array of all the ini files for the custom plugins.
123
124
=cut
125
126
sub _GetPluginIniFiles {
127
    my $self = shift;
128
129
    my $plugins_dir = $self->{'pluginsdir'};
130
    opendir( DIRHANDLE, $plugins_dir );
131
    my @plugins_dirs = readdir(DIRHANDLE);
132
    closedir(DIRHANDLE);
133
134
    my @plugins;
135
    foreach my $plugin_dir (@plugins_dirs) {
136
137
        my $plugin_path = $plugins_dir . '/' . $plugin_dir;
138
        if ( -d $plugin_path ) {
139
            my $ini_path = $plugin_path . '/plugin.ini';
140
141
            if ( -f $ini_path ) {
142
                push( @plugins, $ini_path );
143
            }
144
        }
145
    }
146
147
    return (@plugins);
148
}
149
150
=item _ParsePluginIni( $ini_path )
151
152
This will return a hashref of key/value pairs found in the ini file
153
154
=cut
155
156
sub _ParsePluginIni {
157
    my $self = shift;
158
159
    my $ini_path = shift;
160
161
    my $ini;
162
163
    open( INIFILE, '<', $ini_path ) or die("Could not open file $ini_path");
164
    foreach my $line (<INIFILE>) {
165
        my ( $key, $value ) = split( /=/, $line );
166
        $ini->{$key} = $value;
167
    }
168
169
    return $ini;
170
}
171
172
1;
173
__END__
174
175
=back
176
177
=head1 AUTHOR
178
179
Kyle M Hall <kyle.m.hall@gmail.com>
180
181
=cut
(-)a/Makefile.PL (-1 / +9 lines)
Lines 226-231 command-line, e.g., READMEs. Link Here
226
226
227
Directory for Apache and Zebra logs produced by Koha.
227
Directory for Apache and Zebra logs produced by Koha.
228
228
229
=item PLUGINS_DIR
230
231
Directory for external Koha plugins.
232
229
=item PAZPAR2_CONF_DIR
233
=item PAZPAR2_CONF_DIR
230
234
231
Directory for PazPar2 configuration files.
235
Directory for PazPar2 configuration files.
Lines 303-308 my $target_map = { Link Here
303
  './skel/var/lib/koha/zebradb/biblios/register'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
307
  './skel/var/lib/koha/zebradb/biblios/register'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
304
  './skel/var/lib/koha/zebradb/biblios/shadow'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
308
  './skel/var/lib/koha/zebradb/biblios/shadow'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
305
  './skel/var/lib/koha/zebradb/biblios/tmp'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
309
  './skel/var/lib/koha/zebradb/biblios/tmp'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
310
  './skel/var/lib/koha/plugins' => { target => 'PLUGINS_DIR', trimdir => 6 },
306
  './sms'                       => 'INTRANET_CGI_DIR',
311
  './sms'                       => 'INTRANET_CGI_DIR',
307
  './suggestion'                => 'INTRANET_CGI_DIR',
312
  './suggestion'                => 'INTRANET_CGI_DIR',
308
  './svc'                       => 'INTRANET_CGI_DIR',
313
  './svc'                       => 'INTRANET_CGI_DIR',
Lines 1204-1209 sub get_target_directories { Link Here
1204
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1209
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1205
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1210
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1206
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1211
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1212
        $dirmap{'PLUGINS_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'koha', 'plugins');
1207
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1213
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1208
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1214
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1209
    } elsif ($mode eq 'dev') {
1215
    } elsif ($mode eq 'dev') {
Lines 1233-1238 sub get_target_directories { Link Here
1233
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1239
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1234
        $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');
1235
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1241
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1242
        $dirmap{'PLUGINS_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'plugins');
1236
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1243
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1237
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1244
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1238
    } else {
1245
    } else {
Lines 1254-1259 sub get_target_directories { Link Here
1254
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1261
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1255
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
1262
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
1256
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
1263
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
1264
        $dirmap{'PLUGINS_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'plugins');
1257
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
1265
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
1258
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
1266
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
1259
    }
1267
    }
Lines 1525-1531 make_upgrade_backup :: Link Here
1525
\t\$(NOECHO) umask 022; \$(MOD_BACKUP) \\
1533
\t\$(NOECHO) umask 022; \$(MOD_BACKUP) \\
1526
/;
1534
/;
1527
    foreach my $key (qw/KOHA_CONF_DIR INTRANET_TMPL_DIR INTRANET_WWW_DIR OPAC_TMPL_DIR OPAC_WWW_DIR
1535
    foreach my $key (qw/KOHA_CONF_DIR INTRANET_TMPL_DIR INTRANET_WWW_DIR OPAC_TMPL_DIR OPAC_WWW_DIR
1528
                     PAZPAR2_CONF_DIR ZEBRA_CONF_DIR/) {
1536
                     PAZPAR2_CONF_DIR ZEBRA_CONF_DIR PLUGINS_DIR/) {
1529
    	$upgrade .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n"
1537
    	$upgrade .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n"
1530
            unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or
1538
            unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or
1531
                   exists $skip_directories->{$key} or
1539
                   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 266-271 __PAZPAR2_TOGGLE_XML_POST__ Link Here
266
 <biblioservershadow>1</biblioservershadow>
266
 <biblioservershadow>1</biblioservershadow>
267
 <authorityserver>authorities</authorityserver>
267
 <authorityserver>authorities</authorityserver>
268
 <authorityservershadow>1</authorityservershadow>
268
 <authorityservershadow>1</authorityservershadow>
269
 <pluginsdir>__PLUGINS_DIR__</pluginsdir>
269
 <intranetdir>__INTRANET_CGI_DIR__</intranetdir>
270
 <intranetdir>__INTRANET_CGI_DIR__</intranetdir>
270
 <opacdir>__OPAC_CGI_DIR__/opac</opacdir>
271
 <opacdir>__OPAC_CGI_DIR__/opac</opacdir>
271
 <opachtdocs>__OPAC_TMPL_DIR__</opachtdocs>
272
 <opachtdocs>__OPAC_TMPL_DIR__</opachtdocs>
(-)a/etc/koha-httpd.conf (+1 lines)
Lines 102-107 Link Here
102
   DocumentRoot __INTRANET_WWW_DIR__
102
   DocumentRoot __INTRANET_WWW_DIR__
103
   ServerName __WEBSERVER_HOST__:__WEBSERVER_PORT_LIBRARIAN__
103
   ServerName __WEBSERVER_HOST__:__WEBSERVER_PORT_LIBRARIAN__
104
#  ServerAlias intranet.mydomain.com
104
#  ServerAlias intranet.mydomain.com
105
   ScriptAlias /cgi-bin/koha/plugins/run "__PLUGINS_DIR__/"
105
   ScriptAlias /cgi-bin/koha/ "__INTRANET_CGI_DIR__/"
106
   ScriptAlias /cgi-bin/koha/ "__INTRANET_CGI_DIR__/"
106
   ScriptAlias /index.html "__INTRANET_CGI_DIR__/mainpage.pl"
107
   ScriptAlias /index.html "__INTRANET_CGI_DIR__/mainpage.pl"
107
   ScriptAlias /search "__INTRANET_CGI_DIR__/search.pl"
108
   ScriptAlias /search "__INTRANET_CGI_DIR__/search.pl"
(-)a/install_misc/debian.packages (+1 lines)
Lines 114-116 make install Link Here
114
mysql-server install
114
mysql-server install
115
yaz-doc	install
115
yaz-doc	install
116
yaz	install
116
yaz	install
117
libconfig-simple-perl install
(-)a/install_misc/ubuntu.packages (+1 lines)
Lines 132-134 libxml-simple-perl install Link Here
132
libxml-xslt-perl			install
132
libxml-xslt-perl			install
133
libyaml-perl				install
133
libyaml-perl				install
134
libyaml-syck-perl			install
134
libyaml-syck-perl			install
135
libconfig-simple-perl                   install
(-)a/install_misc/ubuntu_maverick.packages (+1 lines)
Lines 127-129 libxml-simple-perl install Link Here
127
libxml-xslt-perl			install
127
libxml-xslt-perl			install
128
libyaml-perl				install
128
libyaml-perl				install
129
libyaml-syck-perl			install
129
libyaml-syck-perl			install
130
libconfig-simple-perl                   install
(-)a/installer/data/mysql/updatedatabase.pl (+8 lines)
Lines 5246-5251 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
5246
    SetVersion($DBversion);
5246
    SetVersion($DBversion);
5247
}
5247
}
5248
5248
5249
$DBversion = "3.09.00.XXX";
5250
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5251
    $dbh->do("INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES ('19', 'plugins', 'Koha Plugins', '0')");
5252
    $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('19', 'manage', 'Manage Plugins'), ('19', 'tools', 'Use Tool Plugins'), ('19', 'reports', 'Use Report Plugins')");
5253
    print "Upgrade to $DBversion done (Added plugin system.)\n";
5254
    SetVersion($DBversion);
5255
}
5256
5249
=head1 FUNCTIONS
5257
=head1 FUNCTIONS
5250
5258
5251
=head2 TableExists($table)
5259
=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 ( 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/plugins/plugins-home.tt (+76 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Tools &rsaquo; 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; Plugins
13
</div>
14
15
<div id="doc3" class="yui-t1">
16
        <div id="bd">
17
                <div id="yui-main">
18
                        <div class="yui-b">
19
                                <div class="details">
20
                                        <h1>Plugins</h1>
21
22
                                        [% IF ( ERROR_NO_PLUGINS ) %]
23
                                                <h2>No Plugins Exist.</h2>
24
                                                <p>Please upload one or more Koha Plugin files (.kpz) before using.</p>
25
                                        [% ELSE %]
26
                                                <table>
27
                                                        <tr>
28
                                                                <th>Name</th>
29
                                                                <th>Type</th>
30
                                                                <th>Description</th>
31
                                                                <th>Author</th>
32
                                                                <th>Plugin Version</th>
33
                                                                <th>Minimum Koha Version</th>
34
                                                                <th>Maximum Koha Version</th>
35
                                                                <th>Last Updated</th>
36
                                                        </tr>
37
38
                                                        [% FOREACH PLUGINS_LOO IN PLUGINS_LOOP %]
39
                                                                <tr>
40
                                                                        <td><a href="/cgi-bin/koha/plugins/run/[% PLUGINS_LOO.start %]">[% PLUGINS_LOO.name %]</a></td>
41
                                                                        <td>[% PLUGINS_LOO.type %]</td>
42
                                                                        <td>
43
                                                                                [% PLUGINS_LOO.description %]
44
45
                                                                                [% IF ( PLUGINS_LOO.db_version_too_old ) %]
46
                                                                                        <div class="error">Warning: This report was written for a newer version of Koha. Run at your own risk.</div>
47
                                                                                [% END %]
48
49
                                                                                [% IF ( PLUGINS_LOO.db_version_too_new ) %]
50
                                                                                        <div class="error">Warning: This report was written for an older version of Koha. Run at your own risk.</div>
51
                                                                                [% END %]
52
                                                                        </td>
53
                                                                        <td>[% PLUGINS_LOO.author %]</td>
54
                                                                        <td>[% PLUGINS_LOO.version %]</td>
55
                                                                        <td>[% PLUGINS_LOO.minimum_version %]</td>
56
                                                                        <td>[% PLUGINS_LOO.maximum_version %]</td>
57
                                                                        <td>[% PLUGINS_LOO.date_updated %]</td>
58
                                                        [% END %]
59
                                                </table>
60
                                        [% END %]
61
                                </div>
62
                        </div>
63
                </div>
64
65
                <div class="yui-b noprint">
66
                        <div id="navmenu">
67
                                <ul id="navmenulist">
68
                                        <li><a href="plugins-upload.pl">Upload A Plugin</a></li>
69
                                </ul>
70
                        </div>
71
                </div>
72
        </div>
73
</div>
74
75
76
[% 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 / +8 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
        <h2>Report Plugins</h2>
41
        <ul>
42
                <li><a href="/cgi-bin/koha/reports/report-plugins.pl">View Report Plugins</a></li>
43
        </ul>
44
45
    </div>
39
46
40
    <div class="yui-u"><h2>Top lists</h2>
47
    <div class="yui-u"><h2>Top lists</h2>
41
	<ul>
48
	<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 (-1 / +5 lines)
Lines 91-97 Link Here
91
    <dt><a href="/cgi-bin/koha/tools/scheduler.pl">Task scheduler</a></dt>
91
    <dt><a href="/cgi-bin/koha/tools/scheduler.pl">Task scheduler</a></dt>
92
    <dd>Schedule tasks to run</dd>
92
    <dd>Schedule tasks to run</dd>
93
    [% END %]
93
    [% END %]
94
	
94
95
    [% IF ( CAN_user_plugins_tools ) %]
96
    <dt><a href="/cgi-bin/koha/tools/tool-plugins.pl">Tool Plugins</a></dt>
97
    <dd>Schedule tasks to run</dd>
98
    [% END %]
95
99
96
</dl>
100
</dl>
97
</div>
101
</div>
(-)a/plugins/plugins-home.pl (+53 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
my $input = new CGI;
33
34
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
35
    {
36
        template_name   => "plugins/plugins-home.tmpl",
37
        query           => $input,
38
        type            => "intranet",
39
        authnotrequired => 0,
40
        flagsrequired   => { plugins => "manage" },
41
        debug           => 1,
42
    }
43
);
44
45
my ( $plugins_loop, $plugins_count ) = Koha::Plugins->new()->GetPlugins();
46
47
$template->param( PLUGINS_LOOP => $plugins_loop );
48
49
unless ($plugins_count) {
50
    $template->param( ERROR_NO_PLUGINS => 1 );
51
}
52
53
output_html_with_http_headers $input, $cookie, $template->output;
(-)a/plugins/plugins-upload.pl (+99 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
my $input = new CGI;
34
35
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
36
    {
37
        template_name   => "plugins/plugins-upload.tmpl",
38
        query           => $input,
39
        type            => "intranet",
40
        authnotrequired => 0,
41
        flagsrequired   => { plugins => 'manage' },
42
        debug           => 1,
43
    }
44
);
45
46
my $uploadfilename = $input->param('uploadfile');
47
my $uploadfile     = $input->upload('uploadfile');
48
my $op             = $input->param('op');
49
50
my ( $total, $handled, @counts, $tempfile, $tfh );
51
52
my %errors;
53
54
if ( ( $op eq 'Upload' ) && $uploadfile ) {
55
    my $plugins_dir = GetPluginsDir();
56
57
    my $dirname = File::Temp::tempdir( CLEANUP => 1 );
58
    $debug and warn "dirname = $dirname";
59
60
    my $filesuffix = $1 if $uploadfilename =~ m/(\..+)$/i;
61
    ( $tfh, $tempfile ) =
62
      File::Temp::tempfile( SUFFIX => $filesuffix, UNLINK => 1 );
63
64
    $debug and warn "tempfile = $tempfile";
65
66
    $errors{'NOTKPZ'} = 1 if ( $uploadfilename !~ /\.kpz$/i );
67
    $errors{'NOWRITETEMP'}    = 1 unless ( -w $dirname );
68
    $errors{'NOWRITEPLUGINS'} = 1 unless ( -w $plugins_dir );
69
    $errors{'EMPTYUPLOAD'}    = 1 unless ( length($uploadfile) > 0 );
70
71
    if (%errors) {
72
        $template->param( ERRORS => [ \%errors ] );
73
    }
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
}
90
elsif ( ( $op eq 'Upload' ) && !$uploadfile ) {
91
    warn "Problem uploading file or no file uploaded.";
92
}
93
94
if ( $uploadfile && !%errors && !$template->param('ERRORS') ) {
95
    print $input->redirect("/cgi-bin/koha/plugins/plugins-home.pl");
96
}
97
else {
98
    output_html_with_http_headers $input, $cookie, $template->output;
99
}
(-)a/reports/report-plugins.pl (+52 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 C4::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
    {
35
        template_name   => "reports/report-plugins.tmpl",
36
        query           => $input,
37
        type            => "intranet",
38
        authnotrequired => 0,
39
        flagsrequired   => { plugins => "reports" },
40
        debug           => 1,
41
    }
42
);
43
44
my ( $reports_loop, $reports_count ) = GetPlugins('report');
45
46
$template->param( REPORTS_LOOP => $reports_loop );
47
48
unless ($reports_count) {
49
    $template->param( ERROR_NO_REPORTS => 1 );
50
}
51
52
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 / +52 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 C4::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
    {
35
        template_name   => "tools/tool-plugins.tmpl",
36
        query           => $input,
37
        type            => "intranet",
38
        authnotrequired => 0,
39
        flagsrequired   => { plugins => "tools" },
40
        debug           => 1,
41
    }
42
);
43
44
my ( $reports_loop, $reports_count ) = GetPlugins('tool');
45
46
$template->param( TOOLS_LOOP => $reports_loop );
47
48
unless ($reports_count) {
49
    $template->param( ERROR_NO_TOOLS => 1 );
50
}
51
52
output_html_with_http_headers $input, $cookie, $template->output;

Return to bug 7804