referenceurs.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. /**
  13. * Recuperer la liste des moteurs de recherche depuis un fichier txt
  14. * Adaptees du code des "Visiteurs",
  15. * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
  16. *
  17. * http://code.spip.net/@stats_load_engines
  18. *
  19. * @return array
  20. */
  21. function stats_load_engines(){
  22. $arr_engines = Array();
  23. lire_fichier(find_in_path('engines-list.txt'), $moteurs);
  24. foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne){
  25. $ligne = trim($ligne);
  26. if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)){
  27. $moteur = $regs[1];
  28. $query = '';
  29. } else if (preg_match(',=$,', $ligne, $regs))
  30. $query = $ligne;
  31. else
  32. $arr_engines[] = array($moteur, $query, $ligne);
  33. }
  34. return $arr_engines;
  35. }
  36. /**
  37. * Retrouver les mots cles de recherche dans une url de referer
  38. *
  39. * Adaptees du code des "Visiteurs",
  40. * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
  41. *
  42. * http://code.spip.net/@stats_show_keywords
  43. *
  44. * @param string $kw_referer
  45. * @return array
  46. */
  47. function stats_show_keywords($kw_referer){
  48. static $arr_engines = '';
  49. static $url_site;
  50. if (!is_array($arr_engines)){
  51. // Charger les moteurs de recherche
  52. $arr_engines = stats_load_engines();
  53. // initialiser la recherche interne
  54. $url_site = $GLOBALS['meta']['adresse_site'];
  55. $url_site = preg_replace(",^((https?|ftp):?/?/?)?(www\.)?,", "", strtolower($url_site));
  56. }
  57. if ($url = @parse_url($kw_referer)){
  58. $query = isset($url['query']) ? $url['query'] : "";
  59. $host = strtolower($url['host']);
  60. $path = $url['path'];
  61. $scheme = $url['scheme'];
  62. }
  63. else
  64. $scheme = $query = $host = $path = '';
  65. // construire un array des variables directement depuis la query-string
  66. parse_str($query, $Tquery);
  67. $keywords = '';
  68. $found = false;
  69. if (!empty($url_site)){
  70. if (strpos('-'.$kw_referer, $url_site)!==false){
  71. if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs))
  72. $keywords = urldecode($regs[2]);
  73. else
  74. return array('host' => '');
  75. }
  76. else {
  77. for ($cnt = 0; $cnt<sizeof($arr_engines) && !$found; $cnt++)
  78. {
  79. if ($found = preg_match(','.$arr_engines[$cnt][2].',', $host)
  80. OR $found = preg_match(','.$arr_engines[$cnt][2].',', $path)){
  81. $kw_referer_host = $arr_engines[$cnt][0];
  82. if (strpos($arr_engines[$cnt][1], '=')!==false){
  83. // Fonctionnement simple: la variable existe dans l'array
  84. $v = str_replace('=', '', $arr_engines[$cnt][1]);
  85. $keywords = isset($Tquery[$v]) ? $Tquery[$v]: "";
  86. // Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable
  87. if (!strlen($keywords)>0){
  88. if (preg_match(",".$arr_engines[$cnt][1]."([^\&]*),", $query, $vals)){
  89. $keywords = urldecode($vals[2]);
  90. }
  91. }
  92. } else {
  93. $keywords = "";
  94. }
  95. if (($kw_referer_host=="Google")
  96. || ($kw_referer_host=="AOL" && strpos($query, 'enc=iso')===false)
  97. || ($kw_referer_host=="MSN")
  98. ){
  99. include_spip('inc/charsets');
  100. if (!isset($ie) OR !$cset = $ie) $cset = 'utf-8';
  101. $keywords = importer_charset($keywords, $cset);
  102. }
  103. $buffer["hostname"] = $kw_referer_host;
  104. }
  105. }
  106. }
  107. }
  108. $buffer["host"] = $host;
  109. $buffer["scheme"] = $scheme;
  110. if (!isset($buffer["hostname"]) OR !$buffer["hostname"])
  111. $buffer["hostname"] = $host;
  112. $buffer["path"] = substr($path, 1, strlen($path));
  113. $buffer["query"] = $query;
  114. if ($keywords!=''){
  115. if (strlen($keywords)>150){
  116. $keywords = spip_substr($keywords, 0, 148);
  117. // supprimer l'eventuelle entite finale mal coupee
  118. $keywords = preg_replace('/&#?[a-z0-9]*$/', '', $keywords);
  119. }
  120. $buffer["keywords"] = trim(entites_html(urldecode(stripslashes($keywords))));
  121. }
  122. return $buffer;
  123. }
  124. /**
  125. * Recherche des articles pointes par le referer
  126. * http://code.spip.net/@referes
  127. *
  128. * @param $referermd5
  129. * @param string $serveur
  130. * @return string
  131. */
  132. function referes($referermd5, $serveur = ''){
  133. $retarts = sql_allfetsel('J2.id_article, J2.titre', 'spip_referers_articles AS J1 LEFT JOIN spip_articles AS J2 ON J1.id_article = J2.id_article', "(referer_md5='$referermd5' AND J1.maj>=DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).", INTERVAL 2 DAY))", '', "titre", '', '', $serveur);
  134. foreach ($retarts as $k => $rowart){
  135. $titre = typo($rowart['titre']);
  136. $url = generer_url_entite($rowart['id_article'], 'article', '', '', TRUE);
  137. $retarts[$k] = "<a href='$url'><i>$titre</i></a>";
  138. }
  139. if (count($retarts)>1)
  140. return '&rarr; '.join(',<br />&rarr; ', $retarts);
  141. if (count($retarts)==1)
  142. return '&rarr; '.array_shift($retarts);
  143. return '';
  144. }
  145. ?>