#!perl
# Imports WebPub.
# Called by import.
#
BEGIN {
    @INC = ( '../../perl' );
}
use Cgi;
use BinUtil;
use Magnus;

$| = 1;
$isNT = -d '\\';
if ($isNT) {
    $os = "WINNT";
    # make substitution case insensitive
    $checkCase = '(?i)';
} else {
    chomp($os = `uname -s`);
    $checkCase = '';
}

$rootDir = $ENV{'NETSITE_ROOT'};
$sname = "https-$cgiVars{'name'}";
$trail = substr($cgiVars{'dir'}, length($cgiVars{'dir'})-1, length($cgiVars{'dir'}));
if ($trail eq "/" || $trail eq "\\") {
    chop($cgiVars{'dir'});
}
$newHome = "$rootDir/https-$cgiVars{'name'}";
$oldHome = "$cgiVars{'dir'}/$cgiVars{'server'}";


# assimilate webpub.conf
if (-e "$oldHome/config/webpub.conf") {
    print "Assimilating <CODE>webpub.conf</CODE>...\n";
    my $src = "$oldHome/config/webpub.conf";
    my $dest = "$newHome/config/webpub.conf";
    if ($cgiVars{'version'} eq "3.6" && $os =~ /AIX/) {
	# need to change name from _shr.a to .so
	open(SRC, $src) or die "<FONT COLOR=\"red\">[Error]</FONT> Cannot read $src: $!\n";
	open(DEST, "> $dest") or die "<FONT COLOR=\"red\">[Error]</FONT> Cannot edit $dest: $!.\n";	while (<SRC>) {
	    $_ =~ s/_shr\.a/\.so/;
	    print DEST $_;
	}
	close(SRC);
	close(DEST);
    } else {
      BinUtil::copyFile($src, $dest);
    }
    BinUtil::fixPaths($dest, 4,
		      "$cgiVars{'dir'}/bin/https/admin/bin", $oldHome, $cgiVars{'dir'}, "/admin-serv",
		      "$rootDir/bin/https/httpadmin/bin", $newHome, $rootDir, "/https-admserv",
		      '/search', '/logs', '/plugins');
    # backup webpub.conf
    BinUtil::backupFile($newHome, $sname, "webpub.conf");
}

# copy webpub.clfilter file
BinUtil::copyFile("$oldHome/config/webpub.conf.clfilter", "$newHome/config/webpub.conf.clfilter");

# create webpub dir
mkdir("$newHome/search", 0755);
# determine which collections were selected
my @collections = ();
my $x;
for ($x = 1; $x <= $cgiVars{'search'}; $x++) {
    if ($cgiVars{"collection$x"} && !($cgiVars{"collection$x"} eq "IGNORE")) {
	push(@collections, $cgiVars{"collection$x"});
    }
}
# figure out document root
my $docroot = "";
open(OBJ, "$newHome/config/obj.conf") or
    die "<FONT COLOR=\"red\">[Error]</FONT> Cannot read $newHome/config/obj.conf: $!.\n";
while (<OBJ>) {
    if (/document-root/ && /root=\"?([^\"^\s]*)\"?/) {
	$docroot = $1;
	last;
    }
}
close OBJ;
# assimilate dblist.ini
print "Assimilating <CODE>dblist.ini</CODE>...\n";
mkdir("$newHome/search/admin", 0755);
BinUtil::copyFile("$oldHome/search/admin/dblist.ini", "$newHome/search/admin/dblist.ini");
open(DBLIST, "$newHome/search/admin/dblist.ini") or
    die "<FONT COLOR=\"red\">[Error]</FONT> Cannot read $newHome/search/admin/dblist.ini: $!.\n";
my @data = ();
my $match;
my $curCollection;
if ($docroot eq "") {
    die "<FONT COLOR=\"red\">[Error]</FONT> Document root not specified in $newHome/config/obj.conf.\n";
}
while (<DBLIST>) {
  HEAD: {
      if (/^\[(\S*)\]/) {
	  $match = 0;
	  foreach $collection (@collections) {
	      if ($1 eq $collection) {
		  $match = 1;
		  $curCollection = $collection;
		  last;
	      }
	  }
	  if (!$match) {
	      # discard this collection
	      while (<DBLIST>) {
		  goto HEAD if /^\[(\S*)\]/;
	      }
	  }
      } elsif (/NS-idx-path/) {
	  # translate NS-idx-path
	  s/$checkCase$oldHome/$newHome/;
      } elsif ($curCollection eq "web_htm") {
	  # use new doc root
	  if (/NS-doc-root/) {
	      $_ = "NS-doc-root=$docroot\n";
	  }
      }
  }
    push(@data, $_);
}
close DBLIST;
open(DBLIST, "> $newHome/search/admin/dblist.ini") or
    die "<FONT COLOR=\"red\">[Error]</FONT> Cannot edit $newHome/search/admin/dblist.ini: $!\n";
print DBLIST @data;
close DBLIST;

# assimilate collections
mkdir("$newHome/search/collections", 0755);
if (scalar(@collections)) {
    print "Assimilating collections.  This may take a while...\n";
    foreach $collection  (@collections) {
      BinUtil::copyDir("$oldHome/search/collections/$collection", "$newHome/search/collections",
		       "$collection");
    }
}

# assimilate search pattern files
if ($cgiVars{'search-pat'}) {
    my $srcdir = "$cgiVars{'dir'}/plugins/search";
    my $destdir = "$rootDir/plugins/search";
    print "Assimilating pattern files...\n";
    BinUtil::copyDir("$destdir/admin/en", "$destdir/admin/en.bak");
    BinUtil::copyDir("$srcdir/admin/en", "$destdir/admin", "en");
    BinUtil::copyDir("$destdir/ui/text", "$destdir/ui/text.bak");
    BinUtil::copyDir("$srcdir/ui/text", "$destdir/ui", "text");
    BinUtil::copyDir("$destdir/ui/icons", "$destdir/ui/icons.bak");
    BinUtil::copyDir("$srcdir/ui/icons", "$destdir/ui", "icons");    
    print "Original pattern files have been backed up with a .bak extension.\n";
}

if (!$isNT) {
    # check for valid permissions
    @userInfo = getpwnam($cgiVars{'user'});
    BinUtil::recursiveChown($userInfo[2], $userInfo[3],
			    "$newHome/search/admin", 
			    "$newHome/search/collections");
}
