#!/usr/bin/php
<?php

/**
 * This file is part of the SysCP project.
 * Copyright (c) 2003-2009 the SysCP Team (see authors).
 *
 * For the full copyright and license information, please view the COPYING
 * file that was distributed with this source code. You can also view the
 * COPYING file online at http://files.syscp.org/misc/COPYING.txt
 *
 * @copyright  (c) the authors
 * @author     Florian Lippert <flo@syscp.org>
 * @license    GPLv2 http://files.syscp.org/misc/COPYING.txt
 * @package    System
 * @version    $Id: install.php 2692 2009-03-27 18:04:47Z flo $
 *
 * The file was copied and modified to properly fit into the installation 
 * process of the Debian package this file now belongs to
 * by Jan Hauke Rahm <info@jhr-online.de>, 2009.
 */

define (INSTALLATION_ROOT, "/usr/share/syscp/");

require (INSTALLATION_ROOT . 'lib/userdata.inc.php');
require (INSTALLATION_ROOT . 'lib/functions.php');
require (INSTALLATION_ROOT . 'lib/class_mysqldb.php');
require (INSTALLATION_ROOT . 'lib/tables.inc.php');

// This file will be creared during postinst via debconf. It just has
// $setup['admin'], $setup['password'], and $setup['webserver']
// and will not be deleted but even reused if the package wasn't purged before.
require ('/etc/syscp/debian.php');

$servername = 'localhost';
$serverip = '127.0.0.1';
$mysql_access_host = 'localhost';
$httpuser = 'www-data';
$httpgroup = 'www-data';

$languages = Array(
    'german' => 'Deutsch',
    'english' => 'English',
    'french' => 'Francais'
);
$language = 'english';

$admin_user = $setup['admin'];
$admin_pass = $setup['password'];
$webserver = $setup['webserver'];
$customer_dir = $setup['customer_dir'];

function remove_remarks($sql) {
    $lines = explode("\n", $sql);
    $sql = "";
    $linecount = count($lines);
    $output = "";
    for ($i = 0;$i < $linecount;$i++) {
	if(($i != ($linecount - 1)) || (strlen($lines[$i]) > 0)) {
	    if(substr($lines[$i], 0, 1) != "#") {
		$output.= $lines[$i] . "\n";
	    } else {
		$output.= "\n";
	    }
	    $lines[$i] = "";
	}
    }
    return $output;
}

function split_sql_file($sql, $delimiter) {
    $tokens = explode($delimiter, $sql);
    $sql = "";
    $output = array();
    $matches = array();

    $token_count = count($tokens);
    for ($i = 0;$i < $token_count;$i++) {
	if(($i != ($token_count - 1)) || (strlen($tokens[$i] > 0))) {
	    $total_quotes = preg_match_all("/'/", $tokens[$i], $matches);
	    $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches);
	    $unescaped_quotes = $total_quotes - $escaped_quotes;
	    if(($unescaped_quotes % 2) == 0) {
		$output[] = $tokens[$i];
		$tokens[$i] = "";
	    } else {
		$temp = $tokens[$i] . $delimiter;
		$tokens[$i] = "";
		$complete_stmt = false;
		for ($j = $i + 1;(!$complete_stmt && ($j < $token_count));$j++) {
		    $total_quotes = preg_match_all("/'/", $tokens[$j], $matches);
		    $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches);
		    $unescaped_quotes = $total_quotes - $escaped_quotes;
		    if(($unescaped_quotes % 2) == 1) {
			$output[] = $temp . $tokens[$j];
			$tokens[$j] = "";
			$temp = "";
			$complete_stmt = true;
			$i = $j;
		    } else {
			$temp.= $tokens[$j] . $delimiter;
			$tokens[$j] = "";
		    }
		}
	    }
	}
    }
    return $output;
}

$db = new db($sql['host'], $sql['user'], $sql['password'], $sql['db']);

$db_schema = INSTALLATION_ROOT . 'install/syscp.sql';
$sql_query = @file_get_contents($db_schema, 'r');
$sql_query = remove_remarks($sql_query);
$sql_query = split_sql_file($sql_query, ';');
for ($i = 0;$i < sizeof($sql_query);$i++) {
    if(trim($sql_query[$i]) != '') {
	if ( $customer_dir != '/var/customers' )
	    $sql_query[$i] = str_replace('/var/customers', $customer_dir, $sql_query[$i]);

	$result = $db->query($sql_query[$i]);
    }
}

$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = 'admin@" . $db->escape($servername) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'adminmail'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($serverip) . "' WHERE `settinggroup` = 'system' AND `varname` = 'ipaddress'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($servername) . "' WHERE `settinggroup` = 'system' AND `varname` = 'hostname'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($version) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'version'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($languages[$language]) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'standardlanguage'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($mysql_access_host) . "' WHERE `settinggroup` = 'system' AND `varname` = 'mysql_access_host'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($webserver) . "' WHERE `settinggroup` = 'system' AND `varname` = 'webserver'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($webserver) . "' WHERE `settinggroup` = 'system' AND `varname` = 'webserver'");

$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($httpuser) . "' WHERE `settinggroup` = 'system' AND `varname` = 'httpuser'");
$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($httpgroup) . "' WHERE `settinggroup` = 'system' AND `varname` = 'httpgroup'");

if($webserver == "apache2")
{
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/sites-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_vhost'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/sites-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_diroptions'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/syscp-htpasswd/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_htpasswddir'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/apache2 reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'");
}
elseif($webserver == "lighttpd")
{
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/conf-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_vhost'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/syscp-diroptions/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_diroptions'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/syscp-htpasswd/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_htpasswddir'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/lighttpd reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'");
	$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/lighttpd.pem' WHERE `settinggroup` = 'system' AND `varname` = 'ssl_cert_file'");
}

$query = 'UPDATE `%s` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\'  AND `varname` = \'lastcronrun\'';
$query = sprintf($query, TABLE_PANEL_SETTINGS);
$db->query($query);

$query = 'INSERT INTO `%s`  SET `ip`   = \'%s\',  `port` = \'80\' ';
$query = sprintf($query, TABLE_PANEL_IPSANDPORTS, $db->escape($serverip));
$db->query($query);
$defaultip = $db->insert_id();

$query = 'UPDATE `%s` SET `value` = \'%s\' WHERE `settinggroup` = \'system\'  AND `varname` = \'defaultip\'';
$query = sprintf($query, TABLE_PANEL_SETTINGS, $db->escape($defaultip));
$db->query($query);

$db->query("INSERT INTO `" . TABLE_PANEL_ADMINS . "` SET
	`loginname` = '" . $db->escape($admin_user) . "',
	`password` = '" . md5($admin_pass) . "',
	`name` = 'Siteadmin',
	`email` = 'admin@" . $db->escape($servername) . "',
	`customers` = -1,
	`customers_used` = 0,
	`customers_see_all` = 1,
	`caneditphpsettings` = 1,
	`domains` = -1,
	`domains_used` = 0,
	`domains_see_all` = 1,
	`change_serversettings` = 1,
	`edit_billingdata` = 1,
	`diskspace` = -1024,
	`diskspace_used` = 0,
	`mysqls` = -1,
	`mysqls_used` = 0,
	`emails` = -1,
	`emails_used` = 0,
	`email_accounts` = -1,
	`email_accounts_used` = 0,
	`email_forwarders` = -1,
	`email_forwarders_used` = 0,
	`email_quota` = -1,
	`email_quota_used` = 0,
	`ftps` = -1,
	`ftps_used` = 0,
	`tickets` = -1,
	`tickets_used` = 0,
	`subdomains` = -1,
	`subdomains_used` = 0,
	`traffic` = -1048576,
	`traffic_used` = 0,
	`deactivated` = 0,
	`aps_packages` = -1");
?>
