The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use warnings;
use FindBin;
use Cwd qw/abs_path/;
use YAML::XS qw/DumpFile LoadFile/;
use DBI;
use File::Spec;
use lib File::Spec->catdir( $FindBin::Bin, '..', 'lib' );
use Foorum::Utils qw/get_server_timezone_diff/;
use vars qw/$dbh/;

my $path = abs_path( File::Spec->catdir( $FindBin::Bin, '..' ) );

print "You are going to configure Foorum for your own using.\n",
    '=' x 50,
    "\nPlease report bugs to AUTHORS if u meet any problem.\n\n";

my $foorum_local_file = File::Spec->catfile( $path, 'foorum_local.yml' );
print 'We are saving your configure to ', "$foorum_local_file\n",
    "You can change it by a plain editor (Notepad or Vi) later\n\n";

DBI:

# options
print 'Which Database are u used for Foorum (MySQL, SQLite, Pg): ';
my $db_type;
while ( $db_type = <> ) {
    chomp($db_type);
    if ( 'MySQL' eq $db_type or 'SQLite' eq $db_type or 'Pg' eq $db_type ) {
        last;
    } else {
        print 'Which Database are u used for Foorum (MySQL, SQLite, Pg): ';
    }
}

print "Your $db_type host (localhost by default): ";
my $dns_host = <>;
chomp($dns_host);
$dns_host = 'localhost' unless ($dns_host);

# SQLite don't require user and password
my ( $dns_user, $dns_password ) = ( '', '' );
if ( 'MySQL' eq $db_type or 'Pg' eq $db_type ) {
    print "Your $db_type user (root by default): ";
    $dns_user = <>;
    chomp($dns_user);
    $dns_user = 'root' unless ($dns_user);

    print "Your $db_type pass: ";
    $dns_password = <>;
    chomp($dns_password);
}

$db_type = lc($db_type) if ( 'MySQL' eq $db_type );
my $dns = "dbi:$db_type:database=foorum;host=$dns_host;port=3306";
my $theschwartz_dsn
    = "dbi:$db_type:database=theschwartz;host=$dns_host;port=3306";
if ( 'SQLite' eq $db_type ) {
    $dns             = "dbi:$db_type:$dns_host";
    $theschwartz_dsn = $dns;
    $theschwartz_dsn =~ s/foorum\./theschwartz\./;
}
eval {
    $dbh
        = DBI->connect( $dns, $dns_user, $dns_password,
        { RaiseError => 1, PrintError => 1 } )
        or die $DBI::errstr;
};
if ($@) {
    print "\nError:\n", $@, "\nPlease try it again\n\n";
    goto DBI;
}

print "Set your site domain which will be used in cron email.\n";
print 'Your site domain (http://www.foorumbbs.com/ by default): ';
my $domain = <>;
chomp($domain);
$domain = 'http://www.foorumbbs.com/' unless ($domain);
$domain .= '/';
$domain =~ s/\/+$/\//isg;

my $yaml;
if ( -e $foorum_local_file ) {
    $yaml = LoadFile($foorum_local_file);
}

$yaml->{dsn}             = $dns;
$yaml->{dsn_user}        = $dns_user;
$yaml->{dsn_pwd}         = $dns_password;
$yaml->{theschwartz_dsn} = $theschwartz_dsn;
$yaml->{site}->{domain}  = $domain;

# timezone setting
my $diff = get_server_timezone_diff();
$yaml->{timezonediff} = $diff * 3600;

print "\n\nSaving ....\n\n";
DumpFile( $foorum_local_file, $yaml );

print "Attention! The first user created will be site admin automatically!\n";
my $sql
    = q~INSERT INTO user_role (user_id, role, field) VALUES (1, 'admin', 'site')~;
$dbh->do($sql) or die $DBI::errstr;
print '[OK] ', $sql, "\n";

print '=' x 50, "\nDone!\n", "Thanks For Join US!\n";