Plugin for field 110a
[koha.git] / misc / koha.upgrade
index 2edfe05..0449c10 100644 (file)
 #!/usr/bin/perl -w
 
-# $Id$
-
 #use diagnostics;
 use strict; # please develop with the strict pragma
+use Install;
 
+Install::setlanguage('en');
 
-if ($<) {
-    print "\n\nYou must run koha.upgrade as root.\n\n";
-    exit;
-}
+###############################################
+# SET  THE  etcdir  ENVIRONMENT  VAR  INSTEAD #
+###############################################
+Install::setetcdir($ENV{etcdir}||'/etc');
 
 my $input;
+loadconfigfile();
 
-my %configfile;
-
-open (KC, "/etc/koha.conf");
-while (<KC>) {
- chomp;
- (next) if (/^\s*#/);
- if (/(.*)\s*=\s*(.*)/) {
-   my $variable=$1;
-   my $value=$2;
-   # Clean up white space at beginning and end
-   $variable=~s/^\s*//g;
-   $variable=~s/\s*$//g;
-   $value=~s/^\s*//g;
-   $value=~s/\s*$//g;
-   $configfile{$variable}=$value;
- }
-}
-
-my $intranetdir=$configfile{'intranetdir'};
-my $opacdir=$configfile{'opacdir'};
-my $kohaversion=$configfile{'kohaversion'};
-my $kohalogdir=$configfile{'kohalogdir'};
-my $database=$configfile{'database'};
-my $hostname=$configfile{'hostname'};
-my $user=$configfile{'user'};
-my $pass=$configfile{'pass'};
-
-
-($kohaversion) || ($kohaversion='unknown version');
-my $newversion=`cat koha.version`;
-chomp $newversion;
-if ($newversion =~ /RC/) {
-    print qq|
-=====================
-= RELEASE CANDIDATE =
-=====================
-
-WARNING WARNING WARNING WARNING WARNING
-
-You are about to install Koha version $newversion.  This version of Koha is a
-release candidate.  It is not intended to be installed on production systems.
-It is being released so that users can test it before we release a final
-version.
+my $curr_ver = Install::getkohaversion();
+$::newversion=`cat koha.version`;
+chomp $::newversion;
+Install::setkohaversion $::newversion;
 
-|;
-    print "Are you sure you want to install Koha $newversion? (Y/[N]): ";
 
-    my $answer = <STDIN>;
-    chomp $answer;
-
-    if ($answer eq "Y" || $answer eq "y") {
-       print "Great! continuing setup... \n";
-    } else {
-       print qq|
-
-Watch for announcements of Koha releases on the Koha mailing list or the Koha
-web site (http://www.koha.org/).
-
-|;
-       exit;
-    };
+if ($::newversion =~ /RC/) {
+    releasecandidatewarning();
 }
 
-print qq|
-
-================
-= Koha Upgrade =
-================
-
-You are attempting to upgrade from Koha $kohaversion to $newversion.
-
-We recommend that you do a complete backup of all your files before upgrading.
-This upgrade script will make a backup copy of your files for you.
-
-Would you like to proceed?  ([Y]/N):
-|;
-
-my $answer = <STDIN>;
-chomp $answer;
-
+my $answer = showmessage(getmessage('WelcomeToUpgrader',[$curr_ver,$::newversion]),'yn','n');
 if ($answer eq "Y" || $answer eq "y") {
        print "Great! continuing upgrade... \n";
-    } else {
-    print qq|
-
-Aborting.  Please re-run koha.upgrade when you are ready to upgrade Koha.
-|;
-    exit;
-};
-
-
-#
-# Test for Perl and Modules
-#
-print qq|
-
-PERL & MODULES
-==============
-
-|;
-
-print "\nChecking perl modules ...\n";
-    unless (eval "require 5.004") {
-    die "Sorry, you need at least Perl 5.004\n";
-}
-
-my @missing = ();
-unless (eval {require DBI})               { push @missing,"DBI" };
-unless (eval {require Date::Manip})       { push @missing,"Date::Manip" };
-unless (eval {require DBD::mysql})        { push @missing,"DBD::mysql" };
-unless (eval {require Net::Z3950})        {
-    print qq|
-
-The Net::Z3950 module is missing.  This module is necessary if you want to use
-Koha's Z39.50 client to download bibliographic records from other libraries.
-To install this module, you will need the yaz client installed from
-http://www.indexdata.dk/yaz/ and then you can install the perl module with the
-command:
-
-perl -MCPAN -e 'install Net::Z3950'
-
-Press the <ENTER> key to continue:
-|;
-    <STDIN>;
-}
-
-#
-# Print out a list of any missing modules
-#
-if (@missing > 0) {
-    print "\n\n";
-    print "You are missing some Perl modules which are required by Koha.\n";
-    print "Once these modules have been installed, rerun this installer.\n";
-    print "They can be installed by running (as root) the following:\n";
-    foreach my $module (@missing) {
-       print "   perl -MCPAN -e 'install \"$module\"'\n";
-       exit(1);
-    }} else{
-    print "All modules appear to be installed, continuing...\n";
-};
-
-
-my $backupdir='/usr/local/koha/backups';
-print "Please specify a backup directory [$backupdir]: ";
-
-$answer = <STDIN>;
-chomp $answer;
-
-if ($answer) {
-    $backupdir=$answer;
-}
-
-if (! -e $backupdir) {
-   my $result=mkdir ($backupdir, oct(770));
-   if ($result==0) {
-       my @dirs = split(m#/#, $backupdir);
-       my $checkdir='';
-       foreach (@dirs) {
-           $checkdir.="$_/";
-           unless (-e "$checkdir") {
-               mkdir($checkdir, 0775);
-           }
-       }
-   }
-}
-
-chmod 0770, $backupdir;
-
-# Backup MySql database
-#
-#
-my $mysql;
-my $mysqldir;
-
-foreach my $mysql (qw(/usr/local/mysql
-                      /opt/mysql
-                   )) {
-    if ( -d $mysql ) {
-           $mysqldir=$mysql;
-    }
-}
-if (!$mysqldir){
-    $mysqldir='/usr';
-}
-
-
-
-my ($sec, $min, $hr, $day, $month, $year) = (localtime(time))[0,1,2,3,4,5];
-$month++;
-$year+=1900;
-my $date= sprintf "%4d-%02d-%02d_%02d:%02d:%02d", $year, $month, $day,$hr,$min,$sec;
-
-open (MD, "$mysqldir/bin/mysqldump --user=$user --password=$pass --host=$hostname $database|");
-
-(open BF, ">$backupdir/Koha.backup_$date") || (die "Error opening up backup file $backupdir/Koha.backup_$date: $!\n");
-
-my $itemcounter=0;
-my $bibliocounter=0;
-my $biblioitemcounter=0;
-my $membercounter=0;
-
-while (<MD>) {
-    (/insert into items /i) && ($itemcounter++);
-    (/insert into biblioitems /i) && ($biblioitemcounter++);
-    (/insert into biblio /i) && ($bibliocounter++);
-    (/insert into borrowers /i) && ($membercounter++);
-    print BF $_;
-}
-
-close BF;
-close MD;
-
-
-my $filels=`ls -hl $backupdir/Koha.backup_$date`;
-chomp $filels;
-printf qq|
-
-Backed up:
-
-%6d biblio entries
-%6d biblioitems entries
-%6d items entries
-%6d borrowers
-
-$filels
-
-Does this look right? ([Y]/N):
-|, $bibliocounter, $biblioitemcounter, $itemcounter, $membercounter;
-
-$answer = <STDIN>;
-chomp $answer;
-
-if ($answer=~/^n/i) {
-    print qq|
-
-Aborting.  The database dump is located in:
-
-       $backupdir/Koha.backup_$date
-
-|;
-    exit;
 } else {
-       print "Great! continuing upgrade... \n";
+       showmessage(getmessage('AbortingInstall'),'none');
+       exit;
 };
 
-
-
-if ($opacdir && $intranetdir) {
-    print qq|
-
-I believe that your old files are located in:
-
-  OPAC:      $opacdir
-  INTRANET:  $intranetdir
-
-
-Does this look right?  ([Y]/N):
-|;
-    $answer = <STDIN>;
-    chomp $answer;
-
-    if ($answer =~/n/i) {
-       $intranetdir='';
-       $opacdir='';
-    } else {
-       print "Great! continuing upgrade... \n";
-    }
-}
-
-
-if (!$opacdir || !$intranetdir) {
-    $intranetdir='';
-    $opacdir='';
-    while (!$intranetdir) {
-       print "Please specify the location of your INTRANET files: ";
-
-       $answer = <STDIN>;
-       chomp $answer;
-
-       if ($answer) {
-           $intranetdir=$answer;
-       }
-       if (! -e "$intranetdir/htdocs") {
-           print "\nCouldn't find the htdocs directory here.  That doesn't look right.\nPlease enter another location.\n\n";
-           $intranetdir='';
-       }
-    }
-    while (!$opacdir) {
-       print "Please specify the location of your OPAC files: ";
-
-       $answer = <STDIN>;
-       chomp $answer;
-
-       if ($answer) {
-           $opacdir=$answer;
-       }
-       if (! -e "$opacdir/htdocs") {
-           print "\nCouldn't find the htdocs directory here.  That doesn't look right.\nPlease enter another location.\n\n";
-           $opacdir='';
-       }
-    }
-}
-
-
-
-print "\n\nBacking up old Koha scripts...\n";
-print     "===============================\n\n";
-
-mkdir "$backupdir/kohafiles-$date", 0770;
-mkdir "$backupdir/kohafiles-$date/intranet", 0770;
-mkdir "$backupdir/kohafiles-$date/opac", 0770;
-
-my $result=system("cp -R $intranetdir/* $backupdir/kohafiles-$date/intranet/");
-if ($result) {
-    print "Error encounted when copying $intranetdir to $backupdir/kohafiles-$date/intranet/\n";
-    exit;
-} else {
-    system("rm -rf $intranetdir/*");
-}
-$result=system("cp -R $opacdir/* $backupdir/kohafiles-$date/opac/");
-if ($result) {
-    print "Error encounted when copying $opacdir to $backupdir/kohafiles-$date/opac/\n";
-    exit;
-} else {
-    system("rm -rf $opacdir/*");
-}
-
-   print "Creating $intranetdir/htdocs...\n";
-   mkdir ("$intranetdir/htdocs", oct(750));
-   print "Creating $intranetdir/cgi-bin...\n";
-   mkdir ("$intranetdir/cgi-bin", oct(750));
-   print "Creating $intranetdir/modules...\n";
-   mkdir ("$intranetdir/modules", oct(750));
-   print "Creating $intranetdir/scripts...\n";
-   mkdir ("$intranetdir/scripts", oct(750));
-   chmod (oct(770), "$opacdir");
-   print "Creating $opacdir/htdocs...\n";
-   mkdir ("$opacdir/htdocs", oct(750));
-   print "Creating $opacdir/cgi-bin...\n";
-   mkdir ("$opacdir/cgi-bin", oct(750));
-
-my $httpduser;
-my $realhttpdconf;
-
-foreach my $httpdconf (qw(/usr/local/apache/conf/httpd.conf
-                      /usr/local/etc/apache/httpd.conf
-                      /usr/local/etc/apache/apache.conf
-                      /var/www/conf/httpd.conf
-                      /etc/apache/conf/httpd.conf
-                      /etc/apache/conf/apache.conf
-                      /etc/apache-ssl/conf/apache.conf
-                      /etc/httpd/conf/httpd.conf
-                      /etc/httpd/httpd.conf)) {
-   if ( -f $httpdconf ) {
-            $realhttpdconf=$httpdconf;
-            open (HTTPDCONF, $httpdconf) or warn "Insufficient privileges to open $httpdconf for reading.\n";
-      while (<HTTPDCONF>) {
-         if (/^\s*User\s+"?([-\w]+)"?\s*$/) {
-            $httpduser = $1;
-         }
-      }
-      close(HTTPDCONF);
-   }
-}
-
-unless ($httpduser) {
-    print qq|
-I was not able to determine the user that Apache is running as.  This
-information is necessary in order to set the access privileges correctly on
-/etc/koha.conf.  This user should be set in one of the Apache configuration
-files using the "User" directive.
-|;
-    print "What is your Apache user? ";
-    chomp($input = <STDIN>);
-
-    if ($input) {
-       $httpduser = $input;
-    } else {
-       $httpduser='Undetermined';
-    }
-}
-
-print "\n\nINSTALLING KOHA...\n";
-print "\n\n==================\n";
-print "Copying internet-html files to $intranetdir/htdocs...\n";
-system("cp -R intranet-html/* $intranetdir/htdocs/");
-print "Copying intranet-cgi files to $intranetdir/cgi-bin...\n";
-system("cp -R intranet-cgi/* $intranetdir/cgi-bin/");
-print "Copying script files to $intranetdir/scripts...\n";
-system("cp -R scripts/* $intranetdir/scripts/");
-print "Copying module files to $intranetdir/modules...\n";
-system("cp -R modules/* $intranetdir/modules/");
-print "Copying opac-html files to $opacdir/htdocs...\n";
-system("cp -R opac-html/* $opacdir/htdocs/");
-print "Copying opac-cgi files to $opacdir/cgi-bin...\n";
-system("cp -R opac-cgi/* $opacdir/cgi-bin/");
-
-system("chown -R root.$httpduser $opacdir");
-system("chown -R root.$httpduser $intranetdir");
-
-# LAUNCH SCRIPT
-print "Modifying Z39.50 daemon launch script...\n";
-my $newfile='';
-open (L, "$intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh");
-while (<L>) {
-    if (/^RunAsUser=/) {
-       $newfile.="RunAsUser=$httpduser\n";
-    } elsif (/^KohaZ3950Dir=/) {
-       $newfile.="KohaZ3950Dir=$intranetdir/scripts/z3950daemon\n";
-    } else {
-       $newfile.=$_;
-    }
-}
-close L;
-system("mv $intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh $intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh.orig");
-open L, ">$intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh";
-print L $newfile;
-close L;
-
-unless ($kohalogdir && -e $kohalogdir) {
-    $kohalogdir='/var/log/koha';
-    print "\n\nDirectory for logging by Z39.50 daemon [$kohalogdir]: ";
-    chomp($input = <STDIN>);
-    if ($input) {
-       $kohalogdir=$input;
-    }
-}
-
-unless (-e "$kohalogdir") {
-    my $result = mkdir 0770, "$kohalogdir";
-    if ($result==0) {
-        my @dirs = split(m#/#, $kohalogdir);
-       my $checkdir='';
-       foreach (@dirs) {
-           $checkdir.="$_/";
-           unless (-e "$checkdir") {
-               mkdir($checkdir, 0775);
-           }
-       }
-    }
-}
-
-# SHELL SCRIPT
-print "Modifying Z39.50 daemon wrapper script...\n";
-$newfile='';
-open (S, "$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh");
-while (<S>) {
-    if (/^KohaModuleDir=/) {
-       $newfile.="KohaModuleDir=$intranetdir/modules\n";
-    } elsif (/^KohaZ3950Dir=/) {
-       $newfile.="KohaZ3950Dir=$intranetdir/scripts/z3950daemon\n";
-    } elsif (/^LogDir=/) {
-       $newfile.="LogDir=$kohalogdir\n";
-    } else {
-       $newfile.=$_;
-    }
-}
-close S;
-
-system("mv $intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh $intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh.orig");
-open S, ">$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh";
-print S $newfile;
-close S;
-chmod 0750, "$intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh";
-chmod 0750, "$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh";
-chmod 0750, "$intranetdir/scripts/z3950daemon/processz3950queue";
-chown(0, (getpwnam($httpduser)) [3], "$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh") or warn "can't chown $intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh: $!";
-chown(0, (getpwnam($httpduser)) [3], "$intranetdir/scripts/z3950daemon/processz3950queue") or warn "can't chown $intranetdir/scripts/z3950daemon/processz3950queue: $!";
-
-
-open (KC, "/etc/koha.conf");
-my $kccontents='';
-my $kc;
-while (<KC>) {
-    if (/^\s*includes\s*=/) {
-       $kccontents.="includes=$intranetdir/htdocs/includes\n";
-       $kc->{'includes'}=1;
-    } elsif (/^\s*httpduser\s*=/) {
-       $kccontents.="httpduser=$httpduser\n";
-       $kc->{'httpduser'}=1;
-    } elsif (/^\s*kohaversion\s*=/) {
-       $kccontents.="kohaversion=$newversion\n";
-       $kc->{'kohaversion'}=1;
-    } elsif (/^\s*kohalogdir\s*=/) {
-       $kccontents.="kohalogdir=$kohalogdir\n";
-       $kc->{'kohalogdir'}=1;
-    } elsif (/^\s*intranetdir\s*=/) {
-       $kccontents.="intranetdir=$intranetdir\n";
-       $kc->{'intranetdir'}=1;
-    } elsif (/^\s*opacdir\s*=/) {
-       $kccontents.="opacdir=$opacdir\n";
-       $kc->{'opacdir'}=1;
-    } else {
-       $kccontents.="$_";
-    }
-}
-
-unless (defined($kc->{'kohaversion'})) {
-    $kccontents.="kohaversion=$newversion\n";
-}
-unless (defined($kc->{'includes'})) {
-    $kccontents.="includes=$intranetdir/htdocs/includes\n";
-}
-unless (defined($kc->{'httpduser'})) {
-    $kccontents.="httpduser=$httpduser\n";
-}
-unless (defined($kc->{'intranetdir'})) {
-    $kccontents.="intranetdir=$intranetdir\n";
-}
-unless (defined($kc->{'opacdir'})) {
-    $kccontents.="opacdir=$opacdir\n";
-}
-unless (defined($kc->{'kohalogdir'})) {
-    $kccontents.="kohalogdir=$kohalogdir\n";
-}
-
-
-system("mv /etc/koha.conf /etc/koha.conf.backup");
-
-open (KC, ">/etc/koha.conf") || warn "Couldn't open /etc/koha.conf for writing.";
-print KC $kccontents;
-close KC;
-
-
-print qq|
-
-Upgrading Database
-==================
-|;
-system ("perl -I $intranetdir/modules scripts/updater/updatedatabase");
-
-
-
-print qq|
-
-==========================
-= Koha Upgrade Completed =
-==========================
-The Koha Upgrade is finished.  If you are upgrading from a version of Koha
-prior to 1.2.1, it is likely that you will have to modify your Apache
-configuration to point it to the new files.
-
-In your INTRANET VirtualHost section you should have:
-  DocumentRoot $intranetdir/htdocs
-  ScriptAlias /cgi-bin/koha/ $intranetdir/cgi-bin/
-  SetEnv PERL5LIB $intranetdir/modules
-
-In the OPAC VirtualHost section you should have:
-  DocumentRoot $opacdir/htdocs
-  ScriptAlias /cgi-bin/koha/ $opacdir/cgi-bin/
-  SetEnv PERL5LIB $intranetdir/modules
-
-You may also need to uncomment a "LoadModules env_module ... " line and restart
-Apache.
-
-Please report any problems you encounter through http://bugs.koha.org/
-|;
+Install::setkohaversion($::newversion);
+checkperlmodules();
+backupmycnf();
+backupkoha();
+getapacheinfo();
+installfiles();
+# custom templates warning added to installfiles();
+updatedatabase();
+restoremycnf();
+finalizeconfigfile();
+
+showmessage(getmessage('UpgradeCompleted',['FIXME','FIXME','FIXME','FIXME','FIXME','FIXME']),'PressEnter');
+
+# my $reply=showmessage('Would you like to complete a survey about your library? [Y]/N: ', 'yn', 'y');
+# if ($reply=~/y/i) {
+#     system("perl kohareporter");
+# }