<?php
/*
 * Project Name: Config File Merge For Mangos/Trinity Server
 * Date: 01.01.2010 inital version (0.0.1a)
 * Author: Paradox
 * Copyright: Paradox
 * Email: iamparadox@netscape.net (paypal email)
 * License: GNU General Public License v2(GPL)
 */ 

error_reporting(0);

if (!empty($_FILES['File1']) && !empty($_FILES['File2']))
{
    session_id();
    session_start();
    $basedir = "merge";
    $eol = "\r\n";
    if ($_POST['eol'])
        $eol = "\n";
    else
        $eol = "\r\n";
    if (!file_exists($basedir))
        mkdir($basedir);
    if (!file_exists($basedir."/".session_id()))
        mkdir($basedir."/".session_id());
    $upload1 = $basedir."/".session_id()."/".basename($_FILES['File1']['name']);
    $upload2 = $basedir."/".session_id()."/".basename($_FILES['File2']['name']);

    if (strpos($upload1, "worldserver") !== false)
        $newconfig = $basedir."/".session_id()."/worldserver.conf.merge";
    else if (strpos($upload1, "authserver") !== false)
        $newconfig = $basedir."/".session_id()."/authserver.conf.merge";
    else
        $newconfig = $basedir."/".session_id()."/UnkownConfigFile.conf.merge";

    $out_file = fopen($newconfig, "w");
    $success = false;
    if (move_uploaded_file($_FILES['File1']['tmp_name'], $upload1))
    {
        $success = true;
    }
    else
    {
        $success = false;
    }
    if (move_uploaded_file($_FILES['File2']['tmp_name'], $upload2))
    {
        $success = true;
    }
    else
    {
        $success = false;
    }

    if ($success)
    {
        $custom_found = false;
        $in_file1 = fopen($upload1,"r");
        $in_file2 = fopen($upload2,"r");
        $array1 = array();
        $array2 = array();
        $line = trim(fgets($in_file1));
        while (!feof($in_file1))
        {
            if ((substr($line,0,1) != '#' && substr($line,0,1) != ''))
            {
                    list($key, $val) = explode("=",$line);
                    $key = trim($key);
                    $val = trim($val);
                    $array1[$key] = $val;
            }
            $line = trim(fgets($in_file1));
        }
        $line = trim(fgets($in_file2));
        while (!feof($in_file2) && !$custom_found)
        {
            if (substr($line,0,1) != '#' && substr($line,0,1) != '')
            {
                    list($key, $val) = explode("=",$line);
                    $key = trim($key);
                    $val = trim($val);
                    $array2[$key] = $val;
            }
            if (strtolower($line) == "# custom")
               $custom_found = true;
            else
                $line = trim(fgets($in_file2));
        }
        fclose($in_file1);
        foreach($array2 as $k => $v)
        {
            if (array_key_exists($k, $array1))
            {
                $array1[$k] = $v;
                unset($array2[$k]);
            }
        }
        $in_file1 = fopen($upload1,"r");
        $line = trim(fgets($in_file1));
        while (!feof($in_file1))
        {
            if (substr($line,0,1) != '#' && substr($line,0,1) != '')
            {
                $array = array();
                while (substr($line,0,1) != '#' && substr($line,0,1) != '')
                {
                    list($key, $val) = explode("=",$line);
                    $key = trim($key);
                    $val = trim($val);
                    $array[$key] = $val;
                    $line = trim(fgets($in_file1));
                }
                foreach($array as $k => $v)
                {
                    if (array_key_exists($k, $array1))
                        fwrite($out_file, $k."=".$array1[$k].$eol);
                    else
                        continue;
                }
                unset($array);
                if (!feof($in_file1))
                    fwrite($out_file, $line.$eol);
            }
            else
                fwrite($out_file, $line.$eol);
            $line = trim(fgets($in_file1));
        }
        if ($custom_found)
        {
            fwrite($out_file, $eol);
            fwrite($out_file, "###############################################################################".$eol);
            fwrite($out_file, "# Custom".$eol);
            $line = trim(fgets($in_file2));
            while (!feof($in_file2))
            {
                fwrite($out_file, $line.$eol);
                $line = trim(fgets($in_file2));
            }
        }
        $first = true;
        foreach($array2 as $k => $v)
        {
            if ($first)
            {
                fwrite($out_file, $eol);
                fwrite($out_file, "###############################################################################".$eol);
                fwrite($out_file, "#      The Following values were removed from the config.".$eol);
                $first = false;
            }
            fwrite($out_file, "#          ".$k."=".$v.$eol);
        }

        if (strpos($upload1, "worldserver") !== false)
        {
            file_put_contents($newconfig, str_replace("]=","]",file_get_contents($newconfig)));
        }
        else if (strpos($upload1, "authserver") !== false)
        {
            file_put_contents($newconfig, str_replace("]=","]",file_get_contents($newconfig)));
        }

        unset($array1);
        unset($array2);
        fclose($in_file1);
        fclose($in_file2);
        fclose($out_file);
        unlink($upload1);
        unlink($upload2);

        echo "Process done";
        echo "<br /><a href=".$newconfig.">Click here to retrieve your merged conf</a>";
    }
}
else
{
    echo "An error has occurred";
}
?>