PageRenderTime 66ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/includes/user.php

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