PageRenderTime 36ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/export/pdfexport.php

https://bitbucket.org/mw4rf/ajpsc-annuaire
PHP | 205 lines | 154 code | 18 blank | 33 comment | 17 complexity | 681386ca0aaa30a77b4484d44c1e419d 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. error_reporting(0);
  16. session_start();
  17. include('../includes/config.inc.php');
  18. include('../includes/fonctions.inc.php');
  19. include('../includes/phrases.php');
  20. /* Début: authentification */
  21. if(checkauth())
  22. {
  23. // Récupération des données
  24. $sql = generer_requete();
  25. connexion();
  26. $req = mysql_query($sql);
  27. $numf = mysql_num_rows($req);
  28. // Création de l'objet PDF
  29. include('../lib/pdf.php');
  30. $pdf=new PDF();
  31. // Si on affiche tout l'annuaire, ajouter la page de garde. Sinon ne pas l'ajouter.
  32. if($_GET["pdf"] == "tout")
  33. $pdf->PageDeGarde();
  34. // Remplissage des données
  35. while($data = mysql_fetch_assoc($req))
  36. {
  37. // Ajouter une page pour chaque fiche
  38. $pdf->ajouter_page($data);
  39. }
  40. // Si on affiche tout l'annuaire, ajouter les annexes. Sinon, ne pas les ajouter.
  41. if($_GET["pdf"] == "tout")
  42. {
  43. $pdf->colonnes = TRUE;
  44. // Annexe des étudiants par promotion
  45. $pdf->liste_promo(promo_count());
  46. // Annexe des étudiants par nom de famille
  47. $pdf->liste_nom(nom_count());
  48. // Ajouter la dernière page
  49. $pdf->DernierePage();
  50. }
  51. // Sortie (Affichage du PDF)
  52. $pdf->Output();
  53. }
  54. else
  55. {
  56. echo "Erreur d'identification";
  57. }
  58. /* Renvoie un tableau avec 1 entrée par nom. ex: $return[0] = "Guillaume Florimond"*/
  59. function nom_count()
  60. {
  61. // Récupérer tous les noms et prénoms, les classer par ordre alphabétique
  62. $sql = "SELECT nom,prenom FROM utilisateur ORDER BY nom ASC;";
  63. $req = mysql_query($sql);
  64. // Combien de noms ?
  65. $count = mysql_num_rows($req);
  66. // Rentrer chaque nom dans une case du tableau
  67. $i = 0;
  68. while($data = mysql_fetch_assoc($req))
  69. {
  70. $nom = trim(formater_nom($data["nom"]));
  71. $prenom = trim(formater_nom($data["prenom"]));
  72. // $nom{0} est le premier caractère de la chaîne $nom
  73. $tab[$nom{0}][$i] = "$nom $prenom";
  74. $i++;
  75. }
  76. // Retour
  77. return $tab;
  78. }
  79. /* Renvoie un tableau bidimentionnel. ex: $return[2006][1] = "Guillaume Florimond" */
  80. function promo_count()
  81. {
  82. // Récupérer toutes les valeurs DISTINCTES dans la colonne "promotion"
  83. $sql = "SELECT DISTINCT promotion FROM utilisateur ORDER BY promotion ASC;";
  84. $req = mysql_query($sql) or die ("Erreur: version de MySQL trop ancienne.");
  85. // Combien de promos différentes ?
  86. $count = mysql_num_rows($req);
  87. // Rentrer chaque promo différente dans une case du tableau
  88. $i = 0;
  89. while($data = mysql_fetch_assoc($req))
  90. {
  91. $promos[$i] = $data["promotion"];
  92. $i++;
  93. }
  94. // Pour chaque promo différente, récupérer tous les noms+prénoms
  95. for($i = 0; $i < $count ; $i++)
  96. {
  97. $p = $promos[$i];
  98. $sqlx = "SELECT nom,prenom FROM utilisateur WHERE promotion=$p;";
  99. $reqx = mysql_query($sqlx) or die ("Erreur");
  100. $j = 0;
  101. while($datax = mysql_fetch_assoc($reqx))
  102. {
  103. $tab[$p][$j] = formater_nom($datax["prenom"])." ".formater_nom($datax["nom"]);
  104. $j++;
  105. }
  106. }
  107. return $tab;
  108. // Tab doit se lire ainsi: $tab[année de la promotion][1...n] = "Guillaume Florimond"
  109. }
  110. /*Génère la requête SQL et la renvoie.
  111. Trois types de requêtes:
  112. - Résultat de recherche => ...pdfexport.php?pdf=recherche
  113. - Exporter tout => ...pdfexport.php?pdf=tout
  114. - Exporter la fiche courante => ...pdfexport.php?pdf=fiche&id=X
  115. */
  116. function generer_requete()
  117. {
  118. // Sécurité
  119. if(!checkauth()) return;
  120. global $_config;
  121. // 1 - S'il y a une requête en mémoire correspondant à un résultat de recherche...
  122. if( isset($_SESSION["exportation_permission"])
  123. and $_SESSION["exportation_permission"] == true
  124. and $_GET['pdf'] == "recherche")
  125. {
  126. // Premier cas: l'exportation de tout le contenu est permise
  127. if($_config['exporter_tout'] == 1)
  128. {
  129. $sql = $_SESSION["exportation_requete"];
  130. }
  131. // Deuxième cas: l'exportation du tout n'est pas permise
  132. else
  133. {
  134. $sql = $_SESSION["exportation_requete"];
  135. // On récupère la requête et on remplace le "SELECT *" par autre chose
  136. $requete = explode("*", $sql, 2);
  137. $sql = "SELECT nom, prenom, promotion, email ".$requete[1];
  138. }
  139. }
  140. // 2 - Si on demande EXPRESSEMENT de tout exporter ou d'exporter une partie seulement
  141. if($_GET['pdf'] == "tout")
  142. {
  143. // On exporte tout
  144. if($_config['exporter_tout'] == 1)
  145. {
  146. $sql = "SELECT * FROM utilisateur
  147. LEFT JOIN photo ON utilisateur.id = photo.user_id
  148. ORDER BY promotion ASC;";
  149. }
  150. // A défaut, on exporte seulement une partie (=> si $_config['exporter_tout'] != 1)
  151. else
  152. {
  153. $sql = "SELECT nom, prenom, promotion, email FROM utilisateur
  154. LEFT JOIN photo ON utilisateur.id = photo.user_id;";
  155. }
  156. }
  157. // 3 - Si l'on n'exporte qu'une seule fiche
  158. if($_GET['pdf'] == "fiche" and isset($_GET['id']) and is_numeric($_GET['id']))
  159. {
  160. // Security
  161. $id = $_GET['id'];
  162. if(!is_numeric($id))
  163. die("No injection, please :)");
  164. // Query
  165. $sql = "SELECT * FROM utilisateur
  166. LEFT JOIN photo ON utilisateur.id = photo.user_id
  167. WHERE utilisateur.id=$id";
  168. }
  169. return $sql;
  170. }
  171. ?>