clone_home.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. /*
  3. *
  4. * OGP - Open Game Panel
  5. * Copyright (C) Copyright (C) 2008 - 2013 The OGP Development Team
  6. *
  7. * http://www.opengamepanel.org/
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * as published by the Free Software Foundation; either version 2
  12. * of the License, or any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  22. *
  23. */
  24. function exec_ogp_module()
  25. {
  26. global $db;
  27. $home_id = $_REQUEST['home_id'];
  28. $server_row = $db->getGameHomeWithoutMods($home_id);
  29. if ( empty($server_row) )
  30. {
  31. print_failure(get_lang('invalid_home_id'));
  32. return;
  33. }
  34. echo "<h2>".get_lang_f('cloning_home',htmlentities($server_row['home_name']))."</h2>";
  35. echo create_back_button('user_games');
  36. include('includes/lib_remote.php');
  37. $remote = new OGPRemoteLibrary($server_row['agent_ip'],$server_row['agent_port'],$server_row['encryption_key'],$server_row['timeout']);
  38. if(isset($_REQUEST['clone_home']))
  39. {
  40. $server_name = $_POST['new_home_name'];
  41. $user_group = $_POST['user_group'];
  42. $clone_home_id = $db->addGameHome($server_row['remote_server_id'], $server_row['user_id_main'],
  43. $server_row['home_cfg_id'], "/home/".$server_row['ogp_user']."/OGP_User_Files/", $server_name, '', genRandomString(8));
  44. $server_path = "/home/".$server_row['ogp_user']."/OGP_User_Files/".$clone_home_id;
  45. if ( $clone_home_id === FALSE )
  46. {
  47. print_failure(get_lang_f('cloning_of_home_failed',$home_id));
  48. return;
  49. }
  50. if( isset($_REQUEST['clone_mods']) )
  51. {
  52. $enabled_mods = $db->getHomeMods($home_id);
  53. if( empty($enabled_mods) )
  54. {
  55. print_failure(get_lang('note').": ".get_lang('no_mods_to_clone'));
  56. }
  57. else
  58. {
  59. foreach ( $enabled_mods as $enabled_rows )
  60. {
  61. if ( $db->addModToGameHome($clone_home_id,
  62. $enabled_rows['mod_cfg_id']) === FALSE )
  63. {
  64. print_failure(get_lang_f('failed_to_add_mod',$enabled_rows['mod_cfg'],
  65. $clone_home_id));
  66. return;
  67. }
  68. if ( $db->updateGameModParams($enabled_rows['max_players'],
  69. $enabled_rows['extra_params'],$enabled_rows['cpu_affinity'],
  70. $enabled_rows['nice'],$clone_home_id,
  71. $enabled_rows['mod_cfg_id']) === FALSE )
  72. {
  73. print_failure(get_lang_f('failed_to_update_mod_settings',$clone_home_id));
  74. return;
  75. }
  76. }
  77. print_success(get_lang_f('successfully_cloned_mods',$clone_home_id));
  78. }
  79. }
  80. print_success(get_lang('successfully_copied_home_database'));
  81. # do the remote copy call here
  82. echo "<p>".get_lang_f('copying_home_remotely',$server_row['home_path'],$server_path)."</p>";
  83. $db->logger(get_lang_f('copying_home_remotely',$server_row['home_path'],$server_path));
  84. $clone_rc = $remote->clone_home($server_row['home_path'],$server_path,$user_group);
  85. if($clone_rc == -1)
  86. {
  87. print_success(get_lang('game_server_copy_is_running'));
  88. ?>
  89. <div class="html5-progress-bar">
  90. <progress id="progressbar" value="0" max="100"></progress>
  91. <span class="progress-value">0%</span>
  92. </div>
  93. <script type="text/javascript">
  94. $(document).ready(function()
  95. {
  96. $.get( "home.php?m=user_games&type=cleared&p=get_size&home_id=<?php echo $home_id;?>&bytes", function( orig_data ) {
  97. var orig_size = parseInt(orig_data,10);
  98. var refreshId = setInterval(function() {
  99. $.get( "home.php?m=user_games&type=cleared&p=get_size&home_id=<?php echo $clone_home_id;?>&bytes", function( dest_data ) {
  100. var dest_size = parseInt(dest_data,10);
  101. var progress = parseInt(dest_size * 100 / orig_size);
  102. $('#progressbar').val(progress);
  103. $('.progress-value').html(progress + '%');
  104. if(progress == 100)
  105. {
  106. clearInterval(refreshId);
  107. }
  108. });
  109. }, 2000);
  110. });
  111. });
  112. </script>
  113. <?php
  114. }
  115. elseif($clone_rc == 1)
  116. {
  117. print_success(get_lang('game_server_copy_was_successful'));
  118. }
  119. else
  120. {
  121. print_failure(get_lang_f('game_server_copy_failed_with_return_code', $clone_rc));
  122. }
  123. echo "<br><a href='home.php?m=user_games'>&lt;&lt; ".get_lang('back_to_game_servers')."</a>";
  124. return;
  125. }
  126. // Form to edit game path.
  127. $avail_mods = $db->getHomeMods($home_id);
  128. $read_status = $remote->remote_readfile('/etc/passwd', $passwd_array);
  129. if ( $read_status === -1 )
  130. {
  131. print_failure(get_lang('agent_offline'));
  132. return;
  133. }
  134. else if ( $read_status == 1 )
  135. {
  136. $passwd_array = preg_split("/\n/",$passwd_array);
  137. }
  138. require_once("includes/form_table_class.php");
  139. $ft = new FormTable();
  140. $ft->start_form('?m=user_games&amp;p=clone');
  141. $ft->add_field_hidden('home_id',$home_id);
  142. $ft->start_table();
  143. $ft->add_custom_field('agent_ip',$server_row['agent_ip']);
  144. $ft->add_custom_field('current_home_path',$server_row['home_path']);
  145. $ft->add_field('string','new_home_name',htmlentities($server_row['home_name']));
  146. echo "<tr><td class='right'>".get_lang('clone_mods').":</td>
  147. <td class='left'><input type='checkbox' name='clone_mods' value='y' /></td></tr>";
  148. echo "<input name='user_group' type='hidden' value='".get_user_uid_gid_from_passwd($passwd_array,$server_row['ogp_user'])."' /></tr>";
  149. echo "</table>";
  150. $ft->add_button('submit','clone_home',get_lang('clone_home'));
  151. echo "<p class='info'>".get_lang('the_name_of_the_server_to_help_users_to_identify_it')."</p>";
  152. echo "</form>";
  153. echo "<h3>".get_lang('ips_and_ports_used_in_this_home')."</h3>";
  154. echo "<p>".get_lang('note_ips_and_ports_are_not_cloned')."</p>";
  155. $assigned = $db->getHomeIpPorts($home_id);
  156. if( !empty($assigned) )
  157. {
  158. foreach ( $assigned as $assigned_rows )
  159. {
  160. echo "<p>".$assigned_rows['ip'].":".$assigned_rows['port']."</p>\n";
  161. }
  162. }
  163. $enabled_mods = $db->getHomeMods($home_id);
  164. echo "<h3>".get_lang('mods_and_settings_for_this_game_server')."</h3>";
  165. if( empty($enabled_mods) )
  166. {
  167. print_failure(get_lang('note').": ".get_lang('note_no_mods'));
  168. return;
  169. }
  170. echo "<table class='center'>\n";
  171. echo "<tr><td>".get_lang('mod_name')."</td><td>".
  172. get_lang('max_players')."</td><td>".
  173. get_lang('extra_cmd_line_args')."</td><td>".
  174. get_lang('cpu_affinity')."</td><td>".
  175. get_lang('nice_level')."</td></tr>\n";
  176. foreach ( $enabled_mods as $enabled_rows )
  177. {
  178. echo "<tr>";
  179. echo "<td>".$enabled_rows['mod_name']."</td>";
  180. echo "<td>".$enabled_rows['max_players']."</td>";
  181. echo "<td>".$enabled_rows['extra_params']."</td>";
  182. echo "<td>".$enabled_rows['cpu_affinity']."</td>";
  183. echo "<td>".$enabled_rows['nice']."</td></tr>\n";
  184. }
  185. echo "</table>\n";
  186. }
  187. ?>