cfg_text_replace.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?php
  2. /*
  3. *
  4. * OGP - Open Game Panel
  5. * Copyright (C) 2008 - 2017 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. if (empty($server_home["ip"]))
  25. $server_home["ip"] = $ip;
  26. if (empty($server_home["port"]))
  27. $server_home["port"] = $port;
  28. $server_home['ip_port'] = $server_home['ip'] . ':' . $server_home['port'];
  29. $server_home["true"] = "";
  30. $last_param = json_decode($db->getLastParam($server_home["home_id"]), True);
  31. $server_home["max_players"] = isset($cli_param_data['PLAYERS']) ? $cli_param_data['PLAYERS'] : $last_param['players'];
  32. $server_home["webhost_ip"] = $_SERVER['SERVER_ADDR'];
  33. $server_home["incremental"] = $db->incrementalNumByHomeId( $server_home["home_id"], $server_home["mod_cfg_id"], $server_home["remote_server_id"] );
  34. $server_home["map"] = isset($cli_param_data['MAP']) ? $cli_param_data['MAP'] : $last_param['map'];
  35. $isWin = preg_match('/CYGWIN/', $remote->what_os());
  36. if( isset($server_xml->gameq_query_name) )
  37. {
  38. $server_home["query_port"] = get_query_port($server_xml, $server_home['port']);
  39. }
  40. elseif( isset($server_xml->lgsl_query_name) )
  41. {
  42. $get_q_and_s = lgsl_port_conversion((string)$server_xml->lgsl_query_name, $server_home['port'], "", "");
  43. $server_home["query_port"] = $get_q_and_s['1'];
  44. }
  45. $replace_texts = $server_xml->replace_texts->text;
  46. $replace_id = 0;
  47. if($replace_texts)
  48. {
  49. foreach ($replace_texts as $text => $array )
  50. {
  51. $param = (string)$array['key'];
  52. if ($param == 'home_path' && $isWin) {
  53. $info_param = rtrim($remote->exec('cygpath -w /')) . $server_home[$param];
  54. } else {
  55. $info_param = $server_home[$param];
  56. }
  57. $replacements[$replace_id]['info_param'] = $info_param;
  58. foreach ($array as $key => $value )
  59. {
  60. if ($key == "default")
  61. $replacements[$replace_id]['default'] = (string)$value;
  62. if ($key == "var")
  63. $replacements[$replace_id]['var'] = (string)$value;
  64. if ($key == "filepath")
  65. $replacements[$replace_id]['filepath'] = (string)$value;
  66. if ($key == "options")
  67. $replacements[$replace_id]['options'] = (string)$value;
  68. if ($key == "occurrence")
  69. $replacements[$replace_id]['occurrence'] = (string)$value;
  70. }
  71. $replace_id++;
  72. }
  73. }
  74. $custom_fields = json_decode($db->getCustomFields($server_home["home_id"]), True);
  75. $fields = $server_xml->custom_fields->field;
  76. if($fields)
  77. {
  78. foreach ($fields as $text => $array )
  79. {
  80. foreach ($array as $key => $value )
  81. {
  82. if ($key == "default_value")
  83. {
  84. if (array_key_exists((string)$array['key'], $custom_fields))
  85. $replacements[$replace_id]['info_param'] = strip_real_escape_string((string)$custom_fields[(string)$array['key']]);
  86. else
  87. $replacements[$replace_id]['info_param'] = (string)$value;
  88. }
  89. if ($key == "default")
  90. $replacements[$replace_id]['default'] = (string)$value;
  91. if ($key == "var")
  92. $replacements[$replace_id]['var'] = (string)$value;
  93. if ($key == "filepath")
  94. $replacements[$replace_id]['filepath'] = (string)$value;
  95. if ($key == "options")
  96. $replacements[$replace_id]['options'] = (string)$value;
  97. if ($key == "occurrence")
  98. $replacements[$replace_id]['occurrence'] = (string)$value;
  99. }
  100. $replace_id++;
  101. }
  102. }
  103. foreach($replacements as $key => $replacement)
  104. {
  105. $filepath = $replacement['filepath'];
  106. $file_replacements[$filepath][$key] = $replacement;
  107. }
  108. /* echo "<xmp>";
  109. print_r($file_replacements);
  110. echo "</xmp>"; */
  111. require_once('includes/lib_remote.php');
  112. $remote = new OGPRemoteLibrary($server_home['agent_ip'], $server_home['agent_port'], $server_home['encryption_key'], $server_home['timeout']);
  113. foreach($file_replacements as $filepath => $replacements)
  114. {
  115. $file_info = $remote->remote_readfile($server_home['home_path']."/$filepath",$file_content);
  116. if ( $file_info === 0 )
  117. {
  118. $remote->exec( "touch ".$server_home['home_path']."/$filepath" );
  119. $file_info = "";
  120. }
  121. foreach($replacements as $replacement)
  122. {
  123. $info_param = $replacement['info_param'];
  124. $default = $replacement['default'];
  125. $var = $replacement['var'];
  126. $options = $replacement['options'];
  127. $occurrence = !isset($replacement['occurrence']) || empty($replacement['occurrence']) || !is_numeric($replacement['occurrence']) || $replacement['occurrence'] < 1 ? false : $replacement['occurrence'];
  128. if( !in_array( $options, array("tags","tagValueByName","sc","sqc") ) )
  129. {
  130. $match_found = preg_match("/$default/m", $file_content);
  131. if($var == "")
  132. {
  133. $preg_info_param = preg_quote($info_param, "/");
  134. if ($options == "s")//separated
  135. $match_info_param = preg_match("/^\s$preg_info_param/m", $file_content);
  136. elseif ($options == "q")//quoted
  137. $match_info_param = preg_match("/^\"$preg_info_param\"/m", $file_content);
  138. elseif ($options == "sq")//separated & quoted
  139. $match_info_param = preg_match("/^\s\"$preg_info_param\"/m", $file_content);
  140. elseif ($options == "")
  141. $match_info_param = preg_match("/^$preg_info_param/m", $file_content);
  142. if($match_info_param == 1)
  143. continue;
  144. }
  145. }
  146. else
  147. $match_found = 1;
  148. if(!$match_found or $match_found === 0)
  149. {
  150. if ($options == "s")//separated
  151. $file_content .= "\n$var $info_param";
  152. elseif ($options == "q")//quoted
  153. $file_content .= "\n$var\"" . str_replace('"', '\"', $info_param) . "\"";
  154. elseif ($options == "sq")//separated & quoted
  155. $file_content .= "\n$var \"" . str_replace('"', '\"', $info_param) . "\"";
  156. elseif ($options == "key-regex")
  157. {
  158. $var = str_replace("%key%", $info_param, $var);
  159. $file_content .= "\n$var";
  160. }
  161. elseif ($options == "")
  162. $file_content .= "\n$var$info_param";
  163. }
  164. else
  165. {
  166. if ($options == "tags"){
  167. if($occurrence !== false){
  168. $file_content = preg_replace_nth("/(<$default$var>)(.*)(<\/$default>)/m", '${1}'.$info_param.'${3}', $file_content, $occurrence);
  169. }else{
  170. $file_content = preg_replace("/(<$default$var>)(.*)(<\/$default>)/m", '${1}'.$info_param.'${3}', $file_content, 1);
  171. }
  172. }
  173. elseif ($options == "tagValueByName"){
  174. if($occurrence !== false){
  175. $file_content = preg_replace_nth('/('.$default.'.*name="'.$var.'".*value=)(".*")/m', '${1}"' . str_replace('"', '\"', $info_param) . '"', $file_content, $occurrence);
  176. }else{
  177. $file_content = preg_replace('/('.$default.'.*name="'.$var.'".*value=)(".*")/m', '${1}"' . str_replace('"', '\"', $info_param) . '"', $file_content, 1);
  178. }
  179. }
  180. elseif($options == "s"){//separated
  181. if($occurrence !== false){
  182. $file_content = preg_replace_nth("/$default/m", "$var $info_param", $file_content, $occurrence);
  183. }else{
  184. $file_content = preg_replace("/$default/m", "$var $info_param", $file_content, 1);
  185. }
  186. }
  187. elseif ($options == "q"){//quoted
  188. if($occurrence !== false){
  189. $file_content = preg_replace_nth("/$default/m", "$var\"" . str_replace('"', '\"', $info_param) . "\"", $file_content, $occurrence);
  190. }else{
  191. $file_content = preg_replace("/$default/m", "$var\"" . str_replace('"', '\"', $info_param) . "\"", $file_content, 1);
  192. }
  193. }
  194. elseif ($options == "sq"){//separated & quoted
  195. if($occurrence !== false){
  196. $file_content = preg_replace_nth("/$default/m", "$var \"" . str_replace('"','\"',$info_param) . "\"", $file_content, $occurrence);
  197. }else{
  198. $file_content = preg_replace("/$default/m", "$var \"" . str_replace('"','\"',$info_param) . "\"", $file_content, 1);
  199. }
  200. }
  201. elseif ($options == "sc"){//separated & ending with a comma (used in JC2MP Example)
  202. if($occurrence !== false){
  203. $file_content = preg_replace_nth("/$default/m", "$var $info_param,", $file_content, $occurrence);
  204. }else{
  205. $file_content = preg_replace("/$default/m", "$var $info_param,", $file_content, 1);
  206. }
  207. }
  208. elseif ($options == "sqc"){//separated & quoted & ending with a comma
  209. if($occurrence !== false){
  210. $file_content = preg_replace_nth("/$default/m", "$var \"" . str_replace('"', '\"', $info_param) . "\",", $file_content, $occurrence);
  211. }else{
  212. $file_content = preg_replace("/$default/m", "$var \"" . str_replace('"', '\"', $info_param) . "\",", $file_content, 1);
  213. }
  214. }
  215. elseif ($options == "key-regex")//replace %key% in <var> and use a regular expression
  216. {
  217. $var = str_replace("%key%", $info_param, $var);
  218. if($occurrence !== false){
  219. $file_content = preg_replace_nth("/$default/m", "$var", $file_content, $occurrence);
  220. }else{
  221. $file_content = preg_replace("/$default/m", "$var", $file_content, 1);
  222. }
  223. }
  224. else{
  225. if($occurrence !== false){
  226. $file_content = preg_replace_nth("/$default/m", "$var$info_param", $file_content, $occurrence);
  227. }else{
  228. $file_content = preg_replace("/$default/m", "$var$info_param", $file_content, 1);
  229. }
  230. }
  231. }
  232. if ( get_magic_quotes_gpc() )
  233. $file_content=stripslashes($file_content);
  234. }
  235. //echo "<xmp>".$file_content."</xmp>";
  236. $remote->remote_writefile($server_home['home_path'] . "/" . $filepath, $file_content);
  237. }
  238. ?>