PageRenderTime 41ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/includes/user.php

https://bitbucket.org/ogsteam/ogspy
PHP | 2897 lines | 2315 code | 321 blank | 261 comment | 473 complexity | afb8463db4a9648a237b82554e970d08 MD5 | raw file
Possible License(s): GPL-3.0, BSD-3-Clause
  1. <?php
  2. /**
  3. * user.php Fonctions concernant les utilisateurs
  4. * @author Kyser
  5. * @package OGSpy
  6. * @subpackage user
  7. * @copyright Copyright &copy; 2007, http://ogsteam.fr/
  8. * @modified $Date: 2012-11-05 13:04:30 +0100 (Mon, 05 Nov 2012) $
  9. * @author Kyser
  10. * @link $HeadURL: http://svn.ogsteam.fr/trunk/ogspy/includes/user.php $
  11. * @version 3.04b ( $Rev: 7752 $ )
  12. * $Id: user.php 7752 2012-11-05 12:04:30Z darknoon $
  13. */
  14. if (!defined('IN_SPYOGAME')) {
  15. die("Hacking attempt");
  16. }
  17. /**
  18. * Verification des droits utilisateurs sur une action avec redirection le cas echeant
  19. * @param string $action Action verifie
  20. * @param int $user_id identificateur optionnel de l'utilisateur teste
  21. */
  22. function user_check_auth($action, $user_id = null)
  23. {
  24. global $user_data;
  25. switch ($action) {
  26. case "user_create":
  27. case "usergroup_manage":
  28. if ($user_data["user_admin"] != 1 && $user_data["user_coadmin"] != 1 && $user_data["management_user"] !=
  29. 1)
  30. redirection("index.php?action=message&id_message=forbidden&info");
  31. break;
  32. case "user_update":
  33. if ($user_data["user_admin"] != 1 && $user_data["user_coadmin"] != 1 && $user_data["management_user"] !=
  34. 1)
  35. redirection("index.php?action=message&id_message=forbidden&info");
  36. $info_user = user_get($user_id);
  37. if ($info_user === false)
  38. redirection("index.php?action=message&id_message=deleteuser_failed&info");
  39. if (($user_data["user_admin"] != 1 && $user_data["user_coadmin"] != 1 && $user_data["management_user"] !=
  40. 1) || ($info_user[0]["user_admin"] == 1) || (($user_data["user_coadmin"] == 1) &&
  41. ($info_user[0]["user_coadmin"] == 1)) || (($user_data["user_coadmin"] != 1 && $user_data["management_user"] ==
  42. 1) && ($info_user[0]["user_coadmin"] == 1 || $info_user[0]["management_user"] ==
  43. 1))) {
  44. redirection("index.php?action=message&id_message=forbidden&info");
  45. }
  46. break;
  47. default:
  48. redirection("index.php?action=message&id_message=errorfatal&info");
  49. }
  50. }
  51. /**
  52. * Login d'un utilisateur
  53. * @global string $pub_login
  54. * @global string $pub_password
  55. * @global string $pub_goto
  56. * @todo Query : "select user_id, user_active from " . TABLE_USER .
  57. " where user_name = '" . $db->sql_escape_string($pub_login) .
  58. "' and user_password = '" . md5(sha1($pub_password)) . "'";
  59. * @todo Query : "select user_lastvisit from " . TABLE_USER . " where user_id = " . $user_id;
  60. * @todo Query : "update " . TABLE_USER . " set user_lastvisit = " . time() ." where user_id = " . $user_id;
  61. * @todo Query : "update " . TABLE_STATISTIC ." set statistic_value = statistic_value + 1" " where statistic_name = 'connection_server'";
  62. * @todo Query : "insert ignore into " . TABLE_STATISTIC ." values ('connection_server', '1')";
  63. */
  64. function user_login()
  65. {
  66. global $db;
  67. global $pub_login, $pub_password, $pub_goto, $url_append;
  68. if (!check_var($pub_login, "Pseudo_Groupname") || !check_var($pub_password,
  69. "Password") || !check_var($pub_goto, "Special", "#^[\w=&%+]+$#")) {
  70. redirection("index.php?action=message&id_message=errordata&info");
  71. }
  72. if (!isset($pub_login) || !isset($pub_password)) {
  73. redirection("index.php?action=message&id_message=errorfatal&info");
  74. } else {
  75. $request = "SELECT user_id, user_active FROM " . TABLE_USER .
  76. " WHERE user_name = '" . $db->sql_escape_string($pub_login) .
  77. "' AND user_password = '" . md5(sha1($pub_password)) . "'";
  78. $result = $db->sql_query($request);
  79. if (list($user_id, $user_active) = $db->sql_fetch_row($result)) {
  80. if ($user_active == 1) {
  81. $request = "select user_lastvisit from " . TABLE_USER . " where user_id = " . $user_id;
  82. $result = $db->sql_query($request);
  83. list($lastvisit) = $db->sql_fetch_row($result);
  84. $request = "update " . TABLE_USER . " set user_lastvisit = " . time() .
  85. " where user_id = " . $user_id;
  86. $db->sql_query($request);
  87. $request = "update " . TABLE_STATISTIC .
  88. " set statistic_value = statistic_value + 1";
  89. $request .= " where statistic_name = 'connection_server'";
  90. $db->sql_query($request);
  91. if ($db->sql_affectedrows() == 0) {
  92. $request = "insert ignore into " . TABLE_STATISTIC .
  93. " values ('connection_server', '1')";
  94. $db->sql_query($request);
  95. }
  96. session_set_user_id($user_id, $lastvisit);
  97. log_('login');
  98. if(!isset($url_append)){
  99. $url_append="";
  100. }
  101. redirection("index.php?action=" . $pub_goto . "" . $url_append);
  102. } else {
  103. redirection("index.php?action=message&id_message=account_lock&info");
  104. }
  105. } else {
  106. redirection("index.php?action=message&id_message=login_wrong&info");
  107. }
  108. }
  109. }
  110. /**
  111. * Login d'un utilisateur avec redirection
  112. * @global string $pub_login
  113. * @global string $pub_password
  114. * @global string $pub_goto
  115. */
  116. function user_login_redirection()
  117. {
  118. global $pub_goto, $url_append;
  119. if($pub_goto=='galaxy'){
  120. global $pub_galaxy, $pub_system;
  121. $url_append="&galaxy=" . $pub_galaxy . "&system=" . $pub_system;
  122. user_login();
  123. } else {
  124. user_login();
  125. }
  126. }
  127. /**
  128. * Deconnection utilisateur
  129. */
  130. function user_logout()
  131. {
  132. log_("logout");
  133. session_close();
  134. redirection("index.php");
  135. }
  136. /**
  137. * Verification de la validite des inputs utilisateurs
  138. * @param string $type Type de variable verifie (pseudo,groupname,password,galaxy,system)
  139. * @param string $string La chaine teste
  140. * @return false|string
  141. */
  142. function string_check($type, $string)
  143. {
  144. if ($type == "pseudo" || $type == "groupname") {
  145. $length_min = 3;
  146. $length_max = 15;
  147. } elseif ($type = "password") {
  148. $length_min = 6;
  149. $length_max = 15;
  150. } elseif ($type = "galaxy") {
  151. $length_min = 1;
  152. $length_max = 999;
  153. } elseif ($type = "system" || $type = "systems") {
  154. $length_min = 1;
  155. $length_max = 999;
  156. }
  157. $string = trim($string);
  158. if (strlen($string) < $length_min || strlen($string) > $length_max) {
  159. return false;
  160. }
  161. return $string;
  162. }
  163. /**
  164. * Modification des droits ogspy d'un utilisateur par l'admin
  165. */
  166. function admin_user_set()
  167. {
  168. global $user_data;
  169. global $pub_user_id, $pub_active, $pub_user_coadmin, $pub_management_user, $pub_management_ranking;
  170. if (!check_var($pub_user_id, "Num") || !check_var($pub_active, "Num") || !
  171. check_var($pub_user_coadmin, "Num") || !check_var($pub_management_user, "Num") ||
  172. !check_var($pub_management_ranking, "Num")) {
  173. redirection("index.php?action=message&id_message=errordata&info");
  174. }
  175. if (!isset($pub_user_id) || !isset($pub_active)) {
  176. redirection("index.php?action=message&id_message=admin_modifyuser_failed&info");
  177. }
  178. //Vérification des droits
  179. user_check_auth("user_update", $pub_user_id);
  180. if ($user_data["user_admin"] == 1) {
  181. if (!isset($pub_user_coadmin) || !isset($pub_management_user) || !isset($pub_management_ranking)) {
  182. redirection("index.php?action=message&id_message=admin_modifyuser_failed&info");
  183. }
  184. } elseif ($user_data["user_coadmin"] == 1) {
  185. $pub_user_coadmin = null;
  186. if (!isset($pub_management_user) || !isset($pub_management_ranking)) {
  187. redirection("index.php?action=message&id_message=admin_modifyuser_failed&info");
  188. }
  189. } else {
  190. $pub_user_coadmin = $pub_management_user = null;
  191. }
  192. if (user_get($pub_user_id) === false) {
  193. redirection("index.php?action=message&id_message=admin_modifyuser_failed&info");
  194. }
  195. user_set_grant($pub_user_id, null, $pub_active, $pub_user_coadmin, $pub_management_user,
  196. $pub_management_ranking);
  197. redirection("index.php?action=administration&subaction=member");
  198. }
  199. /**
  200. * Generation d'un mot de passe par l'admin pour un utilisateur
  201. */
  202. function admin_regeneratepwd()
  203. {
  204. global $pub_user_id; // $pub_new_pass;
  205. $pass_id = "pub_pass_" . $pub_user_id;
  206. global $$pass_id;
  207. $new_pass = $$pass_id;
  208. if (!check_var($pub_user_id, "Num")) {
  209. redirection("index.php?action=message&id_message=errordata&info");
  210. }
  211. if (!isset($pub_user_id)) {
  212. redirection("index.php?action=message&id_message=errorfatal&info");
  213. }
  214. user_check_auth("user_update", $pub_user_id);
  215. if (user_get($pub_user_id) === false) {
  216. redirection("index.php?action=message&id_message=regeneratepwd_failed&info");
  217. }
  218. if ($new_pass != "") {
  219. $password = $new_pass;
  220. } else {
  221. $password = password_generator();
  222. }
  223. user_set_general($pub_user_id, null, $password);
  224. $info = $pub_user_id . ":" . $password;
  225. log_("regeneratepwd", $pub_user_id);
  226. redirection("index.php?action=message&id_message=regeneratepwd_success&info=" .
  227. $info);
  228. }
  229. /**
  230. * Modification du profil par un utilisateur
  231. * @todo Query : x11
  232. */
  233. function member_user_set()
  234. {
  235. global $db, $user_data, $user_technology;
  236. global $pub_pseudo, $pub_old_password, $pub_new_password, $pub_new_password2, $pub_galaxy,
  237. $pub_system, $pub_skin, $pub_disable_ip_check, $pub_off_commandant, $pub_off_amiral, $pub_off_ingenieur,
  238. $pub_off_geologue, $pub_off_technocrate, $pub_pseudo_ingame, $pub_pseudo_email;
  239. if (!check_var($pub_pseudo, "Text") || !check_var($pub_old_password, "Text") ||
  240. !check_var($pub_new_password, "Text") || !check_var($pub_new_password2,
  241. "CharNum") || !check_var($pub_pseudo_email, "Email")
  242. || !check_var($pub_galaxy, "Num") || !check_var($pub_system, "Num") ||
  243. !check_var($pub_skin, "URL") || !check_var($pub_disable_ip_check, "Num") || !
  244. check_var($pub_pseudo_ingame, "Pseudo_ingame")) {
  245. redirection("index.php?action=message&id_message=errordata&info");
  246. }
  247. $user_id = $user_data["user_id"];
  248. $user_info = user_get($user_id);
  249. $user_empire = user_get_empire();
  250. $user_technology = $user_empire["technology"];
  251. $password_validated = null;
  252. if (!isset($pub_pseudo) || !isset($pub_old_password) || !isset($pub_new_password) ||
  253. !isset($pub_new_password2) || !isset($pub_pseudo_email) || !isset($pub_galaxy) || !isset($pub_system) || !
  254. isset($pub_skin)) {
  255. redirection("index.php?action=message&id_message=member_modifyuser_failed&info");
  256. }
  257. if ($pub_old_password != "" || $pub_new_password != "" || $pub_new_password2 !=
  258. "") {
  259. if ($pub_old_password == "" || $pub_new_password == "" || $pub_new_password != $pub_new_password2) {
  260. redirection("index.php?action=message&id_message=member_modifyuser_failed_passwordcheck&info");
  261. }
  262. if (md5(sha1($pub_old_password)) != $user_info[0]["user_password"]) {
  263. redirection("index.php?action=message&id_message=member_modifyuser_failed_passwordcheck&info");
  264. }
  265. if (!check_var($pub_new_password, "Password")) {
  266. redirection("index.php?action=message&id_message=member_modifyuser_failed_password&info");
  267. }
  268. }
  269. if (!check_var($pub_pseudo, "Pseudo_Groupname")) {
  270. redirection("index.php?action=message&id_message=member_modifyuser_failed_pseudo&info");
  271. }
  272. //pseudo ingame
  273. if ($user_data["user_stat_name"] !== $pub_pseudo_ingame) {
  274. user_set_stat_name($pub_pseudo_ingame);
  275. }
  276. //compte Commandant
  277. if ($user_data['off_commandant'] == "0" && $pub_off_commandant == 1) {
  278. $db->sql_query("UPDATE " . TABLE_USER .
  279. " SET `off_commandant` = '1' WHERE `user_id` = " . $user_id);
  280. }
  281. if ($user_data['off_commandant'] == 1 && (is_null($pub_off_commandant) || $pub_off_commandant !=
  282. 1)) {
  283. $db->sql_query("UPDATE " . TABLE_USER .
  284. " SET `off_commandant` = '0' WHERE `user_id` = " . $user_id);
  285. }
  286. //compte amiral
  287. if ($user_data['off_amiral'] == "0" && $pub_off_amiral == 1) {
  288. $db->sql_query("UPDATE " . TABLE_USER .
  289. " SET `off_amiral` = '1' WHERE `user_id` = " . $user_id);
  290. }
  291. if ($user_data['off_amiral'] == 1 && (is_null($pub_off_amiral) || $pub_off_amiral !=
  292. 1)) {
  293. $db->sql_query("UPDATE " . TABLE_USER .
  294. " SET `off_amiral` = '0' WHERE `user_id` = " . $user_id);
  295. }
  296. //compte ingenieur
  297. if ($user_data['off_ingenieur'] == "0" && $pub_off_ingenieur == 1) {
  298. $db->sql_query("UPDATE " . TABLE_USER .
  299. " SET `off_ingenieur` = '1' WHERE `user_id` = " . $user_id);
  300. }
  301. if ($user_data['off_ingenieur'] == 1 && (is_null($pub_off_ingenieur) || $pub_off_ingenieur !=
  302. 1)) {
  303. $db->sql_query("UPDATE " . TABLE_USER .
  304. " SET `off_ingenieur` = '0' WHERE `user_id` = " . $user_id);
  305. }
  306. //compte geologue
  307. if ($user_data['off_geologue'] == "0" && $pub_off_geologue == 1) {
  308. $db->sql_query("UPDATE " . TABLE_USER .
  309. " SET `off_geologue` = '1' WHERE `user_id` = " . $user_id);
  310. }
  311. if ($user_data['off_geologue'] == 1 && (is_null($pub_off_geologue) || $pub_off_geologue !=
  312. 1)) {
  313. $db->sql_query("UPDATE " . TABLE_USER .
  314. " SET `off_geologue` = '0' WHERE `user_id` = " . $user_id);
  315. }
  316. //compte technocrate
  317. if ($user_data['off_technocrate'] == "0" && $pub_off_technocrate == 1) {
  318. $db->sql_query("UPDATE " . TABLE_USER .
  319. " SET `off_technocrate` = '1' WHERE `user_id` = " . $user_id);
  320. $tech = $user_technology['Esp'] + 2;
  321. $db->sql_query("UPDATE " . TABLE_USER_TECHNOLOGY . " SET `Esp` = " . $tech .
  322. " WHERE `user_id` = " . $user_id);
  323. }
  324. if ($user_data['off_technocrate'] == 1 && (is_null($pub_off_technocrate) || $pub_off_technocrate !=
  325. 1)) {
  326. $db->sql_query("UPDATE " . TABLE_USER .
  327. " SET `off_technocrate` = '0' WHERE `user_id` = " . $user_id);
  328. $tech = $user_technology['Esp'] - 2;
  329. $db->sql_query("UPDATE " . TABLE_USER_TECHNOLOGY . " SET `Esp` = " . $tech .
  330. " WHERE `user_id` = " . $user_id);
  331. }
  332. //Contrôle que le pseudo ne soit pas déjà utilisé
  333. $request = "select * from " . TABLE_USER . " where user_name = '" .
  334. $db->sql_escape_string($pub_pseudo) . "' and user_id <> " . $user_id;
  335. $result = $db->sql_query($request);
  336. if ($db->sql_numrows($result) != 0) {
  337. redirection("index.php?action=message&id_message=member_modifyuser_failed_pseudolocked&info");
  338. }
  339. if (is_null($pub_disable_ip_check) || $pub_disable_ip_check != 1)
  340. $pub_disable_ip_check = 0;
  341. user_set_general($user_id, $pub_pseudo, $pub_new_password, $pub_pseudo_email, null, $pub_galaxy, $pub_system,
  342. $pub_skin, $pub_disable_ip_check);
  343. redirection("index.php?action=profile");
  344. }
  345. /**
  346. * Entree en BDD de donnees utilisateur
  347. * @todo Query x1
  348. */
  349. function user_set_general($user_id, $user_name = null, $user_password = null, $user_email = null, $user_lastvisit = null,
  350. $user_galaxy = null, $user_system = null, $user_skin = null, $disable_ip_check = null)
  351. {
  352. global $db, $user_data, $server_config;
  353. if (!isset($user_id)) {
  354. redirection("index.php?action=message&id_message=errorfatal&info");
  355. }
  356. if (!empty($user_galaxy)) {
  357. $user_galaxy = intval($user_galaxy);
  358. if ($user_galaxy < 1 || $user_galaxy > intval($server_config['num_of_galaxies']))
  359. $user_galaxy = 1;
  360. }
  361. if (!empty($user_system)) {
  362. $user_system = intval($user_system);
  363. if ($user_system < 1 || $user_system > intval($server_config['num_of_systems']))
  364. $user_system = 1;
  365. }
  366. $update = "";
  367. //Pseudo et mot de passe
  368. if (!empty($user_name))
  369. $update .= "user_name = '" . $db->sql_escape_string($user_name) . "'";
  370. if (!empty($user_password))
  371. $update .= ((strlen($update) > 0) ? ", " : "") . "user_password = '" . md5(sha1
  372. ($user_password)) . "'";
  373. //Galaxy et système solaire du membre
  374. if (!empty($user_galaxy))
  375. $update .= ((strlen($update) > 0) ? ", " : "") . "user_galaxy = '" . $user_galaxy .
  376. "'";
  377. if (!empty($user_system))
  378. $update .= ((strlen($update) > 0) ? ", " : "") . "user_system = '" . $user_system .
  379. "'";
  380. //Dernière visite
  381. if (!empty($user_lastvisit))
  382. $update .= ((strlen($update) > 0) ? ", " : "") . "user_lastvisit = '" . $user_lastvisit .
  383. "'";
  384. //Email
  385. if (!empty($user_email))
  386. $update .= ((strlen($update) > 0) ? ", " : "") . "user_email = '" . $user_email .
  387. "'";
  388. //Skin
  389. if (!is_null($user_skin)) {
  390. if (strlen($user_skin) > 0 && substr($user_skin, strlen($user_skin) - 1) != "/")
  391. $user_skin .= "/";
  392. $update .= ((strlen($update) > 0) ? ", " : "") . "user_skin = '" .
  393. $db->sql_escape_string($user_skin) . "'";
  394. }
  395. //Désactivation de la vérification de l'adresse ip
  396. if (!is_null($disable_ip_check))
  397. $update .= ((strlen($update) > 0) ? ", " : "") . "disable_ip_check = '" . $disable_ip_check .
  398. "'";
  399. $request = "update " . TABLE_USER . " set " . $update . " where user_id = " . $user_id;
  400. $db->sql_query($request);
  401. if ($user_id == $user_data['user_id']) {
  402. log_("modify_account");
  403. } else {
  404. log_("modify_account_admin", $user_id);
  405. }
  406. }
  407. /**
  408. * Enregistrement des droits et status utilisateurs
  409. * @todo Query : x2
  410. */
  411. function user_set_grant($user_id, $user_admin = null, $user_active = null, $user_coadmin = null,
  412. $management_user = null, $management_ranking = null)
  413. {
  414. global $db, $user_data;
  415. if (!isset($user_id)) {
  416. redirection("index.php?action=message&id_message=errorfatal&info");
  417. }
  418. //Vérification des droits
  419. user_check_auth("user_update", $user_id);
  420. $update = "";
  421. //Activation membre
  422. if (!is_null($user_active)) {
  423. $update .= ((strlen($update) > 0) ? ", " : "") . "user_active = '" . intval($user_active) .
  424. "'";
  425. if (intval($user_active) == 0) {
  426. $request = "delete from " . TABLE_SESSIONS . " where session_user_id = " . $user_id;
  427. $db->sql_query($request);
  428. }
  429. }
  430. //Co-administration
  431. if (!is_null($user_coadmin)) {
  432. $update .= ((strlen($update) > 0) ? ", " : "") . "user_coadmin = '" . intval($user_coadmin) .
  433. "'";
  434. }
  435. //Gestion des membres
  436. if (!is_null($management_user)) {
  437. $update .= ((strlen($update) > 0) ? ", " : "") . "management_user = '" . intval($management_user) .
  438. "'";
  439. }
  440. //Gestion des classements
  441. if (!is_null($management_ranking)) {
  442. $update .= ((strlen($update) > 0) ? ", " : "") . "management_ranking = '" .
  443. intval($management_ranking) . "'";
  444. }
  445. $request = "update " . TABLE_USER . " set " . $update . " where user_id = " . $user_id;
  446. $db->sql_query($request);
  447. if ($user_id == $user_data['user_id']) {
  448. log_("modify_account");
  449. } else {
  450. log_("modify_account_admin", $user_id);
  451. }
  452. }
  453. /**
  454. * Enregistrement des statistiques utilisateurs
  455. * @todo Query : x1
  456. */
  457. function user_set_stat($planet_added_web = null, $planet_added_ogs = null, $search = null,
  458. $spy_added_web = null, $spy_added_ogs = null, $rank_added_web = null, $rank_added_ogs = null,
  459. $planet_exported = null, $spy_exported = null, $rank_exported = null)
  460. {
  461. global $db, $user_data;
  462. $update = "";
  463. //Statistiques envoi systèmes solaires et rapports d'espionnage
  464. if (!is_null($planet_added_web))
  465. $update .= ((strlen($update) > 0) ? ", " : "") .
  466. "planet_added_web = planet_added_web + " . $planet_added_web;
  467. if (!is_null($planet_added_ogs))
  468. $update .= ((strlen($update) > 0) ? ", " : "") .
  469. "planet_added_ogs = planet_added_ogs + " . $planet_added_ogs;
  470. if (!is_null($search))
  471. $update .= ((strlen($update) > 0) ? ", " : "") . "search = search + " . $search;
  472. if (!is_null($spy_added_web))
  473. $update .= ((strlen($update) > 0) ? ", " : "") .
  474. "spy_added_web = spy_added_web + " . $spy_added_web;
  475. if (!is_null($spy_added_ogs))
  476. $update .= ((strlen($update) > 0) ? ", " : "") .
  477. "spy_added_ogs = spy_added_ogs + " . $spy_added_ogs;
  478. if (!is_null($rank_added_web))
  479. $update .= ((strlen($update) > 0) ? ", " : "") .
  480. "rank_added_web = rank_added_web + " . $rank_added_web;
  481. if (!is_null($rank_added_ogs))
  482. $update .= ((strlen($update) > 0) ? ", " : "") .
  483. "rank_added_ogs = rank_added_ogs + " . $rank_added_ogs;
  484. if (!is_null($planet_exported))
  485. $update .= ((strlen($update) > 0) ? ", " : "") .
  486. "planet_exported = planet_exported + " . $planet_exported;
  487. if (!is_null($spy_exported))
  488. $update .= ((strlen($update) > 0) ? ", " : "") .
  489. "spy_exported = spy_exported + " . $spy_exported;
  490. if (!is_null($rank_exported))
  491. $update .= ((strlen($update) > 0) ? ", " : "") .
  492. "rank_exported = rank_exported + " . $rank_exported;
  493. $request = "update " . TABLE_USER . " set " . $update . " where user_id = " . $user_data["user_id"];
  494. $db->sql_query($request);
  495. }
  496. /**
  497. * Recuperation d'une ligne d'information utilisateur
  498. * @param int $user_id Identificateur optionnel d'1 utilisateur specifique
  499. * @return Array Liste des utilisateurs ou de l'utilisateur specifique
  500. * @comment Pourrait peut etre avantageusement remplace par select * from TABLE_USER
  501. * @comment pour les eventuels champs supplementaires
  502. * @todo Query : x1
  503. */
  504. function user_get($user_id = false)
  505. {
  506. global $db;
  507. $request = "select user_id, user_name, user_password, user_email, user_active, user_regdate, user_lastvisit," .
  508. " user_galaxy, user_system, user_admin, user_coadmin, management_user, management_ranking, disable_ip_check," .
  509. " off_commandant, off_amiral, off_ingenieur, off_geologue, off_technocrate" .
  510. " from " . TABLE_USER;
  511. if ($user_id !== false) {
  512. $request .= " where user_id = " . $user_id;
  513. }
  514. $request .= " order by user_name";
  515. $result = $db->sql_query($request);
  516. $info_users = array();
  517. while ($row = $db->sql_fetch_assoc($result)) {
  518. $info_users[] = $row;
  519. }
  520. if (sizeof($info_users) == 0) {
  521. return false;
  522. }
  523. return $info_users;
  524. }
  525. /**
  526. * Recuperation des droits d'un utilisateur
  527. * @param int $user_id Identificateur de l'utilisateur demande
  528. * @todo Query : x1
  529. * @return Array Tableau des droits
  530. */
  531. function user_get_auth($user_id)
  532. {
  533. global $db;
  534. $user_info = user_get($user_id);
  535. $user_info = $user_info[0];
  536. if ($user_info["user_admin"] == 1 || $user_info["user_coadmin"] == 1) {
  537. $user_auth = array("server_set_system" => 1, "server_set_spy" => 1,
  538. "server_set_rc" => 1, "server_set_ranking" => 1, "server_show_positionhided" =>
  539. 1, "ogs_connection" => 1, "ogs_set_system" => 1, "ogs_get_system" => 1,
  540. "ogs_set_spy" => 1, "ogs_get_spy" => 1, "ogs_set_ranking" => 1,
  541. "ogs_get_ranking" => 1);
  542. return $user_auth;
  543. }
  544. $request = "select server_set_system, server_set_spy, server_set_rc, server_set_ranking, server_show_positionhided,";
  545. $request .= " ogs_connection, ogs_set_system, ogs_get_system, ogs_set_spy, ogs_get_spy, ogs_set_ranking, ogs_get_ranking";
  546. $request .= " from " . TABLE_GROUP . " g, " . TABLE_USER_GROUP . " u";
  547. $request .= " where g.group_id = u.group_id";
  548. $request .= " and user_id = " . $user_id;
  549. $result = $db->sql_query($request);
  550. if ($db->sql_numrows($result) > 0) {
  551. $user_auth = array("server_set_system" => 0, "server_set_spy" => 0,
  552. "server_set_rc" => 0, "server_set_ranking" => 0, "server_show_positionhided" =>
  553. 0, "ogs_connection" => 0, "ogs_set_system" => 0, "ogs_get_system" => 0,
  554. "ogs_set_spy" => 0, "ogs_get_spy" => 0, "ogs_set_ranking" => 0,
  555. "ogs_get_ranking" => 0);
  556. while ($row = $db->sql_fetch_assoc($result)) {
  557. if ($row["server_set_system"] == 1)
  558. $user_auth["server_set_system"] = 1;
  559. if ($row["server_set_spy"] == 1)
  560. $user_auth["server_set_spy"] = 1;
  561. if ($row["server_set_rc"] == 1)
  562. $user_auth["server_set_rc"] = 1;
  563. if ($row["server_set_ranking"] == 1)
  564. $user_auth["server_set_ranking"] = 1;
  565. if ($row["server_show_positionhided"] == 1)
  566. $user_auth["server_show_positionhided"] = 1;
  567. if ($row["ogs_connection"] == 1)
  568. $user_auth["ogs_connection"] = 1;
  569. if ($row["ogs_set_system"] == 1)
  570. $user_auth["ogs_set_system"] = 1;
  571. if ($row["ogs_get_system"] == 1)
  572. $user_auth["ogs_get_system"] = 1;
  573. if ($row["ogs_set_spy"] == 1)
  574. $user_auth["ogs_set_spy"] = 1;
  575. if ($row["ogs_get_spy"] == 1)
  576. $user_auth["ogs_get_spy"] = 1;
  577. if ($row["ogs_set_ranking"] == 1)
  578. $user_auth["ogs_set_ranking"] = 1;
  579. if ($row["ogs_get_ranking"] == 1)
  580. $user_auth["ogs_get_ranking"] = 1;
  581. }
  582. } else {
  583. $user_auth = array("server_set_system" => 0, "server_set_spy" => 0,
  584. "server_set_ranking" => 0, "server_show_positionhided" => 0, "ogs_connection" =>
  585. 0, "ogs_set_system" => 0, "ogs_get_system" => 0, "ogs_set_spy" => 0,
  586. "ogs_get_spy" => 0, "ogs_set_ranking" => 0, "ogs_get_ranking" => 0);
  587. }
  588. return $user_auth;
  589. }
  590. /**
  591. * Creation d'un utilisateur a partir des donnees du formulaire admin
  592. * @comment redirection si erreur de type de donnee
  593. * @todo Query : x3
  594. */
  595. function user_create()
  596. {
  597. global $db, $user_data;
  598. global $pub_pseudo, $pub_user_id, $pub_active, $pub_user_coadmin, $pub_management_user,
  599. $pub_management_ranking, $pub_group_id, $pub_pass;
  600. if (!check_var($pub_pseudo, "Pseudo_Groupname")) {
  601. redirection("index.php?action=message&id_message=errordata&info=1");
  602. }
  603. if (!isset($pub_pseudo)) {
  604. redirection("index.php?action=message&id_message=createuser_failed_general&info");
  605. }
  606. //Vérification des droits
  607. user_check_auth("user_create");
  608. if (!check_var($pub_pseudo, "Pseudo_Groupname")) {
  609. redirection("index.php?action=message&id_message=createuser_failed_pseudo&info=" .
  610. $pub_pseudo);
  611. }
  612. if (!check_var($pub_pass, "Password")) {
  613. redirection("index.php?action=message&id_message=createuser_failed_password&info=" .
  614. $pub_pseudo);
  615. }
  616. if ($pub_pass != "") {
  617. $password = $pub_pass;
  618. } else {
  619. $password = password_generator();
  620. }
  621. //$request = "select user_id from ".TABLE_USER." where user_name = '". $db->sql_escape_string($pub_pseudo)."'";
  622. $request = "select user_id from " . TABLE_USER . " where user_name = '" . $pub_pseudo .
  623. "'";
  624. $result = $db->sql_query($request);
  625. if ($db->sql_numrows($result) == 0) {
  626. $request = "insert into " . TABLE_USER .
  627. " (user_name, user_password, user_regdate, user_active)" . " values ('" . $pub_pseudo .
  628. "', '" . md5(sha1($password)) . "', " . time() . ", '1')";
  629. $db->sql_query($request);
  630. $user_id = $db->sql_insertid();
  631. $request = "insert into " . TABLE_USER_GROUP . " (group_id, user_id) values (" .
  632. $pub_group_id . ", " . $user_id . ")";
  633. $db->sql_query($request);
  634. $info = $user_id . ":" . $password;
  635. log_("create_account", $user_id);
  636. user_set_grant($user_id, null, $pub_active, $pub_user_coadmin, $pub_management_user,
  637. $pub_management_ranking);
  638. redirection("index.php?action=message&id_message=createuser_success&info=" . $info);
  639. } else {
  640. redirection("index.php?action=message&id_message=createuser_failed_pseudolocked&info=" .
  641. $pub_pseudo);
  642. }
  643. }
  644. /**
  645. * Suppression d'un utilisateur ($pub_user_id)
  646. * @todo Query : x12
  647. */
  648. function user_delete()
  649. {
  650. global $db, $user_data;
  651. global $pub_user_id;
  652. if (!check_var($pub_user_id, "Num")) {
  653. redirection("index.php?action=message&id_message=errordata&info");
  654. }
  655. if (!isset($pub_user_id)) {
  656. redirection("index.php?action=message&id_message=createuser_failed_general&info");
  657. }
  658. user_check_auth("user_update", $pub_user_id);
  659. log_("delete_account", $pub_user_id);
  660. $request = "delete from " . TABLE_USER . " where user_id = " . $pub_user_id;
  661. $db->sql_query($request);
  662. $request = "delete from " . TABLE_USER_GROUP . " where user_id = " . $pub_user_id;
  663. $db->sql_query($request);
  664. $request = "delete from " . TABLE_USER_BUILDING . " where user_id = " . $pub_user_id;
  665. $db->sql_query($request);
  666. $request = "delete from " . TABLE_USER_FAVORITE . " where user_id = " . $pub_user_id;
  667. $db->sql_query($request);
  668. $request = "delete from " . TABLE_USER_DEFENCE . " where user_id = " . $pub_user_id;
  669. $db->sql_query($request);
  670. $request = "delete from " . TABLE_USER_SPY . " where user_id = " . $pub_user_id;
  671. $db->sql_query($request);
  672. $request = "delete from " . TABLE_USER_TECHNOLOGY . " where user_id = " . $pub_user_id;
  673. $db->sql_query($request);
  674. $request = "update " . TABLE_RANK_PLAYER_POINTS ." set sender_id = 0 where sender_id = " . $pub_user_id;
  675. $db->sql_query($request);
  676. $request = "update " . TABLE_RANK_PLAYER_ECO ." set sender_id = 0 where sender_id = " . $pub_user_id;
  677. $db->sql_query($request);
  678. $request = "update " . TABLE_RANK_PLAYER_TECHNOLOGY ." set sender_id = 0 where sender_id = " . $pub_user_id;
  679. $db->sql_query($request);
  680. $request = "update " . TABLE_RANK_PLAYER_MILITARY ." set sender_id = 0 where sender_id = " . $pub_user_id;
  681. $db->sql_query($request);
  682. $request = "update " . TABLE_RANK_PLAYER_MILITARY_BUILT ." set sender_id = 0 where sender_id = " . $pub_user_id;
  683. $db->sql_query($request);
  684. $request = "update " . TABLE_RANK_PLAYER_MILITARY_LOOSE ." set sender_id = 0 where sender_id = " . $pub_user_id;
  685. $db->sql_query($request);
  686. $request = "update " . TABLE_RANK_PLAYER_MILITARY_DESTRUCT ." set sender_id = 0 where sender_id = " . $pub_user_id;
  687. $db->sql_query($request);
  688. $request = "update " . TABLE_RANK_PLAYER_HONOR ." set sender_id = 0 where sender_id = " . $pub_user_id;
  689. $db->sql_query($request);
  690. $request = "update " . TABLE_RANK_ALLY_POINTS ." set sender_id = 0 where sender_id = " . $pub_user_id;
  691. $db->sql_query($request);
  692. $request = "update " . TABLE_RANK_ALLY_ECO ." set sender_id = 0 where sender_id = " . $pub_user_id;
  693. $db->sql_query($request);
  694. $request = "update " . TABLE_RANK_ALLY_TECHNOLOGY ." set sender_id = 0 where sender_id = " . $pub_user_id;
  695. $db->sql_query($request);
  696. $request = "update " . TABLE_RANK_ALLY_MILITARY ." set sender_id = 0 where sender_id = " . $pub_user_id;
  697. $db->sql_query($request);
  698. $request = "update " . TABLE_RANK_ALLY_MILITARY_BUILT ." set sender_id = 0 where sender_id = " . $pub_user_id;
  699. $db->sql_query($request);
  700. $request = "update " . TABLE_RANK_ALLY_MILITARY_LOOSE ." set sender_id = 0 where sender_id = " . $pub_user_id;
  701. $db->sql_query($request);
  702. $request = "update " . TABLE_RANK_ALLY_MILITARY_DESTRUCT ." set sender_id = 0 where sender_id = " . $pub_user_id;
  703. $db->sql_query($request);
  704. $request = "update " . TABLE_RANK_ALLY_HONOR ." set sender_id = 0 where sender_id = " . $pub_user_id;
  705. $db->sql_query($request);
  706. $request = "update " . TABLE_UNIVERSE ." set last_update_user_id = 0 where last_update_user_id = " . $pub_user_id;
  707. $db->sql_query($request);
  708. session_close($pub_user_id);
  709. redirection("index.php?action=administration&subaction=member");
  710. }
  711. /**
  712. * Recuperation des statistiques
  713. * @todo Query : x1
  714. */
  715. function user_statistic()
  716. {
  717. global $db;
  718. $request = "select user_id, user_name, planet_added_web, planet_added_ogs, search, spy_added_web, spy_added_ogs, rank_added_web, rank_added_ogs, planet_exported, spy_exported, rank_exported, xtense_type, xtense_version, user_active, user_admin";
  719. $request .= " from " . TABLE_USER .
  720. " order by (planet_added_web + planet_added_ogs) desc";
  721. $result = $db->sql_query($request);
  722. $user_statistic = array();
  723. while ($row = $db->sql_fetch_assoc($result)) {
  724. $here = "";
  725. $request = "select session_ogs from " . TABLE_SESSIONS .
  726. " where session_user_id = " . $row["user_id"];
  727. $result_2 = $db->sql_query($request);
  728. if ($db->sql_numrows($result_2) > 0) {
  729. $here = "(*)";
  730. list($session_ogs) = $db->sql_fetch_row($result_2);
  731. if ($session_ogs == 1)
  732. $here = "(**)";
  733. }
  734. $user_statistic[] = array_merge($row, array("here" => $here));
  735. }
  736. return $user_statistic;
  737. }
  738. /**
  739. * Recuperation du nombres de comptes actifs
  740. * @todo Query : x1
  741. */
  742. function user_get_nb_active_users()
  743. {
  744. global $db;
  745. $request = "SELECT user_id, user_active";
  746. $request .= " FROM ".TABLE_USER;
  747. $request .= " WHERE user_active='1'";
  748. $result = $db->sql_query($request);
  749. $number = $db->sql_numrows();
  750. return($number);
  751. }
  752. /**
  753. * Enregistrement des donnees Empires d'un utilisateur
  754. */
  755. function user_set_empire()
  756. {
  757. global $pub_typedata, $pub_data, $pub_planet_id, $pub_planet_name, $pub_fields,
  758. $pub_coordinates, $pub_temperature_min, $pub_temperature_max, $pub_satellite;
  759. if (!isset($pub_typedata) || !isset($pub_data)) {
  760. redirection("index.php?action=message&id_message=errorfatal&info");
  761. }
  762. switch ($pub_typedata) {
  763. case "B":
  764. if (!isset($pub_planet_name) || !isset($pub_fields) || !isset($pub_coordinates) ||
  765. !isset($pub_temperature_min) || !isset($pub_temperature_max) || !isset($pub_satellite)) {
  766. redirection("index.php?action=message&id_message=errorfatal&info");
  767. }
  768. user_set_building($pub_data, $pub_planet_id, $pub_planet_name, $pub_fields, $pub_coordinates,
  769. $pub_temperature_min, $pub_temperature_max, $pub_satellite);
  770. break;
  771. case "T":
  772. user_set_technology($pub_data);
  773. break;
  774. case "D":
  775. if (!isset($pub_planet_name) || !isset($pub_fields) || !isset($pub_coordinates) ||
  776. !isset($pub_temperature_min) || !isset($pub_temperature_max) || !isset($pub_satellite)) {
  777. redirection("index.php?action=message&id_message=errorfatal&info");
  778. }
  779. user_set_defence($pub_data, $pub_planet_id, $pub_planet_name, $pub_fields, $pub_coordinates,
  780. $pub_temperature_min, $pub_temperature_max, $pub_satellite);
  781. break;
  782. case "E":
  783. user_set_all_empire($pub_data);
  784. break;
  785. default:
  786. redirection("index.php?action=message&id_message=errorfatal&info");
  787. break;
  788. }
  789. redirection("index.php?action=home&subaction=empire");
  790. }
  791. /**
  792. * Enregistrement de toutes les donnees empires
  793. * @param array $data All data related to the empire
  794. * @todo Query : x5
  795. */
  796. function user_set_all_empire($data)
  797. {
  798. global $db, $user_data;
  799. global $pub_view;
  800. require_once ("parameters/lang_empire.php");
  801. $data = str_replace("-", "0", $data);
  802. $data = str_replace(".", "", $data);
  803. $data = stripcslashes($data);
  804. $lines = explode(chr(10), $data);
  805. $OK = false;
  806. $etape = "";
  807. $planetes_total_row = false;
  808. foreach ($lines as $line) {
  809. $arr = array();
  810. $line = trim($line);
  811. if ($line == "Vue d'ensemble de votre empire") {
  812. $OK = true;
  813. continue;
  814. }
  815. if ($OK) {
  816. if (preg_match("#^Coordonnées\s+\[(.*)\]$#", $line, $arr)) {
  817. $coordonnees = preg_split("/\]\s+\[/", $arr[1]);
  818. $planetes_total_row = sizeof($coordonnees) + 1;
  819. if ($planetes_total_row > 10)
  820. return false;
  821. $link_building = array($lang_building["M"] => "M", $lang_building["C"] => "C", $lang_building["D"] =>
  822. "D", $lang_building["CES"] => "CES", $lang_building["CEF"] => "CEF", $lang_building["UdR"] =>
  823. "UdR", $lang_building["UdN"] => "UdN", $lang_building["CSp"] => "CSp", $lang_building["HM"] =>
  824. "HM", $lang_building["HC"] => "HC", $lang_building["HD"] => "HD", $lang_building["Lab"] =>
  825. "Lab", $lang_building["Ter"] => "Ter", $lang_building["Silo"] => "Silo", $lang_building["BaLu"] =>
  826. "BaLu", $lang_building["Pha"] => "Pha", $lang_building["PoSa"] => "PoSa");
  827. $buildings = array("M" => array_fill(0, $planetes_total_row, 0), "C" =>
  828. array_fill(0, $planetes_total_row, 0), "D" => array_fill(0, $planetes_total_row,
  829. 0), "CES" => array_fill(0, $planetes_total_row, 0), "CEF" => array_fill(0, $planetes_total_row,
  830. 0), "UdR" => array_fill(0, $planetes_total_row, 0), "UdN" => array_fill(0, $planetes_total_row,
  831. 0), "CSp" => array_fill(0, $planetes_total_row, 0), "HM" => array_fill(0, $planetes_total_row,
  832. 0), "HC" => array_fill(0, $planetes_total_row, 0), "HD" => array_fill(0, $planetes_total_row,
  833. 0), "Lab" => array_fill(0, $planetes_total_row, 0), "Ter" => array_fill(0, $planetes_total_row,
  834. 0), "Silo" => array_fill(0, $planetes_total_row, 0), "BaLu" => array_fill(0, $planetes_total_row,
  835. 0), "Pha" => array_fill(0, $planetes_total_row, 0), "PoSa" => array_fill(0, $planetes_total_row,
  836. 0));
  837. $link_defence = array($lang_defence["LM"] => "LM", $lang_defence["LLE"] => "LLE",
  838. $lang_defence["LLO"] => "LLO", $lang_defence["CG"] => "CG", $lang_defence["AI"] =>
  839. "AI", $lang_defence["LP"] => "LP", $lang_defence["PB"] => "PB", $lang_defence["GB"] =>
  840. "GB", $lang_defence["MIC"] => "MIC", $lang_defence["MIP"] => "MIP");
  841. $defences = array("LM" => array_fill(0, $planetes_total_row, 0), "LLE" =>
  842. array_fill(0, $planetes_total_row, 0), "LLO" => array_fill(0, $planetes_total_row,
  843. 0), "CG" => array_fill(0, $planetes_total_row, 0), "AI" => array_fill(0, $planetes_total_row,
  844. 0), "LP" => array_fill(0, $planetes_total_row, 0), "PB" => array_fill(0, $planetes_total_row,
  845. 0), "GB" => array_fill(0, $planetes_total_row, 0), "MIC" => array_fill(0, $planetes_total_row,
  846. 0), "MIP" => array_fill(0, $planetes_total_row, 0));
  847. $link_technology = array($lang_technology["Esp"] => "Esp", $lang_technology["Ordi"] =>
  848. "Ordi", $lang_technology["Armes"] => "Armes", $lang_technology["Bouclier"] =>
  849. "Bouclier", $lang_technology["Protection"] => "Protection", $lang_technology["NRJ"] =>
  850. "NRJ", $lang_technology["Hyp"] => "Hyp", $lang_technology["RC"] => "RC", $lang_technology["RI"] =>
  851. "RI", $lang_technology["PH"] => "PH", $lang_technology["Laser"] => "Laser", $lang_technology["Ions"] =>
  852. "Ions", $lang_technology["Plasma"] => "Plasma", $lang_technology["RRI"] => "RRI",
  853. $lang_technology["Graviton"] => "Graviton", $lang_technology["Astrophysique"] =>
  854. "Astrophysique");
  855. $technologies = array("Esp" => 0, "Ordi" => 0, "Armes" => 0, "Bouclier" => 0,
  856. "Protection" => 0, "NRJ" => 0, "Hyp" => 0, "RC" => 0, "RI" => 0, "PH" => 0,
  857. "Laser" => 0, "Ions" => 0, "Plasma" => 0, "RRI" => 0, "Graviton" => 0,
  858. "Astrophysique" => 0);
  859. $satellites = array_fill(0, $planetes_total_row, 0);
  860. $cases = array_fill(0, $planetes_total_row, 0);
  861. // creation du masque ici
  862. $masq = "#^((?:\s?\S+)+)\s+";
  863. for ($i = 0; $i < ($planetes_total_row - 1); $i++) {
  864. $masq .= "(\d+)(?:|\s\d+|\s\(\d+\))\s+";
  865. }
  866. $masq .= "(\d+)(?:\s\d+|\s\(\d+\))*$#";
  867. continue;
  868. }
  869. if ($OK && $planetes_total_row !== false) {
  870. if (preg_match("#^Cases\s+\d+\/((?:\d+\s+(?:\d+)\/(?:\d+)\s*){1," . $planetes_total_row .
  871. "})$#", $line, $arr)) {
  872. $cases = preg_split("/\s+\d+\//", $arr[1]);
  873. if (sizeof($cases) != $planetes_total_row)
  874. return false;
  875. continue;
  876. }
  877. if (preg_match("#^(" . $lang_empire["Batiment"] . "|" . $lang_empire["Recherche"] .
  878. "|" . $lang_empire["Vaisseaux"] . "|" . $lang_empire["Défense"] . ")$#", $line)) {
  879. $etape = $line;
  880. continue;
  881. }
  882. if ($etape != "" && preg_match($masq, $line, $arr)) {
  883. $building = $arr[1];
  884. $levels = array_slice($arr, 2);
  885. switch ($etape) {
  886. case "Bâtiments":
  887. if (isset($link_building[$building])) {
  888. if (sizeof($levels) != $planetes_total_row)
  889. return false;
  890. $buildings[$link_building[$building]] = $levels;
  891. }
  892. break;
  893. case "Recherche":
  894. if (isset($link_technology[$building])) {
  895. if (sizeof($levels) != $planetes_total_row)
  896. return false;
  897. $technologies[$link_technology[$building]] = max($levels);
  898. }
  899. break;
  900. case "Vaisseaux":
  901. if ($building == "Satellite solaire") {
  902. if (sizeof($levels) != $planetes_total_row)
  903. return false;
  904. $satellites = $levels;
  905. }
  906. break;
  907. case "Défense":
  908. if (isset($link_defence[$building])) {
  909. if (sizeof($levels) != $planetes_total_row)
  910. return false;
  911. $defences[$link_defence[$building]] = $levels;
  912. }
  913. break;
  914. default:
  915. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  916. }
  917. continue;
  918. }
  919. }
  920. }
  921. }
  922. if ($OK && $planetes_total_row !== false) {
  923. $j = 19;
  924. for ($i = 0; $i < $planetes_total_row; $i++) {
  925. if ($pub_view == "moons") {
  926. $request = "select planet_id from " . TABLE_USER_BUILDING .
  927. " where coordinates = '" . $coordonnees[$i] . "' and planet_id > 9";
  928. $result = $db->sql_query($request);
  929. if ($db->sql_numrows($result) > 0) {
  930. list($planete_id) = $db->sql_fetch_row($result);
  931. } else {
  932. $request = "select planet_id from " . TABLE_USER_BUILDING . " where user_id = " .
  933. $user_data["user_id"] . " and coordinates = '" . $coordonnees[$i] . "'";
  934. $result = $db->sql_query($request);
  935. list($planete_id) = $db->sql_fetch_row($result);
  936. if (!$planete_id) {
  937. $planete_id = $j;
  938. $j++;
  939. } else
  940. $planete_id += 9;
  941. }
  942. } else
  943. $planete_id = $i + 1;
  944. if ($pub_view == "planets")
  945. $case = $cases[$i] - 5 * $buildings["Ter"][$i];
  946. else
  947. $case = 1;
  948. $request = "update " . TABLE_USER_BUILDING . " set coordinates = '" . $coordonnees[$i] .
  949. "', `fields` = " . $case . " , Sat = " . $satellites[$i];
  950. $request .= ", M = " . $buildings["M"][$i] . ", C = " . $buildings["C"][$i] .
  951. ", D = " . $buildings["D"][$i];
  952. $request .= ", CES = " . $buildings["CES"][$i] . ", CEF = " . $buildings["CEF"][$i] .
  953. ", UdR = " . $buildings["UdR"][$i];
  954. $request .= ", UdN = " . $buildings["UdN"][$i] . ", CSp = " . $buildings["CSp"][$i] .
  955. ", HM = " . $buildings["HM"][$i];
  956. $request .= ", HC = " . $buildings["HC"][$i] . ", HD = " . $buildings["HD"][$i] .
  957. ", Lab = " . $buildings["Lab"][$i];
  958. $request .= ", Ter = " . $buildings["Ter"][$i] . ", Silo = " . $buildings["Silo"][$i] .
  959. ", BaLu = " . $buildings["BaLu"][$i];
  960. $request .= ", Pha = " . $buildings["Pha"][$i] . ", PoSa = " . $buildings["PoSa"][$i] . ($pub_view ==
  961. 'lunes' ? ', planet_name = \'Lune\'' : '');
  962. $request .= " where user_id = " . $user_data["user_id"] . " and planet_id = " .
  963. $planete_id;
  964. $db->sql_query($request);
  965. if ($db->sql_affectedrows() == 0) {
  966. $request = "insert ignore into " . TABLE_USER_BUILDING .
  967. " (user_id, planet_id, planet_name, coordinates, `fields`, temperature_min, temperature_max, Sat, M, C, D, CES, CEF, UdR, UdN, CSp, HM, HC, HD, Lab, Ter, Silo, BaLu, Pha, PoSa)";
  968. $request .= " values (" . $user_data["user_id"] . ", " . $planete_id . ", '" . ($pub_view ==
  969. 'moons' ? 'Lune' : 'planete ' . $planete_id) . "', '" . $coordonnees[$i] . "', " .
  970. $case . ", 0, " . $satellites[$i];
  971. $request .= ", " . $buildings["M"][$i] . ", " . $buildings["C"][$i] . ", " . $buildings["D"][$i];
  972. $request .= ", " . $buildings["CES"][$i] . ", " . $buildings["CEF"][$i] . ", " .
  973. $buildings["UdR"][$i];
  974. $request .= ", " . $buildings["UdN"][$i] . ", " . $buildings["CSp"][$i] . ", " .
  975. $buildings["HM"][$i];
  976. $request .= ", " . $buildings["HC"][$i] . ", " . $buildings["HD"][$i] . ", " . $buildings["Lab"][$i];
  977. $request .= ", " . $buildings["Ter"][$i] . ", " . $buildings["Silo"][$i] . ", " .
  978. $buildings["BaLu"][$i];
  979. $request .= ", " . $buildings["Pha"][$i] . ", " . $buildings["PoSa"][$i] . ")";
  980. $db->sql_query($request);
  981. }
  982. $request = "delete from " . TABLE_USER_DEFENCE . " where user_id = " . $user_data["user_id"] .
  983. " and planet_id= " . $planete_id;
  984. $db->sql_query($request);
  985. $request = "insert into " . TABLE_USER_DEFENCE .
  986. " (user_id, planet_id, LM, LLE, LLO, CG, AI, LP, PB, GB, MIC, MIP)";
  987. $request .= " values (" . $user_data["user_id"] . ", " . $planete_id . ", " . $defences["LM"][$i] .
  988. ", " . $defences["LLE"][$i] . "," . $defences["LLO"][$i] . ", " . $defences["CG"][$i] .
  989. ", " . $defences["AI"][$i] . ", " . $defences["LP"][$i] . ", " . $defences["PB"][$i] .
  990. ", " . $defences["GB"][$i] . ", " . $defences["MIC"][$i] . ", " . $defences["MIP"][$i] .
  991. ")";
  992. $db->sql_query($request);
  993. }
  994. if ($pub_view == "planets") {
  995. $request = "delete from " . TABLE_USER_TECHNOLOGY . " where user_id = " . $user_data["user_id"];
  996. $db->sql_query($request);
  997. $request = "insert into " . TABLE_USER_TECHNOLOGY .
  998. " (user_id, esp, Ordi, Armes, Bouclier, Protection, NRJ, Hyp, RC, RI, PH, Laser, Ions, Plasma, RRI, Graviton, Astrophysique)";
  999. $request .= " values (" . $user_data["user_id"] . ", " . $technologies["Esp"] .
  1000. ", " . $technologies["Ordi"] . "," . $technologies["Armes"] . ", " . $technologies["Bouclier"] .
  1001. ", " . $technologies["Protection"] . ", " . $technologies["NRJ"] . ", " . $technologies["Hyp"] .
  1002. ", " . $technologies["RC"] . ", " . $technologies["RI"] . ", " . $technologies["PH"] .
  1003. ", " . $technologies["Laser"] . ", " . $technologies["Ions"] . ", " . $technologies["Plasma"] .
  1004. ", " . $technologies["RRI"] . ", " . $technologies["Graviton"] . ", " . $technologies["Astrophysique"] .
  1005. ");";
  1006. $db->sql_query($request);
  1007. }
  1008. if ($pub_view == "planets")
  1009. redirection("index.php?action=home&subaction=empire&view=" . $pub_view .
  1010. "&alert_empire=true");
  1011. else
  1012. redirection("index.php?action=home&subaction=empire&view=" . $pub_view);
  1013. } else
  1014. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  1015. }
  1016. /**
  1017. * remise en ordre des lunes en fonctions des positions des planetes
  1018. * @todo Query : x6
  1019. */
  1020. function user_set_all_empire_resync_moon()
  1021. {
  1022. global $db, $user_data;
  1023. // lews planetes
  1024. $request = "select planet_id, coordinates";
  1025. $request .= " from " . TABLE_USER_BUILDING;
  1026. $request .= " where user_id = " . $user_data["user_id"];
  1027. $request .= " and planet_id <= 199";
  1028. $request .= " order by planet_id";
  1029. $result = $db->sql_query($request);
  1030. while (list($planet_id, $coordinates) = $db->sql_fetch_row($result)) {
  1031. $planet_position[$coordinates] = $planet_id;
  1032. }
  1033. // les lunes
  1034. $request = "select planet_id, coordinates";
  1035. $request .= " from " . TABLE_USER_BUILDING;
  1036. $request .= " where user_id = " . $user_data["user_id"];
  1037. $request .= " and planet_id > 199";
  1038. $request .= " order by planet_id";
  1039. $result = $db->sql_query($request);
  1040. while (list($planet_id, $coordinates) = $db->sql_fetch_row($result)) {
  1041. $moon_position[$coordinates] = $planet_id;
  1042. }
  1043. // on ressort les complexes planete / lune ayant la meme cle
  1044. $complexe = array_intersect_key($planet_position, $moon_position);
  1045. /// on passe les id se modifiant a 300
  1046. foreach ($complexe as $cle_com => $valeur_com) {
  1047. $nouvelle_valeur = $planet_position[$cle_com] + 200;
  1048. $request = "UPDATE " . TABLE_USER_DEFENCE . " SET planet_id = " . $nouvelle_valeur .
  1049. " WHERE planet_id = " . $moon_position[$cle_com] . " and user_id = " . $user_data["user_id"] .
  1050. "";
  1051. $db->sql_query($request);
  1052. $request = "UPDATE " . TABLE_USER_BUILDING . " SET planet_id = " . $nouvelle_valeur .
  1053. " WHERE planet_id = " . $moon_position[$cle_com] . " and user_id = " . $user_data["user_id"] .
  1054. "";
  1055. $db->sql_query($request);
  1056. }
  1057. /// on remet le tout a 200 pour lunes
  1058. $request = "UPDATE " . TABLE_USER_BUILDING .
  1059. " SET planet_id = planet_id -100 WHERE planet_id > 299 and user_id = " . $user_data["user_id"] .
  1060. "";
  1061. $db->sql_query($request);
  1062. $request = "UPDATE " . TABLE_USER_DEFENCE .
  1063. " SET planet_id = planet_id -100 WHERE planet_id > 299 and user_id = " . $user_data["user_id"] .
  1064. "";
  1065. $db->sql_query($request);
  1066. }
  1067. /**
  1068. * remise en ordre des planetes sans espaces vides ...
  1069. * ( les id doivent se suivre 101,102,103 etc etc)
  1070. * @todo Query : x3
  1071. */
  1072. function user_set_all_empire_resync_planet()
  1073. {
  1074. global $db, $user_data;
  1075. $nb_planete = find_nb_planete_user();
  1076. $request = "select planet_id, coordinates";
  1077. $request .= " from " . TABLE_USER_BUILDING;
  1078. $request .= " where user_id = " . $user_data["user_id"];
  1079. $request .= " and planet_id <= 199";
  1080. $request .= " order by planet_id";
  1081. $result = $db->sql_query($request);
  1082. while (list($planet_id, $coordinates) = $db->sql_fetch_row($result)) {
  1083. $planet_position[$coordinates] = $planet_id;
  1084. }
  1085. $i = 101;
  1086. foreach ($planet_position as $cle => $valeur) {
  1087. // planete
  1088. $request = "update " . TABLE_USER_BUILDING . " set planet_id = " . $i .
  1089. " where planet_id = " . $valeur ." and user_id = " . $user_data["user_id"];
  1090. $db->sql_query($request);
  1091. $request = "update " . TABLE_USER_DEFENCE . " set planet_id = " . $i .
  1092. " where planet_id = " . $valeur . " and user_id = " . $user_data["user_id"];
  1093. $db->sql_query($request);
  1094. $i++;
  1095. }
  1096. /// on lance le resync moon que si lune
  1097. $request = "select planet_id ";
  1098. $request .= " from " . TABLE_USER_BUILDING;
  1099. $request .= " where user_id = " . $user_data["user_id"];
  1100. $request .= " and planet_id > 199";
  1101. $request .= " order by planet_id";
  1102. $result = $db->sql_query($request);
  1103. if ($db->sql_numrows($result) != 0) {
  1104. // on remet en ordre moon
  1105. user_set_all_empire_resync_moon();
  1106. // todo : passer le result en paramettre ...
  1107. }
  1108. }
  1109. /**
  1110. * Build the array with Empire data
  1111. *
  1112. * @todo Query : x3
  1113. */
  1114. function user_set_building($data, $planet_id, $planet_name, $fields, $coordinates,
  1115. $temperature_min, $temperature_max, $satellite)
  1116. {
  1117. global $db, $user_data;
  1118. global $pub_view, $server_config;
  1119. require_once ("parameters/lang_empire.php");
  1120. $planet_name = trim($planet_name) != "" ? trim($planet_name) : "Inconnu";
  1121. if (!check_var($planet_name, "Galaxy"))
  1122. $planet_name = "";
  1123. $fields = intval($fields);
  1124. $temperature_min = intval($temperature_min);
  1125. $temperature_max = intval($temperature_max);
  1126. $satellite = intval($satellite);
  1127. $coordinates_ok = "";
  1128. if (sizeof(explode(":", $coordinates)) == 3 || sizeof(explode(".", $coordinates)) ==
  1129. 3) {
  1130. if (sizeof(explode(":", $coordinates)) == 3)
  1131. @list($galaxy, $system, $row) = explode(":", $coordinates);
  1132. if (sizeof(explode(".", $coordinates)) == 3)
  1133. @list($galaxy, $system, $row) = explode(".", $coordinates);
  1134. if (intval($galaxy) >= 1 && intval($galaxy) <= intval($server_config['num_of_galaxies']) &&
  1135. intval($system) >= 1 && intval($system) <= intval($server_config['num_of_systems']) &&
  1136. intval($row) >= 1 && intval($row) <= 15) {
  1137. $coordinates_ok = $coordinates;
  1138. }
  1139. }
  1140. if (!isset($planet_id)) {
  1141. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  1142. }
  1143. $planet_id = intval($planet_id);
  1144. if (($view == "planets" && ($planet_id < 1 || $planet_id > 9)) || ($view ==
  1145. "lunes" && ($planet_id < 10 || $planet_id > 18))) {
  1146. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  1147. }
  1148. $link_building = array($lang_building["M"] => "M", $lang_building["C"] => "C", $lang_building["D"] =>
  1149. "D", $lang_building["CES"] => "CES", $lang_building["CEF"] => "CEF", $lang_building["DdR"] =>
  1150. "DdR", $lang_building["UdR"] => "UdR", $lang_building["UdN"] => "UdN", $lang_building["CSp"] =>
  1151. "CSp", $lang_building["HM"] => "HM", $lang_building["HC"] => "HC", $lang_building["HD"] =>
  1152. "HD", $lang_building["Lab"] => "Lab", $lang_building["Ter"] => "Ter", $lang_building["Silo"] =>
  1153. "Silo", $lang_building["BaLu"] => "BaLu", $lang_building["Pha"] => "Pha", $lang_building["PoSa"] =>
  1154. "PoSa");
  1155. $buildings = array("M" => 0, "C" => 0, "D" => 0, "CES" => 0, "CEF" => 0, "DdR" =>
  1156. 0, "UdR" => 0, "UdN" => 0, "CSp" => 0, "HM" => 0, "HC" => 0, "HD" => 0, "Lab" =>
  1157. 0, "Ter" => 0, "Silo" => 0, "BaLu" => 0, "Pha" => 0, "PoSa" => 0);
  1158. $lines = explode(chr(10), $data);
  1159. $OK = false;
  1160. foreach ($lines as $line) {
  1161. $arr = array();
  1162. $line = trim($line);
  1163. if (ereg("^(.*) \(Niveau ([[:digit:]]{1,3}).*\)$", $line, $arr)) {
  1164. list($string, $building, $level) = $arr;
  1165. $building = trim($building);
  1166. $level = trim(str_replace("Niveau", "", $level));
  1167. if (isset($link_building[$building])) {
  1168. $OK = true;
  1169. $buildings[$link_building[$building]] = $level;
  1170. $res = $db->sql_query('SELECT planet_name FROM ' . TABLE_USER_BUILDING .
  1171. ' WHERE planet_id = ' . $planet_id);
  1172. if ($link_building[$building] == 'Ter' && $db->sql_numrows($res) == 0)
  1173. $fields -= $level * 5;
  1174. if ($link_building[$building] == 'Balu' && $db->sql_numrows($res) == 0)
  1175. $fields -= $level * 4;
  1176. }
  1177. }
  1178. }
  1179. if ($OK) {
  1180. $request = "delete from " . TABLE_USER_BUILDING . " where user_id = " . $user_data["user_id"] .
  1181. " and planet_id= " . $planet_id;
  1182. $db->sql_query($request);
  1183. $request = "insert into " . TABLE_USER_BUILDING .
  1184. " (user_id, planet_id, planet_name, coordinates, `fields`, temperature_min, temperature_max, Sat, M, C, D, CES, CEF, UdR, UdN, CSP, HM, HC, HD, Lab, Ter, Silo, BaLu, Pha, PoSa)";
  1185. $request .= " values (" . $user_data["user_id"] . ", " . $planet_id . ", '" .
  1186. $db->sql_escape_string($planet_name) . "', '" . $coordinates_ok . "', " . $fields .
  1187. ", " . $temperature_min . ", " . $satellite . ", " . $buildings["M"] . ", " . $buildings["C"] .
  1188. "," . $buildings["D"] . ", " . $buildings["CES"] . ", " . $buildings["CEF"] .
  1189. ", " . $buildings["UdR"] . ", " . $buildings["UdN"] . ", " . $buildings["CSp"] .
  1190. ", " . $buildings["HM"] . ", " . $buildings["HC"] . ", " . $buildings["HD"] .
  1191. ", " . $buildings["Lab"] . ", " . $buildings["Ter"] . ", " . $buildings["Silo"] .
  1192. ", " . $buildings["BaLu"] . ", " . $buildings["Pha"] . ", " . $buildings["PoSa"] .
  1193. ")";
  1194. $db->sql_query($request);
  1195. } elseif ($planet_id > 9) {
  1196. $request = "insert into " . TABLE_USER_BUILDING .
  1197. " (user_id, planet_id, planet_name, coordinates, `fields`, temperature_min, temperature_max, Sat, M, C, D, CES, CEF, UdR, UdN, CSP, HM, HC, HD, Lab, Ter, Silo, BaLu, Pha, PoSa)";
  1198. $request .= " values (" . $user_data["user_id"] . ", " . $planet_id . ", '" .
  1199. $db->sql_escape_string($planet_name) . "', '" . $coordinates_ok . "', " . $fields .
  1200. ", " . $temperature_max . ", " . $satellite . ", " . $buildings["M"] . ", " . $buildings["C"] .
  1201. "," . $buildings["D"] . ", " . $buildings["CES"] . ", " . $buildings["CEF"] .
  1202. ", " . $buildings["UdR"] . ", " . $buildings["UdN"] . ", " . $buildings["CSp"] .
  1203. ", " . $buildings["HM"] . ", " . $buildings["HC"] . ", " . $buildings["HD"] .
  1204. ", " . $buildings["Lab"] . ", " . $buildings["Ter"] . ", " . $buildings["Silo"] .
  1205. ", " . $buildings["BaLu"] . ", " . $buildings["Pha"] . ", " . $buildings["PoSa"] .
  1206. ")";
  1207. $db->sql_query($request);
  1208. } else {
  1209. $request = "update " . TABLE_USER_BUILDING . " set planet_name = '" .
  1210. $db->sql_escape_string($planet_name) . "', coordinates = '" . $coordinates_ok .
  1211. "', `fields` = " . $fields . ", temperature_min = " . $temperature_min .
  1212. ", temperature_max = " . $temperature_max . ", Sat = " . $satellite .
  1213. " where user_id = " . $user_data["user_id"] . " and planet_id = " . $planet_id;
  1214. $db->sql_query($request);
  1215. }
  1216. redirection("index.php?action=home&subaction=empire&view=" . $pub_view);
  1217. }
  1218. /**
  1219. * Build the array with technology data
  1220. *
  1221. * @todo Query : x2
  1222. */
  1223. function user_set_technology($data)
  1224. {
  1225. global $db, $user_data;
  1226. require_once ("parameters/lang_empire.php");
  1227. $link_technology = array($lang_technology["Esp"] => "Esp", $lang_technology["Ordi"] =>
  1228. "Ordi", $lang_technology["Armes"] => "Armes", $lang_technology["Bouclier"] =>
  1229. "Bouclier", $lang_technology["Protection"] => "Protection", $lang_technology["NRJ"] =>
  1230. "NRJ", $lang_technology["Hyp"] => "Hyp", $lang_technology["RC"] => "RC", $lang_technology["RI"] =>
  1231. "RI", $lang_technology["PH"] => "PH", $lang_technology["Laser"] => "Laser", $lang_technology["Ions"] =>
  1232. "Ions", $lang_technology["Plasma"] => "Plasma", $lang_technology["RRI"] => "RRI",
  1233. $lang_technology["Graviton"] => "Graviton", $lang_technology["Astrophysique"] =>
  1234. "Astrophysique");
  1235. $technologies = array("Esp" => 0, "Ordi" => 0, "Armes" => 0, "Bouclier" => 0,
  1236. "Protection" => 0, "NRJ" => 0, "Hyp" => 0, "RC" => 0, "RI" => 0, "PH" => 0,
  1237. "Laser" => 0, "Ions" => 0, "Plasma" => 0, "RRI" => 0, "Graviton" => 0,
  1238. "Astrophysique" => 0);
  1239. $lines = explode(chr(10), $data);
  1240. $OK = false;
  1241. foreach ($lines as $line) {
  1242. $arr = array();
  1243. $line = trim($line);
  1244. if (ereg("^(.*) \(Niveau ([[:digit:]]{1,3}).*\)$", $line, $arr)) {
  1245. list($string, $technology, $level) = $arr;
  1246. $technology = trim($technology);
  1247. $level = trim(str_replace("Niveau", "", $level));
  1248. if (isset($link_technology[$technology])) {
  1249. $OK = true;
  1250. $technologies[$link_technology[$technology]] = $level;
  1251. }
  1252. }
  1253. }
  1254. if (!$OK) {
  1255. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  1256. }
  1257. $request = "delete from " . TABLE_USER_TECHNOLOGY . " where user_id = " . $user_data["user_id"];
  1258. $db->sql_query($request);
  1259. $request = "insert into " . TABLE_USER_TECHNOLOGY .
  1260. " (user_id, esp, Ordi, Armes, Bouclier, Protection, NRJ, Hyp, RC, RI, PH, Laser, Ions, Plasma, RRI, Graviton, Astrophysique)";
  1261. $request .= " values (" . $user_data["user_id"] . ", " . $technologies["Esp"] .
  1262. ", " . $technologies["Ordi"] . "," . $technologies["Armes"] . ", " . $technologies["Bouclier"] .
  1263. ", " . $technologies["Protection"] . ", " . $technologies["NRJ"] . ", " . $technologies["Hyp"] .
  1264. ", " . $technologies["RC"] . ", " . $technologies["RI"] . ", " . $technologies["PH"] .
  1265. ", " . $technologies["Laser"] . ", " . $technologies["Ions"] . ", " . $technologies["Plasma"] .
  1266. ", " . $technologies["RRI"] . ", " . $technologies["Graviton"] . ", " . $technologies["Astrophysique"] .
  1267. ");";
  1268. $db->sql_query($request);
  1269. redirection("index.php?action=home&subaction=empire");
  1270. }
  1271. /**
  1272. * Enregistrement des defenses de l'utilisateurs
  1273. * @todo Query : x3
  1274. */
  1275. function user_set_defence($data, $planet_id, $planet_name, $fields, $coordinates,
  1276. $temperature_min, $temperature_max, $satellite)
  1277. {
  1278. global $db, $user_data;
  1279. global $pub_view, $server_config;
  1280. require_once ("parameters/lang_empire.php");
  1281. $planet_name = trim($planet_name) != "" ? trim($planet_name) : "Inconnu";
  1282. if (!check_var($planet_name, "Galaxy"))
  1283. $planet_name = "";
  1284. $fields = intval($fields);
  1285. $temperature_min = intval($temperature_min);
  1286. $temperature_max = intval($temperature_max);
  1287. $satellite = intval($satellite);
  1288. $coordinates_ok = "";
  1289. if (sizeof(explode(":", $coordinates)) == 3 || sizeof(explode(".", $coordinates)) ==
  1290. 3) {
  1291. if (sizeof(explode(":", $coordinates)) == 3)
  1292. @list($galaxy, $system, $row) = explode(":", $coordinates);
  1293. if (sizeof(explode(".", $coordinates)) == 3)
  1294. @list($galaxy, $system, $row) = explode(".", $coordinates);
  1295. if (intval($galaxy) >= 1 && intval($galaxy) <= intval($server_config['num_of_galaxies']) &&
  1296. intval($system) >= 1 && intval($system) <= intval($server_config['num_of_systems']) &&
  1297. intval($row) >= 1 && intval($row) <= 15) {
  1298. $coordinates_ok = $coordinates;
  1299. }
  1300. }
  1301. if (!isset($planet_id)) {
  1302. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  1303. }
  1304. $planet_id = intval($planet_id);
  1305. if (($pub_view == "planets" && ($planet_id < 1 || $planet_id > 9)) || ($pub_view ==
  1306. "lunes" && ($planet_id < 10 || $planet_id > 18))) {
  1307. redirection("index.php?action=message&id_message=set_empire_failed_data&info");
  1308. }
  1309. $link_defence = array($lang_defence["LM"] => "LM", $lang_defence["LLE"] => "LLE",
  1310. $lang_defence["LLO"] => "LLO", $lang_defence["CG"] => "CG", $lang_defence["AI"] =>
  1311. "AI", $lang_defence["LP"] => "LP", $lang_defence["PB"] => "PB", $lang_defence["GB"] =>
  1312. "GB", $lang_defence["MIC"] => "MIC", $lang_defence["MIP"] => "MIP");
  1313. $defences = array("LM" => 0, "LLE" => 0, "LLO" => 0, "CG" => 0, "AI" => 0, "LP" =>
  1314. 0, "PB" => 0, "GB" => 0, "MIC" => 0, "MIP" => 0);
  1315. $lines = explode(chr(10), str_replace('.', '', $data));
  1316. $OK = false;
  1317. foreach ($lines as $line) {
  1318. $arr = array();
  1319. $line = trim($line);
  1320. if (ereg("^(.*) \(([[:space:][:digit:]]{1,9}|[[:digit:]]{1,9}) disponible", $line,
  1321. $arr)) {
  1322. list($string, $defence, $level) = $arr;
  1323. $defence = trim($defence);
  1324. $level = trim(str_replace("disponible(s)", "", $level));
  1325. if (isset($link_defence[$defence])) {
  1326. $OK = true;
  1327. $defences[$link_defence[$defence]] = $level;
  1328. }
  1329. }
  1330. }
  1331. if ($OK) {
  1332. $request = "delete from " . TABLE_USER_DEFENCE . " where user_id = " . $user_data["user_id"] .
  1333. " and planet_id= " . $planet_id;
  1334. $db->sql_query($request);
  1335. $request = "insert into " . TABLE_USER_DEFENCE .
  1336. " (user_id, planet_id, LM, LLE, LLO, CG, AI, LP, PB, GB, MIC, MIP)";
  1337. $request .= " values (" . $user_data["user_id"] . ", " . $planet_id . ", " . $defences["LM"] .
  1338. ", " . $defences["LLE"] . "," . $defences["LLO"] . ", " . $defences["CG"] . ", " .
  1339. $defences["AI"] . ", " . $defences["LP"] . ", " . $defences["PB"] . ", " . $defences["GB"] .
  1340. ", " . $defences["MIC"] . ", " . $defences["MIP"] . ")";
  1341. $db->sql_query($request);
  1342. } else {
  1343. $request = "update " . TABLE_USER_BUILDING . " set planet_name = '" .
  1344. $db->sql_escape_string($planet_name) . "', coordinates = '" . $coordinates_ok .
  1345. "', `fields` = " . $fields . ", temperature_min = " . $temperature_min .
  1346. ", temperature_max = " . $temperature_max . ", Sat = " . $satellite .
  1347. " where user_id = " . $user_data["user_id"] . " and planet_id = " . $planet_id;
  1348. $db->sql_query($request);
  1349. }
  1350. redirection("index.php?action=home&subaction=empire&view=" . $pub_view);
  1351. }
  1352. /**
  1353. * Récupération des données empire de l'utilisateur loggé
  1354. * @comment On pourrait mettre un paramètre $user_id optionnel
  1355. */
  1356. function user_get_empire()
  1357. {
  1358. global $db, $user_data;
  1359. $planet = array(false, "user_id" => "", "planet_name" => "", "coordinates" => "",
  1360. "fields" => "", "fields_used" => "", "boosters" => booster_encode(),
  1361. "temperature_min" => "", "temperature_max" =>"",
  1362. "Sat" => 0, "Sat_percentage" => 100, "M" => 0, "M_percentage" => 100, "C" => 0,
  1363. "C_Percentage" => 100, "D" => 0, "D_percentage" =>100, "CES" => 0, "CES_percentage" => 100,
  1364. "CEF" => 0, "CEF_percentage" => 100, "UdR" => 0, "UdN" => 0, "CSp" => 0,
  1365. "HM" => 0, "HC" => 0, "HD" => 0, "CM" => 0,"CC" => 0,"CD" => 0, "Lab" => 0,
  1366. "Ter" => 0, "Silo" => 0, "BaLu" => 0, "Pha" => 0, "PoSa" => 0, "DdR" => 0,
  1367. "C_percentage" => 100);
  1368. $defence = array("LM" => 0, "LLE" => 0, "LLO" => 0, "CG" => 0, "AI" => 0, "LP" =>
  1369. 0, "PB" => 0, "GB" => 0, "MIC" => 0, "MIP" => 0);
  1370. // pour affichage on selectionne 9 planetes minis
  1371. if (find_nb_planete_user() < 9) {
  1372. $nb_planete = 9;
  1373. } else {
  1374. $nb_planete = find_nb_planete_user();
  1375. }
  1376. // on met les planete a 0
  1377. for ($i = 101; $i <= ($nb_planete + 100); $i++) {
  1378. $user_building[$i] = $planet;
  1379. }
  1380. // on met les lunes a 0
  1381. for ($i = 201; $i <= ($nb_planete + 200); $i++) {
  1382. $user_building[$i] = $planet;
  1383. }
  1384. $request = "SELECT planet_id, planet_name, coordinates, fields, boosters, temperature_min, temperature_max, Sat, Sat_percentage, M, M_percentage, C, C_Percentage, D, D_percentage, CES, CES_percentage, CEF, CEF_percentage, UdR, UdN, CSp, HM, HC, HD, CM, CC, CD, Lab, Ter, Silo, BaLu, Pha, PoSa, DdR";
  1385. $request .= " FROM " . TABLE_USER_BUILDING;
  1386. $request .= " WHERE user_id = " . $user_data["user_id"];
  1387. $request .= " ORDER BY planet_id";
  1388. $result = $db->sql_query($request);
  1389. // $user_building = array_fill(101,$nb_planete , $planet);
  1390. while ($row = $db->sql_fetch_assoc($result)) {
  1391. $arr = $row;
  1392. unset($arr["planet_id"]);
  1393. unset($arr["planet_name"]);
  1394. unset($arr["coordinates"]);
  1395. unset($arr["fields"]);
  1396. unset($arr["boosters"]);
  1397. unset($arr["temperature_min"]);
  1398. unset($arr["temperature_max"]);
  1399. unset($arr["Sat"]);
  1400. unset($arr["Sat_percentage"]);
  1401. unset($arr["M_percentage"]);
  1402. unset($arr["C_Percentage"]);
  1403. unset($arr["D_percentage"]);
  1404. unset($arr["CES_percentage"]);
  1405. unset($arr["CEF_percentage"]);
  1406. $fields_used = array_sum(array_values($arr));
  1407. $row["fields_used"] = $fields_used;
  1408. $row["boosters"] = booster_verify_str($row["boosters"]); //Correction et mise à jour booster from date
  1409. $row["C_percentage"] = $row["C_Percentage"];
  1410. $user_building[$row["planet_id"]] = $row;
  1411. $user_building[$row["planet_id"]][0] = true;
  1412. }
  1413. $request = "SELECT Esp, Ordi, Armes, Bouclier, Protection, NRJ, Hyp, RC, RI, PH, Laser, Ions, Plasma, RRI, Graviton, Astrophysique";
  1414. $request .= " FROM " . TABLE_USER_TECHNOLOGY;
  1415. $request .= " WHERE user_id = " . $user_data["user_id"];
  1416. $result = $db->sql_query($request);
  1417. $user_technology = $db->sql_fetch_assoc($result);
  1418. $request = "SELECT planet_id, LM, LLE, LLO, CG, AI, LP, PB, GB, MIC, MIP";
  1419. $request .= " FROM " . TABLE_USER_DEFENCE;
  1420. $request .= " WHERE user_id = " . $user_data["user_id"];
  1421. $request .= " ORDER BY planet_id";
  1422. $result = $db->sql_query($request);
  1423. // on met les def planete a 0
  1424. for ($i = 101; $i <= ($nb_planete + 100); $i++) {
  1425. $user_defence[$i] = $defence;
  1426. }
  1427. // on met les def lunes a 0
  1428. for ($i = 201; $i <= ($nb_planete + 200); $i++) {
  1429. $user_defence[$i] = $defence;
  1430. }
  1431. //$user_defence = array_fill(1, $nb_planete_lune, $defence);
  1432. while ($row = $db->sql_fetch_assoc($result)) {
  1433. $planet_id = $row["planet_id"];
  1434. unset($row["planet_id"]);
  1435. $user_defence[$planet_id] = $row;
  1436. }
  1437. return array("building" => $user_building, "technology" => $user_technology,
  1438. "defence" => $user_defence, );
  1439. }
  1440. /**
  1441. * Récuperation du nombre de planete de l utilisateur
  1442. * TODO => cette fonction sera a mettre en adequation avec astro
  1443. * ( attention ancien uni techno a 1 planete mais utilisateur 9 possible !!!!!)
  1444. */
  1445. function find_nb_planete_user()
  1446. {
  1447. global $db, $user_data;
  1448. $request = "SELECT planet_id ";
  1449. $request .= " FROM " . TABLE_USER_BUILDING;
  1450. $request .= " WHERE user_id = " . $user_data["user_id"];
  1451. $request .= " AND planet_id < 199 ";
  1452. $request .= " ORDER BY planet_id";
  1453. $result = $db->sql_query($request);
  1454. //mini 9 pour eviter bug affichage
  1455. if ($db->sql_numrows($result) <= 9)
  1456. return 9;
  1457. return $db->sql_numrows($result);
  1458. }
  1459. function find_nb_moon_user()
  1460. {
  1461. global $db, $user_data;
  1462. $request = "select planet_id ";
  1463. $request .= " from " . TABLE_USER_BUILDING;
  1464. $request .= " where user_id = " . $user_data["user_id"];
  1465. $request .= " and planet_id > 199 ";
  1466. $request .= " order by planet_id";
  1467. $result = $db->sql_query($request);
  1468. //mini 9 pour eviter bug affichage
  1469. if ($db->sql_numrows($result) <= 9)
  1470. return 9;
  1471. return $db->sql_numrows($result);
  1472. }
  1473. /**
  1474. * Suppression des données de batiments de l'utilisateur loggé
  1475. */
  1476. function user_del_building()
  1477. {
  1478. global $db, $user_data;
  1479. global $pub_planet_id, $pub_view;
  1480. if (!check_var($pub_planet_id, "Num")) {
  1481. redirection("index.php?action=message&id_message=errordata&info");
  1482. }
  1483. if (!isset($pub_planet_id)) {
  1484. redirection("index.php?action=message&id_message=errorfatal&info");
  1485. }
  1486. $request = "delete from " . TABLE_USER_BUILDING . " where user_id = " . $user_data["user_id"] .
  1487. " and planet_id = " . intval($pub_planet_id);
  1488. $db->sql_query($request);
  1489. $request = "delete from " . TABLE_USER_DEFENCE . " where user_id = " . $user_data["user_id"] .
  1490. " and planet_id = " . intval($pub_planet_id);
  1491. $db->sql_query($request);
  1492. // si on supprime une planete; la lune doit suivre
  1493. if (intval($pub_planet_id) < 199) {
  1494. $moon_id = (intval($pub_planet_id) + 100);
  1495. $request = "delete from " . TABLE_USER_BUILDING . " where user_id = " . $user_data["user_id"] .
  1496. " and planet_id = " . intval($moon_id);
  1497. $db->sql_query($request);
  1498. $request = "delete from " . TABLE_USER_DEFENCE . " where user_id = " . $user_data["user_id"] .
  1499. " and planet_id = " . intval($moon_id);
  1500. $db->sql_query($request);
  1501. }
  1502. $request = "select * from " . TABLE_USER_BUILDING . " where planet_id <= 199";
  1503. $result = $db->sql_query($request);
  1504. if ($db->sql_numrows($result) == 0) {
  1505. $request = "delete from " . TABLE_USER_TECHNOLOGY . " where user_id = " . $user_data["user_id"];
  1506. $db->sql_query($request);
  1507. }
  1508. // remise en ordre des planetes :
  1509. user_set_all_empire_resync_planet();
  1510. redirection("index.php?action=home&subaction=empire&view=" . $pub_view);
  1511. }
  1512. /**
  1513. * Déplacement des données de planète de la page empire
  1514. */
  1515. function user_move_empire()
  1516. {
  1517. global $db, $user_data;
  1518. global $pub_planet_id, $pub_left, $pub_right;
  1519. $nb_planete = find_nb_planete_user();
  1520. if (!check_var($pub_planet_id, "Num")) {
  1521. redirection("index.php?action=message&id_message=errordata&info");
  1522. }
  1523. if (!isset($pub_planet_id) || (!isset($pub_left) && !isset($pub_right))) {
  1524. redirection("index.php?action=message&id_message=errorfatal&info");
  1525. }
  1526. $pub_planet_id = intval($pub_planet_id);
  1527. if ($pub_planet_id < 101 || $pub_planet_id > (100 + $nb_planete)) {
  1528. redirection("index.php?action=message&id_message=errorfatal&info");
  1529. }
  1530. if (isset($pub_left)) {
  1531. if ($pub_planet_id == 101)
  1532. redirection("index.php?action=home&subaction=empire");
  1533. $new_position = $pub_planet_id - 1;
  1534. } elseif (isset($pub_right)) {
  1535. if ($pub_planet_id == (100 + $nb_planete))
  1536. redirection("index.php?action=home&subaction=empire");
  1537. $new_position = $pub_planet_id + 1;
  1538. }
  1539. $request = "update " . TABLE_USER_BUILDING . " set planet_id = -" . $new_position .
  1540. " where user_id = " . $user_data["user_id"] . " and planet_id = " . $pub_planet_id;
  1541. $db->sql_query($request);
  1542. $request = "update " . TABLE_USER_BUILDING . " set planet_id = " . $pub_planet_id .
  1543. " where user_id = " . $user_data["user_id"] . " and planet_id = " . $new_position;
  1544. $db->sql_query($request);
  1545. $request = "update " . TABLE_USER_BUILDING . " set planet_id = " . $new_position .
  1546. " where user_id = " . $user_data["user_id"] . " and planet_id = -" . $new_position;
  1547. $db->sql_query($request);
  1548. $request = "update " . TABLE_USER_DEFENCE . " set planet_id = -" . $new_position .
  1549. " where user_id = " . $user_data["user_id"] . " and planet_id = " . $pub_planet_id;
  1550. $db->sql_query($request);
  1551. $request = "update " . TABLE_USER_DEFENCE . " set planet_id = " . $pub_planet_id .
  1552. " where user_id = " . $user_data["user_id"] . " and planet_id = " . $new_position;
  1553. $db->sql_query($request);
  1554. $request = "update " . TABLE_USER_DEFENCE . " set planet_id = " . $new_position .
  1555. " where user_id = " . $user_data["user_id"] . " and planet_id = -" . $new_position;
  1556. $db->sql_query($request);
  1557. // remise en ordre des planetes :
  1558. user_set_all_empire_resync_planet();
  1559. redirection("index.php?action=home&subaction=empire");
  1560. }
  1561. /**
  1562. * Ajout d'un système favori
  1563. */
  1564. function user_add_favorite()
  1565. {
  1566. global $db, $user_data, $server_config;
  1567. global $pub_galaxy, $pub_system;
  1568. if (!isset($pub_galaxy) || !isset($pub_system)) {
  1569. redirection("index.php");
  1570. }
  1571. if (intval($pub_galaxy) < 1 || intval($pub_galaxy) > intval($server_config['num_of_galaxies']) ||
  1572. intval($pub_system) < 1 || intval($pub_system) > intval($server_config['num_of_systems'])) {
  1573. redirection("index.php?action=galaxy");
  1574. }
  1575. $request = "select * from " . TABLE_USER_FAVORITE . " where user_id = " . $user_data["user_id"];
  1576. $result = $db->sql_query($request);
  1577. $nb_favorites = $db->sql_numrows($result);
  1578. if ($nb_favorites < $server_config["max_favorites"]) {
  1579. $request = "insert ignore into " . TABLE_USER_FAVORITE .
  1580. " (user_id, galaxy, system) values (" . $user_data["user_id"] . ", '" . $pub_galaxy .
  1581. "', " . $pub_system . ")";
  1582. $db->sql_query($request);
  1583. redirection("index.php?action=galaxy&galaxy=" . $pub_galaxy . "&system=" . $pub_system);
  1584. } else {
  1585. redirection("index.php?action=message&id_message=max_favorites&info");
  1586. }
  1587. }
  1588. /**
  1589. * Suppression d'un système favori
  1590. */
  1591. function user_del_favorite()
  1592. {
  1593. global $db, $user_data;
  1594. global $pub_galaxy, $pub_system, $server_config;
  1595. if (!isset($pub_galaxy) || !isset($pub_system)) {
  1596. redirection("index.php");
  1597. }
  1598. if (intval($pub_galaxy) < 1 || intval($pub_galaxy) > intval($server_config['num_of_galaxies']) ||
  1599. intval($pub_system) < 1 || intval($pub_system) > intval($server_config['num_of_systems'])) {
  1600. redirection("index.php?action=galaxy");
  1601. }
  1602. $request = "delete from " . TABLE_USER_FAVORITE . " where user_id = " . $user_data["user_id"] .
  1603. " and galaxy = '" . $pub_galaxy . "' and system = " . $pub_system;
  1604. $db->sql_query($request);
  1605. redirection("index.php?action=galaxy&galaxy=" . $pub_galaxy . "&system=" . $pub_system .
  1606. "");
  1607. }
  1608. /**
  1609. * Récupération des rapports favoris
  1610. */
  1611. function user_getfavorites_spy()
  1612. {
  1613. global $db, $user_data;
  1614. global $sort, $sort2;
  1615. if (!isset($sort) || !isset($sort2) || !is_numeric($sort) || !is_numeric($sort2)) {
  1616. $orderby = "dateRE desc";
  1617. } else {
  1618. switch ($sort2) {
  1619. case 0:
  1620. $order .= " desc";
  1621. break;
  1622. case 1:
  1623. $order .= " asc";
  1624. break;
  1625. default:
  1626. $order .= " asc";
  1627. }
  1628. switch ($sort) {
  1629. case 1:
  1630. $orderby = "coordinates" . $order . "";
  1631. break;
  1632. case 2:
  1633. $orderby = "ally " . $order;
  1634. break;
  1635. case 3:
  1636. $orderby = "player " . $order;
  1637. break;
  1638. case 4:
  1639. $orderby = "moon " . $order;
  1640. break;
  1641. case 5:
  1642. $orderby = "dateRE " . $order;
  1643. break;
  1644. default:
  1645. $orderby = "dateRE " . $order;
  1646. }
  1647. }
  1648. $favorite = array();
  1649. $request = "select " . TABLE_PARSEDSPY .
  1650. ".id_spy, coordinates, dateRE, sender_id, " . TABLE_UNIVERSE . ".moon, " .
  1651. TABLE_UNIVERSE . ".ally, " . TABLE_UNIVERSE . ".player, " . TABLE_UNIVERSE .
  1652. ".status";
  1653. $request .= " from " . TABLE_PARSEDSPY . ", " . TABLE_USER_SPY . ", " .
  1654. TABLE_UNIVERSE;
  1655. $request .= " where user_id = " . $user_data["user_id"] . " and CONCAT(" .
  1656. TABLE_UNIVERSE . ".galaxy,':'," . TABLE_UNIVERSE . ".system,':'," .
  1657. TABLE_UNIVERSE . ".row)=coordinates and " . TABLE_USER_SPY . ".spy_id=" .
  1658. TABLE_PARSEDSPY . ".id_spy";
  1659. $request .= " order by " . $orderby;
  1660. $result = $db->sql_query($request);
  1661. while (list($spy_id, $coordinates, $datadate, $sender_id, $moon, $ally, $player,
  1662. $status) = $db->sql_fetch_row($result)) {
  1663. $request = "select user_name from " . TABLE_USER;
  1664. $request .= " where user_id=" . $sender_id;
  1665. $result_2 = $db->sql_query($request);
  1666. list($user_name) = $db->sql_fetch_row($result_2);
  1667. $favorite[$spy_id] = array("spy_id" => $spy_id, "spy_galaxy" => substr($coordinates,
  1668. 0, strpos($coordinates, ':')), "spy_system" => substr($coordinates, strpos($coordinates,
  1669. ':') + 1, strrpos($coordinates, ':') - strpos($coordinates, ':') - 1), "spy_row" =>
  1670. substr($coordinates, strrpos($coordinates, ':') + 1), "player" => $player,
  1671. "ally" => $ally, "moon" => $moon, "status" => $status, "datadate" => $datadate,
  1672. "poster" => $user_name);
  1673. }
  1674. return $favorite;
  1675. }
  1676. /**
  1677. * Ajout d'un rapport favori
  1678. */
  1679. function user_add_favorite_spy()
  1680. {
  1681. global $db, $user_data, $server_config;
  1682. global $pub_spy_id, $pub_galaxy, $pub_system, $pub_row;
  1683. if (!check_var($pub_spy_id, "Num")) {
  1684. redirection("index.php?action=message&id_message=errordata&info");
  1685. }
  1686. if (!isset($pub_spy_id)) {
  1687. redirection("index.php?action=message&id_message=errorfatal&info");
  1688. }
  1689. $request = "select * from " . TABLE_USER_SPY . " where user_id = " . $user_data["user_id"];
  1690. $result = $db->sql_query($request);
  1691. $nb_favorites = $db->sql_numrows($result);
  1692. if ($nb_favorites < $server_config["max_favorites_spy"]) {
  1693. $request = "insert ignore into " . TABLE_USER_SPY .
  1694. " (user_id, spy_id) values (" . $user_data["user_id"] . ", " . $pub_spy_id . ")";
  1695. $db->sql_query($request);
  1696. redirection("index.php?action=show_reportspy&galaxy=" . $pub_galaxy . "&system=" .
  1697. $pub_system . "&row=" . $pub_row);
  1698. } else {
  1699. redirection("index.php?action=message&id_message=max_favorites&info=_spy");
  1700. }
  1701. }
  1702. /**
  1703. * Suppression d'un rapport favori
  1704. */
  1705. function user_del_favorite_spy()
  1706. {
  1707. global $db, $user_data;
  1708. global $pub_spy_id, $pub_galaxy, $pub_system, $pub_row, $pub_info;
  1709. if (!check_var($pub_spy_id, "Num")) {
  1710. redirection("index.php?action=message&id_message=errordata&info");
  1711. }
  1712. if (!isset($pub_spy_id)) {
  1713. redirection("index.php?action=message&id_message=errorfatal&info");
  1714. }
  1715. $request = "delete from " . TABLE_USER_SPY . " where user_id = " . $user_data["user_id"] .
  1716. " and spy_id = '" . $pub_spy_id . "'";
  1717. $db->sql_query($request);
  1718. if (!isset($pub_info))
  1719. $pub_info = 1;
  1720. switch ($pub_info) {
  1721. case 2:
  1722. redirection("index.php?action=show_reportspy&galaxy=" . $pub_galaxy . "&system=" .
  1723. $pub_system . "&row=" . $pub_row);
  1724. case 1:
  1725. redirection("index.php?action=home&subaction=spy");
  1726. default:
  1727. return true;
  1728. }
  1729. }
  1730. /**
  1731. * Création d'un groupe
  1732. */
  1733. function usergroup_create()
  1734. {
  1735. global $db, $user_data;
  1736. global $pub_groupname;
  1737. if (!isset($pub_groupname)) {
  1738. redirection("index.php?action=message&id_message=createusergroup_failed_general&info");
  1739. }
  1740. //Vérification des droits
  1741. user_check_auth("usergroup_manage");
  1742. if (!check_var($pub_groupname, "Pseudo_Groupname")) {
  1743. redirection("index.php?action=message&id_message=createusergroup_failed_groupname&info");
  1744. }
  1745. $request = "select group_id from " . TABLE_GROUP . " where group_name = '" .
  1746. $db->sql_escape_string($pub_groupname) . "'";
  1747. $result = $db->sql_query($request);
  1748. if ($db->sql_numrows($result) == 0) {
  1749. $request = "insert into " . TABLE_GROUP . " (group_name)" . " values ('" .
  1750. $db->sql_escape_string($pub_groupname) . "')";
  1751. $db->sql_query($request);
  1752. $group_id = $db->sql_insertid();
  1753. log_("create_usergroup", $pub_groupname);
  1754. redirection("index.php?action=administration&subaction=group&group_id=" . $group_id);
  1755. } else {
  1756. redirection("index.php?action=message&id_message=createusergroup_failed_groupnamelocked&info=" .
  1757. $pub_groupname);
  1758. }
  1759. }
  1760. /**
  1761. * Suppression d'un groupe utilisateur
  1762. */
  1763. function usergroup_delete()
  1764. {
  1765. global $db, $user_data;
  1766. global $pub_group_id;
  1767. if (!check_var($pub_group_id, "Num")) {
  1768. redirection("index.php?action=message&id_message=errordata&info");
  1769. }
  1770. if (!isset($pub_group_id)) {
  1771. redirection("index.php?action=message&id_message=createusergroup_failed_general&info");
  1772. }
  1773. //Vérification des droits
  1774. user_check_auth("usergroup_manage");
  1775. if ($pub_group_id == 1) {
  1776. redirection("index.php?action=administration&subaction=group&group_id=1");
  1777. }
  1778. log_("delete_usergroup", $pub_group_id);
  1779. $request = "delete from " . TABLE_USER_GROUP . " where group_id = " . intval($pub_group_id);
  1780. $db->sql_query($request);
  1781. $request = "delete from " . TABLE_GROUP . " where group_id = " . intval($pub_group_id);
  1782. $db->sql_query($request);
  1783. redirection("index.php?action=administration&subaction=group");
  1784. }
  1785. /**
  1786. * Récupération des droits d'un groupe d'utilisateurs
  1787. */
  1788. function usergroup_get($group_id = false)
  1789. {
  1790. global $db, $user_data;
  1791. //Vérification des droits
  1792. user_check_auth("usergroup_manage");
  1793. $request = "select group_id, group_name, ";
  1794. $request .= " server_set_system, server_set_spy, server_set_rc, server_set_ranking, server_show_positionhided,";
  1795. $request .= " ogs_connection, ogs_set_system, ogs_get_system, ogs_set_spy, ogs_get_spy, ogs_set_ranking, ogs_get_ranking";
  1796. $request .= " from " . TABLE_GROUP;
  1797. if ($group_id !== false) {
  1798. if (intval($group_id) == 0)
  1799. return false;
  1800. $request .= " where group_id = " . $group_id;
  1801. }
  1802. $request .= " order by group_name";
  1803. $result = $db->sql_query($request);
  1804. if (!$group_id) {
  1805. $info_usergroup = array();
  1806. while ($row = $db->sql_fetch_assoc()) {
  1807. $info_usergroup[] = $row;
  1808. }
  1809. } else {
  1810. while ($row = $db->sql_fetch_assoc()) {
  1811. $info_usergroup = $row;
  1812. }
  1813. }
  1814. if (sizeof($info_usergroup) == 0) {
  1815. return false;
  1816. }
  1817. return $info_usergroup;
  1818. }
  1819. /**
  1820. * Enregistrement des droits d'un groupe utilisateurs
  1821. */
  1822. function usergroup_setauth()
  1823. {
  1824. global $db, $user_data;
  1825. global $pub_group_id, $pub_group_name, $pub_server_set_system, $pub_server_set_spy,
  1826. $pub_server_set_rc, $pub_server_set_ranking, $pub_server_show_positionhided, $pub_ogs_connection,
  1827. $pub_ogs_set_system, $pub_ogs_get_system, $pub_ogs_set_spy, $pub_ogs_get_spy, $pub_ogs_set_ranking,
  1828. $pub_ogs_get_ranking;
  1829. if (!check_var($pub_group_id, "Num") || !check_var($pub_group_name,
  1830. "Pseudo_Groupname") || !check_var($pub_server_set_system, "Num") || !check_var($pub_server_set_spy,
  1831. "Num") || !check_var($pub_server_set_rc, "Num") || !check_var($pub_server_set_ranking,
  1832. "Num") || !check_var($pub_server_show_positionhided, "Num") || !check_var($pub_ogs_connection,
  1833. "Num") || !check_var($pub_ogs_set_system, "Num") || !check_var($pub_ogs_get_system,
  1834. "Num") || !check_var($pub_ogs_set_spy, "Num") || !check_var($pub_ogs_get_spy,
  1835. "Num") || !check_var($pub_ogs_set_ranking, "Num") || !check_var($pub_ogs_get_ranking,
  1836. "Num")) {
  1837. redirection("index.php?action=message&id_message=errordata&info");
  1838. }
  1839. if (!isset($pub_group_id) || !isset($pub_group_name)) {
  1840. redirection("index.php?action=message&id_message=errorfatal&info");
  1841. }
  1842. if (is_null($pub_server_set_system))
  1843. $pub_server_set_system = 0;
  1844. if (is_null($pub_server_set_spy))
  1845. $pub_server_set_spy = 0;
  1846. if (is_null($pub_server_set_rc))
  1847. $pub_server_set_rc = 0;
  1848. if (is_null($pub_server_set_ranking))
  1849. $pub_server_set_ranking = 0;
  1850. if (is_null($pub_server_show_positionhided))
  1851. $pub_server_show_positionhided = 0;
  1852. if (is_null($pub_ogs_connection))
  1853. $pub_ogs_connection = 0;
  1854. if (is_null($pub_ogs_set_system))
  1855. $pub_ogs_set_system = 0;
  1856. if (is_null($pub_ogs_get_system))
  1857. $pub_ogs_get_system = 0;
  1858. if (is_null($pub_ogs_set_spy))
  1859. $pub_ogs_set_spy = 0;
  1860. if (is_null($pub_ogs_get_spy))
  1861. $pub_ogs_get_spy = 0;
  1862. if (is_null($pub_ogs_set_ranking))
  1863. $pub_ogs_set_ranking = 0;
  1864. if (is_null($pub_ogs_get_ranking))
  1865. $pub_ogs_get_ranking = 0;
  1866. //Vérification des droits
  1867. user_check_auth("usergroup_manage");
  1868. log_("modify_usergroup", $pub_group_id);
  1869. $request = "update " . TABLE_GROUP;
  1870. $request .= " set group_name = '" . $db->sql_escape_string($pub_group_name) .
  1871. "',";
  1872. $request .= " server_set_system = '" . intval($pub_server_set_system) .
  1873. "', server_set_spy = '" . intval($pub_server_set_spy) . "', server_set_rc = '" .
  1874. intval($pub_server_set_rc) . "', server_set_ranking = '" . intval($pub_server_set_ranking) .
  1875. "', server_show_positionhided = '" . intval($pub_server_show_positionhided) .
  1876. "',";
  1877. $request .= " ogs_connection = '" . intval($pub_ogs_connection) .
  1878. "', ogs_set_system = '" . intval($pub_ogs_set_system) . "', ogs_get_system = '" .
  1879. intval($pub_ogs_get_system) . "', ogs_set_spy = '" . intval($pub_ogs_set_spy) .
  1880. "', ogs_get_spy = '" . intval($pub_ogs_get_spy) . "', ogs_set_ranking = '" .
  1881. intval($pub_ogs_set_ranking) . "', ogs_get_ranking = '" . intval($pub_ogs_get_ranking) .
  1882. "'";
  1883. $request .= " where group_id = " . intval($pub_group_id);
  1884. $db->sql_query($request);
  1885. redirection("index.php?action=administration&subaction=group&group_id=" . $pub_group_id);
  1886. }
  1887. /**
  1888. * Récupération des utilisateurs appartenant à un groupe
  1889. * @param int $group_id Identificateur du groupe demandé
  1890. * @return Array Liste des utilisateurs
  1891. */
  1892. function usergroup_member($group_id)
  1893. {
  1894. global $db, $user_data;
  1895. if (!isset($group_id) || !is_numeric($group_id)) {
  1896. redirection("index.php?action=message&id_message=errorfatal&info");
  1897. }
  1898. $usergroup_member = array();
  1899. $request = "select u.user_id, u.user_name from " . TABLE_USER . " as u, " .
  1900. TABLE_USER_GROUP . " as g";
  1901. $request .= " where u.user_id = g.user_id";
  1902. $request .= " and g.group_id = " . intval($group_id);
  1903. $request .= " order by user_name";
  1904. $result = $db->sql_query($request);
  1905. while ($row = $db->sql_fetch_assoc()) {
  1906. $usergroup_member[] = $row;
  1907. }
  1908. return $usergroup_member;
  1909. }
  1910. /**
  1911. * Ajout d'un utilisateur à un groupe
  1912. */
  1913. function usergroup_newmember()
  1914. {
  1915. global $db, $user_data;
  1916. global $pub_user_id, $pub_group_id, $pub_add_all;
  1917. if ($pub_add_all == "Ajouter tout les membres") {
  1918. $request = "SELECT user_id FROM " . TABLE_USER;
  1919. $result = $db->sql_query($request);
  1920. while ($res = $db->sql_fetch_assoc($result)) {
  1921. user_check_auth("usergroup_manage");
  1922. $request = "INSERT IGNORE INTO " . TABLE_USER_GROUP .
  1923. " (group_id, user_id) values (" . intval($pub_group_id) . ", " . intval($res["user_id"]) .
  1924. ")";
  1925. $db->sql_query($request);
  1926. }
  1927. redirection("index.php?action=administration&subaction=group");
  1928. } else {
  1929. if (!check_var($pub_user_id, "Num") || !check_var($pub_group_id, "Num")) {
  1930. redirection("index.php?action=message&id_message=errordata&info");
  1931. }
  1932. if (!isset($pub_user_id) || !isset($pub_group_id)) {
  1933. redirection("index.php?action=message&id_message=errorfatal&info");
  1934. }
  1935. //Vérification des droits
  1936. user_check_auth("usergroup_manage");
  1937. $request = "select group_id from " . TABLE_GROUP . " where group_id = " . intval($pub_group_id);
  1938. $result = $db->sql_query($request);
  1939. if ($db->sql_numrows($result) == 0) {
  1940. redirection("index.php?action=administration&subaction=group");
  1941. }
  1942. $request = "select user_id from " . TABLE_USER . " where user_id = " . intval($pub_user_id);
  1943. $result = $db->sql_query($request);
  1944. if ($db->sql_numrows($result) == 0) {
  1945. redirection("index.php?action=administration&subaction=group");
  1946. }
  1947. $request = "insert ignore into " . TABLE_USER_GROUP .
  1948. " (group_id, user_id) values (" . intval($pub_group_id) . ", " . intval($pub_user_id) .
  1949. ")";
  1950. $result = $db->sql_query($request);
  1951. if ($db->sql_affectedrows() > 0) {
  1952. log_("add_usergroup", array($pub_group_id, $pub_user_id));
  1953. }
  1954. redirection("index.php?action=administration&subaction=group&group_id=" . $pub_group_id);
  1955. }
  1956. }
  1957. /**
  1958. * Supression d'un utilisateur d'un groupe
  1959. * @global int $pub_user_id Identificateur utilisateur
  1960. * @global int $pub_group_id Identificateur du Groupe
  1961. */
  1962. function usergroup_delmember()
  1963. {
  1964. global $db, $user_data;
  1965. global $pub_user_id, $pub_group_id;
  1966. if (!isset($pub_user_id) || !isset($pub_group_id)) {
  1967. redirection("index.php?action=message&id_message=errorfatal&info");
  1968. }
  1969. if (!check_var($pub_user_id, "Num") || !check_var($pub_group_id, "Num")) {
  1970. redirection("index.php?action=message&id_message=errordata&info");
  1971. }
  1972. //Vérification des droits
  1973. user_check_auth("usergroup_manage");
  1974. $request = "delete from " . TABLE_USER_GROUP . " where group_id = " . intval($pub_group_id) .
  1975. " and user_id = " . intval($pub_user_id);
  1976. $result = $db->sql_query($request);
  1977. if ($db->sql_affectedrows() > 0) {
  1978. log_("del_usergroup", array($pub_group_id, $pub_user_id));
  1979. }
  1980. redirection("index.php?action=administration&subaction=group&group_id=" . $pub_group_id);
  1981. }
  1982. /**
  1983. * A quoi sert donc cette fonction ? :p
  1984. * Reponse elle sert a mettre a jour le pseudo ingame afin d afficher les stats users dans son espace perso
  1985. */
  1986. function user_set_stat_name($user_stat_name)
  1987. {
  1988. global $db, $user_data;
  1989. $request = "update " . TABLE_USER . " set user_stat_name = '" . $user_stat_name .
  1990. "' where user_id = " . $user_data['user_id'];
  1991. $db->sql_query($request);
  1992. }
  1993. //Suppression d'un rapport d'espionnage
  1994. function user_del_spy()
  1995. {
  1996. global $db, $user_data;
  1997. global $pub_spy_id, $pub_galaxy, $pub_system, $pub_row, $pub_info;
  1998. if (!check_var($pub_spy_id, "Num")) {
  1999. redirection("index.php?action=message&id_message=errordata&info");
  2000. }
  2001. if (!isset($pub_spy_id)) {
  2002. redirection("index.php?action=message&id_message=errorfatal&info");
  2003. }
  2004. if ($user_data["user_admin"] == 1 || $user_data["user_coadmin"] == 1) {
  2005. $request = "delete from " . TABLE_PARSEDSPY . " where id_spy = '" . $pub_spy_id .
  2006. "'";
  2007. $db->sql_query($request);
  2008. }
  2009. if (!isset($pub_info))
  2010. $pub_info = 1;
  2011. switch ($pub_info) {
  2012. case 2:
  2013. redirection("index.php?action=show_reportspy&galaxy=" . $pub_galaxy . "&system=" .
  2014. $pub_system . "&row=" . $pub_row);
  2015. case 1:
  2016. redirection("index.php?action=home&subaction=spy");
  2017. default:
  2018. return true;
  2019. }
  2020. }
  2021. /**
  2022. * Parsing des RC
  2023. * @param string $rawRC RC à parser
  2024. * @return int $return identifiant du RC
  2025. */
  2026. function parseRC($rawRC)
  2027. {
  2028. // Suppression des '\', et gestion des retours charriots/sauts de ligne
  2029. $rawRC = str_replace('\\', '', ereg_replace("\n|\r|\r\n", " \n", $rawRC));
  2030. // Suppression des '.' dans les nombres
  2031. while (preg_match('/\d+\.\d+/', $rawRC))
  2032. $rawRC = preg_replace('/(\d+)\.(\d+)/', "$1$2", $rawRC);
  2033. $return = array('dateRC' => '', 'nb_rounds' => 0, 'attaquants' => array(),
  2034. 'defenseur' => array(), 'victoire' => 'A', 'pertes_A' => 0, 'pertes_D' => 0,
  2035. 'gain_M' => -1, 'gain_C' => -1, 'gain_D' => -1, 'debris_M' => -1, 'debris_C' =>
  2036. -1, 'lune' => 0, 'coordinates' => '1:1:1');
  2037. // Extraction du timestamp pour la date du RC
  2038. preg_match('/affrontées le (\d*)-(\d*) (\d*):(\d*):(\d*) \.:/', $rawRC, $reg);
  2039. $jourRC = trim($reg[2]);
  2040. $moisRC = trim($reg[1]);
  2041. $heureRC = trim($reg[3]);
  2042. $minutesRC = trim($reg[4]);
  2043. $secondesRC = trim($reg[5]);
  2044. $return['dateRC'] = mktime($heureRC, $minutesRC, $secondesRC, $moisRC, $jourRC,
  2045. date('Y'));
  2046. // Extraction du nom, des coordonnées et des techs de l'attaquant et du défenseur
  2047. $opponents = array();
  2048. preg_match_all('/Attaquant (.*) \(\[(.*)\]\)(\s*)Armes: (\d*)% Bouclier: (\d*)% Coque: (\d*)%/',
  2049. $rawRC, $reg);
  2050. for ($idx = 0; $idx < sizeof($reg[0]); $idx++) {
  2051. $return['attaquants'][] = array('pseudo' => $reg[1][$idx], 'coordinates' => $reg[2][$idx],
  2052. 'armes' => $reg[4][$idx], 'bouclier' => $reg[5][$idx], 'protection' => $reg[6][$idx]);
  2053. $opponents[] = $reg[1][$idx];
  2054. }
  2055. preg_match_all('/D.fenseur (.*) \(\[(.*)\]\)(\s*)Armes: (\d*)% Bouclier: (\d*)% Coque: (\d*)%/',
  2056. $rawRC, $reg);
  2057. for ($idx = 0; $idx < sizeof($reg[0]); $idx++) {
  2058. if ($idx == 0)
  2059. $return['coordinates'] = $reg[2][$idx];
  2060. $return['defenseurs'][] = array('pseudo' => $reg[1][$idx], 'coordinates' => $reg[2][$idx],
  2061. 'armes' => $reg[4][$idx], 'bouclier' => $reg[5][$idx], 'protection' => $reg[6][$idx]);
  2062. $opponents[] = $reg[1][$idx];
  2063. }
  2064. // Comptage du nombre de roungs
  2065. $return['nb_rounds'] = substr_count($rawRC, 'attaquante tire') + 1;
  2066. // Extraction des pertes
  2067. preg_match('/L\'attaquant a perdu au total (\d*) unit.s/', $rawRC, $reg);
  2068. $return['pertes_A'] = trim($reg[1]);
  2069. preg_match('/Le d.fenseur a perdu au total (\d*) unit.s/', $rawRC, $reg);
  2070. $return['pertes_D'] = trim($reg[1]);
  2071. // Extraction du champ de débris et du pourcentage de lune
  2072. preg_match('/Un champ de d.bris contenant (\d*) unit.s de m.tal et (\d*) unit.s de cristal(.*)/',
  2073. $rawRC, $reg);
  2074. $return['debris_M'] = trim($reg[1]);
  2075. $return['debris_C'] = trim($reg[2]);
  2076. if (preg_match('/une lune est de (\d*)( ?)%/', $rawRC, $reg))
  2077. $return['lune'] = trim($reg[1]);
  2078. // Extraction du résultat du RC
  2079. // A = victoire de l'attaquant
  2080. // D = victoire du défenseur
  2081. // N = match nul
  2082. if (preg_match('/L\'attaquant a gagn. la bataille/', $rawRC)) {
  2083. $return['victoire'] = 'A';
  2084. // Extraction des ressources gagnées
  2085. preg_match('/(\d*) unit.s de m.tal, (\d*) unit.s de cristal et (\d*) unit.s de deut.rium/',
  2086. $rawRC, $reg);
  2087. $return['gain_M'] = trim($reg[1]);
  2088. $return['gain_C'] = trim($reg[2]);
  2089. $return['gain_D'] = trim($reg[3]);
  2090. } elseif (preg_match('/Le d.fenseur a gagn. la bataille/', $rawRC))
  2091. $return['victoire'] = 'D';
  2092. else
  2093. $return['victoire'] = 'N';
  2094. $tmp = parseRCround($rawRC, $return['nb_rounds'], $opponents, $return['victoire']);
  2095. $idx = 1;
  2096. foreach ($tmp as $array) {
  2097. $return['round' . $idx] = $array;
  2098. $idx++;
  2099. }
  2100. return $return;
  2101. }
  2102. /**
  2103. * Parsing de chaque round des RC
  2104. * @param string $rawRC RC à analyser
  2105. * @param int $nb_rounds Nombre de round du RC à analyser
  2106. * @param array $opponents Tableau contenant le nom de chaque joueur du RC
  2107. * @return array $row_RC Tableau contenant pour chaque round du RC, les flottes/défenses de chaque joueur
  2108. */
  2109. function parseRCround($rawRC, $nb_rounds, $opponents, $victoire)
  2110. {
  2111. $rawRC = preg_replace("/ \n/", '|', $rawRC);
  2112. $row_RC = array();
  2113. $row_RC_opponent = array('P.transp.' => -1, 'G.transp.' => -1, 'Ch.léger' => -1,
  2114. 'Ch.lourd' => -1, 'Croiseur' => -1, 'V.bataille' => -1, 'V.colonisation' => -1,
  2115. 'Recycleur' => -1, 'Sonde' => -1, 'Bombardier' => -1, 'Destr.' => -1, 'Rip' => -
  2116. 1, 'Sat.sol.' => -1, 'Traqueur' => -1, 'Missile' => -1, 'L.léger.' => -1,
  2117. 'L.lourd' => -1, 'Can.Gauss' => -1, 'Art.ions' => -1, 'Lanc.plasma' => -1,
  2118. 'P.bouclier' => -1, 'G.bouclier' => -1, );
  2119. $decoupe = explode('points de dégâts||', $rawRC);
  2120. for ($idx_round = 0; $idx_round < $nb_rounds; $idx_round++) {
  2121. $row_RC[$idx_round] = array();
  2122. for ($idx_opp = 0; $idx_opp < sizeof($opponents); $idx_opp++) {
  2123. $row_RC[$idx_round][$opponents[$idx_opp]] = $row_RC_opponent;
  2124. $pattern = '/' . $opponents[$idx_opp] . ' \(\[.*?\]\)\|(Armes: \d*% Bouclier: \d*% Coque: \d*%\|)?Type[ \t](.*?)\|Nombre[ \t](.*?)\|/';
  2125. preg_match($pattern, $decoupe[$idx_round], $reg);
  2126. if (isset($reg[2])) {
  2127. $flotte = split("[ \t]", chop($reg[2]));
  2128. $nombre = split("[ \t]", chop($reg[3]));
  2129. foreach ($flotte as $key => $val)
  2130. $row_RC[$idx_round][$opponents[$idx_opp]][$val] = $nombre[$key];
  2131. }
  2132. }
  2133. if ($idx_round < $nb_rounds) {
  2134. preg_match('/La flotte attaquante tire (\d*) fois avec une puissance totale de (-?\d*) sur le d.fenseur. Les boucliers du d.fenseur absorbent (\d*) points de d.g.ts/',
  2135. $decoupe[$idx_round], $reg);
  2136. if (isset($reg[1])) {
  2137. $row_RC[$idx_round]['attaque_tir'] = $reg[1];
  2138. $row_RC[$idx_round]['attaque_puissance'] = $reg[2];
  2139. $row_RC[$idx_round]['defense_bouclier'] = $reg[3];
  2140. } else {
  2141. $row_RC[$idx_round]['attaque_tir'] = 0;
  2142. $row_RC[$idx_round]['attaque_puissance'] = 0;
  2143. $row_RC[$idx_round]['defense_bouclier'] = 0;
  2144. }
  2145. preg_match("/La flotte d.fensive tire au total (\d*) fois avec une puissance totale de (-?\d*) sur l'attaquant. Les boucliers de l'attaquant absorbent (\d*)/",
  2146. $decoupe[$idx_round], $reg);
  2147. if (isset($reg[1])) {
  2148. $row_RC[$idx_round]['attaque_bouclier'] = $reg[3];
  2149. $row_RC[$idx_round]['defense_tir'] = $reg[1];
  2150. $row_RC[$idx_round]['defense_puissance'] = $reg[2];
  2151. } else {
  2152. $row_RC[$idx_round]['attaque_bouclier'] = 0;
  2153. $row_RC[$idx_round]['defense_tir'] = 0;
  2154. $row_RC[$idx_round]['defense_puissance'] = 0;
  2155. }
  2156. }
  2157. }
  2158. return ($row_RC);
  2159. }
  2160. /**
  2161. * Reconstruction des RC
  2162. * @global $db
  2163. * @param int $id_RC RC à reconstituer
  2164. * @return string $template_RC reconstitué
  2165. */
  2166. function UNparseRC($id_RC)
  2167. {
  2168. global $db;
  2169. $key_ships = array('PT' => 'P.transp.', 'GT' => 'G.transp.', 'CLE' => 'Ch.léger',
  2170. 'CLO' => 'Ch.lourd', 'CR' => 'Croiseur', 'VB' => 'V.bataille', 'VC' =>
  2171. 'V.colonisation', 'REC' => 'Recycleur', 'SE' => 'Sonde', 'BMD' => 'Bombardier',
  2172. 'DST' => 'Destr.', 'EDLM' => 'Rip', 'SAT' => 'Sat.sol.', 'TRA' => 'Traqueur');
  2173. $key_defs = array('LM' => 'Missile', 'LLE' => 'L.léger.', 'LLO' => 'L.lourd',
  2174. 'CG' => 'Can.Gauss', 'AI' => 'Art.ions', 'LP' => 'Lanc.plasma', 'PB' =>
  2175. 'P.bouclier', 'GB' => 'G.bouclier');
  2176. $base_ships = array('PT' => array(4000, 10, 5), 'GT' => array(12000, 25, 5),
  2177. 'CLE' => array(4000, 10, 50), 'CLO' => array(10000, 25, 150), 'CR' => array(27000,
  2178. 50, 400), 'VB' => array(60000, 200, 1000), 'VC' => array(30000, 100, 50), 'REC' =>
  2179. array(16000, 10, 1), 'SE' => array(1000, 0, 0), 'BMD' => array(75000, 500, 1000),
  2180. 'DST' => array(110000, 500, 2000), 'EDLM' => array(9000000, 50000, 200000),
  2181. 'SAT' => array(2000, 1, 1), 'TRA' => array(70000, 400, 700));
  2182. $base_defs = array('LM' => array(2000, 20, 80), 'LLE' => array(2000, 25, 100),
  2183. 'LLO' => array(8000, 100, 250), 'CG' => array(35000, 200, 1100), 'AI' => array(8000,
  2184. 500, 150), 'LP' => array(100000, 300, 3000), 'PB' => array(20000, 2000, 1), 'GB' =>
  2185. array(100000, 10000, 1));
  2186. // Récupération des constantes du RC
  2187. $query = 'SELECT dateRC, coordinates, nb_rounds, victoire, pertes_A, pertes_D, gain_M, gain_C,
  2188. gain_D, debris_M, debris_C, lune FROM ' . TABLE_PARSEDRC . ' WHERE id_rc = ' .
  2189. $id_RC;
  2190. $result = $db->sql_query($query);
  2191. list($dateRC, $coordinates, $nb_rounds, $victoire, $pertes_A, $pertes_D, $gain_M,
  2192. $gain_C, $gain_D, $debris_M, $debris_C, $lune) = $db->sql_fetch_row($result);
  2193. $dateRC = date('d.m.Y H:i:s', $dateRC);
  2194. $template = 'Les flottes suivantes s\'affrontent (' . $dateRC . "):\n\n";
  2195. // Récupération de chaque round du RC
  2196. for ($idx = 1; $idx <= $nb_rounds; $idx++) {
  2197. $query = 'SELECT id_rcround, attaque_tir, attaque_puissance, attaque_bouclier, defense_tir,
  2198. defense_puissance, defense_bouclier FROM ' . TABLE_PARSEDRCROUND .
  2199. ' WHERE id_rc = ' . $id_RC . '
  2200. AND numround = ' . $idx;
  2201. $result_round = $db->sql_query($query);
  2202. list($id_rcround, $attaque_tir, $attaque_puissance, $attaque_bouclier, $defense_tir,
  2203. $defense_puissance, $defense_bouclier) = $db->sql_fetch_row($result_round);
  2204. // On formate les résultats
  2205. $nf_gain_M = number_format($gain_M,0,',','.');
  2206. $nf_gain_C = number_format($gain_C,0,',','.');
  2207. $nf_gain_D = number_format($gain_D,0,',','.');
  2208. $nf_pertes_A = number_format($pertes_A,0,',','.');
  2209. $nf_pertes_D = number_format($pertes_D,0,',','.');
  2210. $nf_debris_M = number_format($debris_M,0,',','.');
  2211. $nf_debris_C = number_format($debris_C,0,',','.');
  2212. $nf_attaque_tir = number_format($attaque_tir,0,',','.');
  2213. $nf_attaque_puissance = number_format($attaque_puissance,0,',','.');
  2214. $nf_attaque_bouclier = number_format($attaque_bouclier,0,',','.');
  2215. $nf_defense_tir = number_format($defense_tir,0,',','.');
  2216. $nf_defense_puissance = number_format($defense_puissance,0,',','.');
  2217. $nf_defense_bouclier = number_format($defense_bouclier,0,',','.');
  2218. // Récupération de chaque attaquant du RC
  2219. $query = 'SELECT player, coordinates, Armes, Bouclier, Protection, PT, GT, CLE, CLO, CR, VB, VC, REC,
  2220. SE, BMD, DST, EDLM, TRA FROM ' . TABLE_ROUND_ATTACK .
  2221. ' WHERE id_rcround = ' . $id_rcround;
  2222. $result_attack = $db->sql_query($query);
  2223. while (list($player, $coordinates, $Armes, $Bouclier, $Protection, $PT, $GT, $CLE,
  2224. $CLO, $CR, $VB, $VC, $REC, $SE, $BMD, $DST, $EDLM, $TRA) = $db->sql_fetch_row($result_attack)) {
  2225. $key = '';
  2226. $ship = 0;
  2227. $vivant_att = false;
  2228. $template .= 'Attaquant ' . $player;
  2229. $ship_type = 'Type';
  2230. $ship_nombre = 'Nombre';
  2231. $ship_armes = 'Armes';
  2232. $ship_bouclier = 'Bouclier';
  2233. $ship_protection = 'Coque';
  2234. foreach ($key_ships as $key => $ship) {
  2235. if (isset($$key) && $$key > 0) {
  2236. $vivant_att = true;
  2237. $ship_type .= "\t" . $ship;
  2238. $ship_nombre .= "\t" . number_format($$key,0,',','.');;
  2239. $ship_protection .= "\t" . number_format(round(($base_ships[$key][0] * (($Protection / 10) * 0.1 + 1)) / 10),0,',','.');
  2240. $ship_bouclier .= "\t" . number_format(round($base_ships[$key][1] * (($Bouclier / 10) * 0.1 + 1)),0,',','.');
  2241. $ship_armes .= "\t" . number_format(round($base_ships[$key][2] * (($Armes / 10) * 0.1 + 1)),0,',','.');
  2242. }
  2243. }
  2244. if ($vivant_att == true) {
  2245. $template .= ' [' . $coordinates . ']';
  2246. if($idx==1)
  2247. $template .= ' Armes: ' . $Armes . '% Bouclier: ' . $Bouclier . '% Coques: ' . $Protection . '%';
  2248. $template .="\n";
  2249. $template .= $ship_type . "\n" . $ship_nombre . "\n" . $ship_armes . "\n" . $ship_bouclier . "\n" . $ship_protection . "\n\n";
  2250. }
  2251. else
  2252. $template .= ' détruit.' . "\n\n";
  2253. } // Fin récupération de chaque attaquant du RC
  2254. // Récupération de chaque défenseur du RC
  2255. $query = 'SELECT player, coordinates, Armes, Bouclier, Protection, PT, GT, CLE, CLO, CR, VB, VC, REC,
  2256. SE, BMD, SAT, DST, EDLM, TRA, LM, LLE, LLO, CG, AI, LP, PB, GB FROM ' .
  2257. TABLE_ROUND_DEFENSE . ' WHERE
  2258. id_rcround = ' . $id_rcround;
  2259. $result_defense = $db->sql_query($query);
  2260. while (list($player, $coordinates, $Armes, $Bouclier, $Protection, $PT, $GT, $CLE,
  2261. $CLO, $CR, $VB, $VC, $REC, $SE, $BMD, $SAT, $DST, $EDLM, $TRA, $LM, $LLE, $LLO, $CG, $AI,
  2262. $LP, $PB, $GB) = $db->sql_fetch_row($result_defense)) {
  2263. $key = '';
  2264. $ship = 0;
  2265. $vivant_def = false;
  2266. $template .= 'Défenseur ' . $player;
  2267. $ship_type = 'Type';
  2268. $ship_nombre = 'Nombre';
  2269. $ship_armes = 'Armes';
  2270. $ship_bouclier = 'Bouclier';
  2271. $ship_protection = 'Coque';
  2272. foreach ($key_ships as $key => $ship) {
  2273. if (isset($$key) && $$key > 0) {
  2274. $vivant_def = true;
  2275. $ship_type .= "\t" . $ship;
  2276. $ship_nombre .= "\t" . number_format($$key,0,',','.');
  2277. $ship_protection .= "\t" . number_format(round(($base_ships[$key][0] * (($Protection / 10) * 0.1 + 1)) / 10),0,',','.');
  2278. $ship_bouclier .= "\t" . number_format(round($base_ships[$key][1] * (($Bouclier / 10) * 0.1 + 1)),0,',','.');
  2279. $ship_armes .= "\t" . number_format(round($base_ships[$key][2] * (($Armes / 10) * 0.1 + 1)),0,',','.');
  2280. }
  2281. }
  2282. foreach ($key_defs as $key => $def) {
  2283. if (isset($$key) && $$key > 0) {
  2284. $vivant_def = true;
  2285. $ship_type .= "\t" . $def;
  2286. $ship_nombre .= "\t" . number_format($$key,0,',','.');
  2287. $ship_protection .= "\t" . number_format(round(($base_defs[$key][0] * (($Protection / 10) * 0.1 + 1)) / 10),0,',','.');
  2288. $ship_bouclier .= "\t" . number_format(round($base_defs[$key][1] * (($Bouclier / 10) * 0.1 + 1)),0,',','.');
  2289. $ship_armes .= "\t" . number_format(round($base_defs[$key][2] * (($Armes / 10) * 0.1 + 1)),0,',','.');
  2290. }
  2291. }
  2292. if ($vivant_def == true) {
  2293. $template .= ' [' . $coordinates . ']';
  2294. if($idx==1)
  2295. $template .= ' Armes: ' . $Armes . '% Bouclier: ' . $Bouclier . '% Coques: ' . $Protection . '%';
  2296. $template .="\n";
  2297. $template .= $ship_type . "\n" . $ship_nombre . "\n" . $ship_armes . "\n" . $ship_bouclier . "\n" . $ship_protection . "\n\n";
  2298. }
  2299. else
  2300. $template .= ' détruit.' . "\n\n";
  2301. } // Fin récupération de chaque défenseur du RC
  2302. // Résultat du round
  2303. if ($attaque_tir != 0 || $defense_tir != 0) {
  2304. $template .= 'La flotte attaquante tire ' . $nf_attaque_tir .
  2305. ' fois avec une force totale de ' . $nf_attaque_puissance .
  2306. ' sur le défenseur. Les boucliers du défenseur absorbent ' . $nf_defense_bouclier .
  2307. ' points de dommage.' . "\n\n";
  2308. $template .= 'La flotte de défense tire ' . $nf_defense_tir .
  2309. ' fois sur l\'attaquant avec une force de ' . $nf_defense_puissance . '. Les boucliers de l\'attaquant absorbent ' .
  2310. $nf_attaque_bouclier . ' points de dommage.' . "\n\n";
  2311. }
  2312. } // Fin récupération de chaque round du RC
  2313. // Qui a remporté le combat ?
  2314. switch ($victoire) {
  2315. case 'N':
  2316. $template .= 'La bataille se termine par un match nul, les deux flottes rentrent vers leurs planètes respectives.' .
  2317. "\n\n";
  2318. break;
  2319. case 'A':
  2320. $template .= 'L\'attaquant a gagné la bataille ! Il emporte ' .
  2321. $nf_gain_M . ' unités de métal, ' . $nf_gain_C . ' unités de cristal et ' . $nf_gain_D .
  2322. ' unités de deutérium.' . "\n\n";
  2323. break;
  2324. case 'D':
  2325. $template .= 'Le défenseur a gagné la bataille !' . "\n\n";
  2326. break;
  2327. }
  2328. // Pertes et champs de débris
  2329. $template .= 'L\'attaquant a perdu au total ' . $nf_pertes_A . ' unités.' . "\n";
  2330. $template .= 'Le défenseur a perdu au total ' . $nf_pertes_D . ' unités.' . "\n";
  2331. $template .= 'Un champ de débris contenant ' . $nf_debris_M .
  2332. ' de métal et ' . $nf_debris_C . ' de cristal se forme dans l\'orbite de la planète.' .
  2333. "\n";
  2334. $lunePourcent = floor(($debris_M + $debris_C) / 100000);
  2335. $lunePourcent = ($lunePourcent<0 ? 0 : ($lunePourcent>20 ? 20 : $lunePourcent));
  2336. if ($lunePourcent>0)
  2337. $template .= 'La probabilité de création d\'une lune est de ' . $lunePourcent . ' %';
  2338. if($lune==1)
  2339. $template .= "\nLes quantités énormes de métal et de cristal s'attirent, formant ainsi une lune dans l'orbite de cette planète.";
  2340. return ($template);
  2341. }
  2342. /**
  2343. * Enregistrement des RC
  2344. * @global $db
  2345. * @param string $rawRC RC brut à analyser
  2346. */
  2347. function insert_RC($rawRC)
  2348. {
  2349. global $db;
  2350. $parsedRC = parseRC($rawRC);
  2351. $query = 'INSERT IGNORE INTO ' . TABLE_PARSEDRC .
  2352. '(dateRC, nb_rounds, victoire, pertes_A, pertes_D,
  2353. gain_M, gain_C, gain_D, debris_M, debris_C, lune, coordinates) VALUES (' . $parsedRC['dateRC'] .
  2354. ',' . $parsedRC['nb_rounds'] . ',"' . $parsedRC['victoire'] . '",' . $parsedRC['pertes_A'] .
  2355. ',' . $parsedRC['pertes_D'] . ',' . $parsedRC['gain_M'] . ',' . $parsedRC['gain_C'] .
  2356. ',' . $parsedRC['gain_D'] . ',' . $parsedRC['debris_M'] . ',' . $parsedRC['debris_C'] .
  2357. ',' . $parsedRC['lune'] . ',"' . $parsedRC['coordinates'] . '")';
  2358. if (!$db->sql_query($query)) {
  2359. $error = $db->sql_error();
  2360. }
  2361. $id_RC = $db->sql_insertid();
  2362. for ($idx_round = 1; $idx_round <= $parsedRC['nb_rounds']; $idx_round++) {
  2363. $round = 'round' . $idx_round;
  2364. log_('mod', ' enregistre le round ' . $idx_round);
  2365. $query = 'INSERT IGNORE INTO ' . TABLE_PARSEDRCROUND .
  2366. '(id_rc, numround, attaque_tir, attaque_puissance,
  2367. attaque_bouclier, defense_tir, defense_puissance, defense_bouclier) VALUES(' .
  2368. $id_RC . ', ' . $idx_round . ', "' . $parsedRC[$round]['attaque_tir'] . '", "' .
  2369. $parsedRC[$round]['attaque_puissance'] . '", "' . $parsedRC[$round]['attaque_bouclier'] .
  2370. '", "' . $parsedRC[$round]['defense_tir'] . '", "' . $parsedRC[$round]['defense_puissance'] .
  2371. '", "' . $parsedRC[$round]['defense_bouclier'] . '")';
  2372. if (!$db->sql_query($query)) {
  2373. $error = $db->sql_error();
  2374. }
  2375. $id_parsedround = $db->sql_insertid();
  2376. foreach ($parsedRC['attaquants'] as $opponent => $row) {
  2377. $pseudo = $row['pseudo'];
  2378. $query = 'INSERT IGNORE INTO ' . TABLE_ROUND_ATTACK .
  2379. '(id_rcround, player, coordinates, Armes,
  2380. Bouclier, Protection, PT, GT, CLE, CLO, CR, VB, VC, REC, SE, BMD, DST, EDLM, TRA) VALUES (' .
  2381. $id_parsedround . ', "' . $row['pseudo'] . '", "' . $row['coordinates'] . '", ' .
  2382. $row['armes'] . ', ' . $row['bouclier'] . ', ' . $row['protection'] . ', "' . $parsedRC[$round][$pseudo]['P.transp.'] .
  2383. '", "' . $parsedRC[$round][$pseudo]['G.transp.'] . '", "' . $parsedRC[$round][$pseudo]['Ch.léger'] .
  2384. '", "' . $parsedRC[$round][$pseudo]['Ch.lourd'] . '", "' . $parsedRC[$round][$pseudo]['Croiseur'] .
  2385. '", "' . $parsedRC[$round][$pseudo]['V.bataille'] . '", "' . $parsedRC[$round][$pseudo]['V.colonisation'] .
  2386. '", "' . $parsedRC[$round][$pseudo]['Recycleur'] . '", "' . $parsedRC[$round][$pseudo]['Sonde'] .
  2387. '", "' . $parsedRC[$round][$pseudo]['Bombardier'] . '", "' . $parsedRC[$round][$pseudo]['Destr.'] .
  2388. '", "' . $parsedRC[$round][$pseudo]['Rip'] . '", "' . $parsedRC[$round][$pseudo]['Traqueur'] .
  2389. '")';
  2390. if (!$db->sql_query($query)) {
  2391. $error = $db->sql_error();
  2392. }
  2393. }
  2394. foreach ($parsedRC['defenseurs'] as $opponent => $row) {
  2395. $pseudo = $row['pseudo'];
  2396. $query = 'INSERT IGNORE INTO ' . TABLE_ROUND_DEFENSE .
  2397. '(id_rcround, player, coordinates, Armes,
  2398. Bouclier, Protection, PT, GT, CLE, CLO, CR, VB, VC, REC, SE, BMD, DST, EDLM, SAT, TRA, LM, LLE, LLO,
  2399. CG, AI, LP, PB, GB) VALUES (' . $id_parsedround . ', "' . $row['pseudo'] .
  2400. '", "' . $row['coordinates'] . '", ' . $row['armes'] . ', ' . $row['bouclier'] .
  2401. ', ' . $row['protection'] . ', "' . $parsedRC[$round][$pseudo]['P.transp.'] .
  2402. '", "' . $parsedRC[$round][$pseudo]['G.transp.'] . '", "' . $parsedRC[$round][$pseudo]['Ch.léger'] .
  2403. '", "' . $parsedRC[$round][$pseudo]['Ch.lourd'] . '", "' . $parsedRC[$round][$pseudo]['Croiseur'] .
  2404. '", "' . $parsedRC[$round][$pseudo]['V.bataille'] . '", "' . $parsedRC[$round][$pseudo]['V.colonisation'] .
  2405. '", "' . $parsedRC[$round][$pseudo]['Recycleur'] . '", "' . $parsedRC[$round][$pseudo]['Sonde'] .
  2406. '", "' . $parsedRC[$round][$pseudo]['Bombardier'] . '", "' . $parsedRC[$round][$pseudo]['Destr.'] .
  2407. '", "' . $parsedRC[$round][$pseudo]['Rip'] . '", "' . $parsedRC[$round][$pseudo]['Sat.sol.'] .
  2408. '", "' . $parsedRC[$round][$pseudo]['Traqueur'] . '", "' . $parsedRC[$round][$pseudo]['Missile'] .
  2409. '", "' . $parsedRC[$round][$pseudo]['L.léger.'] . '", "' . $parsedRC[$round][$pseudo]['L.lourd'] .
  2410. '", "' . $parsedRC[$round][$pseudo]['Can.Gauss'] . '", "' . $parsedRC[$round][$pseudo]['Art.ions'] .
  2411. '", "' . $parsedRC[$round][$pseudo]['Lanc.plasma'] . '", "' . $parsedRC[$round][$pseudo]['P.bouclier'] .
  2412. '", "' . $parsedRC[$round][$pseudo]['G.bouclier'] . '")';
  2413. if (!$db->sql_query($query)) {
  2414. $error = $db->sql_error();
  2415. }
  2416. }
  2417. }
  2418. redirection('index.php');
  2419. }
  2420. /**
  2421. * Fonction de calcul du ratio
  2422. * @param int $player user_id ID du joueur
  2423. * @return array ratio et divers calculs intermédiaires pour l'utilisateur en question
  2424. * @author Bousteur 25/11/2006
  2425. */
  2426. function ratio_calc($player)
  2427. {
  2428. global $db, $user_data;
  2429. //récupération des données nécessaires
  2430. $sqlrecup = "SELECT planet_added_web, planet_added_ogs, planet_exported, search, spy_added_web, spy_added_ogs, spy_exported, rank_added_web, rank_added_ogs, rank_exported FROM " .
  2431. TABLE_USER . " WHERE user_id='" . $player . "'";
  2432. $result = $db->sql_query($sqlrecup);
  2433. list($planet_added_web, $planet_added_ogs, $planet_exported, $search, $spy_added_web,
  2434. $spy_added_ogs, $spy_exported, $rank_added_web, $rank_added_ogs, $rank_exported) =
  2435. $db->sql_fetch_row($result);
  2436. $request = "select sum(planet_added_web + planet_added_ogs), ";
  2437. $request .= "sum(spy_added_web + spy_added_ogs), ";
  2438. $request .= "sum(rank_added_web + rank_added_ogs), ";
  2439. $request .= "sum(search) ";
  2440. $request .= "from " . TABLE_USER;
  2441. $resultat = $db->sql_query($request);
  2442. list($planetimporttotal, $spyimporttotal, $rankimporttotal, $searchtotal) = $db->
  2443. sql_fetch_row($resultat);
  2444. $query = "SELECT COUNT(user_id) as count FROM " . TABLE_USER;
  2445. $result = $db->sql_query($query);
  2446. if ($db->sql_numrows($result) > 0) {
  2447. $row = $db->sql_fetch_assoc($result);
  2448. $max = $row['count'];
  2449. }
  2450. //pour éviter la division par zéro
  2451. if ($planetimporttotal == 0)
  2452. $planetimporttotal = 1;
  2453. if ($spyimporttotal == 0)
  2454. $spyimporttotal = 1;
  2455. if ($rankimporttotal == 0)
  2456. $rankimporttotal = 1;
  2457. if ($searchtotal == 0)
  2458. $searchtotal = 1;
  2459. //et on commence le calcul
  2460. $ratio_planet = ($planet_added_web + $planet_added_ogs) / $planetimporttotal;
  2461. $ratio_spy = ($spy_added_web + $spy_added_ogs) / $spyimporttotal;
  2462. $ratio_rank = ($rank_added_web + $rank_added_ogs) / $rankimporttotal;
  2463. $ratio = ($ratio_planet * 4 + $ratio_spy * 2 + $ratio_rank) / (4 + 2 + 1);
  2464. $ratio_planet_penality = ($planet_added_web + $planet_added_ogs - $planet_exported) /
  2465. $planetimporttotal;
  2466. $ratio_spy_penality = (($spy_added_web + $spy_added_ogs) - $spy_exported) / $spyimporttotal;
  2467. $ratio_rank_penality = (($rank_added_web + $rank_added_ogs) - $rank_exported) /
  2468. $rankimporttotal;
  2469. $ratio_penality = ($ratio_planet_penality * 4 + $ratio_spy_penality * 2 + $ratio_rank_penality) / (4 +
  2470. 2 + 1);
  2471. $ratio_search = $search / $searchtotal;
  2472. $ratio_searchpenality = ($ratio - $ratio_search);
  2473. $result = ($ratio + $ratio_penality + $ratio_searchpenality) * 1000;
  2474. $array = array($result, $ratio_searchpenality, $ratio_search, $ratio_penality, $ratio_rank_penality,
  2475. $ratio_spy_penality, $ratio_planet_penality);
  2476. //retourne le ratio et calculs intermédiaires
  2477. return $array;
  2478. }
  2479. /**
  2480. * Fonction de test d'autorisation d'effectuer une action en fonction du ratio ou de l'appartenance à un groupe qui a un ratio illimité
  2481. * @return bool vrai si l'utilisateur peut faire des recherches
  2482. * @author Bousteur 28/11/2006
  2483. */
  2484. function ratio_is_ok()
  2485. {
  2486. global $user_data, $server_config;
  2487. static $result;
  2488. if ($result != null)
  2489. return $result;
  2490. if (isset($server_config["block_ratio"]) && $server_config["block_ratio"] == 1) {
  2491. if ($user_data["user_admin"] == 1 || $user_data["user_coadmin"] == 1 || $user_data["management_user"] ==
  2492. 1) {
  2493. return true;
  2494. } else {
  2495. $result = ratio_calc($user_data['user_id']);
  2496. $result = $result[0] >= $server_config["ratio_limit"];
  2497. return $result;
  2498. }
  2499. } else {
  2500. return true;
  2501. }
  2502. }
  2503. ?>