getGameHomeWithoutMods($home_id);
$game_key = $server_row["game_key"];
$readable_game_key = substr($game_key, 0, stripos($game_key, "_"));
$readable_game_key = strtolower($readable_game_key);
if ( empty($server_row) )
{
print_failure(get_lang('invalid_home_id'));
return;
}
echo "
".get_lang_f('cloning_home',htmlentities($server_row['home_name']))."
";
echo create_back_button('user_games');
include_once('includes/lib_remote.php');
$remote = new OGPRemoteLibrary($server_row['agent_ip'],$server_row['agent_port'],$server_row['encryption_key'],$server_row['timeout']);
if(isset($_REQUEST['clone_home']))
{
$server_name = $_POST['new_home_name'];
$user_group = $_POST['user_group'];
$web_user = $db->getUserById($server_row['user_id_main']);
$web_user = $web_user["users_login"];
// Game path logic
$game_path = "/home/".$server_row['ogp_user']."/OGP_User_Files/"; // Default
$skipId = false;
if(hasValue($default_home_dir)){
$game_path = $default_home_dir;
$game_path = str_replace("{USERNAME}", $web_user, $game_path); // Replace some user supported variables with actual value.
if(stripos($game_path, "{SKIPID}") !== false){
$skipId = true;
}
$game_path = str_replace("{SKIPID}", "", $game_path);
$game_path = str_replace("{GAMEKEY}", $readable_game_key, $game_path);
}
if($game_path[strlen($game_path)-1] != "/"){ // Make sure the path ends with forward slash
$game_path .= "/";
}
$game_path = clean_path($game_path); // Clean it
// End game path logic
$clone_home_id = $db->addGameHome($server_row['remote_server_id'], $server_row['user_id_main'],
$server_row['home_cfg_id'], $game_path, $server_name, '', genRandomString(8), $skipId);
$server_path = $game_path;
if(!$skipId)
$server_path .= $clone_home_id;
// Create new home directory if it doesn't already exist
$remote->exec("mkdir -p " . clean_path($server_path));
if ( $clone_home_id === FALSE )
{
print_failure(get_lang_f('cloning_of_home_failed',$home_id));
return;
}
if( isset($_REQUEST['clone_mods']) )
{
$enabled_mods = $db->getHomeMods($home_id);
if( empty($enabled_mods) )
{
print_failure(get_lang('note').": ".get_lang('no_mods_to_clone'));
}
else
{
foreach ( $enabled_mods as $enabled_rows )
{
if ( $db->addModToGameHome($clone_home_id,
$enabled_rows['mod_cfg_id']) === FALSE )
{
print_failure(get_lang_f('failed_to_add_mod',$enabled_rows['mod_cfg'],
$clone_home_id));
return;
}
if ( $db->updateGameModParams($enabled_rows['max_players'],
$enabled_rows['extra_params'],$enabled_rows['cpu_affinity'],
$enabled_rows['nice'],$clone_home_id,
$enabled_rows['mod_cfg_id']) === FALSE )
{
print_failure(get_lang_f('failed_to_update_mod_settings',$clone_home_id));
return;
}
}
print_success(get_lang_f('successfully_cloned_mods',$clone_home_id));
}
}
print_success(get_lang('successfully_copied_home_database'));
# do the remote copy call here
echo "".get_lang_f('copying_home_remotely',$server_row['home_path'],$server_path)."
";
$db->logger(get_lang_f('copying_home_remotely',$server_row['home_path'],$server_path));
$clone_rc = $remote->clone_home($server_row['home_path'],$server_path,$user_group);
if($clone_rc == -1)
{
print_success(get_lang('game_server_copy_is_running'));
?>
<< ".get_lang('back_to_game_servers')."";
return;
}
// Form to edit game path.
$avail_mods = $db->getHomeMods($home_id);
$read_status = $remote->remote_readfile('/etc/passwd', $passwd_array);
if ( $read_status === -1 )
{
print_failure(get_lang('agent_offline'));
return;
}
else if ( $read_status == 1 )
{
$passwd_array = preg_split("/\n/",$passwd_array);
}
require_once("includes/form_table_class.php");
$ft = new FormTable();
$ft->start_form('?m=user_games&p=clone');
$ft->add_field_hidden('home_id',$home_id);
$ft->start_table();
$ft->add_custom_field('agent_ip',$server_row['agent_ip']);
$ft->add_custom_field('current_home_path',$server_row['home_path']);
$ft->add_field('string','new_home_name',htmlentities($server_row['home_name']));
echo "| ".get_lang('clone_mods').": |
|
";
echo "";
echo "";
$ft->add_button('submit','clone_home',get_lang('clone_home'));
echo "".get_lang('the_name_of_the_server_to_help_users_to_identify_it')."
";
echo "";
echo "".get_lang('ips_and_ports_used_in_this_home')."
";
echo "".get_lang('note_ips_and_ports_are_not_cloned')."
";
$assigned = $db->getHomeIpPorts($home_id);
if( !empty($assigned) )
{
foreach ( $assigned as $assigned_rows )
{
echo "".$assigned_rows['ip'].":".$assigned_rows['port']."
\n";
}
}
$enabled_mods = $db->getHomeMods($home_id);
echo "".get_lang('mods_and_settings_for_this_game_server')."
";
if( empty($enabled_mods) )
{
print_failure(get_lang('note').": ".get_lang('note_no_mods'));
return;
}
echo "\n";
echo "| ".get_lang('mod_name')." | ".
get_lang('max_players')." | ".
get_lang('extra_cmd_line_args')." | ".
get_lang('cpu_affinity')." | ".
get_lang('nice_level')." |
\n";
foreach ( $enabled_mods as $enabled_rows )
{
echo "";
echo "| ".$enabled_rows['mod_name']." | ";
echo "".$enabled_rows['max_players']." | ";
echo "".$enabled_rows['extra_params']." | ";
echo "".$enabled_rows['cpu_affinity']." | ";
echo "".$enabled_rows['nice']." |
\n";
}
echo "
\n";
}
?>