PageRenderTime 35ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/liste_imc/inc/listeimc_functions.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 195 lines | 140 code | 38 blank | 17 comment | 19 complexity | e853971e4690056c03e89fff54a8fa1d MD5 | raw file
  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3. $groupe_imc = array();
  4. $liste_imc = array();
  5. $cities_html="";
  6. $value="";
  7. $current_key="";
  8. $current_cat="";
  9. $dict_i=0;
  10. /*
  11. * récupére et lit le contenu du fichier cities.xml
  12. * Place ces infos dans les tables spip-listeimc-imc et spip-listeimc-groupe
  13. * Mettre en place une gestion des erreurs
  14. */
  15. function generer_cities_html() {
  16. global $groupe_imc, $liste_imc;
  17. include_spip('inc/distant');
  18. if (!$cities_xml = recuperer_page("http://www.indymedia.org/cities.xml"))
  19. {
  20. $erreur = "Impossible de récuperer cities.xml : le fichier n'existe pas";
  21. return;
  22. }
  23. /*if (!$cities_array = spip_xml_parse($cities_xml))
  24. {
  25. $erreur = "Impossible de traiter le contenu de cities.xml.";
  26. return;
  27. }*/
  28. // le parseur de spip ne fonctionne pas correctement
  29. // du coup ecriture d'un parseur perso
  30. //global $cities_html;
  31. $xml_parse = xml_parser_create("UTF-8");
  32. xml_set_element_handler($xml_parse,"cities_debut_element","cities_fin_element");
  33. xml_set_character_data_handler($xml_parse,"cities_element");
  34. if (!xml_parse($xml_parse,$cities_xml,false))
  35. {
  36. die(sprintf("erreur XML : %s à la ligne %d",
  37. xml_error_string(xml_get_error_code($xml_parser)),
  38. xml_get_current_line_number($xml_parser)));
  39. }
  40. xml_parser_free($xml_parse);
  41. // il faut maintenant alimenter les tables avec les infos du fichier
  42. foreach($groupe_imc as $id_groupe => $groupe)
  43. {
  44. sql_insertq(
  45. 'spip_listeimc_groupe',
  46. array(
  47. 'id_groupe' => $id_groupe,
  48. 'libelle' => $groupe
  49. )
  50. );
  51. }
  52. //print_r($liste_imc);
  53. foreach($liste_imc as $id_imc => $imc)
  54. {
  55. sql_insertq(
  56. 'spip_listeimc_imc',
  57. array(
  58. 'id_imc' => $id_imc,
  59. 'id_groupe' => $imc['id_groupe'],
  60. 'libelle' => str_replace('&','&amp;',$imc['libelle']),
  61. 'url' => $imc['url']
  62. )
  63. );
  64. }
  65. return;
  66. }
  67. function cities_debut_element($parser,$name,$attrs)
  68. {
  69. global $groupe_imc, $liste_imc;
  70. global $id_groupe, $id_imc;
  71. global $value;
  72. global $dict_i;
  73. global $current_key, $current_cat;
  74. switch ($name) {
  75. case "PLIST": // debut du document
  76. //." version du fichier : ".$attrs['VERSION']."-->\n";
  77. $id_groupe = 0;
  78. $id_imc = 1;
  79. break;
  80. case "DICT": // ensemble de valeur
  81. $dict_i++;
  82. break;
  83. case "KEY" : // cle de la valeur
  84. $current_key="";
  85. break;
  86. case "STRING" : // url de l'imc
  87. break;
  88. case "ARRAY": // debut de tableau (contenant des ensembles de valeur)
  89. break;
  90. }
  91. }
  92. function cities_fin_element($parser,$name)
  93. {
  94. global $groupe_imc, $liste_imc;
  95. global $id_groupe, $id_imc;
  96. global $dict_i;
  97. global $value;
  98. global $current_key, $current_cat;
  99. switch($name) {
  100. case "PLIST": // fin du document
  101. //$cities_html .= "<!-- FIN CITIES.HTML -->\n";
  102. break;
  103. case "DICT": // fin d'ensemble de valeur
  104. $dict_i--;
  105. break;
  106. case "KEY" : // fin cle de valeur
  107. $value = trim($value);
  108. if ($dict_i == 1) // indique dans quelle catégorie on ce trouve
  109. {
  110. /*
  111. null : la liste des imcs
  112. process : la liste des sites process
  113. projects : la liste des sites projets
  114. regions : la liste des sites regions
  115. topics : la liste des sites topics
  116. */
  117. $current_cat = $value;
  118. if ($current_cat != 'NULL')
  119. {
  120. $groupe_imc[++$id_groupe] = $value;
  121. }
  122. }
  123. else if ($dict_i == 2) // une catégorie, faut alimenter la table groupe
  124. {
  125. if (strcmp("NULL",$value)!=0 && $current_cat == 'NULL')
  126. {
  127. $groupe_imc[++$id_groupe] = $value;
  128. }
  129. }
  130. else if ($dict_i == 3) // un imc
  131. {
  132. $current_key = $value;
  133. }
  134. $value="";
  135. break;
  136. case "STRING" : // fin valeur
  137. $value = trim($value);
  138. if ($current_key != 'www.indymedia.org')
  139. {
  140. $liste_imc[$id_imc++] = array(
  141. 'libelle' => $current_key,
  142. 'url' => $value,
  143. 'id_groupe' => $id_groupe
  144. );
  145. }
  146. $value="";
  147. break;
  148. }
  149. }
  150. function cities_element($parser,$data)
  151. {
  152. global $value;
  153. $value .= $data;
  154. }
  155. ?>