/_plugins_/langue_preferee/balise/langue_preferee_secteur_redirection.php

https://bitbucket.org/pombredanne/spip-zone-treemap · PHP · 119 lines · 86 code · 7 blank · 26 comment · 22 complexity · 60bff21e6c39b1a67fe64b52186aab97 MD5 · raw file

  1. <?php
  2. /*
  3. * langue_preferee
  4. * Langue preferee par l'internaute
  5. *
  6. * Auteur :
  7. * Nicolas Hoizey
  8. * modification : chryjs - exclusion de rubriques
  9. * modification : BobCaTT (www.menfin.net) suport spip 2.0
  10. * © 2007 - Distribue sous licence GNU/GPL
  11. */
  12. if (!defined("_ECRIRE_INC_VERSION")) return;
  13. // compatibilite spip 1.9.2
  14. if ($GLOBALS['spip_version_code']<1.93)
  15. {
  16. if (!function_exists('sql_fetch')) { function sql_fetch($req) {
  17. return spip_fetch_array($req) ;
  18. } }
  19. if (!function_exists('sql_query')) { function sql_query($query) {
  20. return spip_query($query) ;
  21. } }
  22. } // fin compat
  23. function balise_LANGUE_PREFEREE_SECTEUR_REDIRECTION($p)
  24. {
  25. return calculer_balise_dynamique($p, 'LANGUE_PREFEREE_SECTEUR_REDIRECTION', array());
  26. }
  27. function balise_LANGUE_PREFEREE_SECTEUR_REDIRECTION_stat($args, $filtres)
  28. {
  29. return $args;
  30. }
  31. function balise_LANGUE_PREFEREE_SECTEUR_REDIRECTION_dyn($liste_rub_exclues="")
  32. {
  33. include_spip('inc/meta');
  34. // Recuperation des langues des secteurs
  35. $langues_secteurs = array();
  36. include_spip('base/abstract_sql');
  37. $query = 'SELECT DISTINCT(lang) FROM spip_rubriques WHERE id_parent=0 AND statut="publie" GROUP BY lang';
  38. if ($res = sql_query($query)) { // was spip_query($query)) {
  39. while($row = sql_fetch($res)) { // was spip_fetch_array
  40. $langues_secteurs[] = $row['lang'];
  41. }
  42. }
  43. // Détection de la langue preferee
  44. if (isset($_GET['lang']) && in_array($_GET['lang'], $langues_secteurs)) {
  45. // Soit passee dans l'url, auquel cas c'est un choix qu'on conserve pour la suite
  46. $langue_preferee = $_GET['lang'];
  47. include_spip('inc/cookie');
  48. // On pose un cookie d'un an de duree de vie
  49. spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie());
  50. } elseif(isset($_COOKIE['spip_lang']) && in_array($_COOKIE['spip_lang'], $langues_secteurs)){
  51. //Soit un cookie lang est présent
  52. $langue_preferee = $_COOKIE['spip_lang'];
  53. include_spip('inc/cookie');
  54. // On pose un cookie d'un an de duree de vie
  55. spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie());
  56. }elseif (isset($_COOKIE['spip_langue_preferee']) && in_array($_COOKIE['spip_langue_preferee'], $langues_secteurs)) {
  57. // Soit deja enregistree dans un cookie
  58. $langue_preferee = $_COOKIE['spip_langue_preferee'];
  59. } else {
  60. // Soit indeterminee
  61. $langues_navigateur = getenv('HTTP_ACCEPT_LANGUAGE');
  62. // On supprime les taux de pertinence des langues acceptees
  63. $langues_navigateur = preg_replace("/;q=[.0-9]+(,)?/", "$1", $langues_navigateur);
  64. $langues_navigateur = explode(',', $langues_navigateur);
  65. // Quelles sont les langues acceptees disponibles dans les secteurs
  66. $langues_possibles = array_intersect($langues_navigateur, $langues_secteurs);
  67. if (count($langues_possibles)) {
  68. list(, $langue_preferee) = each($langues_possibles);
  69. } else {
  70. // fr-ca -> fr
  71. $langues_navigateur_reduites = array();
  72. foreach($langues_navigateur as $langue) {
  73. $langue_reduite = substr($langue, 0, 2);
  74. if (!in_array($langue_reduite, $langues_navigateur_reduites)) {
  75. $langues_navigateur_reduites[] = $langue_reduite;
  76. }
  77. }
  78. // Quelles sont les langues acceptees reduites disponibles dans les secteurs
  79. $langues_reduites_possibles = array_intersect($langues_navigateur_reduites, $langues_secteurs);
  80. if (count($langues_reduites_possibles)) {
  81. list(, $langue_preferee) = each($langues_reduites_possibles);
  82. } elseif (in_array(lire_meta('langue_site'), $langues_secteurs)) {
  83. // Quelle est alors la langue par defaut du site
  84. $langue_preferee = lire_meta('langue_site');
  85. } else {
  86. // Tant pis, on prend le premier secteur qui vient...
  87. list(, $langue_preferee) = each($langues_secteurs);
  88. }
  89. }
  90. }
  91. // On recupere l'id du premier secteur trouve correspondant a la langue preferee (tant pis s'il y en a plusieurs)
  92. if (!empty($liste_rub_exclues)) {
  93. $query='SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' AND id_rubrique NOT IN ('.$liste_rub_exclues.') LIMIT 0,1';
  94. } else {
  95. $query = 'SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' LIMIT 0,1';
  96. }
  97. $res = sql_query($query) ; // was spip_query($query);
  98. if ($row = sql_fetch($res)) { // was spip_fetch_array
  99. $id_rubrique = $row['id_rubrique'];
  100. if ( $GLOBALS['spip_version_code']<1.93) { // spip 1.9.x
  101. if (!function_exists('generer_url_rubrique')) { include_spip('urls/'.$GLOBALS['type_urls']); }
  102. $url_rubrique = generer_url_rubrique($id_rubrique);
  103. } else { // spip 2.x
  104. if (!function_exists('generer_url_entite')) { include_spip('inc/utils'); }
  105. $url_rubrique = generer_url_entite($id_rubrique,'rubrique');
  106. }
  107. spip_log('Redirection vers '.$url_rubrique);
  108. header('Location: '.$url_rubrique);
  109. exit;
  110. }
  111. }
  112. ?>