content-type was incorrectly set in InstallAuth.pm
Adding 'wizard' and 'login' detection Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
parent
92f2909d57
commit
836b9857ed
5 changed files with 635 additions and 447 deletions
|
@ -113,35 +113,37 @@ InstallAuth - Authenticates Koha users for Install process
|
|||
|
||||
sub get_template_and_user {
|
||||
my $in = shift;
|
||||
my $query=$in->{'query'};
|
||||
my $language=$query->cookie('KohaOpacLanguage');
|
||||
my $path=C4::Context->config('intrahtdocs')."/prog/".($language?$language:"en");
|
||||
my $template = HTML::Template::Pro->new(
|
||||
filename => "$path/".$in->{template_name},
|
||||
my $query = $in->{'query'};
|
||||
my $language = $query->cookie('KohaOpacLanguage');
|
||||
my $path =
|
||||
C4::Context->config('intrahtdocs') . "/prog/"
|
||||
. ( $language ? $language : "en" );
|
||||
my $template = HTML::Template::Pro->new(
|
||||
filename => "$path/" . $in->{template_name},
|
||||
die_on_bad_params => 1,
|
||||
global_vars => 1,
|
||||
case_sensitive => 1,
|
||||
path => ["$path/includes"]
|
||||
);
|
||||
|
||||
|
||||
my ( $user, $cookie, $sessionID, $flags ) = checkauth(
|
||||
$in->{'query'},
|
||||
$in->{'authnotrequired'},
|
||||
$in->{'flagsrequired'},
|
||||
$in->{'type'}
|
||||
);
|
||||
# use Data::Dumper;warn "utilisateur $user cookie : ".Dumper($cookie);
|
||||
|
||||
# use Data::Dumper;warn "utilisateur $user cookie : ".Dumper($cookie);
|
||||
|
||||
my $borrowernumber;
|
||||
if ($user) {
|
||||
$template->param( loggedinusername => $user );
|
||||
$template->param( sessionID => $sessionID );
|
||||
|
||||
|
||||
# We are going to use the $flags returned by checkauth
|
||||
# to create the template's parameters that will indicate
|
||||
# which menus the user can access.
|
||||
if (( $flags && $flags->{superlibrarian}==1)) {
|
||||
if ( ( $flags && $flags->{superlibrarian} == 1 ) ) {
|
||||
$template->param( CAN_user_circulate => 1 );
|
||||
$template->param( CAN_user_catalogue => 1 );
|
||||
$template->param( CAN_user_parameters => 1 );
|
||||
|
@ -153,7 +155,7 @@ sub get_template_and_user {
|
|||
$template->param( CAN_user_updatecharge => 1 );
|
||||
$template->param( CAN_user_acquisition => 1 );
|
||||
$template->param( CAN_user_management => 1 );
|
||||
$template->param( CAN_user_tools => 1 );
|
||||
$template->param( CAN_user_tools => 1 );
|
||||
$template->param( CAN_user_editauthorities => 1 );
|
||||
$template->param( CAN_user_serials => 1 );
|
||||
$template->param( CAN_user_reports => 1 );
|
||||
|
@ -222,6 +224,7 @@ has authenticated.
|
|||
|
||||
sub checkauth {
|
||||
my $query = shift;
|
||||
|
||||
# $authnotrequired will be set for scripts which will run without authentication
|
||||
my $authnotrequired = shift;
|
||||
my $flagsrequired = shift;
|
||||
|
@ -237,20 +240,27 @@ sub checkauth {
|
|||
my %info;
|
||||
my ( $userid, $cookie, $sessionID, $flags, $envcookie );
|
||||
my $logout = $query->param('logout.x');
|
||||
if ( $sessionID = $query->cookie("CGISESSID") ) {
|
||||
if ( $sessionID = $query->cookie("CGISESSID") ) {
|
||||
C4::Context->_new_userenv($sessionID);
|
||||
my $session = new CGI::Session("driver:File", $sessionID, {Directory=>'/tmp'});
|
||||
my $session =
|
||||
new CGI::Session( "driver:File", $sessionID,
|
||||
{ Directory => '/tmp' } );
|
||||
if ( $session->param('cardnumber') ) {
|
||||
C4::Context::set_userenv(
|
||||
$session->param('number'), $session->param('id'),
|
||||
$session->param('cardnumber'), $session->param('firstname'),
|
||||
$session->param('surname'), $session->param('branch'),
|
||||
$session->param('branchname'), $session->param('flags'),
|
||||
$session->param('emailaddress'), $session->param('branchprinter')
|
||||
);
|
||||
$cookie = $query->cookie(CGISESSID => $session->id);
|
||||
$loggedin=1;
|
||||
$userid = $session->param('cardnumber');
|
||||
C4::Context::set_userenv(
|
||||
$session->param('number'),
|
||||
$session->param('id'),
|
||||
$session->param('cardnumber'),
|
||||
$session->param('firstname'),
|
||||
$session->param('surname'),
|
||||
$session->param('branch'),
|
||||
$session->param('branchname'),
|
||||
$session->param('flags'),
|
||||
$session->param('emailaddress'),
|
||||
$session->param('branchprinter')
|
||||
);
|
||||
$cookie = $query->cookie( CGISESSID => $session->id );
|
||||
$loggedin = 1;
|
||||
$userid = $session->param('cardnumber');
|
||||
}
|
||||
my ( $ip, $lasttime );
|
||||
|
||||
|
@ -268,47 +278,47 @@ sub checkauth {
|
|||
}
|
||||
}
|
||||
unless ($userid) {
|
||||
my $session = new CGI::Session("driver:File", undef, {Directory=>'/tmp'});
|
||||
$sessionID = $session->id;
|
||||
my $session =
|
||||
new CGI::Session( "driver:File", undef, { Directory => '/tmp' } );
|
||||
$sessionID = $session->id;
|
||||
$userid = $query->param('userid');
|
||||
C4::Context->_new_userenv($sessionID);
|
||||
my $password = $query->param('password');
|
||||
C4::Context->_new_userenv($sessionID);
|
||||
my ( $return, $cardnumber ) = checkpw( $userid, $password );
|
||||
if ($return) {
|
||||
$loggedin=1;
|
||||
$loggedin = 1;
|
||||
open L, ">>/tmp/sessionlog";
|
||||
my $time = localtime( time() );
|
||||
printf L "%20s from %16s logged in at %30s.\n", $userid,
|
||||
$ENV{'REMOTE_ADDR'}, $time;
|
||||
close L;
|
||||
$cookie = $query->cookie(CGISESSID => $sessionID);
|
||||
$cookie = $query->cookie( CGISESSID => $sessionID );
|
||||
if ( $return == 2 ) {
|
||||
#Only superlibrarian should have access to this page.
|
||||
#Since if it is a user, it is supposed that there is a borrower table
|
||||
#And thus that data structure is loaded.
|
||||
|
||||
#Only superlibrarian should have access to this page.
|
||||
#Since if it is a user, it is supposed that there is a borrower table
|
||||
#And thus that data structure is loaded.
|
||||
my $hash = C4::Context::set_userenv(
|
||||
0,
|
||||
0,
|
||||
C4::Context->config('user'),
|
||||
C4::Context->config('user'),
|
||||
C4::Context->config('user'),
|
||||
"",
|
||||
"NO_LIBRARY_SET",
|
||||
1,""
|
||||
0, 0,
|
||||
C4::Context->config('user'), C4::Context->config('user'),
|
||||
C4::Context->config('user'), "",
|
||||
"NO_LIBRARY_SET", 1,
|
||||
""
|
||||
);
|
||||
$session->param('number',0);
|
||||
$session->param('id',C4::Context->config('user'));
|
||||
$session->param('cardnumber',C4::Context->config('user'));
|
||||
$session->param('firstname',C4::Context->config('user'));
|
||||
$session->param('surname',C4::Context->config('user'),);
|
||||
$session->param('branch','NO_LIBRARY_SET');
|
||||
$session->param('branchname','NO_LIBRARY_SET');
|
||||
$session->param('flags',1);
|
||||
$session->param('emailaddress', C4::Context->preference('KohaAdminEmailAddress'));
|
||||
$session->param('ip',$session->remote_addr());
|
||||
$session->param('lasttime',time());
|
||||
$userid=C4::Context->config('user');
|
||||
$session->param( 'number', 0 );
|
||||
$session->param( 'id', C4::Context->config('user') );
|
||||
$session->param( 'cardnumber', C4::Context->config('user') );
|
||||
$session->param( 'firstname', C4::Context->config('user') );
|
||||
$session->param( 'surname', C4::Context->config('user'), );
|
||||
$session->param( 'branch', 'NO_LIBRARY_SET' );
|
||||
$session->param( 'branchname', 'NO_LIBRARY_SET' );
|
||||
$session->param( 'flags', 1 );
|
||||
$session->param( 'emailaddress',
|
||||
C4::Context->preference('KohaAdminEmailAddress') );
|
||||
$session->param( 'ip', $session->remote_addr() );
|
||||
$session->param( 'lasttime', time() );
|
||||
$userid = C4::Context->config('user');
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -320,8 +330,7 @@ sub checkauth {
|
|||
}
|
||||
|
||||
# finished authentification, now respond
|
||||
if ( $loggedin )
|
||||
{
|
||||
if ($loggedin) {
|
||||
|
||||
# successful login
|
||||
unless ($cookie) {
|
||||
|
@ -348,8 +357,10 @@ sub checkauth {
|
|||
push @inputs, { name => $name, value => $value };
|
||||
}
|
||||
|
||||
my $path=C4::Context->config('intrahtdocs')."/prog/".($query->param('language')?$query->param('language'):"en");
|
||||
my $template = HTML::Template::Pro->new(
|
||||
my $path =
|
||||
C4::Context->config('intrahtdocs') . "/prog/"
|
||||
. ( $query->param('language') ? $query->param('language') : "en" );
|
||||
my $template = HTML::Template::Pro->new(
|
||||
filename => "$path/$template_name",
|
||||
die_on_bad_params => 1,
|
||||
global_vars => 1,
|
||||
|
@ -357,15 +368,14 @@ sub checkauth {
|
|||
path => ["$path/includes"]
|
||||
);
|
||||
$template->param(
|
||||
INPUTS => \@inputs,
|
||||
INPUTS => \@inputs,
|
||||
|
||||
);
|
||||
$template->param( login => 1 );
|
||||
$template->param( loginprompt => 1 ) unless $info{'nopermission'};
|
||||
|
||||
my $self_url = $query->url( -absolute => 1 );
|
||||
$template->param(
|
||||
url => $self_url,
|
||||
);
|
||||
$template->param( url => $self_url, );
|
||||
$template->param( \%info );
|
||||
$cookie = $query->cookie(
|
||||
-name => 'CGISESSID',
|
||||
|
@ -373,8 +383,8 @@ sub checkauth {
|
|||
-expires => ''
|
||||
);
|
||||
print $query->header(
|
||||
-type => 'utf-8',
|
||||
-cookie => $cookie
|
||||
-type => 'text/html; charset=utf-8',
|
||||
-cookie => $cookie
|
||||
),
|
||||
$template->output;
|
||||
exit;
|
||||
|
@ -384,14 +394,23 @@ sub checkpw {
|
|||
|
||||
my ( $userid, $password ) = @_;
|
||||
|
||||
if ( $userid && $userid eq C4::Context->config('user')
|
||||
if ( $userid
|
||||
&& $userid eq C4::Context->config('user')
|
||||
&& "$password" eq C4::Context->config('pass') )
|
||||
{
|
||||
# Koha superuser account
|
||||
C4::Context->set_userenv(0,0,C4::Context->config('user'),C4::Context->config('user'),C4::Context->config('user'),"",1);
|
||||
|
||||
# Koha superuser account
|
||||
C4::Context->set_userenv(
|
||||
0, 0,
|
||||
C4::Context->config('user'),
|
||||
C4::Context->config('user'),
|
||||
C4::Context->config('user'),
|
||||
"", 1
|
||||
);
|
||||
return 2;
|
||||
}
|
||||
if ( $userid && $userid eq 'demo'
|
||||
if ( $userid
|
||||
&& $userid eq 'demo'
|
||||
&& "$password" eq 'demo'
|
||||
&& C4::Context->config('demo') )
|
||||
{
|
||||
|
@ -403,7 +422,6 @@ sub checkpw {
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
END { } # module clean-up code here (global destructor)
|
||||
1;
|
||||
__END__
|
||||
|
|
|
@ -8,389 +8,547 @@ use C4::Context;
|
|||
use C4::Output;
|
||||
use C4::Languages;
|
||||
|
||||
use strict; # please develop with the strict pragma
|
||||
use strict; # please develop with the strict pragma
|
||||
|
||||
use CGI;
|
||||
|
||||
my $query=new CGI;
|
||||
my $step=$query->param('step');
|
||||
my $query = new CGI;
|
||||
my $step = $query->param('step');
|
||||
|
||||
my $language=$query->param('language');
|
||||
my ($template, $loggedinuser, $cookie);
|
||||
my $language = $query->param('language');
|
||||
my ( $template, $loggedinuser, $cookie );
|
||||
|
||||
my $all_languages = getAllLanguages();
|
||||
|
||||
my $all_languages=getAllLanguages();
|
||||
|
||||
if (defined($language) ){
|
||||
setlanguagecookie($query,$language,"install.pl?step=1");
|
||||
if ( defined($language) ) {
|
||||
setlanguagecookie( $query, $language, "install.pl?step=1" );
|
||||
}
|
||||
($template, $loggedinuser, $cookie)
|
||||
= get_template_and_user({template_name => "installer/step".($step?$step:1).".tmpl",
|
||||
query => $query,
|
||||
type => "intranet",
|
||||
authnotrequired => 0,
|
||||
debug => 1,
|
||||
});
|
||||
( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
||||
{
|
||||
template_name => "installer/step" . ( $step ? $step : 1 ) . ".tmpl",
|
||||
query => $query,
|
||||
type => "intranet",
|
||||
authnotrequired => 0,
|
||||
debug => 1,
|
||||
}
|
||||
);
|
||||
|
||||
my %info;
|
||||
$info{'dbname'}=C4::Context->config("database");
|
||||
$info{'dbms'}=(C4::Context->config("db_scheme")?C4::Context->config("db_scheme"):"mysql");
|
||||
$info{'hostname'}=C4::Context->config("hostname");
|
||||
($info{'hostname'},$info{'port'})=($1,$2) if $info{'hostname'}=~/([^:]*):([0-9]+)/;
|
||||
$info{'user'}=C4::Context->config("user");
|
||||
$info{'password'}=C4::Context->config("pass");
|
||||
my $dbh= DBI->connect("DBI:$info{dbms}:$info{dbname}:$info{hostname}".($info{port}?":$info{port}":""),$info{'user'}, $info{'password'});
|
||||
$info{'dbname'} = C4::Context->config("database");
|
||||
$info{'dbms'} =
|
||||
( C4::Context->config("db_scheme")
|
||||
? C4::Context->config("db_scheme")
|
||||
: "mysql" );
|
||||
$info{'hostname'} = C4::Context->config("hostname");
|
||||
( $info{'hostname'}, $info{'port'} ) = ( $1, $2 )
|
||||
if $info{'hostname'} =~ /([^:]*):([0-9]+)/;
|
||||
$info{'user'} = C4::Context->config("user");
|
||||
$info{'password'} = C4::Context->config("pass");
|
||||
my $dbh = DBI->connect(
|
||||
"DBI:$info{dbms}:$info{dbname}:$info{hostname}"
|
||||
. ( $info{port} ? ":$info{port}" : "" ),
|
||||
$info{'user'}, $info{'password'}
|
||||
);
|
||||
|
||||
if ( $step && $step == 1 ) {
|
||||
|
||||
#First Step
|
||||
#Checking ALL perl Modules and services needed are installed.
|
||||
#Whenever there is an error, adding a report to the page
|
||||
# I suppose here that Apache user can access /usr/bin/
|
||||
# If mysql or zebra are in some fancy directory not in PATH
|
||||
# Performing a disk search.
|
||||
$template->param( language => 1 );
|
||||
my $problem;
|
||||
|
||||
unless ( $] >= 5.006001 ) { # Bug 179
|
||||
$template->param( "problems" => 1, "perlversion" => 1 );
|
||||
$problem = 1;
|
||||
}
|
||||
unless ( -x "/usr/bin/perl" ) {
|
||||
my $realperl = `which perl`;
|
||||
$realperl = `find / -name perl` unless ($realperl);
|
||||
chomp $realperl;
|
||||
$template->param( "problems" => 1, 'perllocation' => 1 )
|
||||
unless ($realperl);
|
||||
$problem = 1 unless ($realperl);
|
||||
}
|
||||
unless ( -x "/usr/local/bin/mysql" ) {
|
||||
my $mysql = `which mysql`;
|
||||
$mysql = `find / -name mysql` unless ($mysql);
|
||||
chomp $mysql;
|
||||
$template->param( "problems" => 1, 'mysql' => 1 ) unless ($mysql);
|
||||
$problem = 1 unless ($mysql);
|
||||
}
|
||||
unless ( -x "/usr/local/bin/zebraidx" || -x "/usr/local/bin/zebraidx-2.0" )
|
||||
{
|
||||
my $zebra = `which zebraidx`;
|
||||
$zebra = `which zebraidx-2.0` unless ($zebra);
|
||||
$zebra = `find / -name "zebraidx*"` unless ($zebra);
|
||||
chomp $zebra;
|
||||
$template->param( "problems" => 1, 'zebra' => 1 ) unless ($zebra);
|
||||
$problem = 1 unless ($zebra);
|
||||
}
|
||||
unless ( -x "/usr/local/bin/zebrasrv" || -x "/usr/local/bin/zebrasrv-2.0" )
|
||||
{
|
||||
my $zebra = `which zebrasrv`;
|
||||
$zebra = `which zebrasrv-2.0` unless ($zebra);
|
||||
$zebra = `find / -name "zebrasrv*"` unless ($zebra);
|
||||
chomp $zebra;
|
||||
$template->param( "problems" => 1, 'zebra' => 1 ) unless ($zebra);
|
||||
$problem = 1 unless ($zebra);
|
||||
}
|
||||
unless ( -x "/usr/local/bin/yaz-client" ) {
|
||||
my $yaz = `which yaz-client`;
|
||||
$yaz = `find / -name "yaz-client*"` unless ($yaz);
|
||||
chomp $yaz;
|
||||
$template->param( "problems" => 1, 'yaz' => 1 ) unless ($yaz);
|
||||
$problem = 1 unless ($yaz);
|
||||
}
|
||||
|
||||
# We could here use a special find
|
||||
my @missing = ();
|
||||
unless ( eval { require ZOOM } ) {
|
||||
push @missing, { name => "ZOOM" };
|
||||
}
|
||||
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 } ) {
|
||||
push @missing, { name => "HTML::Template::Pro" };
|
||||
}
|
||||
unless ( eval { require HTML::Template } ) {
|
||||
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" };
|
||||
}
|
||||
|
||||
if ($step && $step==1){
|
||||
#First Step
|
||||
#Checking ALL perl Modules and services needed are installed.
|
||||
#Whenever there is an error, adding a report to the page
|
||||
# I suppose here that Apache user can access /usr/bin/
|
||||
# If mysql or zebra are in some fancy directory not in PATH
|
||||
# Performing a disk search.
|
||||
$template->param(language=>1);
|
||||
my $problem;
|
||||
|
||||
unless ($] >= 5.006001) { # Bug 179
|
||||
$template->param("problems"=>1,"perlversion"=>1);
|
||||
$problem=1;
|
||||
}
|
||||
unless (-x "/usr/bin/perl") {
|
||||
my $realperl=`which perl`;
|
||||
$realperl=`find / -name perl` unless ($realperl);
|
||||
chomp $realperl;
|
||||
$template->param("problems"=>1,'perllocation'=>1) unless ($realperl);
|
||||
$problem=1 unless($realperl);
|
||||
}
|
||||
unless (-x "/usr/local/bin/mysql") {
|
||||
my $mysql=`which mysql`;
|
||||
$mysql=`find / -name mysql` unless ($mysql);
|
||||
chomp $mysql;
|
||||
$template->param("problems"=>1,'mysql'=>1) unless ($mysql);
|
||||
$problem=1 unless($mysql);
|
||||
}
|
||||
unless (-x "/usr/local/bin/zebraidx" ||-x "/usr/local/bin/zebraidx-2.0") {
|
||||
my $zebra=`which zebraidx`;
|
||||
$zebra=`which zebraidx-2.0` unless ($zebra);
|
||||
$zebra=`find / -name "zebraidx*"` unless ($zebra);
|
||||
chomp $zebra;
|
||||
$template->param("problems"=>1,'zebra'=>1) unless ($zebra);
|
||||
$problem=1 unless ($zebra);
|
||||
}
|
||||
unless (-x "/usr/local/bin/zebrasrv" ||-x "/usr/local/bin/zebrasrv-2.0") {
|
||||
my $zebra=`which zebrasrv`;
|
||||
$zebra=`which zebrasrv-2.0` unless ($zebra);
|
||||
$zebra=`find / -name "zebrasrv*"` unless ($zebra);
|
||||
chomp $zebra;
|
||||
$template->param("problems"=>1,'zebra'=>1) unless ($zebra);
|
||||
$problem=1 unless ($zebra);
|
||||
}
|
||||
unless (-x "/usr/local/bin/yaz-client") {
|
||||
my $yaz=`which yaz-client`;
|
||||
$yaz=`find / -name "yaz-client*"` unless ($yaz);
|
||||
chomp $yaz;
|
||||
$template->param("problems"=>1,'yaz'=>1) unless ($yaz);
|
||||
$problem=1 unless ($yaz);
|
||||
}
|
||||
# We could here use a special find
|
||||
my @missing = ();
|
||||
unless (eval {require ZOOM}) {
|
||||
push @missing, {name=>"ZOOM"};
|
||||
}
|
||||
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}) { push @missing,{name=>"HTML::Template::Pro"} };
|
||||
unless (eval {require HTML::Template}) { 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"} };
|
||||
# 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 PDF::API2 } ) {
|
||||
if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
|
||||
push @missing, { name => "PDF::API2", usagebarcode => 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 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 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 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::Report}) {
|
||||
if ($#missing>=0) { # only when $#missing >= 0 so this isn't fatal
|
||||
push @missing,{name=>"PDF::Report",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 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 PDF::Report } ) {
|
||||
if ( $#missing >= 0 ) { # only when $#missing >= 0 so this isn't fatal
|
||||
push @missing, { name => "PDF::Report", usagebarcode => 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};
|
||||
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 };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$template->param(missings=>\@missing) if (scalar(@missing)>0);
|
||||
$template->param('checkmodule'=>1) unless (scalar(@missing) && $problem);
|
||||
|
||||
} elsif ($step && $step==2){
|
||||
# Check Database connection and access
|
||||
$template->param(%info);
|
||||
my $checkmysql=$query->param("checkmysql");
|
||||
$template->param('mysqlconnection'=>$checkmysql);
|
||||
if ($checkmysql){
|
||||
if ($dbh){
|
||||
# Can connect to the mysql
|
||||
$template->param("checkdatabaseaccess"=>1);
|
||||
if ($info{dbms} eq "mysql"){
|
||||
#Check if database created
|
||||
my $rv=$dbh->do("SHOW DATABASES LIKE \'$info{dbname}\'");
|
||||
if ($rv==1){$template->param('checkdatabasecreated'=>1);}
|
||||
#Check if user have all necessary grants on this database.
|
||||
my $rq=$dbh->prepare("SHOW GRANTS FOR \'$info{user}\'\@'$info{hostname}'");
|
||||
$rq->execute;
|
||||
my $grantaccess;
|
||||
while (my ($line)=$rq->fetchrow){
|
||||
my $dbname=$info{dbname};
|
||||
if ($line=~m/$dbname/ || index($line,'*.*')>0){
|
||||
$grantaccess=1 if (index($line,'ALL PRIVILEGES')>0 ||
|
||||
((index($line,'SELECT')>0)&&(index($line,'INSERT')>0)&&(index($line,'UPDATE')>0)&&(index($line,'DELETE')>0)&&(index($line,'CREATE')>0)&&(index($line,'DROP')>0)));
|
||||
}
|
||||
}
|
||||
unless ($grantaccess){
|
||||
$rq=$dbh->prepare("SHOW GRANTS FOR \'$info{user}\'\@'\%'");
|
||||
$rq->execute;
|
||||
while (my ($line)=$rq->fetchrow){
|
||||
my $dbname=$info{dbname};
|
||||
if ($line=~m/$dbname/ || index($line,'*.*')>0){
|
||||
$grantaccess=1 if (index($line,'ALL PRIVILEGES')>0 ||
|
||||
((index($line,'SELECT')>0)&&(index($line,'INSERT')>0)&&(index($line,'UPDATE')>0)&&(index($line,'DELETE')>0)&&(index($line,'CREATE')>0)&&(index($line,'DROP')>0)));
|
||||
$template->param( missings => \@missing ) if ( scalar(@missing) > 0 );
|
||||
$template->param( 'checkmodule' => 1 )
|
||||
unless ( scalar(@missing) && $problem );
|
||||
|
||||
}
|
||||
elsif ( $step && $step == 2 ) {
|
||||
|
||||
# Check Database connection and access
|
||||
$template->param(%info);
|
||||
my $checkmysql = $query->param("checkmysql");
|
||||
$template->param( 'mysqlconnection' => $checkmysql );
|
||||
if ($checkmysql) {
|
||||
if ($dbh) {
|
||||
|
||||
# Can connect to the mysql
|
||||
$template->param( "checkdatabaseaccess" => 1 );
|
||||
if ( $info{dbms} eq "mysql" ) {
|
||||
|
||||
#Check if database created
|
||||
my $rv = $dbh->do("SHOW DATABASES LIKE \'$info{dbname}\'");
|
||||
if ( $rv == 1 ) {
|
||||
$template->param( 'checkdatabasecreated' => 1 );
|
||||
}
|
||||
|
||||
#Check if user have all necessary grants on this database.
|
||||
my $rq =
|
||||
$dbh->prepare(
|
||||
"SHOW GRANTS FOR \'$info{user}\'\@'$info{hostname}'");
|
||||
$rq->execute;
|
||||
my $grantaccess;
|
||||
while ( my ($line) = $rq->fetchrow ) {
|
||||
my $dbname = $info{dbname};
|
||||
if ( $line =~ m/$dbname/ || index( $line, '*.*' ) > 0 ) {
|
||||
$grantaccess = 1
|
||||
if (
|
||||
index( $line, 'ALL PRIVILEGES' ) > 0
|
||||
|| ( ( index( $line, 'SELECT' ) > 0 )
|
||||
&& ( index( $line, 'INSERT' ) > 0 )
|
||||
&& ( index( $line, 'UPDATE' ) > 0 )
|
||||
&& ( index( $line, 'DELETE' ) > 0 )
|
||||
&& ( index( $line, 'CREATE' ) > 0 )
|
||||
&& ( index( $line, 'DROP' ) > 0 ) )
|
||||
);
|
||||
}
|
||||
}
|
||||
unless ($grantaccess) {
|
||||
$rq =
|
||||
$dbh->prepare("SHOW GRANTS FOR \'$info{user}\'\@'\%'");
|
||||
$rq->execute;
|
||||
while ( my ($line) = $rq->fetchrow ) {
|
||||
my $dbname = $info{dbname};
|
||||
if ( $line =~ m/$dbname/ || index( $line, '*.*' ) > 0 )
|
||||
{
|
||||
$grantaccess = 1
|
||||
if (
|
||||
index( $line, 'ALL PRIVILEGES' ) > 0
|
||||
|| ( ( index( $line, 'SELECT' ) > 0 )
|
||||
&& ( index( $line, 'INSERT' ) > 0 )
|
||||
&& ( index( $line, 'UPDATE' ) > 0 )
|
||||
&& ( index( $line, 'DELETE' ) > 0 )
|
||||
&& ( index( $line, 'CREATE' ) > 0 )
|
||||
&& ( index( $line, 'DROP' ) > 0 ) )
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
$template->param( "checkgrantaccess" => $grantaccess );
|
||||
}
|
||||
}
|
||||
}
|
||||
$template->param("checkgrantaccess"=>$grantaccess);
|
||||
}
|
||||
} else {
|
||||
$template->param("error"=>DBI::err,"message"=>DBI::errstr);
|
||||
else {
|
||||
$template->param( "error" => DBI::err, "message" => DBI::errstr );
|
||||
}
|
||||
}
|
||||
}
|
||||
} elsif ($step && $step==3){
|
||||
my $op=$query->param('op');
|
||||
if ($op && $op eq 'finish'){
|
||||
if (C4::Context->preference('Version')) {
|
||||
warn "UPDATE Version";
|
||||
my $finish=$dbh->prepare("UPDATE systempreferences SET value=? WHERE variable='Version'");
|
||||
$finish->execute(C4::Context->config("kohaversion"));
|
||||
} else {
|
||||
warn "INSERT Version";
|
||||
my $finish=$dbh->prepare("INSERT into systempreferences (variable,value,explanation) values ('Version',?,'The Koha database version. Don t change this value manually, it s holded by the webinstaller')");
|
||||
$finish->execute(C4::Context->config("kohaversion"));
|
||||
}
|
||||
elsif ( $step && $step == 3 ) {
|
||||
my $op = $query->param('op');
|
||||
if ( $op && $op eq 'finish' ) {
|
||||
if ( C4::Context->preference('Version') ) {
|
||||
warn "UPDATE Version";
|
||||
my $finish =
|
||||
$dbh->prepare(
|
||||
"UPDATE systempreferences SET value=? WHERE variable='Version'"
|
||||
);
|
||||
$finish->execute( C4::Context->config("kohaversion") );
|
||||
}
|
||||
else {
|
||||
warn "INSERT Version";
|
||||
my $finish =
|
||||
$dbh->prepare(
|
||||
"INSERT into systempreferences (variable,value,explanation) values ('Version',?,'The Koha database version. Don t change this value manually, it s holded by the webinstaller')"
|
||||
);
|
||||
$finish->execute( C4::Context->config("kohaversion") );
|
||||
}
|
||||
|
||||
# Installation is finished.
|
||||
# We just deny anybody acess to install
|
||||
# And we redirect people to mainpage.
|
||||
# The installer wil have to relogin since we donot pass cookie to redirection.
|
||||
$template->param( "$op" => 1 );
|
||||
}
|
||||
# Installation is finished.
|
||||
# We just deny anybody acess to install
|
||||
# And we redirect people to mainpage.
|
||||
# The installer wil have to relogin since we donot pass cookie to redirection.
|
||||
$template->param("$op"=>1);
|
||||
}elsif ($op && $op eq 'finished'){
|
||||
print $query->redirect("/cgi-bin/koha/mainpage.pl");
|
||||
exit 1;
|
||||
} elsif ($op && $op eq 'addframeworks'){
|
||||
#Framework importing and reports
|
||||
my $lang;
|
||||
my %hashlevel;
|
||||
# sort by filename -> prepend with numbers to specify order of insertion.
|
||||
my @fnames = sort { my @aa = split /\/|\\/, ($a); my @bb = split /\/|\\/, ($b); $aa[-1] lt $bb[-1] } $query->param('framework') ;
|
||||
$dbh->do('SET FOREIGN_KEY_CHECKS=0');
|
||||
my $request=$dbh->prepare("SELECT value FROM systempreferences WHERE variable='FrameworksLoaded'");
|
||||
$request->execute;
|
||||
my ($systempreference)=$request->fetchrow;
|
||||
foreach my $file (@fnames){
|
||||
# warn $file;
|
||||
undef $/;
|
||||
my $strcmd="mysql ".($info{hostname}?" -h $info{hostname} ":"").($info{port}?" -P $info{port} ":"").($info{user}?" -u $info{user} ":"").($info{password}?" -p$info{password}":"")." $info{dbname} ";
|
||||
my $error = qx($strcmd < $file 2>&1);
|
||||
my @file = split qr(\/|\\),$file;
|
||||
$lang=$file[scalar(@file)-3] unless ($lang);
|
||||
my $level=$file[scalar(@file)-2];
|
||||
unless ($error){
|
||||
$systempreference.="$file[scalar(@file)-1]|" unless(index($systempreference,$file[scalar(@file)-1])>=0);
|
||||
}
|
||||
#Bulding here a hierarchy to display files by level.
|
||||
push @{$hashlevel{$level}},{"fwkname"=>$file[scalar(@file)-1],"error"=>$error};
|
||||
elsif ( $op && $op eq 'finished' ) {
|
||||
print $query->redirect("/cgi-bin/koha/mainpage.pl");
|
||||
exit 1;
|
||||
}
|
||||
#systempreference contains an ending |
|
||||
chop $systempreference;
|
||||
my @list;
|
||||
map {push @list,{"level"=>$_,"fwklist"=>$hashlevel{$_}}} keys %hashlevel;
|
||||
my $fwk_language;
|
||||
for my $each_language(@$all_languages) {
|
||||
# warn "CODE".$each_language->{'language_code'};
|
||||
# warn "LANG:".$lang;
|
||||
if ($lang eq $each_language->{'language_code'}) {
|
||||
$fwk_language = $each_language->{language_locale_name};
|
||||
}
|
||||
elsif ( $op && $op eq 'addframeworks' ) {
|
||||
|
||||
#Framework importing and reports
|
||||
my $lang;
|
||||
my %hashlevel;
|
||||
|
||||
# sort by filename -> prepend with numbers to specify order of insertion.
|
||||
my @fnames = sort {
|
||||
my @aa = split /\/|\\/, ($a);
|
||||
my @bb = split /\/|\\/, ($b);
|
||||
$aa[-1] lt $bb[-1]
|
||||
} $query->param('framework');
|
||||
$dbh->do('SET FOREIGN_KEY_CHECKS=0');
|
||||
my $request =
|
||||
$dbh->prepare(
|
||||
"SELECT value FROM systempreferences WHERE variable='FrameworksLoaded'"
|
||||
);
|
||||
$request->execute;
|
||||
my ($systempreference) = $request->fetchrow;
|
||||
foreach my $file (@fnames) {
|
||||
|
||||
# warn $file;
|
||||
undef $/;
|
||||
my $strcmd = "mysql "
|
||||
. ( $info{hostname} ? " -h $info{hostname} " : "" )
|
||||
. ( $info{port} ? " -P $info{port} " : "" )
|
||||
. ( $info{user} ? " -u $info{user} " : "" )
|
||||
. ( $info{password} ? " -p$info{password}" : "" )
|
||||
. " $info{dbname} ";
|
||||
my $error = qx($strcmd < $file 2>&1);
|
||||
my @file = split qr(\/|\\), $file;
|
||||
$lang = $file[ scalar(@file) - 3 ] unless ($lang);
|
||||
my $level = $file[ scalar(@file) - 2 ];
|
||||
unless ($error) {
|
||||
$systempreference .= "$file[scalar(@file)-1]|"
|
||||
unless (
|
||||
index( $systempreference, $file[ scalar(@file) - 1 ] ) >=
|
||||
0 );
|
||||
}
|
||||
|
||||
#Bulding here a hierarchy to display files by level.
|
||||
push @{ $hashlevel{$level} },
|
||||
{ "fwkname" => $file[ scalar(@file) - 1 ], "error" => $error };
|
||||
}
|
||||
|
||||
#systempreference contains an ending |
|
||||
chop $systempreference;
|
||||
my @list;
|
||||
map { push @list, { "level" => $_, "fwklist" => $hashlevel{$_} } }
|
||||
keys %hashlevel;
|
||||
my $fwk_language;
|
||||
for my $each_language (@$all_languages) {
|
||||
|
||||
# warn "CODE".$each_language->{'language_code'};
|
||||
# warn "LANG:".$lang;
|
||||
if ( $lang eq $each_language->{'language_code'} ) {
|
||||
$fwk_language = $each_language->{language_locale_name};
|
||||
}
|
||||
}
|
||||
my $updateflag =
|
||||
$dbh->do(
|
||||
"UPDATE systempreferences set value=\"$systempreference\" where variable='FrameworksLoaded'"
|
||||
);
|
||||
unless ( $updateflag == 1 ) {
|
||||
my $string =
|
||||
"INSERT INTO systempreferences (value, variable, explanation, type) VALUES (\"$systempreference\",'FrameworksLoaded','Frameworks loaded through webinstaller','choice')";
|
||||
my $rq = $dbh->prepare($string);
|
||||
$rq->execute;
|
||||
}
|
||||
$template->param(
|
||||
"fwklanguage" => $fwk_language,
|
||||
"list" => \@list
|
||||
);
|
||||
$template->param( "$op" => 1 );
|
||||
$dbh->do('SET FOREIGN_KEY_CHECKS=1');
|
||||
}
|
||||
my $updateflag=$dbh->do("UPDATE systempreferences set value=\"$systempreference\" where variable='FrameworksLoaded'");
|
||||
unless ($updateflag==1){
|
||||
my $string="INSERT INTO systempreferences (value, variable, explanation, type) VALUES (\"$systempreference\",'FrameworksLoaded','Frameworks loaded through webinstaller','choice')";
|
||||
my $rq=$dbh->prepare($string);
|
||||
$rq->execute;
|
||||
elsif ( $op && $op eq 'selectframeworks' ) {
|
||||
|
||||
#Framework Selection
|
||||
#sql data for import are supposed to be located in misc/sql-datas/<language>/<level>
|
||||
# Where <language> is en|fr or any international abbreviation (provided language hash is updated... This will be a problem with internationlisation.)
|
||||
# Where <level> is a category of requirement : required, recommended optional
|
||||
# level should contain :
|
||||
# SQL File for import With a readable name.
|
||||
# txt File taht explains what this SQL File is meant for.
|
||||
# Could be VERY useful to have A Big file for a kind of library.
|
||||
# But could also be useful to have some Authorised values data set prepared here.
|
||||
# Framework Selection is achieved through checking boxes.
|
||||
my $langchoice = $query->param('fwklanguage');
|
||||
$langchoice = $query->cookie('KohaOpacLanguage') unless ($langchoice);
|
||||
my $dir = C4::Context->config('intranetdir') . "/misc/sql-datas/";
|
||||
opendir( MYDIR, $dir );
|
||||
my @listdir = grep { !/^\.|CVS/ && -d "$dir/$_" } readdir(MYDIR);
|
||||
closedir MYDIR;
|
||||
my $frmwklangs = getFrameworkLanguages();
|
||||
my @languages;
|
||||
map {
|
||||
push @languages,
|
||||
{
|
||||
'dirname' => $_->{'language_code'},
|
||||
'languagedescription' => $_->{'language_name'},
|
||||
'checked' => ( $_->{'language_code'} eq $langchoice )
|
||||
}
|
||||
if ( $_->{'language_code'} );
|
||||
} @$frmwklangs;
|
||||
$template->param( "languagelist" => \@languages );
|
||||
undef $/;
|
||||
$dir =
|
||||
C4::Context->config('intranetdir') . "/misc/sql-datas/$langchoice";
|
||||
opendir( MYDIR, $dir ) || warn "no open $dir";
|
||||
@listdir = grep { !/^\.|CVS/ && -d "$dir/$_" } readdir(MYDIR);
|
||||
closedir MYDIR;
|
||||
my @levellist;
|
||||
my $request =
|
||||
$dbh->prepare(
|
||||
"SELECT value FROM systempreferences WHERE variable='FrameworksLoaded'"
|
||||
);
|
||||
$request->execute;
|
||||
my ($frameworksloaded) = $request->fetchrow;
|
||||
my %frameworksloaded;
|
||||
|
||||
foreach ( split( /\|/, $frameworksloaded ) ) {
|
||||
$frameworksloaded{$_} = 1;
|
||||
}
|
||||
foreach my $requirelevel (@listdir) {
|
||||
$dir =
|
||||
C4::Context->config('intranetdir')
|
||||
. "/misc/sql-datas/$langchoice/$requirelevel";
|
||||
opendir( MYDIR, $dir );
|
||||
my @listname =
|
||||
grep { !/^\.|CVS/ && -f "$dir/$_" && $_ =~ m/\.sql$/ }
|
||||
readdir(MYDIR);
|
||||
closedir MYDIR;
|
||||
my %cell;
|
||||
my @frameworklist;
|
||||
map {
|
||||
my $name = substr( $_, 0, -4 );
|
||||
open FILE, "< $dir/$name.txt";
|
||||
my $lines = <FILE>;
|
||||
$lines =~ s/\n|\r/<br \/>/g;
|
||||
use utf8;
|
||||
utf8::encode($lines) unless ( utf8::is_utf8($lines) );
|
||||
push @frameworklist,
|
||||
{
|
||||
'fwkname' => $name,
|
||||
'fwkfile' => "$dir/$_",
|
||||
'fwkdescription' => $lines,
|
||||
'checked' => (
|
||||
(
|
||||
$frameworksloaded{$_}
|
||||
|| ( $requirelevel =~
|
||||
/(mandatory|requi|oblig|necess)/i )
|
||||
) ? 1 : 0
|
||||
)
|
||||
};
|
||||
} @listname;
|
||||
my @fwks =
|
||||
sort { $a->{'fwkname'} lt $b->{'fwkname'} } @frameworklist;
|
||||
|
||||
# $cell{"mandatory"}=($requirelevel=~/(mandatory|requi|oblig|necess)/i);
|
||||
$cell{"frameworks"} = \@fwks;
|
||||
$cell{"label"} = ucfirst($requirelevel);
|
||||
$cell{"code"} = lc($requirelevel);
|
||||
push @levellist, \%cell;
|
||||
}
|
||||
$template->param( "levelloop" => \@levellist );
|
||||
$template->param( "$op" => 1 );
|
||||
}
|
||||
$template->param("fwklanguage"=>$fwk_language,
|
||||
"list"=>\@list);
|
||||
$template->param("$op"=>1);
|
||||
$dbh->do('SET FOREIGN_KEY_CHECKS=1');
|
||||
} elsif ( $op && $op eq 'selectframeworks'){
|
||||
#Framework Selection
|
||||
#sql data for import are supposed to be located in misc/sql-datas/<language>/<level>
|
||||
# Where <language> is en|fr or any international abbreviation (provided language hash is updated... This will be a problem with internationlisation.)
|
||||
# Where <level> is a category of requirement : required, recommended optional
|
||||
# level should contain :
|
||||
# SQL File for import With a readable name.
|
||||
# txt File taht explains what this SQL File is meant for.
|
||||
# Could be VERY useful to have A Big file for a kind of library.
|
||||
# But could also be useful to have some Authorised values data set prepared here.
|
||||
# Framework Selection is achieved through checking boxes.
|
||||
my $langchoice=$query->param('fwklanguage') ;
|
||||
$langchoice=$query->cookie('KohaOpacLanguage') unless ($langchoice);
|
||||
my $dir=C4::Context->config('intranetdir')."/misc/sql-datas/";
|
||||
opendir (MYDIR,$dir);
|
||||
my @listdir= grep { !/^\.|CVS/ && -d "$dir/$_"} readdir(MYDIR);
|
||||
closedir MYDIR;
|
||||
my $frmwklangs = getFrameworkLanguages();
|
||||
elsif ( $op && $op eq 'updatestructure' ) {
|
||||
|
||||
#Do updatedatabase And report
|
||||
my $execstring =
|
||||
C4::Context->config("intranetdir") . "/updater/updatedatabase";
|
||||
undef $/;
|
||||
my $string = qx|$execstring 2>&1|;
|
||||
if ($string) {
|
||||
$string =~ s/\n|\r/<br \/>/g;
|
||||
$string =~
|
||||
s/(DBD::mysql.*? failed: .*? line [0-9]*.|=================.*?====================)/<font color=red>$1<\/font>/g;
|
||||
$template->param( "updatereport" => $string );
|
||||
}
|
||||
$template->param( $op => 1 );
|
||||
}
|
||||
elsif ( $op && $op eq 'importdatastructure' ) {
|
||||
|
||||
#Import data structure and show errors if any
|
||||
#Uses DBI to read the file [MJR 2007-07-01]
|
||||
my $dbh = DBI->connect(
|
||||
"DBI:$info{dbms}:$info{dbname}:$info{hostname}"
|
||||
. ( $info{port} ? ":$info{port}" : "" ),
|
||||
$info{'user'}, $info{'password'}
|
||||
);
|
||||
open( INPUT, "<kohastructure.sql" );
|
||||
my $file = do { local $/ = undef; <INPUT> };
|
||||
my @commands = split( /;/, $file );
|
||||
pop @commands;
|
||||
map { $dbh->do($_) } @commands;
|
||||
close(INPUT);
|
||||
$template->param(
|
||||
"error" => $dbh->errstr,
|
||||
"$op" => 1,
|
||||
);
|
||||
$dbh->disconnect;
|
||||
}
|
||||
else {
|
||||
|
||||
#Check if there are enough tables.
|
||||
# Paul has cleaned up tables so reduced the count
|
||||
#I put it there because it implied a data import if condition was not satisfied.
|
||||
my $dbh = DBI->connect(
|
||||
"DBI:$info{dbms}:$info{dbname}:$info{hostname}"
|
||||
. ( $info{port} ? ":$info{port}" : "" ),
|
||||
$info{'user'}, $info{'password'}
|
||||
);
|
||||
my $rq = $dbh->prepare( "SHOW TABLES FROM " . $info{'dbname'} );
|
||||
$rq->execute;
|
||||
my $data = $rq->fetchall_arrayref( {} );
|
||||
my $count = scalar(@$data);
|
||||
if ( $count < 70 ) {
|
||||
$template->param( "count" => $count, "proposeimport" => 1 );
|
||||
}
|
||||
else {
|
||||
$template->param( "count" => $count, "default" => 1 );
|
||||
}
|
||||
$dbh->disconnect;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
# LANGUAGE SELECTION page by default
|
||||
# using opendir + language Hash
|
||||
|
||||
my $langavail = getTranslatedLanguages();
|
||||
my @languages;
|
||||
map{
|
||||
push @languages,{'dirname'=>$_->{'language_code'}, 'languagedescription'=>$_->{'language_name'},'checked'=>($_->{'language_code'} eq $langchoice) } if ($_->{'language_code'});
|
||||
} @$frmwklangs;
|
||||
$template->param("languagelist"=>\@languages);
|
||||
undef $/;
|
||||
$dir=C4::Context->config('intranetdir')."/misc/sql-datas/$langchoice";
|
||||
opendir (MYDIR,$dir) || warn "no open $dir";
|
||||
@listdir= grep { !/^\.|CVS/ && -d "$dir/$_"} readdir(MYDIR);
|
||||
closedir MYDIR;
|
||||
my @levellist;
|
||||
my $request=$dbh->prepare("SELECT value FROM systempreferences WHERE variable='FrameworksLoaded'");
|
||||
$request->execute;
|
||||
my ($frameworksloaded)=$request->fetchrow;
|
||||
my %frameworksloaded;
|
||||
foreach (split(/\|/,$frameworksloaded)){
|
||||
$frameworksloaded{$_}=1;
|
||||
foreach (@$langavail) {
|
||||
push @languages,
|
||||
{
|
||||
'value' => $_->{'language_code'},
|
||||
'description' => $_->{'language_name'}
|
||||
}
|
||||
if ( $_->{'language_code'} );
|
||||
}
|
||||
foreach my $requirelevel (@listdir){
|
||||
$dir =C4::Context->config('intranetdir')."/misc/sql-datas/$langchoice/$requirelevel";
|
||||
opendir (MYDIR,$dir);
|
||||
my @listname = grep { !/^\.|CVS/ && -f "$dir/$_" && $_=~m/\.sql$/} readdir(MYDIR);
|
||||
closedir MYDIR;
|
||||
my %cell;
|
||||
my @frameworklist;
|
||||
map{
|
||||
my $name=substr($_,0,-4);
|
||||
open FILE, "< $dir/$name.txt";
|
||||
my $lines = <FILE>;
|
||||
$lines=~s/\n|\r/<br \/>/g;
|
||||
use utf8;
|
||||
utf8::encode($lines) unless (utf8::is_utf8($lines));
|
||||
push @frameworklist,
|
||||
{'fwkname'=>$name,
|
||||
'fwkfile'=>"$dir/$_",
|
||||
'fwkdescription'=>$lines,
|
||||
'checked'=>(($frameworksloaded{$_}||($requirelevel=~/(mandatory|requi|oblig|necess)/i))?1:0)
|
||||
};
|
||||
} @listname;
|
||||
my @fwks = sort { $a->{'fwkname'} lt $b->{'fwkname'} } @frameworklist;
|
||||
# $cell{"mandatory"}=($requirelevel=~/(mandatory|requi|oblig|necess)/i);
|
||||
$cell{"frameworks"}=\@fwks;
|
||||
$cell{"label"}=ucfirst($requirelevel);
|
||||
$cell{"code"}=lc($requirelevel);
|
||||
push @levellist,\%cell;
|
||||
$template->param( languages => \@languages );
|
||||
if ($dbh) {
|
||||
my $rq =
|
||||
$dbh->prepare(
|
||||
"SELECT * from systempreferences WHERE variable='Version'");
|
||||
if ( $rq->execute ) {
|
||||
my ($version) = $rq->fetchrow;
|
||||
if ($version) {
|
||||
$query->redirect("install.pl?step=3");
|
||||
}
|
||||
}
|
||||
}
|
||||
$template->param("levelloop"=>\@levellist);
|
||||
$template->param("$op"=>1);
|
||||
} elsif ($op && $op eq 'updatestructure'){
|
||||
#Do updatedatabase And report
|
||||
my $execstring=C4::Context->config("intranetdir")."/updater/updatedatabase";
|
||||
undef $/;
|
||||
my $string= qx|$execstring 2>&1|;
|
||||
if ($string){
|
||||
$string=~s/\n|\r/<br \/>/g;
|
||||
$string=~s/(DBD::mysql.*? failed: .*? line [0-9]*.|=================.*?====================)/<font color=red>$1<\/font>/g;
|
||||
$template->param("updatereport"=>$string) ;
|
||||
}
|
||||
$template->param($op=>1)
|
||||
}elsif ($op && $op eq 'importdatastructure'){
|
||||
#Import data structure and show errors if any
|
||||
#Uses DBI to read the file [MJR 2007-07-01]
|
||||
my $dbh= DBI->connect("DBI:$info{dbms}:$info{dbname}:$info{hostname}".($info{port}?":$info{port}":""),$info{'user'}, $info{'password'});
|
||||
open(INPUT,"<kohastructure.sql");
|
||||
my $file=do{ local $/=undef; <INPUT>};
|
||||
my @commands=split(/;/,$file);
|
||||
pop @commands;
|
||||
map { $dbh->do($_)} @commands;
|
||||
close(INPUT);
|
||||
$template->param("error"=>$dbh->errstr ,
|
||||
"$op"=> 1, );
|
||||
$dbh->disconnect;
|
||||
} else {
|
||||
#Check if there are enough tables.
|
||||
# Paul has cleaned up tables so reduced the count
|
||||
#I put it there because it implied a data import if condition was not satisfied.
|
||||
my $dbh= DBI->connect("DBI:$info{dbms}:$info{dbname}:$info{hostname}".($info{port}?":$info{port}":""),$info{'user'}, $info{'password'});
|
||||
my $rq=$dbh->prepare("SHOW TABLES FROM ".$info{'dbname'});
|
||||
$rq->execute;
|
||||
my $data=$rq->fetchall_arrayref({});
|
||||
my $count=scalar(@$data);
|
||||
if ($count < 70){
|
||||
$template->param("count"=>$count,"proposeimport"=>1);
|
||||
} else {
|
||||
$template->param("count"=>$count,"default"=>1);
|
||||
}
|
||||
$dbh->disconnect;
|
||||
}
|
||||
}else {
|
||||
# LANGUAGE SELECTION page by default
|
||||
# using opendir + language Hash
|
||||
|
||||
my $langavail = getTranslatedLanguages();
|
||||
my @languages;
|
||||
foreach (@$langavail){
|
||||
push @languages,{'value'=>$_->{'language_code'}, 'description'=>$_->{'language_name'} } if ($_->{'language_code'});
|
||||
}
|
||||
$template->param(languages=>\@languages);
|
||||
if ($dbh){
|
||||
my $rq=$dbh->prepare("SELECT * from systempreferences WHERE variable='Version'");
|
||||
if ($rq->execute){
|
||||
my ($version)=$rq->fetchrow;
|
||||
if ($version){
|
||||
$query->redirect("install.pl?step=3");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
@ -2,21 +2,28 @@
|
|||
<link rel="shortcut icon" href="<!-- TMPL_VAR NAME='themelang' -->/includes/favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" type="text/css" media="print" href="<!-- TMPL_VAR name="themelang" -->/includes/intranet-print.css" />
|
||||
<style type="text/css" media="screen">
|
||||
<!-- TMPL_IF NAME="popup" -->
|
||||
<!-- TMPL_IF NAME="popup" -->
|
||||
@import url(<!-- TMPL_VAR NAME='themelang' -->/includes/intranet2popup.css);
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="login" -->
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="login" -->
|
||||
@import url(<!-- TMPL_VAR NAME='themelang' -->/includes/login.css);
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_IF NAME="intranetstylesheet" -->
|
||||
@import url(<!-- TMPL_VAR NAME="intranetstylesheet" -->);
|
||||
<!-- TMPL_ELSE -->
|
||||
@import url(<!-- TMPL_VAR NAME='themelang' -->/includes/intranet2.css);
|
||||
<!--/TMPL_IF-->
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="wizard" -->
|
||||
@import url(<!-- TMPL_VAR NAME='themelang' -->/includes/wizard.css);
|
||||
<!-- TMPL_ELSE -->
|
||||
|
||||
<!-- TMPL_IF NAME="intranetstylesheet" -->
|
||||
@import url(<!-- TMPL_VAR NAME="intranetstylesheet" -->);
|
||||
<!-- TMPL_ELSE -->
|
||||
@import url(<!-- TMPL_VAR NAME='themelang' -->/includes/intranet2.css);
|
||||
<!--/TMPL_IF-->
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="intranetcolorstylesheet" -->
|
||||
@import url(<!-- TMPL_VAR NAME="intranetcolorstylesheet" -->);
|
||||
<!-- /TMPL_IF -->
|
||||
@import url(<!-- TMPL_VAR NAME="intranetcolorstylesheet" -->);
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -2,6 +2,13 @@
|
|||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
|
||||
<style type="text/css" media="screen">
|
||||
|
||||
<!-- TMPL_IF NAME="login" -->
|
||||
@import url(/intranet-tmpl/prog/en/includes/login.css);
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="wizard" -->
|
||||
@import url(/intranet-tmpl/prog/en/includes/wizard.css);
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
html { background: #eee; }
|
||||
|
||||
body {
|
||||
|
|
|
@ -6,26 +6,22 @@
|
|||
<!-- TMPL_IF NAME="loginprompt" -->Koha › Welcome to the Koha Web Installer<!-- /TMPL_IF --></title>
|
||||
|
||||
<!-- TMPL_INCLUDE NAME="installer-doc-head-close.inc" -->
|
||||
<div>
|
||||
<h1 id="logo"><img alt="Koha" src="/intranet-tmpl/prog/en/images/koha.org-logo.gif" /></h1>
|
||||
<div id="login">
|
||||
<h1><a>Koha 3.0 Installer</a></h1>
|
||||
<!-- TMPL_IF NAME="nopermission" -->
|
||||
<!-- This is what is displayed if user doesn't have permission --><h3>Login Error</h3>
|
||||
<p>Sorry, Koha doesn't think you have permission for this page.</p>
|
||||
<div id="login_error"><strong>Error</strong>: unauthorized user <a href="/cgi-bin/koha/mainpage.pl?logout.x=1">click to log out</a></div>
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="timed_out" -->
|
||||
<!-- This is what is displayed if login has timed out -->
|
||||
<h3>Login Error</h3><p>Sorry, your session has timed out. Please login again.</p>
|
||||
<div id="login_error"><strong>Error</strong>: session timed out, please log in again</div>
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="different_ip" -->
|
||||
<!-- This is what is displayed if user's IP has changed -->
|
||||
<h3>Login Error</h3><p>You are accessing Koha from a different IP address! Please login again.</p>
|
||||
<div id="login_error"><strong>Error</strong>: IP address has changed, please log in again </div>
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="invalid_username_or_password" -->
|
||||
<!-- This is what is displayed if the username or password doesn't work -->
|
||||
<h3>Login Error</h3><p>You entered an incorrect username or password. Please try again.</p>
|
||||
<div id="login_error"><strong>Error</strong>: Incorrect username or password</div>
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="loginprompt" -->
|
||||
|
@ -38,12 +34,14 @@
|
|||
<p>Before we begin, please verify you have the correct credentials to continue. Please log in
|
||||
with the username and password given to you by your systems administrator and located in your
|
||||
<code>koha.xml</code> configuration file.</p>
|
||||
<table>
|
||||
<caption>Please enter your username and password:</caption>
|
||||
<tr><th scope="row"><label for="userid">Username:</label></th><td><input name="userid" id="userid" /></td></tr>
|
||||
<tr><th scope="row"><label for="password">Password:</label></th><td><input type="password" name="password" id="password" /></td></tr>
|
||||
</table>
|
||||
<p><input type="submit" value="Submit" /></p>
|
||||
<p>Please enter your username and password:</p>
|
||||
<p><label>Username:<br />
|
||||
<input type="text" name="userid" id="userid" class="input" value="<!-- TMPL_VAR NAME="userid" -->" size="20" tabindex="1" /></label>
|
||||
</p>
|
||||
<p><label>Password:<br />
|
||||
<input type="password" name="password" id="password" class="input" value="" size="20" tabindex="2" /></label>
|
||||
</p>
|
||||
<p class="submit"><input id="submit" type="submit" value="Login »" tabindex="4" /></p>
|
||||
</form>
|
||||
|
||||
<!-- /TMPL_IF -->
|
||||
|
|
Loading…
Reference in a new issue