PageRenderTime 48ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 1ms

/includes/user.php

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