use warnings;
use diagnostics;
-# use Install;
-use InstallAuth;
+use C4::InstallAuth;
+use CGI;
+use IPC::Cmd;
+
use C4::Context;
use C4::Output;
+use C4::Templates;
use C4::Languages qw(getAllLanguages getTranslatedLanguages);
use C4::Installer;
-use CGI;
-use IPC::Cmd;
-
my $query = new CGI;
my $step = $query->param('step');
my $all_languages = getAllLanguages();
if ( defined($language) ) {
- setlanguagecookie( $query, $language, "install.pl?step=1" );
+ C4::Templates::setlanguagecookie( $query, $language, "install.pl?step=1" );
}
( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
- template_name => "installer/step" . ( $step ? $step : 1 ) . ".tmpl",
+ template_name => "installer/step" . ( $step ? $step : 1 ) . ".tt",
query => $query,
type => "intranet",
authnotrequired => 0,
#Checking ALL perl Modules and services needed are installed.
#Whenever there is an error, adding a report to the page
$template->param( language => 1 );
- my $problem;
+ $template->param( 'checkmodule' => 1 ); # we start with the assumption that there are no problems and set this to 0 if there are
- unless ( $] >= 5.006001 ) { # Bug 179
- $template->param( "problems" => 1, "perlversion" => 1 );
- $problem = 1;
- }
-
- # We could here use a special find
- my @missing = ();
- unless ( eval { require ZOOM } ) {
- push @missing, { name => "ZOOM" };
- }
- unless ( eval { require YAML::Syck } ) {
- push @missing, { name => "YAML::Syck" };
- }
- unless ( eval { require LWP::Simple } ) {
- push @missing, { name => "LWP::Simple" };
- }
- unless ( eval { require XML::Simple } ) {
- push @missing, { name => "XML::Simple" };
- }
- unless ( eval { require MARC::File::XML } ) {
- push @missing, { name => "MARC::File::XML" };
- }
- unless ( eval { require MARC::File::USMARC } ) {
- push @missing, { name => "MARC::File::USMARC" };
- }
- unless ( eval { require DBI } ) {
- push @missing, { name => "DBI" };
- }
- unless ( eval { require Date::Manip } ) {
- push @missing, { name => "Date::Manip" };
- }
- unless ( eval { require DBD::mysql } ) {
- push @missing, { name => "DBD::mysql" };
- }
- unless ( eval { require HTML::Template::Pro } ) {
- push @missing, { name => "HTML::Template::Pro" };
- }
- unless ( eval { require Date::Calc } ) {
- push @missing, { name => "Date::Calc" };
- }
- unless ( eval { require Digest::MD5 } ) {
- push @missing, { name => "Digest::MD5" };
- }
- unless ( eval { require MARC::Record } ) {
- push @missing, { name => "MARC::Record" };
- }
- unless ( eval { require Mail::Sendmail } ) {
- push @missing, { name => "Mail::Sendmail", usagemail => 1 };
- }
- unless ( eval { require List::MoreUtils } ) {
- push @missing, { name => "List::MoreUtils" };
- }
- unless ( eval { require XML::RSS } ) {
- push @missing, { name => "XML::RSS" };
- }
- unless ( eval { require CGI::Carp } ) {
- push @missing, { name => "CGI::Carp" };
+ unless ( $] >= 5.010000 ) { # Bug 7375
+ $template->param( problems => 1, perlversion => 1, checkmodule => 0 );
}
+ my $perl_modules = C4::Installer::PerlModules->new;
+ $perl_modules->version_info;
-# The following modules are not mandatory, depends on how the library want to use Koha
- unless ( eval { require PDF::API2 } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "PDF::API2", usagebarcode => 1 };
- }
- }
- unless ( eval { require GD::Barcorde } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing,
- { name => "GD::Barcode", usagebarcode => 1, usagespine => 1 };
- }
- }
- unless ( eval { require GD } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing,
- { name => "GD", usagepatronimages => 1 };
- }
- }
- unless ( eval { require Graphics::Magick } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing,
- { name => "Graphics::Magick", usagepatroncards => 1 };
- }
- }
- unless ( eval { require Data::Random } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "Data::Random", usagebarcode => 1 };
- }
- }
- unless ( eval { require PDF::Reuse::Barcode } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "PDF::Reuse::Barcode", usagebarcode => 1 };
- }
- }
- unless ( eval { require PDF::Report } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "PDF::Report", usagebarcode => 1 };
- }
- }
- unless ( eval { require Algorithm::CheckDigits } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "Algorithm::CheckDigits", usagebarcode => 1 };
- }
- }
- unless ( eval { require GD::Barcode::UPCE } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "GD::Barcode::UPCE", usagepine => 1 };
- }
- }
- unless ( eval { require Net::LDAP } ) {
- if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
- push @missing, { name => "Net::LDAP", usageLDAP => 1 };
+ my $modules = $perl_modules->get_attr('missing_pm');
+ if (scalar(@$modules)) {
+ my @components = ();
+ my $checkmodule = 1;
+ foreach (@$modules) {
+ my ($module, $stats) = each %$_;
+ $checkmodule = 0 if $stats->{'required'};
+ push(
+ @components,
+ {
+ name => $module,
+ version => $stats->{'min_ver'},
+ require => $stats->{'required'},
+ usage => $stats->{'usage'},
+ }
+ );
}
+ @components = sort {$a->{'name'} cmp $b->{'name'}} @components;
+ $template->param( missing_modules => \@components, checkmodule => $checkmodule );
}
- $template->param( missings => \@missing ) if ( scalar(@missing) > 0 );
- $template->param( 'checkmodule' => 1 )
- unless ( scalar(@missing) && $problem );
-
}
elsif ( $step && $step == 2 ) {
#
# we have finished, just redirect to mainpage.
#
print $query->redirect("/cgi-bin/koha/mainpage.pl");
- exit 1;
+ exit;
}
elsif ( $op && $op eq 'finish' ) {
$installer->set_version_syspref();
# The installer will have to relogin since we do not pass cookie to redirection.
$template->param( "$op" => 1 );
}
- elsif ( $op && $op eq 'SetIndexingEngine' ) {
- $installer->set_indexing_engine($query->param('NoZebra'));
- $template->param( "$op" => 1 );
- }
elsif ( $op && $op eq 'addframeworks' ) {
#
# 1ST install, 3rd sub-step : insert the SQL files the user has selected
# Framework Selection is achieved through checking boxes.
my $langchoice = $query->param('fwklanguage');
$langchoice = $query->cookie('KohaOpacLanguage') unless ($langchoice);
+ $langchoice =~ s/[^a-zA-Z_-]*//g;
my $marcflavour = $query->param('marcflavour');
if ($marcflavour){
$installer->set_marcflavour_syspref($marcflavour);
$template->param( "frameworksloop" => $fwklist );
$template->param( "marcflavour" => ucfirst($marcflavour));
- my ($sample_defaulted_to_en, $levellist) = $installer->sample_data_sql_list($langchoice, $marcflavour);
+ my ($sample_defaulted_to_en, $levellist) = $installer->sample_data_sql_list($langchoice);
$template->param( "en_sample_data" => $sample_defaulted_to_en);
$template->param( "levelloop" => $levellist );
$template->param( "$op" => 1 );
# Marcflavour Selection is achieved through radiobuttons.
my $langchoice = $query->param('fwklanguage');
$langchoice = $query->cookie('KohaOpacLanguage') unless ($langchoice);
+ $langchoice =~ s/[^a-zA-Z_-]*//g;
my $dir =
C4::Context->config('intranetdir') . "/installer/data/$info{dbms}/$langchoice/marcflavour";
unless (opendir( MYDIR, $dir )) {
# Not 1st install, the only sub-step : update database
#
#Do updatedatabase And report
+
+ if ( ! defined $ENV{PERL5LIB} ) {
+ my $find = "C4/Context.pm";
+ my $path = $INC{$find};
+ $path =~ s/\Q$find\E//;
+ $ENV{PERL5LIB} = "$path:$path/installer";
+ warn "# plack? inserted PERL5LIB $ENV{PERL5LIB}\n";
+ }
+
my $cmd = C4::Context->config("intranetdir") . "/installer/data/$info{dbms}/updatedatabase.pl";
my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf) = IPC::Cmd::run(command => $cmd, verbose => 0);
}
else {
#
- # check wether it's a 1st install or an update
+ # check whether it's a 1st install or an update
#
#Check if there are enough tables.
# Paul has cleaned up tables so reduced the count
$info{'user'}, $info{'password'}
);
my $rq;
- if ( $info{dbms} eq 'mysql' ) { $rq = $dbh->prepare( "SHOW TABLES FROM " . $info{'dbname'} ); }
+ if ( $info{dbms} eq 'mysql' ) { $rq = $dbh->prepare( "SHOW TABLES" ); }
elsif ( $info{dbms} eq 'Pg' ) { $rq = $dbh->prepare( "SELECT *
FROM information_schema.tables
WHERE table_schema='public' and table_type='BASE TABLE';" ); }
);
}
}
-
- $dbh->disconnect;
}
}
else {
if ( $rq->execute ) {
my ($version) = $rq->fetchrow;
if ($version) {
- $query->redirect("install.pl?step=3");
- exit;
+ print $query->redirect("/cgi-bin/koha/installer/install.pl?step=3");
+ exit;
}
}
}