/_plugins_/forms/1_9_1/forms_fonctions.php

https://bitbucket.org/pombredanne/spip-zone-treemap · PHP · 129 lines · 79 code · 20 blank · 30 comment · 13 complexity · 78b5db119273c928514c293548fdeb7a MD5 · raw file

  1. <?php
  2. /*
  3. * forms
  4. * version plug-in de spip_form
  5. *
  6. * Auteur :
  7. * Antoine Pitrou
  8. * adaptation en 182e puis plugin par cedric.morin@yterium.com
  9. * © 2005,2006 - Distribue sous licence GNU/GPL
  10. *
  11. */
  12. include_spip('base/forms_temporaire');
  13. //
  14. // Afficher le diagramme de resultats d'un sondage
  15. //
  16. function Forms_afficher_reponses_sondage($id_form) {
  17. $r = '';
  18. $id_form = intval($id_form);
  19. $query = "SELECT * FROM spip_forms WHERE id_form=$id_form";
  20. $result = spip_query($query);
  21. if (!$row = spip_fetch_array($result)) return '';
  22. $sondage = $row['sondage'];
  23. $structure = unserialize($row['structure']);
  24. $champs = array();
  25. foreach ($structure as $index => $t) {
  26. if ($t['type'] != 'select' && $t['type'] != 'multiple' && $t['type'] != 'mot')
  27. continue;
  28. $champs[] = $t;
  29. }
  30. $r .= "<div class='spip_sondage'>\n";
  31. // Compter les reponses pour chaque champ de type choix (unique / multiple / mot-cle)
  32. foreach ($champs as $t) {
  33. // On recompte le nombre total de reponses reelles
  34. // car les champs ne sont pas forcement obligatoires
  35. $query = "SELECT COUNT(DISTINCT c.id_reponse) AS num ".
  36. "FROM spip_reponses AS r LEFT JOIN spip_reponses_champs AS c USING (id_reponse) ".
  37. "WHERE r.id_form=$id_form AND r.statut='valide' AND c.champ='".addslashes($t['code'])."'";
  38. $result = spip_query($query);
  39. list ($total_reponses) = spip_fetch_array($result,SPIP_NUM);
  40. if (!$total_reponses) continue;
  41. // Construire la liste des valeurs autorisees pour le champ
  42. if ($t['type'] != 'mot')
  43. $liste = $t['type_ext'];
  44. else {
  45. $id_groupe = intval($t['type_ext']['id_groupe']);
  46. $query = "SELECT id_mot, titre FROM spip_mots WHERE id_groupe=$id_groupe ORDER BY titre";
  47. $result = spip_query($query);
  48. $liste = array();
  49. while ($row = spip_fetch_array($result)) {
  50. $id_mot = $row['id_mot'];
  51. $titre = $row['titre'];
  52. $liste[$id_mot] = $titre;
  53. }
  54. }
  55. // Nombre de reponses pour chaque valeur autorisee
  56. $query = "SELECT c.valeur, COUNT(*) AS num ".
  57. "FROM spip_reponses AS r LEFT JOIN spip_reponses_champs AS c USING (id_reponse) ".
  58. "WHERE r.id_form=$id_form AND r.statut='valide' ".
  59. "AND c.champ='".addslashes($t['code'])."' GROUP BY c.valeur";
  60. $result = spip_query($query);
  61. $chiffres = array();
  62. // Stocker pour regurgiter dans l'ordre
  63. while ($row = spip_fetch_array($result)) {
  64. $chiffres[$row['valeur']] = $row['num'];
  65. }
  66. // Afficher les resultats
  67. $r .= "<strong>".propre($t['nom'])." :</strong><br />\n";
  68. $r .= "<div class='sondage_table'>";
  69. foreach ($liste as $valeur => $nom) {
  70. $r .= "<div class='sondage_ligne'>";
  71. $n = $chiffres[$valeur];
  72. $taux = floor($n * 100.0 / $total_reponses);
  73. $r .= "<div class='ligne_nom'>".typo($nom)." </div>";
  74. $r .= "<div style='width: 60%;'><div class='ligne_barre' style='width: $taux%;'></div></div>";
  75. $r .= "<div class='ligne_chiffres'>$n ($taux&nbsp;%)</div>";
  76. $r .= "</div>\n";
  77. }
  78. $r .= "</div>\n";
  79. $r .= "<br />\n";
  80. }
  81. $query = "SELECT COUNT(*) AS num FROM spip_reponses ".
  82. "WHERE id_form=$id_form AND statut='valide'";
  83. $result = spip_query($query);
  84. list($num) = spip_fetch_array($result,SPIP_NUM);
  85. $r .= "<strong>"._T("forms:total_votes")." : $num</strong>";
  86. $r .= "</div>\n";
  87. return $r;
  88. }
  89. function balise_RESULTATS_SONDAGE($p) {
  90. $_id_form = champ_sql('id_form', $p);
  91. $p->code = "Forms_afficher_reponses_sondage(" . $_id_form . ")";
  92. $p->statut = 'html';
  93. return $p;
  94. }
  95. /*function boucle_FORMS_dist($id_boucle, &$boucles) {
  96. $boucle = &$boucles[$id_boucle];
  97. $id_table = $boucle->id_table;
  98. $boucle->from[$id_table] = "spip_forms";
  99. $boucle->hash = '
  100. // CREER les table temporaire forms_champs et forms_champs_choix
  101. forms_creer_tables_temporaires_boucles();
  102. ';
  103. return calculer_boucle($id_boucle, $boucles);
  104. }*/
  105. function forms_valeur($tableserialisee,$cle,$defaut=''){
  106. $t = unserialize($tableserialisee);
  107. return isset($t[$cle])?$t[$cle]:$defaut;
  108. }
  109. ?>