Esempio n. 1
0
 function CheckPorts($server)
 {
     $ports = lgsl_port_conversion($server->protocol, $server->cport, $server->qport, $server->sport);
     $server->cport = $ports[0];
     $server->qport = $ports[1];
     $server->sport = $ports[2];
     return $server;
 }
 public function config_form($server, &$form_state)
 {
     $config = $server->config['query'];
     gameservers_include_library('lgsl_protocol.php', 'lgsl');
     $ports = lgsl_port_conversion($config['gametype'], $server->port, 0, 0);
     $form['c_port'] = array('#type' => 'textfield', '#title' => t('Connection port'), '#size' => 8, '#value' => $server->port, '#disabled' => TRUE, '#description' => t('This is the port that is shown, passed to others, and used by the game for joining.'));
     $form['q_port'] = array('#type' => 'textfield', '#title' => t('Query port'), '#size' => 8, '#default_value' => isset($config['q_port']) ? $config['q_port'] : $ports[1], '#description' => t('The most important port as servers will not respond if this is wrong. For many games the connection port and query port are the same. LGSL make a guess based on the connection port.'));
     $form['s_port'] = array('#type' => 'textfield', '#title' => t('Software port'), '#size' => 8, '#default_value' => isset($config['s_port']) ? $config['s_port'] : $ports[2], '#description' => t('Most of the time this should be left blank or zero, it will be set when needed. There are games with two query ports, so this option is used when the \'Software Link\' needs a port different from the LGSL connection and query port.'));
     return $form;
 }
Esempio n. 3
0
function admin_server_edit($id)
{
    ob_end_clean();
    global $db;
    ajax_convert_array($_POST);
    if (!isset($_SESSION['rights']['admin']['server']['edit']) and !isset($_SESSION['rights']['superadmin'])) {
        echo NO_ADMIN_RIGHTS;
    } else {
        if ($_POST['ip'] == '' or $_POST['port'] == '' or $_POST['gametype'] == '') {
            echo NOT_NEED_ALL_INPUTS;
        } else {
            $db->setMode(0);
            list($_POST['port'], $_POST['queryport'], $_POST['sport']) = lgsl_port_conversion($_POST['gametype'], $_POST['port'], $_POST['queryport'], $_POST['sport']);
            $sql = sprintf('UPDATE ' . DB_PRE . 'ecp_server SET `gamename` = \'%s\', `gametype` = \'%s\', `passwort` = \'%s\', `displaymenu` = %d, `ip` = \'%s\', `port` = %d, `queryport` = %d, `sport` = %d, `stat` = %d WHERE serverID = %d', strsave(@$_POST['gamename']), strsave($_POST['gametype']), strsave(@$_POST['passwort']), (int) @$_POST['displaymenu'], strsave($_POST['ip']), (int) $_POST['port'], (int) $_POST['queryport'] == 0 ? (int) $_POST['port'] : (int) $_POST['queryport'], (int) $_POST['sport'], (int) @$_POST['stat'], $id);
            if ($db->query($sql)) {
                echo 'ok';
            }
        }
    }
    die;
}
function exec_ogp_module()
{
    global $db;
    global $view;
    $home_id = $_REQUEST['home_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    if ($home_info == FALSE) {
        print_failure(get_lang('no_rights_to_start_server'));
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'><< " . get_lang('back') . "</a></td></tr></table>";
        return;
    }
    $mod_id = $_REQUEST['mod_id'];
    if (!array_key_exists($mod_id, $home_info['mods'])) {
        print_failure("Unable to retrieve mod information from database.");
        return;
    }
    echo "<h2>";
    echo empty($home_info['home_name']) ? get_lang('not_available') : $home_info['home_name'];
    echo "</h2>";
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'><< " . get_lang('back') . "</a></td></tr></table>";
        return;
    }
    // It compares ip and port on POST with the pair on DB for security reasons (URL HACKING)
    $home_id = $home_info['home_id'];
    $ip_info = $db->getHomeIpPorts($home_id);
    foreach ($ip_info as $ip_ports_row) {
        if ($ip_ports_row['ip'] == $_REQUEST['ip'] && $ip_ports_row['port'] == $_REQUEST['port']) {
            $ip = $ip_ports_row['ip'];
            $port = $ip_ports_row['port'];
        }
    }
    if (!isset($ip) or !isset($port)) {
        echo "<h2>" . get_lang_f('ip_port_pair_not_owned') . "</h2>";
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
        return;
    }
    if (isset($server_xml->console_log)) {
        $log_retval = $remote->remote_readfile($home_info['home_path'] . '/' . $server_xml->console_log, $home_log);
    } else {
        $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME, $home_info['home_id'], clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $home_log);
    }
    function getLastLines($string, $n = 1)
    {
        $lines = explode("\n", $string);
        $lines = array_slice($lines, -$n);
        return implode("\n", $lines);
    }
    $home_log = getLastLines($home_log, 40);
    if ($log_retval > 0) {
        if ($log_retval == 2) {
            print_failure(get_lang('server_not_running_log_found'));
        }
        echo "<pre style='background:black;color:white;'>" . $home_log . "</pre>";
        if ($log_retval == 2) {
            return;
        }
    } else {
        print_failure(get_lang_f('unable_to_get_log', $log_retval));
    }
    // If game is not supported by lgsl we skip the lgsl checks and
    // assume successfull start.
    if ($home_info['use_nat'] == 1) {
        $query_ip = $home_info['agent_ip'];
    } else {
        $query_ip = $ip;
    }
    $running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
    if ($server_xml->lgsl_query_name) {
        require 'protocol/lgsl/lgsl_protocol.php';
        $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
        //Connection port
        $c_port = $get_q_and_s['0'];
        //query port
        $q_port = $get_q_and_s['1'];
        //software port
        $s_port = $get_q_and_s['2'];
        $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $query_ip, $c_port, $q_port, $s_port, "sa");
        if ($data['b']['status'] == "0") {
            $running = FALSE;
        }
    } elseif ($server_xml->gameq_query_name) {
        require 'protocol/GameQ/GameQ.php';
        $query_port = get_query_port($server_xml, $port);
        $servers = array(array('id' => 'server', 'type' => (string) $server_xml->gameq_query_name, 'host' => $query_ip . ":" . $query_port));
        $gq = new GameQ();
        $gq->addServers($servers);
        $gq->setOption('timeout', 4);
        $gq->setOption('debug', FALSE);
        $gq->setFilter('normalise');
        $game = $gq->requestData();
        if (!$game['server']['gq_online']) {
            $running = FALSE;
        }
    }
    if (!$running) {
        if (!isset($_GET['retry'])) {
            $retry = 0;
        } else {
            $retry = $_GET['retry'];
        }
        if ($retry >= 5) {
            echo "<p>" . get_lang('server_running_not_responding') . "\n\t\t\t<a href=?m=gamemanager&amp;p=stop&amp;home_id=" . $home_info['home_id'] . "&amp;ip=" . $ip . "&amp;port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>";
            echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
        }
        echo "</b>Retry #" . $retry . ".</b>";
        $retry++;
        print "<p class='note'>" . get_lang('starting_server') . "</p>";
        $view->refresh("?m=gamemanager&amp;p=start&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}&amp;retry=" . $retry, 3);
        return;
    }
    print_success(get_lang('server_started'));
    $ip_id = $db->getIpIdByIp($ip);
    $db->delServerStatusCache($ip_id, $port);
    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}");
    return;
}
function exec_ogp_module()
{
    global $db;
    echo "<h2>" . get_lang('game_monitor') . "</h2>";
    $refresh = new refreshed(100000);
    set_time_limit(0);
    $stats_servers_online = 0;
    $stats_servers = 0;
    $stats_players = 0;
    $stats_maxplayers = 0;
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $server_homes = $db->getIpPorts();
    } else {
        $server_homes = $db->getIpPortsForUser($_SESSION['user_id']);
    }
    if ($server_homes === FALSE) {
        // If there are no games, then there can not be any mods either.
        print_failure(get_lang('no_game_homes_assigned'));
        if ($isAdmin) {
            echo "<p><a href='?m=user_games&amp;p=assign&amp;user_id={$_SESSION['user_id']}'>" . get_lang('assign_game_homes') . "</a></p>";
        }
        return;
    }
    if (empty($_GET['home_id-mod_id-ip-port'])) {
        unset($_GET['home_id-mod_id-ip-port']);
    }
    if (empty($_GET['home_id'])) {
        unset($_GET['home_id']);
    }
    if ($_GET['home_cfg_id'] == get_lang('game_type')) {
        unset($_GET['home_cfg_id']);
    }
    create_home_selector_game_type($_GET['m'], $_GET['p'], $server_homes);
    if (!isset($_GET['home_id-mod_id-ip-port']) and !isset($_GET['home_id']) and !isset($_GET['home_cfg_id'])) {
        create_home_selector_address($_GET['m'], $_GET['p'], $server_homes);
        $show_all = TRUE;
    } else {
        create_home_selector_address($_GET['m'], $_GET['p'], $server_homes);
        create_home_selector($_GET['m'], $_GET['p'], "show_all");
        $show_all = FALSE;
    }
    require "protocol/lgsl/lgsl_protocol.php";
    ?>
		<form>
			<b><?php 
    print_lang('search');
    ?>
:</b>
			<input type="text" id="search">
		</form>
	<?php 
    $info = $db->getUser($_SESSION['users_login']);
    $chk_expire = $info['user_expires'];
    $exptime = read_expire($chk_expire);
    $time_to_expire = str_replace('hr', 'hours', $exptime);
    if ($exptime != "X") {
        ?>
		<span style="color:black;font-weight:bold;">
		 <center>
			<?php 
        echo print_lang('account_expiration');
        ?>
: <span style="color:green;"><?php 
        echo date("l, F jS, Y, H:i:s", $chk_expire) . " ( " . $time_to_expire . ")";
        ?>
</span>
		 </center>
		</span>
	<?php 
    }
    ?>
		<table id="servermonitor" class="tablesorter">
		<thead> 
		<tr> 
			<th style="width:16px;background-position: center;"></th> 
			<th style="width:16px;background-position: center;"></th> 
			<th><?php 
    print_lang('server_name');
    ?>
</th> 
			<th><?php 
    print_lang('address');
    ?>
</th> 
			<th><?php 
    print_lang('owner');
    ?>
</th> 
			<th>
			  <?php 
    print_lang('operations');
    ?>
			  <img style="border:0;height:15px;" id="action-stop" src="images/stop.png"/>
			  <img style="border:0;height:15px;" id="action-restart" src="images/restart.png"/>
			  <img style="border:0;height:15px;" id="action-start" src="images/start.png"/>
			</th>
		</tr> 
		</thead> 
		<tbody> 
	<?php 
    foreach ($server_homes as $server_home) {
        $stats_servers++;
        //Unset variables.
        if (isset($_GET['home_id-mod_id-ip-port'])) {
            $pieces = explode("-", $_GET['home_id-mod_id-ip-port']);
            $post_home_id = $pieces[0];
            $post_mod_id = $pieces[1];
            $post_ip = $pieces[2];
            $post_port = $pieces[3];
        }
        if ($show_all or isset($_GET['home_id']) and $_GET['home_id'] == $server_home['home_id'] or isset($_GET['home_id-mod_id-ip-port']) and $server_home['home_id'] == $post_home_id and $server_home['mod_id'] == $post_mod_id and $post_ip == $server_home['ip'] and $post_port == $server_home['port'] or isset($_GET['home_cfg_id']) and $_GET['home_cfg_id'] == $server_home['home_cfg_id']) {
            unset($map, $trclass, $first, $second, $onlineT, $ts3opt, $offlineT, $halfT, $ministart, $player_list, $groupsus, $name, $mod_name, $SrvCtrl, $lite_fm, $manager, $user, $pos, $ftp, $addonsmanager, $ctrlChkBoxes);
            //End
            if ($isAdmin) {
                $server_home['access_rights'] = "ufpet";
            } else {
                $home_info = $db->getUserGameHome($_SESSION['user_id'], $server_home['home_id']);
                $server_home['access_rights'] = $home_info['access_rights'];
            }
            $litefm_installed = $db->isModuleInstalled('litefm');
            $ftp_installed = $db->isModuleInstalled('ftp');
            $addonsmanager_installed = $db->isModuleInstalled('addonsmanager');
            $mysql_installed = $db->isModuleInstalled('mysql');
            if ($server_home['mod_name'] == "none" or $server_home['mod_name'] == "None") {
                $mod_name = "";
            } elseif ($server_home['mod_name'] != $server_home['game_name']) {
                $mod_name = " ( " . $server_home['mod_name'] . " )";
            }
            $get_size = "<table align='left' class='monitorbutton' ><tr>" . "<td align='middle' class='size' id='" . $server_home["home_id"] . "'>" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/file_size.png' title='" . get_lang('get_size') . "'/>\n<br /><span style='font-weight:bold;'>" . get_lang('get_size') . "</span></td></tr></table>";
            $manager = "<a href='?m=user_games&amp;p=edit&amp;home_id=" . $server_home['home_id'] . "'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/edit.png' title='" . get_lang('edit') . "'/>\n<br />" . get_lang('edit') . "\n</td></tr></table></a>";
            // Only show the filemanager link when the litefm is installed.
            if (preg_match("/f/", $server_home['access_rights']) > 0 && $litefm_installed) {
                $lite_fm = "<a href='?m=litefm&amp;home_id=" . $server_home['home_id'] . "'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/txt.png' title='" . get_lang('file_manager') . "'/>\n<br />" . get_lang('file_manager') . "\n</td></tr></table></a>";
            }
            if (preg_match("/t/", $server_home['access_rights']) > 0 && $ftp_installed) {
                $ftp = "<a href='?m=ftp&amp;home_id=" . $server_home['home_id'] . "'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/ftp.png' title='" . get_lang('ftp') . "'/>\n<br>" . get_lang('ftp') . "\n</td></tr></table></a>";
            }
            if ($addonsmanager_installed) {
                $addons = $db->resultQuery("SELECT DISTINCT addon_id FROM OGP_DB_PREFIXaddons NATURAL JOIN OGP_DB_PREFIXconfig_homes WHERE home_cfg_id=" . $server_home['home_cfg_id']);
                $addons_qty = count($addons);
                if ($addons and $addons_qty >= 1) {
                    $addonsmanager = "<a href='?m=addonsmanager&amp;p=user_addons&amp;home_id=" . $server_home['home_id'] . "&amp;ip=" . $server_home['ip'] . "&amp;port=" . $server_home['port'] . "'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='modules/administration/images/addons_manager.png' title='" . get_lang('addons') . "'/>\n<br />" . get_lang('addons') . "\n<b style='font-size:0.9em' >(" . $addons_qty . ")</td></tr></table></a>";
                }
            }
            if ($mysql_installed) {
                $mysql_dbs = $db->resultQuery("SELECT db_id FROM OGP_DB_PREFIXmysql_databases WHERE enabled=1 AND home_id=" . $server_home['home_id']);
                if (!empty($mysql_dbs)) {
                    $mysql = "<a href='?m=mysql&p=user_db&home_id=" . $server_home['home_id'] . "'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='modules/administration/images/mysql_admin.png' title='" . get_lang('mysql_databases') . "'/>\n<br />" . get_lang('mysql_databases') . "\n</td></tr></table></a>\n";
                }
            }
            $mod_result = $db->getHomeMods($server_home['home_id']);
            if ($mod_result === FALSE) {
                print_failure(get_lang('fail_no_mods'));
                if ($isAdmin) {
                    $manager .= "<a href='?m=user_games&amp;p=edit&amp;home_id=" . $server_home['home_id'] . "'>" . get_lang('configure_mods') . "</a>";
                }
                continue;
            }
            $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $server_home['home_cfg_file']);
            $master_server_home_id = $db->getMasterServer($server_home['remote_server_id'], $server_home['home_cfg_id']);
            if ($master_server_home_id != FALSE) {
                if (!$db->getGameHomeWithoutMods($master_server_home_id)) {
                    $db->setMasterServer("remove", $master_server_home_id, $server_home['home_cfg_id'], $server_home['remote_server_id']);
                    $master_server_home_id = FALSE;
                }
            }
            if ($server_xml) {
                if (preg_match("/u/", $server_home['access_rights']) > 0) {
                    // In case game is compatible with steam we offer a way to use steam with the updates.
                    if ($server_xml->installer == "steamcmd") {
                        if ($master_server_home_id != FALSE and $master_server_home_id != $server_home['home_id']) {
                            $manager .= "<form name='steam_master_" . $server_home['home_id'] . "_" . $server_home['mod_id'] . "_" . str_replace(".", "", $server_home['ip']) . "_" . $server_home['port'] . "' action='?m=gamemanager&amp;p=update&amp;home_id=" . $server_home['home_id'] . "&amp;mod_id=" . $server_home['mod_id'] . "&amp;update=update' method='POST' >\n" . "<table align='left' class='monitorbutton' >\n" . "<tr><td align='middle' onclick='document.steam_master_" . $server_home['home_id'] . "_" . $server_home['mod_id'] . "_" . str_replace(".", "", $server_home['ip']) . "_" . $server_home['port'] . ".submit()' ><img style='border:0;height:40px;vertical-align:middle;' src='images/master.png' />" . "<br /><span style='font-weight:bold;'>" . get_lang('update_from_local_master_server') . "</span><input id='master" . $server_home['home_id'] . "' type='hidden' name='master_server_home_id' value='" . $master_server_home_id . "' /></td></tr>\n</table>\n</form>";
                        }
                        $manager .= "<form name='steam_" . $server_home['home_id'] . "_" . $server_home['mod_id'] . "_" . str_replace(".", "", $server_home['ip']) . "_" . $server_home['port'] . "' action='?m=gamemanager&amp;p=update&amp;home_id=" . $server_home['home_id'] . "&amp;mod_id=" . $server_home['mod_id'] . "&amp;update=update' method='POST' >\n" . "<table align='left' class='monitorbutton' >\n" . "<tr><td align='middle' onclick='document.steam_" . $server_home['home_id'] . "_" . $server_home['mod_id'] . "_" . str_replace(".", "", $server_home['ip']) . "_" . $server_home['port'] . ".submit()' ><img style='border:0;height:40px;vertical-align:middle;' src='images/steam.png' />" . "<br /><span style='font-weight:bold;'>" . get_lang('install_update_steam') . "</span></td></tr>\n</table>\n</form>";
                    } else {
                        $manager .= "<a href='?m=gamemanager&amp;p=update_manual&amp;home_id=" . $server_home['home_id'] . "&amp;mod_id=" . $server_home['mod_id'] . "&amp;update=update'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/install.png' title='" . get_lang('install_update_manual') . "'/>\n<br>" . get_lang('install_update_manual') . "\n</td></td></table></a>";
                        $sync_name = get_sync_name($server_xml);
                        $sync_list = @file("modules/gamemanager/rsync.list", FILE_IGNORE_NEW_LINES);
                        $master_server_home_id = $db->getMasterServer($server_home['remote_server_id'], $server_home['home_cfg_id']);
                        if (in_array($sync_name, $sync_list) or $master_server_home_id != FALSE and $master_server_home_id != $server_home['home_id']) {
                            $manager .= "<a href='?m=gamemanager&amp;p=rsync_install&amp;home_id=" . $server_home['home_id'] . "&amp;mod_id=" . $server_home['mod_id'] . "&amp;update=update'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/rsync.png' title='" . get_lang('rsync_install') . "'/>\n<br />" . get_lang('rsync_install') . "\n</td></td></table></a>";
                        }
                    }
                }
            }
            if ($isAdmin) {
                if ($server_xml->control_protocol == 'rcon' or $server_xml->control_protocol == 'lcon' or $server_xml->control_protocol == 'rcon2' or @$server_xml->gameq_query_name == 'minecraft') {
                    $manager .= "<form name='rcon_preset" . $server_home['home_id'] . "' action='home.php?m=gamemanager&amp;p=rcon_presets&amp;home_id=" . $server_home['home_id'] . "&amp;mod_id=" . $server_home['mod_id'] . "' method='POST'>\n" . "<table align='left' class='monitorbutton' >\n" . "<tr>\n" . "<td align='middle' onclick='document.rcon_preset" . $server_home['home_id'] . ".submit()' ><img style='border:0;height:40px;vertical-align:middle;' src='images/rcon_preset.png' /><br /><span style='font-weight:bold;'>" . get_lang('rcon_presets') . "</span></td>\n" . "</tr>\n" . "</table>\n" . "</form>";
                }
            }
            $xml_installer = $server_xml->installer;
            // If query name does not exist use mod key instead.
            if ($server_xml->protocol == "gameq") {
                $query_name = $server_xml->gameq_query_name;
            } elseif ($server_xml->protocol == "lgsl") {
                $query_name = $server_xml->lgsl_query_name;
            } elseif ($server_xml->mods->mod['key'] == "none" or $server_xml->mods->mod['key'] == "None") {
                $query_name = "none";
            } else {
                $query_name = $server_xml->mods->mod['key'];
            }
            if ($server_xml->mods->mod['key'] == "none" or $server_xml->mods->mod['key'] == "None") {
                $mod = "none";
            } else {
                $mod = $server_xml->mods->mod['key'];
            }
            //----------+ getting the lgsl image icon
            $icon_paths = array("images/icons/{$mod}.png", "images/icons/{$query_name}.png", "protocol/lgsl/other/icon_unknown.gif");
            $icon_path = get_first_existing_file($icon_paths);
            //Properties for all servers
            if (isset($post_home_id) && $post_home_id == $server_home['home_id'] or isset($_GET['home_id']) && $_GET['home_id'] == $server_home['home_id']) {
                $trclass = " expandme";
            }
            $groupusers = $db->getGroupUsersByHomeId($server_home['home_id']);
            if ($groupusers) {
                $groupsus = "<b>" . get_lang('group_users') . "</b><br>";
                foreach ($groupusers as $groupu) {
                    $groupsus .= $groupu['users_login'] . "<br>";
                }
            } else {
                $groupsus = "";
            }
            $view_log = "<a href='?m=gamemanager&amp;p=log&amp;home_id-mod_id-ip-port=" . $server_home['home_id'] . "-" . $server_home['mod_id'] . "-" . $server_home['ip'] . "-" . $server_home['port'] . "'>\n" . "<table align='left' class='monitorbutton' ><tr><td align='middle' >" . "<img style='border:0;height:40px;vertical-align:middle;' src='images/log.png' title='" . get_lang('view_log') . "'/>\n<br>" . get_lang('view_log') . "\n</td></tr></table></a>";
            $btns = $view_log . @$ftp . @$lite_fm . @$addonsmanager;
            //End
            $remote = new OGPRemoteLibrary($server_home['agent_ip'], $server_home['agent_port'], $server_home['encryption_key'], $server_home['timeout']);
            $host_stat = $remote->status_chk();
            if ($host_stat === 1) {
                if ($server_home['use_nat'] == 1) {
                    $query_ip = $server_home['agent_ip'];
                } else {
                    $query_ip = $server_home['ip'];
                }
                $address = $query_ip . ":" . $server_home['port'];
                $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $server_home['home_id']) === 1;
                $update_in_progress = $remote->is_screen_running(OGP_SCREEN_TYPE_UPDATE, $server_home['home_id']) === 1;
                if ($screen_running) {
                    // Check if the screen running the server is running.
                    $status = "online";
                    $order = 1;
                    if ($server_xml->protocol == "lgsl") {
                        $get_q_and_s = lgsl_port_conversion((string) $query_name, $server_home['port'], "", "");
                        //Connection port
                        $c_port = $get_q_and_s['0'];
                        //query port
                        $q_port = $get_q_and_s['1'];
                        //software port
                        $s_port = $get_q_and_s['2'];
                        $address = "<a href='" . lgsl_software_link($query_name, $query_ip, $c_port, $q_port, $s_port) . "'>" . $query_ip . ":" . $server_home['port'] . "</a>";
                    }
                    if ($server_xml->protocol == "teamspeak3") {
                        $address = "<a href='ts3server://" . $query_ip . ":" . $server_home['port'] . "'>" . $query_ip . ":" . $server_home['port'] . "</a>";
                    }
                    if ($server_xml->protocol == "gameq" and $server_xml->installer == 'steamcmd') {
                        $address = "<a href='steam://connect/" . $query_ip . ":" . $server_home['port'] . "'>" . $query_ip . ":" . $server_home['port'] . "</a>";
                    }
                    $pos = $refresh->add("home.php?m=gamemanager&p=ref_servermonitor&type=cleared&server_home=" . $server_home['home_id'] . "&ip=" . $server_home['ip'] . "&port=" . $server_home['port']);
                    if ($server_xml->protocol == "teamspeak3") {
                        require 'protocol/TeamSpeak3/functions.php';
                    }
                    $startup_file_exists = $remote->rfile_exists("startups/" . $server_home['ip'] . "-" . $server_home['port']) === 1;
                    $ctrlChkBoxes .= '<div id="server_icon" class="action-stop' . $server_home['home_id'] . '" >
									 <div>
									 <input id="action-stop" class="action-stop' . $server_home['home_id'] . '" name="action-' . $server_home['home_id'] . '" value="stop-' . $server_home['home_id'] . '-' . $server_home['mod_id'] . '-' . $server_home['ip'] . '-' . $server_home['port'] . '" type="radio"><img style="border:0;height:15px;" src="images/stop.png"/></div><div>&nbsp;' . get_lang('stop_server') . '</div></div>';
                    if ($startup_file_exists) {
                        $ctrlChkBoxes .= '<div id="server_icon" class="action-restart' . $server_home['home_id'] . '" >
										 <div>
										 <input id="action-restart" class="action-restart' . $server_home['home_id'] . '" name="action-' . $server_home['home_id'] . '" value="restart-' . $server_home['home_id'] . '-' . $server_home['mod_id'] . '-' . $server_home['ip'] . '-' . $server_home['port'] . '" type="radio"><img style="border:0;height:15px;" src="images/restart.png"/></div><div>&nbsp;' . get_lang('restart_server') . '</div></div>';
                    }
                    $stats_servers_online++;
                } else {
                    $status = "offline";
                    if ($db->getLastParam($server_home['home_id']) != FALSE) {
                        if ($update_in_progress) {
                            $ctrlChkBoxes .= '<div id="server_icon" class="action-start' . $server_home['home_id'] . '" >&nbsp;' . get_lang('update_in_progress') . '</div>';
                        } else {
                            $ctrlChkBoxes .= '<div id="server_icon" class="action-start' . $server_home['home_id'] . '" >
											 <div>
											 <input id="action-start" class="action-start' . $server_home['home_id'] . '" name="action-' . $server_home['home_id'] . '" value="start-' . $server_home['home_id'] . '-' . $server_home['mod_id'] . '-' . $server_home['ip'] . '-' . $server_home['port'] . '" type="radio"><img style="border:0;height:15px;" src="images/start.png"/></div><div>&nbsp;' . get_lang('start_server') . '</div></div>';
                        }
                    }
                    $order = 3;
                    ob_start();
                    require 'modules/gamemanager/mini_start.php';
                    $ministart = ob_get_contents();
                    ob_end_clean();
                    if ($update_in_progress) {
                        $offlineT = '<div id="server_icon" class="action-start' . $server_home['home_id'] . '" >&nbsp;' . get_lang('update_in_progress') . '</div>';
                    } else {
                        $offlineT = $ministart;
                    }
                }
            } else {
                $status = "offline";
                $order = 3;
                $address = "<span style='color:darkred;font-weight:bold;'>Agent Offline</span>";
            }
            $user = $db->getUserById($server_home['user_id_main']);
            // Template
            @($first = "<tr class='maintr{$trclass}'>");
            $first .= "<td class='collapsible'><span class='hidden'>{$order}</span><a></a>" . "<img src='images/{$status}.png' />" . "</td>";
            $first .= "<td>" . "<span class='hidden'>{$mod}</span><img src='{$icon_path}' />" . "</td>";
            $first .= "<td class='collapsible'><a></a><b>" . $server_home['home_name'] . "</b>{$mod_name}</td>";
            $first .= "<td>" . $address . "</td>";
            $first .= "<td>" . $user['users_login'] . "</td>";
            $first .= "<td style='width:328px;padding:0px;'>{$ctrlChkBoxes}</td>";
            $first .= "</tr>";
            $second = "<tr class='expand-child'>";
            @($second .= "<td colspan='4'>" . $refresh->getdiv($pos, "width:100%;") . "{$offlineT}</td>");
            $second .= "<td width='80'>{$groupsus}</td>";
            @($second .= "<td>{$btns}{$manager}<br>{$mysql}<br>{$get_size}<br>{$ts3opt}</td>");
            $second .= "</tr>";
            //Echo them all
            echo "{$first}{$second}";
        }
    }
    echo "</tbody>";
    echo "<tfoot style='border:1px solid grey;'>\n\t\t\t<tr>\n\t\t\t  <td colspan='6' >\n\t\t\t\t<div class='bloc' >\n\t\t\t\t<img src='images/magnifglass.png' /> " . get_lang('statistics') . ": {$stats_servers_online}/{$stats_servers} " . get_lang('servers') . "\n</div>\n\t\t\t\t<div class='right bloc' >\n\t\t\t\t  <label>" . get_lang('execute_selected_server_operations') . "</label>\n\t\t\t\t  <input id='execute_operations' type='submit' value='" . get_lang('execute_operations') . "' >\n\n\t\t\t\t</div>\n\t\t\t  </td>\n\t\t\t</tr>\n\t\t  </tfoot>";
    echo "</table>";
    ?>
	<script type="text/javascript">
			$(document).ready(function() 
				{ 
					<?php 
    echo $refresh->build("8000");
    ?>
					$('input#search').quicksearch('table#servermonitor tbody tr.maintr');
					$("#servermonitor")
						.collapsible("td.collapsible", {collapse: true})
						.tablesorter({sortList: [[0,0], [1,0]] , widgets: ['zebra','repeatHeaders']})
						; 
				} 
			);
			
			$("div#server_icon").click(function(){
				var id = $(this).attr('class');
				if($("input[type=radio]."+id).attr('checked') == 'checked')
				{
					$("input[type=radio]."+id).prop('checked', false);
				}
				else
				{
					$("input[type=radio]."+id).prop('checked', true);
				}
			});
						
			$('.size').click(function(){
				var $id = $(this).attr('id');
				$.get( "home.php?m=user_games&type=cleared&p=get_size&home_id="+$id, function( data ) {
					$('#'+$id+".size").text( data );
					$('#'+$id+".size").css("font-size", "16pt");
				});
			});
			
			$('#execute_operations').click(function(){
				var addpost = {};
				$('input[type=radio]:checked').each(function( ){
					var name = $(this).attr('name');
					var value = $(this).val();
					addpost[ name ] = value;
				});
				
				$('.right.bloc').html('<img src="images/loading.gif" />');
				
				$.ajax({
				type: "POST",
				url: "home.php?m=gamemanager&p=game_monitor",
				data: addpost,
				complete: function(){ 
					document.location.reload(); 
				}
				});
			});
			
			$('img#action-stop').click(function(){
				$('input[type=radio]#action-stop').each(function( ){
					if( this.checked )
					{
						$(this).attr('checked', false);
					}
					else
					{
						$(this).attr('checked', true);
					}
				});
			});
			
			$('img#action-restart').click(function(){
				$('input[type=radio]#action-restart').each(function( ){
					if( this.checked )
					{
						$(this).attr('checked', false);
					}
					else
					{
						$(this).attr('checked', true);
					}
				});
			});
			
			$('img#action-start').click(function(){
				$('input[type=radio]#action-start').each(function( ){
					if( this.checked )
					{
						$(this).attr('checked', false);
					}
					else
					{
						$(this).attr('checked', true);
					}
				});
			});
		</script>
	<?php 
}
function exec_ogp_module()
{
    global $db;
    global $view;
    $home_cfg_id = isset($_REQUEST['home_cfg_id']) ? $_REQUEST['home_cfg_id'] : "";
    $home_id = isset($_REQUEST['home_id']) ? $_REQUEST['home_id'] : "";
    $addon_id = isset($_REQUEST['addon_id']) ? $_REQUEST['addon_id'] : "";
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights'));
        echo create_back_button("addonsmanager", "user_addons");
        return;
    }
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    $state = isset($_REQUEST['state']) ? $_REQUEST['state'] : "";
    $pid = isset($_REQUEST['pid']) ? $_REQUEST['pid'] : -1;
    if (!empty($state)) {
        $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
        $addons_rows = $db->resultQuery("SELECT url, path, post_script FROM OGP_DB_PREFIXaddons WHERE addon_id=" . $addon_id);
        $addon_info = $addons_rows[0];
        $url = $addon_info['url'];
        $filename = basename($url);
        #### This makes replacements to the bash script:
        if (isset($addon_info['post_script']) and !empty($addon_info['post_script']) and $addon_info['post_script'] != "") {
            $check_passed = FALSE;
            $address_at_post = $_POST['ip'] . ":" . $_POST['port'];
            $ip_ports = $db->getHomeIpPorts($home_info["home_id"]);
            foreach ($ip_ports as $ip_port) {
            }
            $address_owned = $ip_port['ip'] . ":" . $ip_port['port'];
            if ($address_owned == $address_at_post) {
                $check_passed = TRUE;
                break;
            }
            $ip = $ip_port['ip'];
            $port = $ip_port['port'];
            $home_info["ip"] = $check_passed ? $_POST['ip'] : $ip;
            $home_info["port"] = $check_passed ? $_POST['port'] : $port;
            if (isset($server_xml->gameq_query_name)) {
                $home_info["query_port"] = get_query_port($server_xml, $home_info['port']);
            } elseif (isset($server_xml->lgsl_query_name)) {
                $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $home_info['port'], "", "");
                $home_info["query_port"] = $get_q_and_s['1'];
            }
            $home_info["incremental"] = $db->incrementalNumByHomeId($home_info["home_id"], $home_info["mod_cfg_id"], $home_info["remote_server_id"]);
            $post_script = preg_replace("/\\%home_path\\%/i", $home_info["home_path"], $addon_info['post_script']);
            $post_script = preg_replace("/\\%home_name\\%/i", $home_info["home_name"], $post_script);
            $post_script = preg_replace("/\\%control_password\\%/i", $home_info["control_password"], $post_script);
            $post_script = preg_replace("/\\%max_players\\%/i", $home_info["max_players"], $post_script);
            $post_script = preg_replace("/\\%ip\\%/i", $home_info["ip"], $post_script);
            $post_script = preg_replace("/\\%port\\%/i", $home_info["port"], $post_script);
            $post_script = preg_replace("/\\%query_port\\%/i", $home_info["query_port"], $post_script);
            $post_script = preg_replace("/\\%incremental\\%/i", $home_info["incremental"], $post_script);
        } else {
            $post_script = "";
        }
        #### end of replacememnts
        if ($state == "start" and $addon_id != "") {
            $pid = $remote->start_file_download($addon_info['url'], $home_info['home_path'] . "/" . $addon_info['path'], $filename, "uncompress", $post_script);
        }
        $headers = get_headers($url, 1);
        $download_available = !$headers ? FALSE : TRUE;
        // Check if any error occured
        if ($download_available) {
            $bytes = is_array($headers['Content-Length']) ? $headers['Content-Length'][1] : $headers['Content-Length'];
            // Display the File Size
            $totalsize = $bytes / 1024;
            clearstatcache();
        }
        $kbytes = $remote->rsync_progress($home_info['home_path'] . "/" . $addon_info['path'] . "/" . $filename);
        list($totalsize, $mbytes, $pct) = explode(";", do_progress($kbytes, $totalsize));
        $totalmbytes = round($totalsize / 1024, 2);
        $pct = $pct > 100 ? 100 : $pct;
        echo "<h2>" . $home_info['home_name'] . "</h2>";
        echo '<div class="dragbox bloc rounded" style="background-color:#dce9f2;" >
				<h4>' . get_lang('install') . " " . $filename . " {$mbytes}MB/{$totalmbytes}MB</h4>\n\t\t\t  <div style='background-color:#dce9f2;' >\n\t\t\t  ";
        $bar = '';
        for ($i = 1; $i <= $pct; $i++) {
            $bar .= '<img style="width:0.92%;vertical-align:middle;" src="images/progressBar.png">';
        }
        echo "<center>{$bar} <b style='vertical-align:top;display:inline;font-size:1.2em;color:red;' >{$pct}%</b></center>\n\t\t\t\t</div>\n\t\t\t  </div>";
        if (($pct == "100" or !$download_available) and $post_script != "") {
            $log_retval = $remote->get_log("post_script", $pid, clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $script_log);
            if ($log_retval == 0) {
                print_failure(get_lang('agent_offline'));
            } elseif ($log_retval == 1 || $log_retval == 2) {
                echo "<pre class='log'>" . $script_log . "</pre>";
            } elseif ($remote->is_screen_running("post_script", $pid) == 1) {
                print_failure(get_lang_f('unable_to_get_log', $log_retval));
            }
        }
        if ($pct == "100" or !$download_available or $download_available and $pct == "-" and $pid > 0) {
            if (!$download_available) {
                print_failure(get_lang('failed_to_start_file_download'));
            } elseif ($remote->is_file_download_in_progress($pid) === 1) {
                print_success(get_lang_f('wait_while_decompressing', $filename));
                echo "<p><a href=\"?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}\">" . get_lang('refresh') . "</a></p>";
                $view->refresh("?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}", 5);
            } elseif ($remote->is_file_download_in_progress($pid) === 0 and $remote->is_screen_running("post_script", $pid) === 0) {
                print_success(get_lang('addon_installed_successfully'));
                $view->refresh("?m=addonsmanager&amp;p=user_addons&amp;home_id=" . $home_id, 10);
                return;
            }
        } else {
            echo "<p><a href=\"?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}\">" . get_lang('refresh') . "</a></p>";
            $view->refresh("?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}", 5);
        }
    } elseif (!empty($_GET['addon_type'])) {
        ?>
			<h2><?php 
        echo $home_info['home_name'] . "&nbsp;" . get_lang($_GET['addon_type']);
        ?>
</h2>
            <table class='center'>
			<form action='?m=addonsmanager&amp;p=addons<?php 
        echo "&amp;ip=" . $_GET['ip'] . "&amp;port=" . $_GET['port'];
        ?>
' method='post'>
            <input type='hidden' name='home_id' value='<?php 
        echo "{$home_id}";
        ?>
' />
            <input type='hidden' name='state' value='start' />
            <tr><td align='right'><?php 
        print_lang('game_name');
        ?>
: </td><td align='left'><?php 
        echo "{$home_info['game_name']}";
        ?>
</td></tr>
            <tr><td align='right'><?php 
        print_lang('directory');
        ?>
: </td><td align='left'><?php 
        echo "{$home_info['home_path']}";
        ?>
</td></tr>
            <tr><td align='right'><?php 
        print_lang('remote_server');
        ?>
: </td>
            <td align='left'><?php 
        echo "{$home_info['remote_server_name']} ({$home_info['agent_ip']}:{$home_info['agent_port']})";
        ?>
</td></tr>
            <tr><td align='right'><?php 
        print_lang('select_addon');
        ?>
: </td>
            <td align='left'>
			<select name="addon_id">
			<?php 
        $addons = $db->resultQuery("SELECT addon_id, name FROM OGP_DB_PREFIXaddons WHERE addon_type='" . $_GET['addon_type'] . "' AND home_cfg_id=" . $home_cfg_id);
        foreach ($addons as $addon) {
            ?>
			<option value="<?php 
            echo $addon['addon_id'];
            ?>
"><?php 
            echo $addon['name'];
            ?>
</option>
			<?php 
        }
        ?>
			</select>
			</td></tr>
            <tr><td colspan='2' class='info'>&nbsp;</td></tr>
            <td align='left'>
			&nbsp;
			</td></tr><tr><td align="right">
            <input type="submit" name="update" value="<?php 
        print_lang('install');
        ?>
" />
            </form></td><td>
			<form action="" method="get">
			<input type="hidden" name="m" value="addonsmanager" />
            <input type="hidden" name="p" value="user_addons" />
			<input type="hidden" name="home_id" value="<?php 
        echo "{$home_id}";
        ?>
" />
			<input type="submit" value="<?php 
        print_lang('back');
        ?>
" />
			</form>
			</td></tr>
			</table>
<?php 
    }
    return;
}
}
if ($num_of_servers < $numberservers_to_skip_query) {
    require_once "protocol/lgsl/lgsl_protocol.php";
    $ip_id = $server_home['ip_id'];
    $statusCache = $db->getServerStatusCache($ip_id, $port);
    $query_cache_life = (isset($settings['query_cache_life']) and is_numeric($settings['query_cache_life'])) ? $settings['query_cache_life'] : 30;
    if (!empty($statusCache) and date('YmdHis', $statusCache['date_timestamp'] + $query_cache_life) >= date('YmdHis')) {
        $data = $statusCache;
    } else {
        $port = $server_home['port'];
        if ($server_home['use_nat'] == 1) {
            $ip = $server_home['agent_ip'];
        } else {
            $ip = $server_home['ip'];
        }
        $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
        //Connection port
        $c_port = $get_q_and_s['0'];
        //query port
        $q_port = $get_q_and_s['1'];
        //software port
        $s_port = $get_q_and_s['2'];
        $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $ip, $c_port, $q_port, $s_port, "sp");
        //-----------------------------------+
        $data['s']['game'] = preg_replace("/[^A-Za-z0-9 \\_\\-]/", "_", strtolower($data['s']['game']));
        //-----------------------------------+
        if ($data['b']['status'] == "1") {
            if (!isset($data['s']['password'])) {
                $data['status'] = "ONLINE";
            } else {
                $data['status'] = "ONLINE WITH PASSWORD";
function exec_ogp_module()
{
    global $db, $settings;
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    $OnlineServers = "";
    $OnlineServersTitle = "";
    if (isset($settings['welcome_title']) && $settings['welcome_title'] == "1") {
        if (isset($settings['welcome_title_message']) && !empty($settings['welcome_title_message'])) {
            echo "<div>" . $settings['welcome_title_message'] . "</div>";
        }
    }
    $OnlineServersTitle .= get_lang('online_servers');
    $player_list = "";
    if ($isAdmin) {
        $server_homes = $db->getIpPorts();
    } else {
        $OnlineServersTitle = "Open Game Panel";
        $OnlineServers .= "<p>" . get_lang("welcome_text") . "</p><br><b>" . get_lang('online_servers') . ":</b><br><br>";
        $server_homes = $db->getIpPortsForUser($_SESSION['user_id']);
    }
    require_once "includes/refreshed.php";
    $refresh = new refreshed();
    if (!$server_homes) {
        $OnlineServers .= "<p class='failure'>" . get_lang('no_games_to_monitor') . "</p>";
        if ($isAdmin) {
            //$OnlineServers .= "<p class='note'>".get_lang('add_games_in').
            //"&nbsp;<a href='?m=user_games&amp;p=add'>".get_lang('game_servers')."</a></p>";
            $OnlineServers .= "<p class='note'>" . get_lang_f("add_games_in", "<a href='?m=user_games&amp;p=add'>" . get_lang('game_servers') . "</a>") . "</p>";
        }
    } else {
        if (isset($settings['old_dashboard_behavior']) and $settings['old_dashboard_behavior'] == 1) {
            $serverslist = $refresh->add("home.php?m=dashboard&p=query_ref&show=servers&type=cleared");
            $playerslist = $refresh->add("home.php?m=dashboard&p=query_ref&show=players&type=cleared");
            $OnlineServers .= $refresh->getdiv($serverslist);
            $player_list .= $refresh->getdiv($playerslist);
        } else {
            $player_list = "";
            $stats_servers = 0;
            $stats_servers_online = 0;
            $stats_players = 0;
            $stats_maxplayers = 0;
            $onlinePlayers = "";
            $OnlineServers .= "<table style='width:100%;' class='online_servers'>";
            require_once "protocol/lgsl/lgsl_protocol.php";
            foreach ($server_homes as $server_home) {
                $remote_server_id = $server_home['remote_server_id'];
                $rserver = $db->getRemoteServerById($remote_server_id);
                // Count the number of servers.
                $stats_servers++;
                // Remember to clear the old value here.
                $message = "";
                $remote = new OGPRemoteLibrary($server_home['agent_ip'], $server_home['agent_port'], $server_home['encryption_key']);
                $host_stat = $remote->status_chk();
                if ($host_stat === 1) {
                    // Check if the screen running the server is running.
                    $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $server_home['home_id']) === 1;
                    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $server_home['home_cfg_file']);
                    if ($screen_running) {
                        // Check if the screen running the server is running.
                        if ($server_home['use_nat'] == 1) {
                            $ip = $server_home['agent_ip'];
                        } else {
                            $ip = $server_home['ip'];
                        }
                        $port = $server_home['port'];
                        $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                        //Connection port
                        $c_port = $get_q_and_s['0'];
                        //query port
                        $q_port = $get_q_and_s['1'];
                        //software port
                        $s_port = $get_q_and_s['2'];
                        if ($server_xml->protocol == "lgsl") {
                            $address = "<a href='" . lgsl_software_link($server_xml->lgsl_query_name, $ip, $c_port, $q_port, $s_port) . "'>" . $ip . ":" . $port . "</a>";
                        }
                        if ($server_xml->protocol == "teamspeak3") {
                            $address = "<a href='ts3server://{$ip}:{$port}'>{$ip}:{$port}</a>";
                        } elseif ($server_xml->protocol == "gameq" and $server_xml->installer == "steam") {
                            $address = "<a href='steam://connect/{$ip}:{$port}'>{$ip}:{$port}</a>";
                        } elseif ($server_xml->protocol == "gameq" or !isset($server_xml->protocol)) {
                            $address = "{$ip}:{$port}";
                        }
                        $OnlineServers .= "<tr><td><div class='name' ><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $server_home['home_id'] . "-" . $server_home['mod_id'] . "-" . $server_home['ip'] . "-" . $server_home['port'] . "' ><img style='border:0;height:12px;' src='images/magnifglass.png'/>" . $server_home['home_name'] . "</a></div> | ";
                        $OnlineServers .= "<div id='gamelink' >{$address}</div>";
                        $OnlineServers .= "</td></tr>";
                        $stats_servers_online++;
                    }
                }
                unset($map, $player_list, $status, $ip, $port, $players, $playersmax, $name, $map, $mod, $xml_mod, $qport, $address, $maplocation);
            }
            $OnlineServers .= "</table>";
            $OnlineServers .= "<center>" . get_lang('statistics') . ":<br>{$stats_servers_online}/{$stats_servers} " . get_lang('online_servers') . "</center>";
        }
    }
    ?>
	<div style="margin-top:20px;">    
	<?php 
    //$title[$id] = "The Title";
    //$content[$id] = "Content of the Widget";
    $title = array();
    $content = array();
    $href = array();
    // Game Monitor
    $title[1] = get_lang('game_monitor');
    $content[1] = '<img src="themes/' . $settings['theme'] . '/images/icons/game_monitor.png" style="width:48px;float:right;margin:0 0 0 8px" />' . get_lang('dashboard_game_monitor_text');
    $href[1] = 'home.php?m=gamemanager&p=game_monitor';
    // Online Server
    $title[2] = $OnlineServersTitle;
    $content[2] = $OnlineServers;
    $href[2] = null;
    // Currently Online
    $title[3] = get_lang('currently_online');
    $content[3] = $player_list;
    $href[3] = null;
    // FTP
    $title[4] = get_lang('ftp');
    $content[4] = '<img src="themes/' . $settings['theme'] . '/images/icons/folder.png" style="width:48px;float:right;margin:0 0 0 8px" />' . get_lang('dashboard_ftp_text');
    $href[4] = 'home.php?m=ftp';
    // Support
    $title[5] = get_lang('support');
    $content[5] = '<img src="themes/' . $settings['theme'] . '/images/icons/support.png" style="width:48px;float:right;margin:0 0 0 8px" />' . get_lang('dashboard_support_text');
    $href[5] = 'http://www.opengamepanel.org/forum';
    $columns = array();
    $columns[1]['column_id'] = 1;
    $columns[2]['column_id'] = 2;
    $columns[3]['column_id'] = 3;
    foreach ($columns as $column) {
        echo '<div class="column ';
        if ($column['column_id'] == 1) {
            echo 'one_fourth';
        } else {
            if ($column['column_id'] == 2) {
                echo 'one_two';
            } else {
                if ($column['column_id'] == 3) {
                    echo 'one_fourth';
                }
            }
        }
        echo '" id="column' . $column['column_id'] . '" >';
        $items = $db->resultQuery("SELECT * FROM OGP_DB_PREFIXwidgets_users WHERE column_id='" . $column['column_id'] . "' AND user_id='" . $_SESSION['user_id'] . "' ORDER BY sort_no");
        if ($items) {
            foreach ($items as $widget) {
                if ((!isset($settings['old_dashboard_behavior']) or $settings['old_dashboard_behavior'] == 0) and $widget['widget_id'] == "3") {
                    continue;
                }
                echo ' 
				<div class="dragbox bloc rounded" id="item' . $widget['widget_id'] . '"> 
					<h4><span class="configure"></span>';
                if (!is_null($title[$widget['widget_id']])) {
                    echo $title[$widget['widget_id']];
                }
                echo '</h4> 
						<div class="dragbox-content" ';
                if (!is_null($href[$widget['widget_id']])) {
                    echo "onclick=\"location.href='" . $href[$widget['widget_id']] . "'\" style=\"cursor:pointer;";
                    if ($widget['collapsed'] == 1) {
                        echo 'display:none;';
                    }
                    echo '"';
                } elseif ($widget['collapsed'] == 1) {
                    echo 'style="display:none;"';
                }
                echo '>';
                if (!is_null($content[$widget['widget_id']])) {
                    echo $content[$widget['widget_id']];
                }
                echo ' 
					</div> 
				</div>';
                unset($widget);
            }
        }
        echo '</div>';
    }
    if ($isAdmin and $db->isModuleInstalled('status')) {
        echo "<h0>Server Status</h0><br>";
        $servers = $db->getRemoteServers();
        echo "<div style='float:left;width:40%;' >\n\t\t\t   <div class='bloc rounded' >\n\t\t\t   <h4>Select remote server</h4>\n\t\t\t    <div>\n\t\t\t\t<br>\n\t\t\t\t<center>\n\t\t\t    <form action='' method='GET'>\n\t\t\t    <input type='hidden' name='m' value='" . $_GET['m'] . "'/>\n\t\t\t    <input type='hidden' name='p' value='" . $_GET['p'] . "'/>\n\t\t\t    <select name='remote_server_id' onchange=" . '"this.form.submit()"' . ">\n";
        foreach ($servers as $server_row) {
            if (!empty($server_row['remote_server_id']) and !isset($_GET['remote_server_id']) or !empty($server_row['remote_server_id']) and empty($_GET['remote_server_id'])) {
                $_GET['remote_server_id'] = $server_row['remote_server_id'];
            }
            if (isset($_GET['remote_server_id']) and $_GET['remote_server_id'] == $server_row['remote_server_id']) {
                $rhost_id = $_GET['remote_server_id'];
                $remote_server = $db->getRemoteServer($rhost_id);
                $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                $host_stat = $remote->status_chk();
                if ($host_stat === 1) {
                    $checked = "selected='selected'";
                } else {
                    $checked = '';
                    $_GET['remote_server_id'] = 'webhost';
                }
            } else {
                $checked = '';
            }
            echo "<option value='" . $server_row['remote_server_id'] . "' {$checked} >" . $server_row['remote_server_name'] . "</option>\n";
        }
        if (function_exists('exec')) {
            $checked = (isset($_GET['remote_server_id']) and $_GET['remote_server_id'] == 'webhost') ? "selected='selected'" : "";
            echo "<option value='webhost' {$checked} >Webhost Status</option>";
        }
        echo "\t</select>\n\t\t\t    </form>\n\t\t\t\t</center>\n\t\t\t\t<br><br>\n\t\t\t    </div>\n\t\t\t   </div>\n\t\t\t  </div>\n";
        if (isset($_GET['remote_server_id']) and $_GET['remote_server_id'] == "webhost") {
            unset($_GET['remote_server_id']);
        }
        if (isset($_GET['remote_server_id']) && !empty($_GET['remote_server_id'])) {
            $remote_server = "&remote_server_id=" . $_GET['remote_server_id'];
        } else {
            $remote_server = "";
        }
        if ($isAdmin and $db->isModuleInstalled('status') and (isset($_GET['remote_server_id']) or function_exists('exec'))) {
            $status = $refresh->add("home.php?m=status&type=cleared" . $remote_server);
            echo $refresh->getdiv($status);
        }
    }
    ?>
	
<script type="text/javascript">
var userAgent = navigator.userAgent.toLowerCase(),
	browser   = '',
	version   = 0;

$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());

// Is this a version of IE?
if ($.browser.msie) {
  userAgent = $.browser.version;
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  version = userAgent;
  browser = "Internet Explorer";
}

// Is this a version of Chrome?
if ($.browser.chrome) {
  userAgent = userAgent.substring(userAgent.indexOf('chrome/') + 7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  version = userAgent;
  // If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
  $.browser.safari = false;
  browser = "Chrome";
}

// Is this a version of Safari?
if ($.browser.safari) {
  userAgent = userAgent.substring(userAgent.indexOf('safari/') + 7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  version = userAgent;
  browser = "Safari";
}

// Is this a version of Mozilla?
if ($.browser.mozilla) {
	//Is it Firefox?
	if (navigator.userAgent.toLowerCase().indexOf('firefox') != -1) {
		userAgent = userAgent.substring(userAgent.indexOf('firefox/') + 8);
		userAgent = userAgent.substring(0,userAgent.indexOf('.'));
		version = userAgent;
		browser = "Firefox"
	}
	// If not then it must be another Mozilla
	else {
	  browser = "Mozilla (not Firefox)"
	}
}

// Is this a version of Opera?
if ($.browser.opera) {
	userAgent = userAgent.substring(userAgent.indexOf('version/') + 8);
	userAgent = userAgent.substring(0,userAgent.indexOf('.'));
	version = userAgent;
	browser = "Opera";
}

// Now you have two variables, browser and version
// which have the right info
$(document).ready(
	function(){  
		$('.dragbox')  
		.each(function(){  
			$(this).hover(function(){  
				$(this).find('h4').addClass('collapse'); 
			}, function(){  
			$(this).find('h4').removeClass('collapse');  
			})  
			.find('h4').hover(function(){  
				$(this).find('.configure').css('visibility', 'visible'); 
			}, function(){  
				$(this).find('.configure').css('visibility', 'hidden');  
			})  
			.click(function(){  
				$(this).siblings('.dragbox-content').toggle();  
				//Save state on change of collapse state of panel  
				updateWidgetData();  
			})  
			.end()  
			.find('.configure').css('visibility', 'hidden');  
		});  
	  
		$('.column').sortable({  
			connectWith: '.column',  
			handle: 'h4',  
			cursor: 'move',  
			placeholder: 'placeholder',  
			forcePlaceholderSize: true,  
			opacity: 0.4,   
			start: function(event, ui){
				//Firefox, Safari/Chrome fire click event after drag is complete, fix for that
				if(browser == "Firefox" || browser == "Mozilla (not Firefox)" || browser == "Safari") 
					$(ui.item).find('.dragbox-content').toggle();
			},
			stop: function(){  
				updateWidgetData();  
			}
		})  
		.disableSelection();  
	}  
);
function updateWidgetData(){  
	var items=[];  
	$('.column').each(function(){  
		var columnId=$(this).attr('id');  
		$('.dragbox', this).each(function(i){  
			var collapsed=0;  
			if($(this).find('.dragbox-content').css('display')=="none")  
				collapsed=1;  
			//Create Item object for current panel  
			var item={  
				id: $(this).attr('id'),  
				collapsed: collapsed,  
				order : i,  
				column: columnId  
			};  
			//Push item object into items array  
			items.push(item);  
		});  
	});  
	//Assign items array to sortorder JSON variable  
	var sortorder={ items: items };  
	//Pass sortorder variable to server using ajax to save state  
	$.post('home.php?m=dashboard&p=updateWidgets', 'data='+$.toJSON(sortorder), function(response){ 
		if(response.indexOf("success") < 0){
			$("#console").html('<h0><div class="Failed">Failed to save you\'r operation! Please contact OGP...</div></h0>').hide().fadeIn(1000);  
		}
	});  
}

$(document).ready(function(){ 
	<?php 
    echo $refresh->build("20000");
    ?>
});
</script>
<?php 
}
Esempio n. 9
0
$q_port = empty($_POST['form_q_port']) ? 0 : intval(trim($_POST['form_q_port']));
$s_port = 0;
if (preg_match("/(\\[[0-9a-z\\:]+\\])/iU", $ip, $match)) {
    $ip = $match[1];
} elseif (preg_match("/([0-9a-z\\.\\-]+)/i", $ip, $match)) {
    $ip = $match[1];
} else {
    $ip = "";
}
if ($c_port > 99999 || $q_port < 1024) {
    $c_port = 0;
}
if ($q_port > 99999 || $q_port < 1024) {
    $q_port = 0;
}
list($c_port, $q_port, $s_port) = lgsl_port_conversion($type, $c_port, $q_port, $s_port);
//-----------------------------------------------------------------------------------------------------------+
$output .= "\n  <form method='post' action=''>\n    <div style='text-align:center'>\n      <table cellpadding='4' cellspacing='2' style='margin:auto; text-align:left'>\n\n        <tr style='" . lgsl_bg() . "'>\n          <td colspan='2' style='text-align:center'>\n            <br />\n            {$lgsl_config['text']['awm']}\n            <br />\n            <br />\n          </td>\n        </tr>\n\n        <tr style='" . lgsl_bg() . "'>\n          <td> {$lgsl_config['text']['typ']} </td>\n          <td>\n            <select name='form_type'>";
//---------------------------------------------------------+
foreach ($lgsl_type_list as $key => $value) {
    $output .= "\n              <option " . ($key == $type ? "selected='selected'" : "") . " value='{$key}'> {$value} </option>";
}
//---------------------------------------------------------+
$output .= "\n            </select>\n          </td>\n        </tr>\n\n        <tr style='" . lgsl_bg() . "'>\n          <td> {$lgsl_config['text']['adr']} </td>\n          <td> <input type='text' name='form_ip' value='" . lgsl_string_html($ip) . "' size='15' maxlength='128' /> </td>\n        </tr>\n\n        <tr style='" . lgsl_bg() . "'>\n          <td> {$lgsl_config['text']['cpt']} </td>\n          <td> <input type='text' name='form_c_port' value='" . lgsl_string_html($c_port) . "' size='5' maxlength='5' /> </td>\n        </tr>\n\n        <tr style='" . lgsl_bg() . "'>\n          <td> {$lgsl_config['text']['qpt']} </td>\n          <td> <input type='text' name='form_q_port' value='" . lgsl_string_html($q_port) . "' size='5' maxlength='5' /> </td>\n        </tr>\n\n        <tr style='" . lgsl_bg() . "'>\n          <td colspan='2' style='text-align:center'>\n            <br />\n            <input type='submit' name='lgsl_submit_test' value='{$lgsl_config['text']['ats']}' />\n            <br />\n            <br />\n          </td>\n        </tr>\n\n      </table>\n\n      <br />\n      <br />\n\n    </div>\n  </form>";
//-----------------------------------------------------------------------------------------------------------+
if (empty($_POST['lgsl_submit_test']) && empty($_POST['lgsl_submit_add'])) {
    return;
}
if (!isset($lgsl_type_list[$type]) || !$ip || !$c_port || !$q_port) {
    return;
}
function exec_ogp_module()
{
    global $view, $db;
    $ip = $_REQUEST['ip'];
    $port = $_REQUEST['port'];
    $home_id = $_REQUEST['home_id'];
    $user_id = $_SESSION['user_id'];
    $home_id = $_REQUEST['home_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $mod_id = $_REQUEST['mod_id'];
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights_to_stop_server'));
        return;
    }
    echo "<h2>";
    echo empty($home_info['home_name']) ? get_lang('not_available') : $home_info['home_name'];
    echo "</h2>";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo create_back_button("gamemanager", "game_monitor");
        return;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        print_failure("" . get_lang('not_found_server') . " " . $home_info['remote_server_id'] . ".");
    } else {
        if (isset($_REQUEST['refresh'])) {
            if (isset($server_xml->console_log)) {
                $log_retval = $remote->remote_readfile($home_info['home_path'] . '/' . $server_xml->console_log, $home_log);
            } else {
                $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME, $home_info['home_id'], clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $home_log);
            }
            function getLastLines($string, $n = 1)
            {
                $lines = explode("\n", $string);
                $lines = array_slice($lines, -$n);
                return implode("\n", $lines);
            }
            $home_log = getLastLines($home_log, 40);
            if ($log_retval > 0) {
                if ($log_retval == 2) {
                    print_failure(get_lang('server_not_running_log_found'));
                }
                echo "<pre style='background:black;color:white;'>" . $home_log . "</pre>";
                if ($log_retval == 2) {
                    return;
                }
            } else {
                print_failure(get_lang_f('unable_to_get_log', $log_retval));
            }
            // If game is not supported by lgsl we skip the lgsl checks and
            // assume successfull start.
            if ($home_info['use_nat'] == 1) {
                $query_ip = $home_info['agent_ip'];
            } else {
                $query_ip = $ip;
            }
            $running = TRUE;
            if ($server_xml->lgsl_query_name) {
                require 'protocol/lgsl/lgsl_protocol.php';
                $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                //Connection port
                $c_port = $get_q_and_s['0'];
                //query port
                $q_port = $get_q_and_s['1'];
                //software port
                $s_port = $get_q_and_s['2'];
                $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $query_ip, $c_port, $q_port, $s_port, "sa");
                if ($data['b']['status'] == "0") {
                    $running = FALSE;
                }
            } elseif ($server_xml->gameq_query_name) {
                require 'protocol/GameQ/GameQ.php';
                $query_port = get_query_port($server_xml, $port);
                $servers = array(array('id' => 'server', 'type' => (string) $server_xml->gameq_query_name, 'host' => $query_ip . ":" . $query_port));
                $gq = new GameQ();
                $gq->addServers($servers);
                $gq->setOption('timeout', 4);
                $gq->setOption('debug', FALSE);
                $gq->setFilter('normalise');
                $game = $gq->requestData();
                if (!$game['server']['gq_online']) {
                    $running = FALSE;
                }
            }
            if (!$running) {
                if (!isset($_GET['retry'])) {
                    $retry = 0;
                } else {
                    $retry = $_GET['retry'];
                }
                if ($retry >= 5) {
                    echo "<p>" . get_lang('server_running_not_responding') . "\n\t\t\t\t\t<a href=?m=gamemanager&amp;p=stop&amp;home_id=" . $home_info['home_id'] . "&amp;ip=" . $ip . "&amp;port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>";
                    echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
                }
                echo "</b>Retry #" . $retry . ".</b>";
                $retry++;
                print "<p class='note'>" . get_lang('starting_server') . "</p>";
                $view->refresh("?m=gamemanager&amp;p=start&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}&amp;retry=" . $retry, 3);
                return;
            }
            print_success(get_lang_f('server_restarted', $home_info['home_name']));
            $ip_id = $db->getIpIdByIp($ip);
            $db->delServerStatusCache($ip_id, $port);
            $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port']);
            echo "<p>" . get_lang('follow_server_status') . " <a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'>" . get_lang('game_monitor') . "</a> " . get_lang('page') . ".</p>";
            return;
        } else {
            if ($server_xml->replace_texts) {
                $server_home = $home_info;
                if (isset($server_xml->lgsl_query_name)) {
                    require_once 'protocol/lgsl/lgsl_protocol.php';
                }
                require_once "modules/gamemanager/cfg_text_replace.php";
            }
            $control_type = isset($server_xml->control_protocol_type) ? $server_xml->control_protocol_type : "";
            $run_dir = isset($server_xml->exe_location) ? $server_xml->exe_location : "";
            $last_param = json_decode($home_info['last_param'], True);
            $cli_param_data['GAME_TYPE'] = $home_info['mods'][$mod_id]['mod_key'];
            $cli_param_data['IP'] = $ip;
            $cli_param_data['PORT'] = $port;
            $cli_param_data['HOSTNAME'] = $home_info['home_name'];
            $cli_param_data['PID_FILE'] = "ogp_game_startup.pid";
            $os = $remote->what_os();
            // Linux
            if (preg_match("/Linux/", $os)) {
                $cli_param_data['BASE_PATH'] = $home_info['home_path'];
                $cli_param_data['HOME_PATH'] = $home_info['home_path'];
                $cli_param_data['SAVE_PATH'] = $home_info['home_path'];
                $cli_param_data['OUTPUT_PATH'] = $home_info['home_path'];
                $cli_param_data['USER_PATH'] = $home_info['home_path'];
            } elseif (preg_match("/CYGWIN/", $os)) {
                $home_path_win = $remote->exec("cygpath -w " . $home_info['home_path']);
                $home_path_win = str_replace("\\", "\\\\", $home_path_win);
                $home_path_win = trim($home_path_win);
                $cli_param_data['BASE_PATH'] = $home_path_win;
                $cli_param_data['HOME_PATH'] = $home_path_win;
                $cli_param_data['SAVE_PATH'] = $home_path_win;
                $cli_param_data['OUTPUT_PATH'] = $home_path_win;
                $cli_param_data['USER_PATH'] = $home_path_win;
            }
            if ($server_xml->protocol == "gameq") {
                $cli_param_data['QUERY_PORT'] = get_query_port($server_xml, $port);
            } elseif ($server_xml->protocol == "lgsl") {
                require 'protocol/lgsl/lgsl_protocol.php';
                $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                $cli_param_data['QUERY_PORT'] = $get_ports['1'];
            } elseif ($server_xml->protocol == "teamspeak3") {
                $cli_param_data['QUERY_PORT'] = "10011";
            }
            $cli_param_data['MAP'] = empty($last_param['map']) ? "" : $last_param['map'];
            $cli_param_data['PLAYERS'] = empty($last_param['players']) ? $home_info['mods'][$mod_id]['max_players'] : $last_param['players'];
            $start_cmd = "";
            // If the template is empty then these are not needed.
            if ($server_xml->cli_template) {
                $start_cmd = $server_xml->cli_template;
                if ($server_xml->cli_params) {
                    foreach ($server_xml->cli_params->cli_param as $cli) {
                        // If s is found the param is seperated with space
                        $add_space = preg_match("/s/", $cli['options']) > 0 ? " " : "";
                        $cli_value = $cli_param_data[(string) $cli['id']];
                        // If q is found we add quotes around the value.
                        if (preg_match("/q/", $cli['options']) > 0) {
                            $cli_value = "\"" . $cli_value . "\"";
                        }
                        $start_cmd = preg_replace("/%" . $cli['id'] . "%/", $cli['cli_string'] . $add_space . $cli_value, $start_cmd);
                    }
                }
            }
            if ($isAdmin) {
                $home_info['access_rights'] = "ufpet";
            }
            $param_access_enabled = preg_match("/p/", $home_info['access_rights']) > 0 ? TRUE : FALSE;
            if ($param_access_enabled && isset($last_param)) {
                foreach ($server_xml->server_params->param as $param) {
                    foreach ($last_param as $paramKey => $paramValue) {
                        if (!isset($paramValue)) {
                            $paramValue = (string) $param->default;
                        }
                        if ($param['key'] == $paramKey) {
                            if (0 == strlen($paramValue)) {
                                continue;
                            }
                            if ($param['key'] == $paramValue) {
                                // it's a checkbox
                                $new_param = $paramKey;
                            } elseif ($param->option == "ns" or $param->options == "ns") {
                                $new_param = $paramKey . $paramValue;
                            } else {
                                $new_param = $paramKey . ' "' . $paramValue . '"';
                            }
                            if ($param['id'] == NULL || $param['id'] == "") {
                                $start_cmd .= ' ' . $new_param;
                            } else {
                                $start_cmd = preg_replace("/%" . $param['id'] . "%/", $new_param, $start_cmd);
                            }
                        }
                    }
                    $start_cmd = preg_replace("/%" . $param['id'] . "%/", '', $start_cmd);
                }
            }
            $extra_param_access_enabled = preg_match("/e/", $home_info['access_rights']) > 0 ? TRUE : FALSE;
            if (array_key_exists('extra', $last_param) && $extra_param_access_enabled) {
                $extra_default = $last_param['extra'];
            } else {
                $extra_default = $home_info['mods'][$mod_id]['extra_params'];
            }
            $start_cmd .= " " . $extra_default;
            $remote_retval = $remote->remote_restart_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_info['home_path'], $server_xml->server_exec_name, $run_dir, $start_cmd, $home_info['cpu_affinity'], $home_info['nice']);
            $db->logger(get_lang_f('server_restarted', $home_info['home_name']) . "({$ip}:{$port})");
            if ($remote_retval === 1) {
                print "<p class='note'>" . get_lang('restarting_server') . "</p>";
                $view->refresh("?m=gamemanager&amp;p=restart&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 3);
                return;
            } else {
                if ($remote_retval === -1) {
                    print_failure(get_lang('server_cant_start'));
                    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                } else {
                    if ($remote_retval === -2) {
                        print_failure(get_lang('server_cant_stop'));
                        $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                    } else {
                        $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                        if ($screen_running == 1) {
                            print "<p class='note'>" . get_lang('restarting_server') . "</p>";
                            $view->refresh("?m=gamemanager&amp;p=restart&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 3);
                            return;
                        } else {
                            print_failure("" . get_lang('error_occured_remote_host') . ".{$remote_retval}");
                            $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                        }
                    }
                }
            }
        }
    }
}
function exec_ogp_module()
{
    global $view, $db;
    require_once 'includes/lib_remote.php';
    $ip = $_REQUEST['ip'];
    $port = $_REQUEST['port'];
    $home_id = $_REQUEST['home_id'];
    $user_id = $_SESSION['user_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    $home_path = $home_info['home_path'] . "/";
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights_to_stop_server'));
        return;
    }
    echo "<h2>" . $home_info['home_name'] . "</h2>";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo create_back_button("gamemanager", "game_monitor");
        return;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        print_failure("Could not find the remote server with ID " . $home_info['remote_server_id'] . ".");
    } else {
        $remote = new OGPRemoteLibrary($rserver['agent_ip'], $rserver['agent_port'], $rserver['encryption_key']);
        if (isset($server_xml->control_protocol_type)) {
            $control_type = $server_xml->control_protocol_type;
        } else {
            $control_type = "";
        }
        if ($server_xml->protocol == "gameq") {
            $query_port = get_query_port($server_xml, $port);
        } elseif ($server_xml->protocol == "lgsl") {
            require 'protocol/lgsl/lgsl_protocol.php';
            $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
            $query_port = $get_ports['1'];
        } elseif ($server_xml->protocol == "teamspeak3") {
            $query_port = "10011";
        }
        $remote_retval = $remote->remote_stop_server($home_id, $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_path);
        $db->logger(get_lang_f('server_stopped', $home_info['home_name']) . "({$ip}:{$port})");
        if ($remote_retval === 1) {
            print_success(get_lang_f("server_stopped", $home_info['home_name']));
            if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                $ip_ports = $db->getHomeIpPorts($home_id);
                foreach ($ip_ports as $ip_port) {
                    if ($server_xml->protocol == "gameq") {
                        $query_port = get_query_port($server_xml, $ip_port['port']);
                    } elseif ($server_xml->protocol == "lgsl") {
                        require 'protocol/lgsl/lgsl_protocol.php';
                        $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                        $query_port = $get_ports['1'];
                    } elseif ($server_xml->protocol == "teamspeak3") {
                        $query_port = "10011";
                    }
                    $remote->sudo_exec("ufw deny " . $ip_port['port']);
                    if (isset($query_port)) {
                        $remote->sudo_exec("ufw deny " . $query_port);
                    }
                }
            }
        } elseif ($remote_retval === 0) {
            $remote_retval = $remote->remote_stop_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, "", $control_type, $home_path);
            if ($remote_retval === 1) {
                print_success(get_lang_f("server_stopped", $home_info['home_name']));
                if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                    $ip_ports = $db->getHomeIpPorts($home_id);
                    foreach ($ip_ports as $ip_port) {
                        if ($server_xml->protocol == "gameq") {
                            $query_port = get_query_port($server_xml, $ip_port['port']);
                        } elseif ($server_xml->protocol == "lgsl") {
                            require 'protocol/lgsl/lgsl_protocol.php';
                            $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                            $query_port = $get_ports['1'];
                        } elseif ($server_xml->protocol == "teamspeak3") {
                            $query_port = "10011";
                        }
                        $remote->sudo_exec("ufw deny " . $ip_port['port']);
                        if (isset($query_port)) {
                            $remote->sudo_exec("ufw deny " . $query_port);
                        }
                    }
                }
            }
        }
        if ($remote_retval === 0) {
            print_failure(get_lang("agent_offline"));
        } elseif ($remote_retval !== 1) {
            print_failure("Error occurred on the remote host.");
        }
    }
    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'], 3);
}
function exec_operation($action, $home_id, $mod_id, $ip, $port)
{
    global $db;
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    if ($home_info === FALSE) {
        return FALSE;
    }
    $home_path = $home_info['home_path'] . "/";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        return FALSE;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        return FALSE;
    } else {
        if ($action != "stop") {
            if ($server_xml->replace_texts) {
                $server_home = $home_info;
                if (isset($server_xml->lgsl_query_name)) {
                    require_once 'protocol/lgsl/lgsl_protocol.php';
                }
                require_once "modules/gamemanager/cfg_text_replace.php";
            }
        }
        if (isset($server_xml->control_protocol_type)) {
            $control_type = $server_xml->control_protocol_type;
        } else {
            $control_type = "";
        }
        $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
        if ($action == "stop" and $screen_running) {
            $remote_retval = $remote->remote_stop_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_path);
            $db->logger(get_lang_f('server_stopped', $home_info['home_name']) . "({$ip}:{$port})");
            if ($remote_retval === -1) {
                return FALSE;
            } else {
                if ($remote_retval === -2) {
                    return FALSE;
                } else {
                    $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                    if ($screen_running == 1) {
                        return FALSE;
                    } else {
                        if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                            $ip_ports = $db->getHomeIpPorts($home_id);
                            foreach ($ip_ports as $ip_port) {
                                if ($server_xml->protocol == "gameq") {
                                    $query_port = get_query_port($server_xml, $ip_port['port']);
                                } elseif ($server_xml->protocol == "lgsl") {
                                    require 'protocol/lgsl/lgsl_protocol.php';
                                    $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                                    $query_port = $get_ports['1'];
                                } elseif ($server_xml->protocol == "teamspeak3") {
                                    $query_port = "10011";
                                }
                                $remote->sudo_exec("ufw deny " . $ip_port['port']);
                                if (isset($query_port)) {
                                    $remote->sudo_exec("ufw deny " . $query_port);
                                }
                            }
                        }
                        return TRUE;
                    }
                }
            }
        } elseif ($action == "restart" and $screen_running) {
            $start_cmd = get_sart_cmd($remote, $server_xml, $home_info, $mod_id, $ip, $port);
            $remote_retval = $remote->remote_restart_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_info['home_path'], $server_xml->server_exec_name, $run_dir, $start_cmd, $home_info['cpu_affinity'], $home_info['nice']);
            $db->logger(get_lang_f('server_restarted', $home_info['home_name']) . "({$ip}:{$port})");
            if ($remote_retval === -1) {
                return FALSE;
            } else {
                if ($remote_retval === -2) {
                    return FALSE;
                } else {
                    $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                    if ($screen_running == 1) {
                        $ip_id = $db->getIpIdByIp($ip);
                        $db->delServerStatusCache($ip_id, $port);
                        return TRUE;
                    } else {
                        return FALSE;
                    }
                }
            }
        } elseif ($action == "start" and !$screen_running) {
            $start_cmd = get_sart_cmd($remote, $server_xml, $home_info, $mod_id, $ip, $port);
            $start_retval = $remote->universal_start($home_info['home_id'], $home_info['home_path'], $server_xml->server_exec_name, $server_xml->exe_location, $start_cmd, $port, $ip, $home_info['mods'][$mod_id]['cpu_affinity'], $home_info['mods'][$mod_id]['nice']);
            $db->logger(get_lang('server_started') . " (" . $home_info['home_name'] . " {$ip}:{$port})");
            if ($start_retval == AGENT_ERROR_NOT_EXECUTABLE) {
                return FALSE;
            } else {
                if ($start_retval <= 0) {
                    return FALSE;
                } else {
                    if (isset($server_home['ufw_status']) and $server_home['ufw_status'] == "enable") {
                        $ip_ports = $db->getHomeIpPorts($home_id);
                        foreach ($ip_ports as $ip_port) {
                            if ($server_xml->protocol == "gameq") {
                                $query_port = get_query_port($server_xml, $ip_port['port']);
                            } elseif ($server_xml->protocol == "lgsl") {
                                require 'protocol/lgsl/lgsl_protocol.php';
                                $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                                $query_port = $get_ports['1'];
                            } elseif ($server_xml->protocol == "teamspeak3") {
                                $query_port = "10011";
                            }
                            $remote->sudo_exec("ufw allow " . $ip_port['port']);
                            if (isset($query_port)) {
                                $remote->sudo_exec("ufw allow " . $query_port);
                            }
                        }
                    }
                    $ip_id = $db->getIpIdByIp($ip);
                    $db->delServerStatusCache($ip_id, $port);
                    return TRUE;
                }
            }
        }
    }
}