/includes/fonctions.inc.php

https://bitbucket.org/mw4rf/ajpsc-annuaire · PHP · 748 lines · 434 code · 88 blank · 226 comment · 58 complexity · 41558a7950cbb7d5adc538bfdf550740 MD5 · raw file

  1. <?php
  2. // Annuaire Alumnii
  3. // Base de données et annuaire d'anciens étudiants.
  4. // Copyright (C) <2006> <Guillaume Florimond>
  5. // This program is free software: you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation, either version 3 of the License, or
  8. // (at your option) any later version.
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU General Public License for more details.
  13. // You should have received a copy of the GNU General Public License
  14. // along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. /*
  16. Nom: dire
  17. But: Détecte la langue du client et affiche une phrase dans sa langue
  18. Info: Guillaume Florimond, 16/12/2006
  19. */
  20. function dire($item)
  21. {
  22. echo donner($item);
  23. }
  24. /*
  25. Nom: message
  26. But: Détecte la langue du client et affiche le message, dans le div MESSAGE, dans sa langue
  27. Alors que la fonction dire() n'affique que le string localisé, cette fonction d'encapsule dans une div qui peut être formatée avec les CSS.
  28. Info: Guillaume Florimond, 10/04/2007
  29. */
  30. function message($item)
  31. {
  32. echo "<div class=\"message\">".donner($item)."</div>";
  33. }
  34. /*
  35. Nom: donner
  36. But: Détecte la langue du client et renvoie une phrase dans sa langue
  37. Info: Guillaume Florimond, 16/12/2006
  38. */
  39. function donner($item)
  40. {
  41. // Vérifie si l'utilisateur a choisi manuellement une langue
  42. if(isset($_SESSION["langue"]))
  43. {
  44. $lang = $_SESSION["langue"];
  45. }
  46. // S'il n'a rien choisi, déterminer la langue par défaut de son navigateur
  47. else
  48. {
  49. // Vérifie si l'information a bien été transmise en header
  50. if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
  51. {
  52. /* Obtient les deux premiers caractères de la chaîne qui correspondent à la
  53. langue par défaut du client (fr, en, etc...). Le reste de la chaîne contient
  54. la liste des langues gérées par le client, ce qui n'est pas utile ici. */
  55. $lang = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
  56. }
  57. // S'il n'y a pas de choix et que le header n'a pas été transmis: par défaut
  58. else
  59. {
  60. $lang = "fr"; // par défaut
  61. }
  62. }
  63. // Liste à modifier en fonction des langues disponibles:
  64. // français (fr) - espagnol (es) - anglais (en)
  65. if($lang != "fr" and $lang != "es" and $lang != "en")
  66. {
  67. $lang = "fr";
  68. }
  69. // Obtient la phrase demandée dans la langue demandée
  70. global $phrase;
  71. // 1er cas: la phrase existe dans la langue choisie.
  72. if(isset($phrase[$lang][$item]))
  73. {
  74. $res = $phrase[$lang][$item];
  75. }
  76. // 2ème cas: la phrase n'existe pas dans la langue choisie mais elle existe en FR
  77. elseif(isset($phrase["fr"][$item]))
  78. {
  79. $res = $phrase["fr"][$item];
  80. }
  81. // 3ème cas: la phrase n'existe ni dans la langue choisie ni en français
  82. else
  83. {
  84. $res = "";
  85. }
  86. // AFFICHE le résultat
  87. return $res;
  88. }
  89. /*
  90. Nom: obtenir_theme
  91. But: Renvoie le nom du thème utilisé à l'instant
  92. Info: Guillaume Florimond, 01/01/2007
  93. */
  94. function obtenir_theme()
  95. {
  96. global $_config;
  97. if(isset($_SESSION['theme_personnalise']) and $_SESSION['theme_personnalise'] == 1 and isset($_SESSION['theme']))
  98. {
  99. return $_SESSION['theme'];
  100. }
  101. else
  102. {
  103. return $_config['theme'];
  104. }
  105. }
  106. /*
  107. Nom: definir_theme
  108. But: Définit un thème personnalisé pour l'utilisateur, qui dure le temps de la session
  109. Info: Guillaume Florimond, 01/01/2007
  110. */
  111. function definir_theme($theme)
  112. {
  113. /* Correction bug - 03/01/07: les changements de thème ne sont pas pris en compte après rafraichissement de la page */
  114. /* Etrangement, chez Celeonet, écraser l'ancienne valeur de $_SESSION["theme"] par une nouvelle valeur ne suffit pas. Cela l'écrase sur le moment, mais au prochain appel de $_SESSION["theme"], c'est la valeur d'origine qui sera retournée ! Pour éviter cela, il faut utiliser la fonction unset() qui supprime réellement l'entrée dans le tableau $_SESSION, pour laisser la place à une nouvelle entrée. */
  115. unset($_SESSION['theme']);
  116. unset($_SESSION['theme_personnalise']);
  117. $_SESSION['theme'] = $theme;
  118. $_SESSION['theme_personnalise'] = 1;
  119. }
  120. /*
  121. Nom: parcourir_dossier
  122. But: Renvoie le contenu d'un dossier du FTP sous forme de tableau, ou FALSE en cas d'erreur
  123. Info: Guillaume Florimond, 01/01/2007
  124. */
  125. function parcourir_dossier($chemin)
  126. {
  127. if ($handle = opendir($chemin))
  128. {
  129. /* Indice pour remplir le tableau */
  130. $i = 0;
  131. /* Ceci est la bonne manière pour parcourir un dossier. */
  132. while (false !== ($fichier = readdir($handle)))
  133. {
  134. if ($fichier != "." // protège contre le répertoire supérieur
  135. and $fichier != ".." // protège contre le répertoire racine
  136. and $fichier{0} != ".") // protège contre les fichiers cachés unix (".file")
  137. {
  138. $contenu[$i] = $fichier;
  139. $i++;
  140. }
  141. }
  142. closedir($handle);
  143. return $contenu;
  144. }
  145. return false;
  146. }
  147. /*
  148. Nom: changer_langue
  149. But: Change la langue courante et l'enregistre dans la SESSION, en fonction du choix de l'utilisateur
  150. Param: la langue en deux lettre: "fr" français, "es" espagnol, "en" anglais
  151. Info: Guillaume Florimond, 01/01/2007
  152. */
  153. function changer_langue($langue)
  154. {
  155. // Protection pour ne pas appliquer une langue inconnue
  156. if($langue != "fr" and $langue != "es" and $langue != "en")
  157. {
  158. $langue = "fr";
  159. }
  160. $_SESSION["langue"] = $langue;
  161. }
  162. /*
  163. Nom: abbr
  164. But: Affiche le résultat de abbr2 - Argument: la chaîne dans le tableau $phrases
  165. Info: Guillaume Florimond, 25/12/2006
  166. */
  167. function abbr($c)
  168. {
  169. echo abbr2($c);
  170. }
  171. /*
  172. Nom: abbr2
  173. But: Renvoie le code HTML qui contient le tooltip et le contenu à afficher.
  174. Info: Guillaume Florimond, 25/12/2006
  175. Dans le fichier de langue, créer deux entrées:
  176. - $phrase["fr"]["x"]
  177. - $phrase["fr"]["@x"]
  178. L'argument $c doit être "x". La fonction renvoie alors "x" affiché sur la page et "@x" en tooltip.
  179. */
  180. function abbr2($c)
  181. {
  182. global $_config;
  183. if($_config['tooltips'] == 1)
  184. {
  185. return "<abbr title=\"".donner("@".$c)."\">".donner($c)."</abbr>";
  186. }
  187. else
  188. {
  189. return donner($c);
  190. }
  191. }
  192. /*
  193. Nom: abbr3
  194. But: Renvoie le code HTML qui contient le tooltip et le contenu à afficher.
  195. Info: Guillaume Florimond, 25/12/2006
  196. */
  197. function abbr3($contenu, $abbr)
  198. {
  199. global $_config;
  200. if($_config['tooltips'] == 1)
  201. {
  202. return "<abbr title=\"$abbr\">$contenu</abbr>";
  203. }
  204. else
  205. {
  206. return $contenu;
  207. }
  208. }
  209. /*
  210. Nom: promotion
  211. But: Renvoie la date de début et de fin des études en fonction de la promotion (dans une phrase)
  212. Info: Guillaume Florimond, 25/12/2006
  213. */
  214. function promotion($promo)
  215. {
  216. $fin = $promo;
  217. $debut = $promo-4;
  218. $res = donner('promo1')." $promo ".donner('promo2')." $debut ".donner('promo3')." $fin ".donner('promo4');
  219. return $res;
  220. }
  221. /*
  222. Nom: convertir_date
  223. But: Affiche d'une date du type 1900-01-01 sous la forme "1er janvier 1900"
  224. Info: Guillaume Florimond, 16/12/2006
  225. */
  226. function convertir_date($date)
  227. {
  228. $dt = explode("-", $date);
  229. $j = $dt["2"]; // jour
  230. $m = $dt["1"]; // mois
  231. $a = $dt["0"]; // année
  232. // Convertir les jours sur 1 chiffre si nécessaire, p. ex. 03 janvier => 3 janvier
  233. switch($j)
  234. {
  235. case 01: $j = "1"; break;
  236. case 02: $j = "2"; break;
  237. case 03: $j = "3"; break;
  238. case 04: $j = "4"; break;
  239. case 05: $j = "5"; break;
  240. case 06: $j = "6"; break;
  241. case 07: $j = "7"; break;
  242. case 08: $j = "8"; break;
  243. case 09: $j = "9"; break;
  244. default;
  245. }
  246. // Modificateur éventuel pour le 1 => 1er janvier...
  247. if($j == 1) { $j = $j.donner("dt-1er"); }
  248. // Nommer les mois
  249. $m = donner($m);
  250. // Construire la date
  251. $sep = donner("dt-sep"); // séparateur de date, p. ex. "de" => "1 de enero de 1900"
  252. $res = $j." ".$sep." ".$m." ".$sep." ".$a;
  253. // Renvoyer
  254. return $res;
  255. }
  256. /*
  257. Nom: formater_date
  258. But: Convertit une date au format français vers le format MySQL: 01/02/2006 => 2006-02-01
  259. Info: Guillaume Florimond, 10/04/2007
  260. Param: $date: la date à convertir
  261. $vers_mysql: TRUE pour JJ/MM/AAAA => AAAA-MM-JJ ; FALSE pour AAAA-MM-JJ => JJ/MM/AAAA
  262. ATTENTION: quand la langue est l'anglais, les dates sont affichées au format américain, MM/DD/YYYY
  263. */
  264. function formater_date($date, $vers_mysql = true)
  265. {
  266. // 1er cas: la langue est l'ANGLAIS, format US: MM/DD/YYYY
  267. if(isset($_SESSION["langue"]) and $_SESSION["langue"] == "en")
  268. {
  269. // MM/DD/YYYY => YYYY-MM-DD
  270. if($vers_mysql)
  271. {
  272. $pattern = "`([0-9]{2})/([0-9]{2})/([0-9]{4})`";
  273. $replacement = "$3-$1-$2";
  274. }
  275. // YYYY-MM-DD => DD/MM/YYYY
  276. else
  277. {
  278. $pattern = "`([0-9]{4})-([0-9]{2})-([0-9]{2})`";
  279. $replacement = "$2/$3/$1";
  280. }
  281. }
  282. // 2ème cas: la langue est FRANCAIS ou ESPAGNOl, format EUROPEEN: DD/MM/AAAA
  283. else
  284. {
  285. // JJ/MM/AAAA => AAAA-MM-JJ
  286. if($vers_mysql)
  287. {
  288. $pattern = "`([0-9]{2})/([0-9]{2})/([0-9]{4})`";
  289. $replacement = "$3-$2-$1";
  290. }
  291. // AAAA-MM-JJ => JJ/MM/AAAA
  292. else
  293. {
  294. $pattern = "`([0-9]{4})-([0-9]{2})-([0-9]{2})`";
  295. $replacement = "$3/$2/$1";
  296. }
  297. }
  298. return preg_replace($pattern, $replacement, $date);
  299. }
  300. /*
  301. Nom: formater_nom
  302. But: Convertit le nom de famille: FULANO => Fulano
  303. Info: Guillaume Florimond, 17/12/2006
  304. */
  305. function formater_nom($nom, $charset="UTF-8")
  306. {
  307. // CASE_TITLE mets des majuscules à la première lettre de chaque mot
  308. // Avantage: les minuscules accentuées sont bien converties en majuscules accentuées.
  309. $nom = mb_convert_case($nom, MB_CASE_TITLE, $charset);
  310. return $nom;
  311. }
  312. /*
  313. Nom: texte_vers_html
  314. But: Convertir du texte brut en html *sécurisé* (p. ex. remplacer linebreak par <br />)
  315. Info: Guillaume Florimond, 17/12/2006
  316. */
  317. function texte_vers_html($texte)
  318. {
  319. // Enlever tous les vilains tags
  320. global $html_allowed; // voir dans config.inc.php
  321. $texte = strip_tags($texte, $html_allowed);
  322. // Convertir les linebreak en <br />
  323. $texte = nl2br($texte);
  324. return $texte;
  325. }
  326. /*
  327. Nom: html_vers_texte
  328. But: Convertir du html en texte brut, SEULEMENT en ce qui concerne les <br /> !!
  329. Info: Guillaume Florimond, 17/12/2006
  330. */
  331. function html_vers_texte($html)
  332. {
  333. // Convertir les <br /> en linebreak
  334. $html = str_replace("\r\n", "\n", $html);
  335. $html = str_replace("<br />\n", "\n", $html);
  336. // Convertir les entités
  337. $html = html_entity_decode($html);
  338. return $html;
  339. }
  340. /*
  341. Nom: from_utf8
  342. But: convertit une chaîne de texte provenant de la BDD de l'UTF-8 vers l'ISO-LATIN-1, afin de l'insérer dans le fichier PDF généré par FPDF (qui ne supporte pas l'UTF-8).
  343. Info: Guillaume Florimond, 15/02/2013
  344. */
  345. function from_utf8($str)
  346. {
  347. if(function_exists('iconv'))
  348. return iconv('UTF-8', 'iso-8859-1', $str);
  349. else
  350. return utf8_decode($str);
  351. }
  352. /*
  353. Nom: donner_latin1
  354. But: Convertit le texte en ISO-8859-1 avant de le renvoyer.
  355. Info: Guillaume Florimond, 15/02/2013
  356. */
  357. function donner_latin1($str)
  358. {
  359. return from_utf8(donner($str));
  360. }
  361. /*
  362. Nom: connexion
  363. But: Connexion à la base de données
  364. Info: Guillaume Florimond, 9/12/2006
  365. */
  366. function connexion()
  367. {
  368. if(!checkauth()) return;
  369. global $_config;
  370. $db = mysql_connect($_config["host"], $_config["user"], $_config["passwd"]);
  371. mysql_select_db($_config["base"],$db);
  372. // Fix charset
  373. if (!function_exists('mysql_set_charset')) {
  374. mysql_query("set names utf8",$db);
  375. } else {
  376. mysql_set_charset('utf8', $db);
  377. }
  378. }
  379. /*
  380. Nom: auth
  381. But: Vérification du mot de passe soumis et connexion de l'utilisateur
  382. Info: Guillaume Florimond, 9/12/2006
  383. */
  384. function auth($passwd)
  385. {
  386. global $_config;
  387. $db = mysql_connect($_config["host"], $_config["user"], $_config["passwd"]);
  388. mysql_select_db($_config["base"],$db);
  389. $sql = "SELECT pass FROM admin WHERE id=1;";
  390. $req = mysql_query($sql);
  391. $data = mysql_fetch_assoc($req) or die("Erreur");
  392. $passwd = sha1($passwd);
  393. //Hypothèse 1: identification correcte
  394. if($passwd == $data['pass'])
  395. {
  396. //Identification réussie
  397. $_SESSION['auth'] = 1;
  398. $_SESSION['mauvais_mdp'] = false;
  399. }
  400. //Hypothèse 2: identification incorrecte
  401. else
  402. {
  403. $_SESSION['mauvais_mdp'] = true;
  404. }
  405. }
  406. /*
  407. Nom: checkauth
  408. But: Vérifie si l'utilisateur est bien connecté avant de lui donner accès aux données
  409. Info: Guillaume Florimond, 9/12/2006
  410. */
  411. function checkauth()
  412. {
  413. global $_config;
  414. if($_config['auth'] == 0)
  415. {
  416. return true;
  417. }
  418. if(isset($_SESSION['auth']) and $_SESSION['auth'] == 1)
  419. {
  420. return true;
  421. }
  422. else return false;
  423. }
  424. /*
  425. Nom: adminauth
  426. But: Authentification en tant qu'administrateur de l'annuaire
  427. Info: Guillaume Florimond, 23/02/2007
  428. */
  429. function adminauth($passwd)
  430. {
  431. global $_config;
  432. $db = mysql_connect($_config["host"], $_config["user"], $_config["passwd"]);
  433. mysql_select_db($_config["base"],$db);
  434. $sql = "SELECT adminpass FROM admin WHERE id=1;";
  435. $req = mysql_query($sql);
  436. $data = mysql_fetch_assoc($req) or die("Erreur");
  437. $passwd = sha1($passwd);
  438. //Hypothèse 1: identification correcte
  439. if($passwd == $data['adminpass'])
  440. {
  441. //Identification réussie
  442. $_SESSION['isadmin'] = 1;
  443. $_SESSION['auth'] = 1;
  444. $_SESSION['mauvais_mdp'] = false;
  445. }
  446. //Hypothèse 2: identification incorrecte
  447. else
  448. {
  449. $_SESSION['mauvais_mdp'] = true;
  450. }
  451. }
  452. /*
  453. Nom: isadmin
  454. But: Renvoie TRUE si l'utilisateur est administrateur, FALSE dans le cas contraire
  455. Info: Guillaume Florimond, 23/02/2007
  456. */
  457. function isadmin()
  458. {
  459. if(isset($_SESSION['isadmin']) and $_SESSION['isadmin'] == 1)
  460. return true;
  461. else
  462. return false;
  463. }
  464. /*
  465. Nom: ajouter
  466. But: Ajoute une fiche à la base de données
  467. Info: Guillaume Florimond, 9/12/2006
  468. */
  469. function ajouter($post)
  470. {
  471. connexion();
  472. /* Collecte des données depuis le formulaire */
  473. /* Cela permettra de manipuler ces données, p. ex. pour contrôler leur conformité */
  474. $data["nom"] = addslashes(texte_vers_html(formater_nom($post["nom"])));
  475. $data["prenom"] = addslashes(texte_vers_html(formater_nom($post["prenom"])));
  476. $data["promotion"] = addslashes(texte_vers_html($post["promotion"]));
  477. $data["nationalite"] = addslashes(texte_vers_html($post["nationalite"]));
  478. $data["naissance"] = addslashes(texte_vers_html(formater_date($post["naissance"])));
  479. $data["adresse"] = addslashes(texte_vers_html($post["adresse"]));
  480. $data["email"] = addslashes(texte_vers_html($post["email"]));
  481. $data["q1"] = addslashes(texte_vers_html($post["q1"]));
  482. $data["q2"] = addslashes(texte_vers_html($post["q2"]));
  483. $data["q3"] = addslashes(texte_vers_html($post["q3"]));
  484. $data["q4"] = addslashes(texte_vers_html($post["q4"]));
  485. $data["q5"] = addslashes(texte_vers_html($post["q5"]));
  486. $data["q6"] = addslashes(texte_vers_html($post["q6"]));
  487. $data["q7"] = addslashes(texte_vers_html($post["q7"]));
  488. $data["secret_question"] = addslashes($post["secret_question"]);
  489. $data["secret_reponse"] = sha1($post["secret_reponse"]);
  490. /* Système anti-doublons */
  491. $sql = "SELECT id FROM utilisateur WHERE nom='".$data["nom"]."' AND prenom='".$data["prenom"]."'";
  492. $req = mysql_query($sql) or die("Erreur: $sql<br />".mysql_error());
  493. $res = mysql_num_rows($req);
  494. if($res!=0) { message("doublon"); return "erreur"; }
  495. /* Le champ "modif" représente la date de la dernière modification de la fiche, aujourd'hui*/
  496. $modif = date("Y-m-d");
  497. /* Formulation de la requête */
  498. $sql = "INSERT INTO utilisateur (nom, prenom, promotion, nationalite, naissance, adresse, email, q1, q2, q3, q4, q5, q6, q7, secret_question, secret_reponse, modif) VALUES ('".$data["nom"]."', '".$data["prenom"]."', '".$data["promotion"]."', '".$data["nationalite"]."', '".$data["naissance"]."', '".$data["adresse"]."', '".$data["email"]."', '".$data["q1"]."', '".$data["q2"]."', '".$data["q3"]."', '".$data["q4"]."', '".$data["q5"]."', '".$data["q6"]."', '".$data["q7"]."', '".$data["secret_question"]."', '".$data["secret_reponse"]."', '$modif');";
  499. /* Exécution de la requête */
  500. mysql_query($sql) or die ("Erreur: $sql<br />".mysql_error());
  501. /* Message ok */
  502. message("enre");
  503. /* Récupération de l'id de l'enregistrement créé */
  504. $sql = "SELECT id FROM utilisateur ORDER BY id DESC";
  505. $req = mysql_query($sql);
  506. while($data = mysql_fetch_assoc($req))
  507. //echo "id = ".$data['id'];
  508. return $data['id'];
  509. }
  510. function ajouter_photo($_UPLOADED_UPLOADED_FILES,$id)
  511. {
  512. global $_config;
  513. @list($width, $height, $imgtype, $strtag) = getimagesize($_UPLOADED_UPLOADED_FILES['image']['tmp_name']);
  514. switch($imgtype)
  515. {
  516. case 1: $ext = 'gif'; break;
  517. case 2: $ext = 'jpg'; break;
  518. case 3: $ext = 'png'; break;
  519. default: $ext = false; break;
  520. }
  521. if(!$ext) // unknown file format
  522. die(dire("photo1"));
  523. // Stockage des photos dans la base de données
  524. if($_config["photos_storage"] == "DB") {
  525. $imgdata = file_get_contents($_UPLOADED_UPLOADED_FILES['image']['tmp_name']);
  526. $imgdata = addslashes($imgdata); // mysql_real_escape_string seems broken on some configurations...
  527. //Insérer dans la bdd
  528. connexion();
  529. $sql = "INSERT INTO photo SET id='', user_id='$id', photo='$imgdata', extension='$ext', height='$height', width='$width'";
  530. @mysql_query($sql);
  531. }
  532. // Stockage des photos dans le système de fichiers
  533. else {
  534. // Stockage
  535. // Le nom du fichier est : user_id.extension (i.e. 66.png)
  536. $destination = $_config['data_folder']."/photos/$id.$ext";
  537. move_uploaded_file($_FILES['image']['tmp_name'], $destination);
  538. // Créer un lien vers ce fichier dans la BDD
  539. connexion();
  540. $sql = "INSERT INTO photo SET id='', user_id='$id', photo='', extension='$ext', height='$height', width='$width'";
  541. @mysql_query($sql);
  542. }
  543. }
  544. /*
  545. Nom: modifier
  546. But: Modifie une fiche de la base de données
  547. Info: Guillaume Florimond, 9/12/2006
  548. */
  549. function modifier($post)
  550. {
  551. connexion();
  552. /* Collecte des données depuis le formulaire */
  553. /* Cela permettra de manipuler ces données, p. ex. pour contrôler leur conformité */
  554. $id = $post["id"];
  555. $data["nom"] = addslashes(texte_vers_html(formater_nom($post["nom"])));
  556. $data["prenom"] = addslashes(texte_vers_html(formater_nom($post["prenom"])));
  557. $data["promotion"] = addslashes(texte_vers_html($post["promotion"]));
  558. $data["nationalite"] = addslashes(texte_vers_html($post["nationalite"]));
  559. $data["naissance"] = addslashes(texte_vers_html(formater_date($post["naissance"])));
  560. $data["adresse"] = addslashes(texte_vers_html($post["adresse"]));
  561. $data["email"] = addslashes(texte_vers_html($post["email"]));
  562. $data["q1"] = addslashes(texte_vers_html($post["q1"]));
  563. $data["q2"] = addslashes(texte_vers_html($post["q2"]));
  564. $data["q3"] = addslashes(texte_vers_html($post["q3"]));
  565. $data["q4"] = addslashes(texte_vers_html($post["q4"]));
  566. $data["q5"] = addslashes(texte_vers_html($post["q5"]));
  567. $data["q6"] = addslashes(texte_vers_html($post["q6"]));
  568. $data["q7"] = addslashes(texte_vers_html($post["q7"]));
  569. /* Si l'utilisateur est administrateur on passe, sinon on teste la réponse secrete*/
  570. if(!isadmin())
  571. {
  572. /* On vérifie que la réponse secrète correspond à celle stockée dans la bdd */
  573. $sql = "SELECT secret_reponse FROM utilisateur WHERE id='$id'";
  574. $req = mysql_query($sql) or die('Erreur');
  575. $dat = mysql_fetch_assoc($req);
  576. if($dat["secret_reponse"] != sha1($post["secret_reponse"]))
  577. {
  578. message("sr");
  579. return; // Si cela ne correspond pas, on sort. Sinon, on continue.
  580. }
  581. }
  582. /* Le champ "modif" représente la date de la dernière modification de la fiche, aujourd'hui*/
  583. $modif = date("Y-m-d");
  584. /* Formulation de la requête */
  585. $sql = "UPDATE utilisateur SET"
  586. ." nom='".$data["nom"]."',"
  587. ." prenom='".$data["prenom"]."',"
  588. ." promotion='".$data["promotion"]."',"
  589. ." nationalite='".$data["nationalite"]."',"
  590. ." naissance='".$data["naissance"]."',"
  591. ." adresse='".$data["adresse"]."',"
  592. ." email='".$data["email"]."',"
  593. ." q1='".$data["q1"]."',"
  594. ." q2='".$data["q2"]."',"
  595. ." q3='".$data["q3"]."',"
  596. ." q4='".$data["q4"]."',"
  597. ." q5='".$data["q5"]."',"
  598. ." q6='".$data["q6"]."',"
  599. ." q7='".$data["q7"]."',"
  600. ." modif='$modif'"
  601. ." WHERE id='$id';";
  602. /* Exécution de la requête */
  603. mysql_query($sql) or die ("Erreur: ".$sql);
  604. }
  605. function modifier_photo($_UPLOADED_FILES,$id)
  606. {
  607. global $_config;
  608. if(empty($_UPLOADED_FILES['image']['tmp_name'])) return;
  609. @list($width, $height, $imgtype, $strtag) = getimagesize($_UPLOADED_FILES['image']['tmp_name']);
  610. switch($imgtype)
  611. {
  612. case 1: $ext = 'gif'; break;
  613. case 2: $ext = 'jpg'; break;
  614. case 3: $ext = 'png'; break;
  615. default: $ext = false; break;
  616. }
  617. if(!$ext) // unknown file format
  618. die(dire('photo1'));
  619. /* Opérations sur la bdd */
  620. connexion();
  621. // Rechercher si la photo existe déjà
  622. $sql = "SELECT * FROM photo WHERE user_id='$id'";
  623. $num = mysql_num_rows(mysql_query($sql));
  624. // Si elle existe, la supprimer
  625. if($num)
  626. {
  627. $sql = "DELETE FROM photo WHERE user_id='$id'";
  628. @mysql_query($sql);
  629. }
  630. // Stockage des photos dans la base de données
  631. if($_config["photos_storage"] == "DB") {
  632. $imgdata = file_get_contents($_UPLOADED_FILES['image']['tmp_name']);
  633. $imgdata = addslashes($imgdata); // mysql_real_escape_string seems broken on some configurations...
  634. // Ajouter ensuite la photo
  635. $sql = "INSERT INTO photo SET id='', user_id='$id', photo='$imgdata', extension='$ext', height='$height', width='$width'";
  636. @mysql_query($sql);
  637. }
  638. // Stockage des photos dans le système de fichiers
  639. else {
  640. // Stockage
  641. // Le nom du fichier est : user_id.extension (i.e. 66.png)
  642. $destination = $_config['data_folder']."/photos/$id.$ext";
  643. move_uploaded_file($_FILES['image']['tmp_name'], $destination);
  644. // Créer un lien vers ce fichier dans la BDD
  645. $sql = "INSERT INTO photo SET id='', user_id='$id', photo='', extension='$ext', height='$height', width='$width'";
  646. @mysql_query($sql);
  647. }
  648. }
  649. /*
  650. Nom: supprimer
  651. But: Supprime une fiche de la base de données
  652. Info: Guillaume Florimond, 17/12/2006
  653. */
  654. function supprimer($id)
  655. {
  656. connexion();
  657. $sql = "DELETE FROM utilisateur WHERE id=$id;";
  658. mysql_query($sql) or die('Erreur');
  659. }
  660. ?>