<?php
/**
 * Extension to manage a list of gateways and the node address where they should
 * point to.
 *
 * @category   Extensions
 * @package    Pandora FMS
 * @subpackage Community
 * @version    1.0.0
 * @license    See below
 *
 *    ______                 ___                    _______ _______ ________
 *   |   __ \.-----.--.--.--|  |.-----.----.-----. |    ___|   |   |     __|
 *  |    __/|  _  |     |  _  ||  _  |   _|  _  | |    ___|       |__     |
 * |___|   |___._|__|__|_____||_____|__| |___._| |___|   |__|_|__|_______|
 *
 * ============================================================================
 * Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
 * Please see http://pandorafms.org for full contribution list
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation for version 2.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * ============================================================================
 */

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>Pandora FMS - Installation Wizard</title>
        <meta http-equiv="expires" content="0">
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <meta name="resource-type" content="document">
        <meta name="distribution" content="global">
        <meta name="author" content="Pandora FMS Development Team">
        <meta name="copyright" content="This is GPL software. Created by Sancho Lerena and many others">
        <meta name="keywords" content="pandora, fms, monitoring, network, system, GPL, software">
        <meta name="robots" content="index, follow">
        <link rel="icon" href="images/pandora.ico" type="image/ico">
        <link rel="stylesheet" href="include/styles/install.css" type="text/css">
    </head>
    <script type="text/javascript">
        options_text = new Array('An existing Database','A new Database');
        options_values = new Array('db_exist','db_new');

        var userHasConfirmed = false;

        function ChangeDBDrop(causer) {
            if (causer.value != 'db_exist') {
                window.document.step2_form.drop.checked = 0;
                window.document.step2_form.drop.disabled = 1;
            }
            else {
                window.document.step2_form.drop.disabled = 0;
            }
        }
        function ChangeDBAction(causer) {
            var i = 0;
            if (causer.value == 'oracle') {
                window.document.step2_form.db_action.length = 1;
            }
            else {
                window.document.step2_form.db_action.length = 2;
            }
            while (i < window.document.step2_form.db_action.length) {
                window.document.step2_form.db_action.options[i].value = options_values[i];
                window.document.step2_form.db_action.options[i].text = options_text[i];
                i++;
            }
            window.document.step2_form.db_action.options[window.document.step2_form.db_action.length-1].selected=1;
            ChangeDBDrop(window.document.step2_form.db_action);
        }
        function CheckDBhost(value){
            if (( value != "localhost") && ( value != "127.0.0.1")) {
                document.getElementById('tr_dbgrant').style["display"] = "block";
            }
            else {
                document.getElementById('tr_dbgrant').style["display"] = "none";
            }
        }
        function popupShow(){
            document.getElementsByTagName('body')[0].style["margin"] = "0";
            document.getElementById('install_container').style["padding-top"] = "45px";
            document.getElementById('install_container').style["margin-top"] = "0";
            document.getElementById('add-lightbox').style["visibility"] = "visible";
            document.getElementById('open_popup').style["display"] = "block";
            document.getElementById('open_popup').style["visibility"] = "visible";
        }
        function popupClose(){
            document.getElementById('add-lightbox').style["visibility"] = "hidden";
            document.getElementById('open_popup').style["display"] = "none";
            document.getElementById('open_popup').style["visibility"] = "hidden";
        }
        function handleConfirmClick (event) {
            userHasConfirmed = true;
            var step3_form = document.getElementsByName('step2_form')[0];
            step3_form.submit();
        }
        function handleStep3FormSubmit (event) {
            var dbOverride = document.getElementById("drop").checked;
            if (dbOverride && !userHasConfirmed) {
                event.preventDefault();
                popupShow();
                return false;
            }
        }
    </script>
    <body>
        <div id='add-lightbox' onclick='popupClose();' class='popup-lightbox'></div>
        <div id='open_popup' class='popup' style='visibility:hidden;display: block;'>
            <div class='popup-title'>
                <span id='title_popup'>Warning</span>
                <a href='#' onclick='popupClose();'><img src='./images/icono_cerrar.png' alt='close' title='Close' style='float:right;'/></a>
            </div>
            <div class='popup-inner' style='padding: 20px 40px;'>
            <?php
            echo '<p><strong>Attention</strong>, you are going to <strong>overwrite the data</strong> of your current installation.</p><p>This means that if you do not have a backup <strong>you will irremissibly LOSE ALL THE STORED DATA</strong>, the configuration and everything relevant to your installation.</p><p><strong>Are you sure of what you are going to do?</strong></p>';
                echo "<div style='text-align:right;';>";
                echo "<button type='button' class='btn_install_next' onclick='javascript:handleConfirmClick();'><span class='btn_install_next_text'>Yes, I'm sure I want to delete everything</span></button>";
                echo "<button type='button' class='btn_install_next popup-button-green' onclick='javascript:popupClose();'><span class='btn_install_next_text'>Cancel</span></button>";
                echo '</div>';
            ?>
            </div>
        </div>
        <div style='height: 10px'>
            <?php
            $version = '7.0NG.767';
            $build = '221221';
            $banner = "v$version Build $build";

            error_reporting(0);

            // ---------------
            // Main page code
            // ---------------
            if (! isset($_GET['step'])) {
                install_step1();
            } else {
                $step = $_GET['step'];
                switch ($step) {
                    case 11: install_step1_licence();
                    break;

                    case 2: install_step2();
                    break;

                    case 3: install_step3();
                    break;

                    case 4: install_step4();
                    break;

                    case 5: install_step5();
                    break;
                }
            }
            ?>
        </div>
    </body>
</html>

<?php
function check_extension($ext, $label)
{
    echo '<tr><td>';
    echo "<span class='arr'> $label </span>";
    echo '</td><td>';
    if (!extension_loaded($ext)) {
        echo "<img src='images/dot_red.png'>";
        return 1;
    } else {
        echo "<img src='images/dot_green.png'>";
        return 0;
    }

    echo '</td></tr>';
}

function check_include($ext, $label)
{
    echo '<tr><td>';
    echo "<span class='arr'> $label </span>";
    echo '</td><td>';
    if (!include $ext) {
        echo "<img src='images/dot_red.png'>";
        return 1;
    } else {
        echo "<img src='images/dot_green.png'>";
        return 0;
    }

    echo '</td></tr>';
}


function check_exists($file, $label)
{
    echo '<tr><td>';
    echo "<span class='arr'> $label </span>";
    echo '</td><td>';
    if (!file_exists($file)) {
        echo " <img src='images/dot_red.png'>";
        return 1;
    } else {
        echo " <img src='images/dot_green.png'>";
        return 0;
    }

    echo '</td></tr>';
}


function check_generic($ok, $label)
{
    echo "<tr><td style='width:10%'>";
    if ($ok == 0) {
        echo " <img src='images/dot_red.png'>";
        echo '<td>';
        echo "<span class='arr'> $label </span>";
        echo '</td>';
        echo '</td></tr>';
        return 1;
    } else {
        echo " <img src='images/dot_green.png'>";
        echo '<td>';
        echo "<span class='arr'> $label </span>";
        echo '</td>';
        echo '</td></tr>';
        return 0;
    }
}


function check_writable($fullpath, $label)
{
    echo "<tr><td style='width:10%;'>";
    if (file_exists($fullpath)) {
        if (is_writable($fullpath)) {
            echo " <img style='margin-left:50px;' src='images/dot_green.png'>";
            echo '<td>';
            echo "<span class='arr'> $label </span>";
            echo '</td>';
            echo '</td></tr>';
            return 0;
        } else {
            echo " <img style='margin-left:50px;' src='images/dot_red.png'>";
            echo '<td>';
            echo "<span class='arr'> $label </span>";
            echo '</td>';
            echo '</td></tr>';
            return 1;
        }
    } else {
        echo " <img style='margin-left:50px;' src='images/dot_red.png'>";
        echo '<td>';
        echo "<span class='arr'> $label </span>";
        echo '</td>';
        echo '</td></tr>';
        return 1;
    }
}


function check_variable($var, $value, $label, $mode)
{
    echo '<tr><td>';
    echo "<span class='arr'> $label </span>";
    echo '</td><td>';
    if ($mode == 1) {
        if ($var >= $value) {
            echo " <img src='images/dot_green.png'>";
            return 0;
        } else {
            echo " <img src='images/dot_red.png'>";
            return 1;
        }
    } else if ($var == $value) {
        echo " <img src='images/dot_green.png'>";
        return 0;
    } else {
        echo " <img src='images/dot_red.png'>";
        return 1;
    }

    echo '</td></tr>';
}


function parse_mysql_dump($url)
{
    if (file_exists($url)) {
        $file_content = file($url);
        $query = '';
        foreach ($file_content as $sql_line) {
            if (trim($sql_line) != '' && strpos($sql_line, '-- ') === false) {
                $query .= $sql_line;
                if (preg_match("/;[\040]*\$/", $sql_line)) {
                    if (!$result = mysql_query($query)) {
                        echo mysql_error();
                        // Uncomment for debug
                        echo "<i><br>$query<br></i>";
                        return 0;
                    }

                    $query = '';
                }
            }
        }

        return 1;
    } else {
        return 0;
    }
}


function parse_mysqli_dump($connection, $url)
{
    if (file_exists($url)) {
        $file_content = file($url);
        $query = '';
        foreach ($file_content as $sql_line) {
            if (trim($sql_line) != '' && strpos($sql_line, '-- ') === false) {
                $query .= $sql_line;
                if (preg_match("/;[\040]*\$/", $sql_line)) {
                    if (!$result = mysqli_query($connection, $query)) {
                        echo mysqli_error($connection);
                        // Uncomment for debug
                        echo "<i><br>$query<br></i>";
                        return 0;
                    }

                    $query = '';
                }
            }
        }

        return 1;
    } else {
        return 0;
    }
}


/**
 * Generate a random password
 *
 * Admits a huge mount of ASCII chars.
 *
 * @param integer $size Size of the password returned.
 *
 * @return string $output
 */
function random_name(int $size)
{
    $output = '';

    // Range pair of ASCII position for allow A-Z, a-z, 0-9 and special chars.
    $rangeSeed = [
        '48:57',
        '65:90',
        '97:122',
        '40:47',
    ];

    // Size of the password must be over range seed count.
    $size = ($size >= count($rangeSeed)) ? $size : count($rangeSeed);

    $auxIndex = 0;
    for ($i = 0; $i < $size; $i++) {
        $tmpSeedValues = explode(':', $rangeSeed[$auxIndex]);
        $output = $output.chr(rand($tmpSeedValues[1], $tmpSeedValues[0]));
        $auxIndex++;
        if ($auxIndex >= 4) {
            $auxIndex = 0;
        }
    }

    // Remix the string for strong the password.
    return str_shuffle($output);
}


function print_logo_status($step, $step_total)
{
    global $banner;

    $header = "
		<div id='logo_img' style='width: 100%;'>
			<div style='width:100%; background-color:#333333;'>
				<img src='images/logo_opensource.png' border='0'><br>
				<span style='font-size: 9px;'>$banner</span>
			</div>
		</div>";
    $header .= "
		<div class='installation_step'>
			<b>Install step $step of $step_total</b>
		</div>";

    return $header;
}


//
// This function adjusts path settings in pandora db for FreeBSD.
//
// All packages and configuration files except operating system's base files
// are installed under /usr/local in FreeBSD. So, path settings in pandora db
// for some programs should be changed from the Linux default.
//
function adjust_paths_for_freebsd($engine, $connection=false)
{
    $adjust_sql = [
        "update trecon_script set script = REPLACE(script,'/usr/share','/usr/local/share');",
        "update tconfig set value = REPLACE(value,'/usr/bin','/usr/local/bin') where token='netflow_daemon' OR token='netflow_nfdump' OR token='netflow_nfexpire';",
        "update talert_commands set command = REPLACE(command,'/usr/bin','/usr/local/bin');",
        "update talert_commands set command = REPLACE(command,'/usr/share', '/usr/local/share');",
        "update tplugin set execute = REPLACE(execute,'/usr/share','/usr/local/share');",
        "update tevent_response set target = REPLACE(target,'/usr/share','/usr/local/share');",
        "insert into tconfig (token, value) VALUES ('graphviz_bin_dir', '/usr/local/bin');",
    ];

    for ($i = 0; $i < count($adjust_sql); $i++) {
        switch ($engine) {
            case 'mysql':
                $result = mysql_query($adjust_sql[$i]);
            break;

            case 'mysqli':
                $result = mysqli_query($connection, $adjust_sql[$i]);
            break;

            case 'oracle':
                // Delete the last semicolon from current query
                $query = substr($adjust_sql[$i], 0, (strlen($adjust_sql[$i]) - 1));
                $sql = oci_parse($connection, $query);
                $result = oci_execute($sql);
            break;

            case 'pgsql':
                pg_send_query($connection, $adjust_sql[$i]);
                $result = pg_get_result($connection);
            break;
        }

        if (!$result) {
            return 0;
        }
    }

    return 1;
}


function install_step1()
{
    global $banner;

    echo "
	<div id='install_container'>
	<div id='wizard'>
	".print_logo_status(1, 6)."
		<div id='install_box'>
			<h2>Welcome to Pandora FMS installation Wizard</h2>
			<p>This wizard helps you to quick install Pandora FMS console and main database in your system.</p>
			<p>In four steps, this installer will check all dependencies and will create your configuration, ready to use.</p>
			<p>For more information, please refer to documentation.<br>
			<i>Pandora FMS Development Team</i></p>
		";
    if (file_exists('include/config.php')) {
        echo "<div class='warn'><b>Warning:</b> You already have a config.php file. 
			Configuration and database would be overwritten if you continued.</div>";
    }

        echo '<br>';
        echo '<table width=100%>';
        $writable = check_writable('include', 'Checking if ./include is writable');
    if (file_exists('include/config.php')) {
        $writable += check_writable('include/config.php', 'Checking if include/config.php is writable');
    }

        echo '</table>';

        echo "<div class='warn'><b>Warning:</b> This installer will <b>overwrite and destroy</b> 
		your existing Pandora FMS configuration and <b>Database</b>. Before continue, 
		please <b>be sure that you have no valuable Pandora FMS data in your Database</b>.<br>
		</div>";

        echo "<div class='info'><b>Upgrade</b>: 
		If you want to upgrade from Pandora FMS 4.x to 5.0 version, please use the migration tool inside /extras directory in this setup.
		</div>";

        echo '<br>';

    if ($writable == 0) {
        echo "<div style='text-align:right; width:100%;'>";
        echo "<a id='step11' href='install.php?step=11'><button type='submit' class='btn_install_next'><span class='btn_install_next_text'>Next</span></button></a>";
        echo '</div>';
    } else {
        echo "<div class='err'><b>ERROR:</b>You need to setup permissions to be able to write in ./include directory</div>";
    }

        echo '</div>';

        echo "<div style='clear:both;'></div>";
        echo "
	</div>
	<div id='foot_install'>
		<i>Pandora FMS is an OpenSource Software project registered at 
		<a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i>
	</div>
	</div>";
}


function install_step1_licence()
{
    echo "
	<div id='install_container'>
	<div id='wizard'>
	".print_logo_status(2, 6)."
		<div id='install_box'>
			<h2>GPL2 Licence terms agreement</h2>
			<p>Pandora FMS is an OpenSource software project licensed under the GPL2 licence. Pandora FMS includes, as well, another software also licensed under LGPL and BSD licenses. Before continue, <i>you must accept the licence terms.</i>.
			<p>For more information, please refer to our website at http://pandorafms.org and contact us if you have any kind of question about the usage of Pandora FMS</p>
<p>If you dont accept the licence terms, please, close your browser and delete Pandora FMS files.</p>
		";

    if (!file_exists('COPYING')) {
        echo "<div class='warn'><b>Licence file 'COPYING' is not present in your distribution. This means you have some 'partial' Pandora FMS distribution. We cannot continue without accepting the licence file.</b>";
        echo '</div>';
    } else {
        echo "<form method=post action='install.php?step=2'>";
        echo "<textarea name='gpl2' cols=52 rows=15 style='width: 100%;'>";
        echo file_get_contents('COPYING');
        echo '</textarea>';
        echo '<p>';
        echo "<div style='text-align: right;'><button id='btn_accept' class='btn_install_next' type='submit'><span class='btn_install_next_text'>Yes, I accept licence terms</span></button></div>";
    }

    echo '</div>';

    echo "</div>
	<div style='clear: both;height: 1px;'><!-- --></div>
	<div id='foot_install'>
		<i>Pandora FMS is an OpenSource Software project registered at 
		<a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i>
	</div>
	</div>";
}


function install_step2()
{
    echo "
	<div id='install_container'>
	<div id='wizard'>
	".print_logo_status(3, 6)."
		<div id='install_box'>";
        echo '<h2>Checking software dependencies</h2>';
            echo '<table border=0 width=230>';
            $res = 0;
            $res += check_variable(phpversion(), '7.0', 'PHP version >= 7.0', 1);
            $res += check_extension('gd', 'PHP GD extension');
            $res += check_extension('ldap', 'PHP LDAP extension');
            $res += check_extension('snmp', 'PHP SNMP extension');
            $res += check_extension('session', 'PHP session extension');
            $res += check_extension('gettext', 'PHP gettext extension');
            $res += check_extension('mbstring', 'PHP Multibyte String');
            $res += check_extension('zip', 'PHP Zip');
            $res += check_extension('zlib', 'PHP Zlib extension');
            $res += check_extension('json', 'PHP json extension');
            $res += check_extension('curl', 'CURL (Client URL Library)');
            $res += check_extension('filter', 'PHP filter extension');
            $res += check_extension('calendar', 'PHP calendar extension');
    if (PHP_OS == 'FreeBSD') {
        $res += check_exists('/usr/local/bin/twopi', 'Graphviz Binary');
    } else if (PHP_OS == 'NetBSD') {
        $res += check_exists('/usr/pkg/bin/twopi', 'Graphviz Binary');
    } else if (substr(PHP_OS, 0, 3) == 'WIN') {
        $res += check_exists("..\\..\\..\\Graphviz\\bin\\twopi.exe", 'Graphviz Binary');
    } else {
        $res += check_exists('/usr/bin/twopi', 'Graphviz Binary');
    }

            echo '<tr><td>';
            echo "<span style='display: block; font-family: verdana,arial,sans;
				font-size: 8.5pt;margin-top: 2px; font-weight: bolder;'>DB Engines</span>";
            echo '</td><td>';
            echo '</td></tr>';
            check_extension('mysqli', 'PHP MySQL(mysqli) extension');
            echo '</table>';

    if ($res > 0) {
        echo "
				<div class='err'>You have some incomplete 
				dependencies. Please correct them or this installer 
				will not be able to finish your installation.
				</div>
				<div class='err'>
					Remember, if you install any PHP module to comply
					with these dependences, you <b>need to restart</b>
					your HTTP/Apache server after it to use the new
					modules.
				</div>
				<div style='text-align:right; width:100%;'>
				Ignore it. <a id='step3' href='install.php?step=3' style='font-weight: bolder;'><button class='btn_install_next' type='submit'><span class='btn_install_next_text'>Force install Step #3</span></button></a>
				</div>";
    } else {
        echo "<div style='text-align:right; width:100%;'>";
        echo "<a id='step3' href='install.php?step=3'>
				<button class='btn_install_next' type='submit'><span class='btn_install_next_text'>Next</span></button></a>";
        echo '</div>';
    }

            echo '</div>';
            echo "<div style='clear: both;'><!-- --></div>";
            echo "
		</div>
		<div style='clear: both;'><!-- --></div>
	</div>
	<div id='foot_install'>
		<i>Pandora FMS is an OpenSource Software project registered at 
		<a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i>
	</div>
	</div>";
}


function install_step3()
{
    $options = '';
    if (extension_loaded('mysql')) {
        $options .= "<option value='mysql'>MySQL</option>";
    }

    if (extension_loaded('mysqli')) {
        $options .= "<option value='mysqli'>MySQL(mysqli)</option>";
    }

    $error = false;
    if (empty($options)) {
        $error = true;
    }

    echo "
	<div id='install_container'>
	<div id='wizard'>
	".print_logo_status(4, 6)."
		<div id='install_box'>
			<h2>Environment and database setup</h2>
			<p>
			This wizard will create your Pandora FMS database, 
			and populate it with all the data needed to run for the first time.
			</p>
			<p>
			You need a privileged user to create database schema, this is usually <b>root</b> user.
			Information about <b>root</b> user will not be used or stored anymore.	
			</p>
			<p>
			You can also deploy the scheme into an existing Database. 
			In this case you need a privileged Database user and password of that instance. 
			</p>
			<p>
			Now, please, complete all details to configure your database and environment setup.
			</p>
			<div class='warn'>
			<b>Warning:</b> This installer will <b>overwrite and destroy</b> your existing 
			Pandora FMS configuration and <b>Database</b>. Before continue, 
			please <b>be sure that you have no valuable Pandora FMS data in your Database.</b>
			<br><br>
			</div>";

    if (extension_loaded('oci8')) {
        echo " <div class='warn'>For Oracle installation an existing Database with a privileged user is needed.</div>";
    }

    if (!$error) {
        echo "<form method='post' name='step2_form' action='install.php?step=4'>";
    }

    echo "<table cellpadding=6 width=100% border=0 style='text-align: left;'>";
    echo '<tr><td>';
    echo 'DB Engine<br>';

    if ($error) {
        echo "
			<div class='warn'>
			<b>Warning:</b> You haven't a any DB engine with PHP. Please check the previous step to DB engine dependencies.
			</div>";
    } else {
        echo "<select name='engine' onChange=\"ChangeDBAction(this)\">";
        echo $options;
        echo '</select>';

        echo '<td>';
        echo ' Installation in <br>';
        echo "<select name='db_action' onChange=\"ChangeDBDrop(this)\">";
        echo "<option value='db_new'>A new Database</option>";
        echo "<option value='db_exist'>An existing Database</option>";
        echo '</select>';
    }

    echo "		<tr><td>DB User with privileges<br>
				<input class='login' type='text' name='user' value='root' size=20>
				
				<td>DB Password for this user<br>
				<input class='login' type='password' name='pass' value='' size=20>
				
				<tr><td>DB Hostname<br>
				<input class='login' type='text' name='host' value='localhost' onkeyup='CheckDBhost(this.value);'size=20>
				
				<td>DB Name (pandora by default)<br>
				<input class='login' type='text' name='dbname' value='pandora' size=20>
				
				<tr>";

    // the field dbgrant is only shown when the DB host is different from 127.0.0.1 or localhost
    echo "<tr id='tr_dbgrant' style='display:none;'>
                            <td colspan=\"2\">DB Host Access <img style='cursor:help;' src='/pandora_console/images/tip.png' title='Ignored if DB Hostname is localhost or 127.0.0.1'/><br>
                            <input class='login' type='text' name='dbgrant' value='".$_SERVER['SERVER_ADDR']."' size=20>
                        </td>
                    </tr>";

    echo "   <td valign=top>Drop Database if exists<br>
			        <input class='login' type='checkbox' name='drop' id='drop' value=1>
			    </td>";

    echo "<td>Full path to HTTP publication directory<br>
					<span style='font-size: 9px'>For example /var/www/pandora_console/</span>
				<br>
				<input class='login' type='text' name='path' style='width: 240px;' 
				value='".dirname(__FILE__)."'>
				
				<tr>";
    echo '<td>';
    echo "<td>URL path to Pandora FMS Console<br>
				<span style='font-size: 9px'>For example '/pandora_console'</span>
				</br>
				<input class='login' type='text' name='url' style='width: 250px;' 
				value='".dirname($_SERVER['SCRIPT_NAME'])."'>
			</table>
			";

    if (!$error) {
        echo "<div style='text-align:right; width:100%;'>";
        echo "<a id='step4' href='install.php?step=4'>
					<button class='btn_install_next' type='submit' id='step4button'><span class='btn_install_next_text'>Next</span></button></a>";
        echo '</div>';
        ?>
        <script type="text/javascript">
            var step3_form = document.getElementsByName('step2_form')[0];
            step3_form.addEventListener("submit", handleStep3FormSubmit);
        </script>
        <?php
    }

    echo '</div>';

    echo '</form>';

    echo "<div style='clear:both;'></div>";
    echo "</div>
		<div id='foot_install'>
			<i>Pandora FMS is an OpenSource Software project registered at 
			<a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i>
		</div>
	</div>";
}


function install_step4()
{
    $pandora_config = 'include/config.php';

    if ((! isset($_POST['user'])) || (! isset($_POST['dbname'])) || (! isset($_POST['host']))
        || (! isset($_POST['pass'])) || (!isset($_POST['engine'])) || (! isset($_POST['db_action']))
    ) {
        $dbpassword = '';
        $dbuser = '';
        $dbhost = '';
        $dbname = '';
        $engine = '';
        $dbaction = '';
        $dbgrant = '';
    } else {
        $engine = $_POST['engine'];
        $dbpassword = $_POST['pass'];
        $dbuser = $_POST['user'];
        $dbhost = $_POST['host'];
        $dbaction = $_POST['db_action'];
        if (isset($_POST['dbgrant']) && $_POST['dbgrant'] != '') {
            $dbgrant = $_POST['dbgrant'];
        } else {
            $dbgrant = $_SERVER['SERVER_ADDR'];
        }

        if (isset($_POST['drop'])) {
            $dbdrop = $_POST['drop'];
        } else {
            $dbdrop = 0;
        }

        $dbname = $_POST['dbname'];
        if (isset($_POST['url'])) {
            $url = $_POST['url'];
        } else {
            $url = 'http://localhost';
        }

        if (isset($_POST['path'])) {
            $path = $_POST['path'];
            $path = str_replace('\\', '/', $path);
            // Windows compatibility
        } else {
            $path = '/var/www';
        }
    }

    $everything_ok = 0;
    $step1 = 0;
    $step2 = 0;
    $step3 = 0;
    $step4 = 0;
    $step5 = 0;
    $step6 = 0;
    $step7 = 0;

    echo "
	<div id='install_container'>
	<div id='wizard'>
	".print_logo_status(5, 6)."
		<div id='install_box'>
			<h2>Creating database and default configuration file</h2>
			<table width='100%'>";
    switch ($engine) {
        case 'mysql':
            if (! mysql_connect($dbhost, $dbuser, $dbpassword)) {
                check_generic(0, 'Connection with Database');
            } else {
                check_generic(1, 'Connection with Database');

                // Drop database if needed and don't want to install over an existing DB
                if ($dbdrop == 1) {
                    mysql_query("DROP DATABASE IF EXISTS `$dbname`");
                }

                // Create schema
                if ($dbaction == 'db_new' || $dbdrop == 1) {
                    $step1 = mysql_query("CREATE DATABASE `$dbname`");
                    check_generic($step1, "Creating database '$dbname'");
                } else {
                    $step1 = 1;
                }

                if ($step1 == 1) {
                    $step2 = mysql_select_db($dbname);
                    check_generic($step2, "Opening database '$dbname'");

                    $step3 = parse_mysql_dump('pandoradb.sql');
                    check_generic($step3, 'Creating schema');

                    $step4 = parse_mysql_dump('pandoradb_data.sql');
                    check_generic($step4, 'Populating database');
                    if (PHP_OS == 'FreeBSD') {
                        $step_freebsd = adjust_paths_for_freebsd($engine);
                        check_generic($step_freebsd, 'Adjusting paths in database for FreeBSD');
                    }

                    $random_password = random_name(8);
                    $host = $dbhost;
                    // set default granted origin to the origin of the queries
                    if (($dbhost != 'localhost') && ($dbhost != '127.0.0.1')) {
                        $host = $dbgrant;
                        // if the granted origin is different from local machine, set the valid origin
                    }

                    $step5 = mysql_query(
                        "GRANT ALL PRIVILEGES ON `$dbname`.* to pandora@$host 
								IDENTIFIED BY '".$random_password."'"
                    );
                    mysql_query('FLUSH PRIVILEGES');
                    check_generic($step5, "Established privileges for user pandora. A new random password has been generated: <b>$random_password</b><div class='warn'>Please write it down, you will need to setup your Pandora FMS server, editing the </i>/etc/pandora/pandora_server.conf</i> file</div>");

                    $step6 = is_writable('include');
                    check_generic($step6, "Write permissions to save config file in './include'");

                    $cfgin = fopen('include/config.inc.php', 'r');
                    $cfgout = fopen($pandora_config, 'w');
                    $config_contents = fread($cfgin, filesize('include/config.inc.php'));
                    $dbtype = 'mysql';
                    $config_new = '<?php
							// Begin of automatic config file
							$config["dbtype"] = "'.$dbtype.'"; //DB type (mysql, postgresql...in future others)
							$config["dbname"]="'.$dbname.'";			// MySQL DataBase name
							$config["dbuser"]="pandora";			// DB User
							$config["dbpass"]="'.$random_password.'";	// DB Password
							$config["dbhost"]="'.$dbhost.'";			// DB Host
                            $config["homedir"]="'.$path.'";		// Config homedir
                            // ----------Rebranding--------------------
                            // Uncomment this lines and add your customs text and paths.
                            // $config["custom_logo_login_alt"] ="login_logo.png";
                            // $config["custom_splash_login_alt"] = "splash_image_default.png";
                            // $config["custom_title1_login_alt"] = "WELCOME TO Pandora FMS";
                            // $config["custom_title2_login_alt"] = "NEXT GENERATION";
                            // $config["rb_product_name_alt"] = "Pandora FMS";
                            // $config["custom_docs_url_alt"] = "http://wiki.pandorafms.com/";
                            // $config["custom_support_url_alt"] = "https://support.pandorafms.com";


                        
							/*
							----------Attention--------------------
							Please note that in certain installations:
								- reverse proxy.
								- web server in other ports.
								- https
							
							This variable might be dynamically altered.
							
							But it is save as backup in the
							$config["homeurl_static"]
							for expecial needs.
							----------Attention--------------------
							*/
							$config["homeurl"]="'.$url.'";			// Base URL
							$config["homeurl_static"]="'.$url.'";			// Don\'t  delete
							// End of automatic config file
							?>';
                    $step7 = fputs($cfgout, $config_new);
                    $step7 = ($step7 + fputs($cfgout, $config_contents));
                    if ($step7 > 0) {
                        $step7 = 1;
                    }

                    fclose($cfgin);
                    fclose($cfgout);
                    chmod($pandora_config, 0600);
                    check_generic($step7, "Created new config file at '".$pandora_config."'");
                }
            }

            if (($step7 + $step6 + $step5 + $step4 + $step3 + $step2 + $step1) == 7) {
                $everything_ok = 1;
            }
        break;

        case 'mysqli':
            $connection = mysqli_connect($dbhost, $dbuser, $dbpassword);
            if (mysqli_connect_error() > 0) {
                check_generic(0, 'Connection with Database');
            } else {
                check_generic(1, 'Connection with Database');

                // Drop database if needed and don't want to install over an existing DB
                if ($dbdrop == 1) {
                    mysqli_query($connection, "DROP DATABASE IF EXISTS `$dbname`");
                }

                // Create schema
                if ($dbaction == 'db_new' || $dbdrop == 1) {
                    $step1 = mysqli_query($connection, "CREATE DATABASE `$dbname`");
                    check_generic($step1, "Creating database '$dbname'");
                } else {
                    $step1 = 1;
                }

                if ($step1 == 1) {
                    $step2 = mysqli_select_db($connection, $dbname);
                    check_generic($step2, "Opening database '$dbname'");

                    $step3 = parse_mysqli_dump($connection, 'pandoradb.sql');
                    check_generic($step3, 'Creating schema');

                    $step4 = parse_mysqli_dump($connection, 'pandoradb_data.sql');
                    check_generic($step4, 'Populating database');
                    if (PHP_OS == 'FreeBSD') {
                        $step_freebsd = adjust_paths_for_freebsd($engine, $connection);
                        check_generic($step_freebsd, 'Adjusting paths in database for FreeBSD');
                    }

                    $random_password = random_name(8);
                    $host = $dbhost;
                    // set default granted origin to the origin of the queries
                    if (($dbhost != 'localhost') && ($dbhost != '127.0.0.1')) {
                        $host = $dbgrant;
                        // if the granted origin is different from local machine, set the valid origin
                    }

                    $step5 = mysqli_query(
                        $connection,
                        "CREATE USER IF NOT EXISTS pandora@$host"
                    );

                    mysqli_query(
                        $connection,
                        "SET PASSWORD FOR 'pandora'@'".$host."' = '".$random_password."'"
                    );

                    $step5 |= mysqli_query(
                        $connection,
                        "GRANT ALL PRIVILEGES ON `$dbname`.* to pandora@$host"
                    );
                    mysqli_query($connection, 'FLUSH PRIVILEGES');
                    check_generic($step5, "Established privileges for user pandora. A new random password has been generated: <b>$random_password</b><div class='warn'>Please write it down, you will need to setup your Pandora FMS server, editing the </i>/etc/pandora/pandora_server.conf</i> file</div>");

                    $step6 = is_writable('include');
                    check_generic($step6, "Write permissions to save config file in './include'");

                    $cfgin = fopen('include/config.inc.php', 'r');
                    $cfgout = fopen($pandora_config, 'w');
                    $config_contents = fread($cfgin, filesize('include/config.inc.php'));
                    $dbtype = 'mysql';
                    $config_new = '<?php
							// Begin of automatic config file
							$config["dbtype"] = "'.$dbtype.'"; //DB type (mysql, postgresql...in future others)
							$config["mysqli"] = true;
							$config["dbname"]="'.$dbname.'";			// MySQL DataBase name
							$config["dbuser"]="pandora";			// DB User
							$config["dbpass"]="'.$random_password.'";	// DB Password
							$config["dbhost"]="'.$dbhost.'";			// DB Host
                            $config["homedir"]="'.$path.'";		// Config homedir
                            // ----------Rebranding--------------------
                            // Uncomment this lines and add your customs text and paths.
                            // $config["custom_logo_login_alt"] ="login_logo.png";
                            // $config["custom_splash_login_alt"] = "splash_image_default.png";
                            // $config["custom_title1_login_alt"] = "WELCOME TO Pandora FMS";
                            // $config["custom_title2_login_alt"] = "NEXT GENERATION";
                            // $config["rb_product_name_alt"] = "Pandora FMS";
                            // $config["custom_docs_url_alt"] = "http://wiki.pandorafms.com/";
                            // $config["custom_support_url_alt"] = "https://support.pandorafms.com";

							/*
							----------Attention--------------------
							Please note that in certain installations:
								- reverse proxy.
								- web server in other ports.
								- https
							
							This variable might be dynamically altered.
							
							But it is save as backup in the
							$config["homeurl_static"]
							for expecial needs.
							----------Attention--------------------
							*/
							$config["homeurl"]="'.$url.'";			// Base URL
							$config["homeurl_static"]="'.$url.'";			// Don\'t  delete
							// End of automatic config file
							?>';
                    $step7 = fputs($cfgout, $config_new);
                    $step7 = ($step7 + fputs($cfgout, $config_contents));
                    if ($step7 > 0) {
                        $step7 = 1;
                    }

                    fclose($cfgin);
                    fclose($cfgout);
                    chmod($pandora_config, 0600);
                    check_generic($step7, "Created new config file at '".$pandora_config."'");
                }
            }

            if (($step7 + $step6 + $step5 + $step4 + $step3 + $step2 + $step1) == 7) {
                $everything_ok = 1;
            }
        break;
    }

        echo '</table>';

    if ($everything_ok == 1) {
        echo "<div style='text-align:right; width:100%;'>";
        echo "<a id='step5' href='install.php?step=5'>
				<button class='btn_install_next' type='submit'><span class='btn_install_next_text'>Next</span></button></a>";
        echo '</div>';
    } else {
        $info = "<div class='err'><b>There were some problems.
				Installation was not completed.</b> 
				<p>Please correct failures before trying again.
				All database ";
        if ($engine == 'oracle') {
            $info .= 'objects ';
        } else {
            $info .= 'schemes ';
        }

        $info .= 'created in this step have been dropped. </p>
				</div>';
        echo $info;

        switch ($engine) {
            case 'mysql':
                if (mysql_error() != '') {
                    echo "<div class='err'> <b>ERROR:</b> ".mysql_error().'.</div>';
                }

                if ($step1 == 1) {
                    mysql_query("DROP DATABASE $dbname");
                }
            break;

            case 'mysqli':
                if (mysqli_error($connection) != '') {
                    echo "<div class='err'> <b>ERROR:</b> ".mysqli_error($connection).'.</div>';
                }

                if ($step1 == 1) {
                    mysqli_query($connection, "DROP DATABASE $dbname");
                }
            break;
        }

        echo '</div>';
    }

        echo '</div>';
        echo "<div style='clear: both;'></div>";
        echo "
		</div>
		<div id='foot_install'>
			<i>Pandora FMS is an Open Source Software project registered at 
			<a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i>
		</div>
	</div>";
}


function install_step5()
{
    echo "
	<div id='install_container'>
	<div id='wizard'>
	".print_logo_status(6, 6)."
		<div id='install_box'>
			<h2>Installation complete</h2>
			<p>For security, you now must manually delete this installer 
			('<i>install.php</i>') file before trying to access to your Pandora FMS console.
			<p>You should also install Pandora FMS Servers before trying to monitor anything;
			please read documentation on how to install it.</p>
			<p>Default user is <b>'admin'</b> with password <b>'pandora'</b>, 
			please change it both as soon as possible.</p>
			<p>Don't forget to check <a href='http://pandorafms.com'>http://pandorafms.com</a> 
			for updates.
			<p>Select if you want to rename '<i>install.php</i>'.</p>
			<form method='post' action='index.php'>
				<button class='btn_install_next' type='submit' name='rn_file'><span class='btn_install_next_text'>Yes, rename the file</span></button>
				<input type='hidden' name='rename_file' value='1'>
			</form>
			<p><br><b><a id='access_pandora' href='index.php'><button class='btn_install_next' type='submit'><span class='btn_install_next_text'>Click here to access to your Pandora FMS console</span></button></a>.</b>
			</p>
		</div>";

    echo "</div>
	<div id='foot_install'>
		<i>Pandora FMS is an OpenSource Software project registered at 
		<a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i>
	</div>
</div>";
}