PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/inc/referenceurs.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 244 lines | 188 code | 38 blank | 18 comment | 65 complexity | a9292604d7745ac1d04a79a176b0395b MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. if (!defined('_ECRIRE_INC_VERSION')) return;
  3. //
  4. // Afficher les referers d'un article (ou du site)
  5. //
  6. // http://doc.spip.org/@inc_referenceurs_dist
  7. function inc_referenceurs_dist ($id_article, $select, $table, $where, $groupby, $limit, $serveur='') {
  8. $nbvisites = $lescriteres = array();
  9. $result = sql_select("maj, referer_md5, referer, $select AS vis", $table, $where, $groupby, "maj DESC", $limit,'',$serveur);
  10. while ($row = sql_fetch($result,$serveur)) {
  11. $referer = interdire_scripts($row['referer']);
  12. $buff = stats_show_keywords($referer, $referer);
  13. if ($buff["host"]) {
  14. $numero = $buff["hostname"];
  15. $visites = $row['vis'];
  16. $referermd5 = $row['referer_md5'];
  17. $lesreferermd5[$numero] = $referermd5;
  18. $lesliens[$numero] = $referer;
  19. $lesurls[$numero] = $buff["host"];
  20. if (!isset($nbvisites[$numero]))
  21. $nbvisites[$numero] = $visites;
  22. else
  23. $nbvisites[$numero] += $visites;
  24. if (!isset($lesreferers[$numero]))
  25. $lesreferers[$numero] = array();
  26. if (!isset($lesliensracine[$numero]))
  27. $lesliensracine[$numero]=0;
  28. if (isset($buff["keywords"])
  29. AND $c = $buff["keywords"]) {
  30. if (!isset($lescriteres[$numero][$c])) {
  31. $lescriteres[$numero][$c] = true;
  32. $tmp= " &laquo;&nbsp;$c&nbsp;&raquo;";
  33. } else $tmp = "";
  34. } else {
  35. $tmp = $buff["path"];
  36. if ($buff["query"])
  37. $tmp .= "?".$buff['query'];
  38. if (strlen($tmp) > 18)
  39. $tmp = "/".substr($tmp, 0, 15)."...";
  40. else if (strlen($tmp) > 0)
  41. $tmp = "/$tmp";
  42. }
  43. if ($tmp) {
  44. $lesreferers[$numero][] = "<a href=\"".attribut_html($referer)."\">".quote_amp(urldecode($tmp))."</a>" . (($visites > 1)?" ($visites)":""). ($id_article ? '' : referes($referermd5));
  45. } else $lesliensracine[$numero] += $visites;
  46. }
  47. }
  48. if (!count($nbvisites)) return array();
  49. arsort($nbvisites);
  50. return referers_group($nbvisites, $id_article, $lesliensracine, $lesreferermd5, $lesreferers, $lesurls);
  51. }
  52. function referers_group($nbvisites, $id_article, $lesliensracine, $lesreferermd5, $lesreferers, $lesurls)
  53. {
  54. global $spip_lang_right, $source_vignettes;
  55. $vign = ((strlen($source_vignettes) > 0) &&
  56. $GLOBALS['meta']["activer_captures_referers"]!='non');
  57. $aff = array();
  58. foreach($nbvisites as $numero => $visites) {
  59. if (!$numero) next;
  60. $referermd5 = $lesreferermd5[$numero];
  61. $bouton = $ret = "";
  62. if ($vign)
  63. $ret = "\n<a href=\"http://".$lesurls[$numero]."\"><img src=\"$source_vignettes".rawurlencode($lesurls[$numero])."\"\nstyle=\"float: $spip_lang_right; margin-bottom: 3px; margin-left: 3px;\" alt='' /></a>";
  64. if ($visites > 5) $bouton .= "<span class='visites visites3'>$visites "._T('info_visites')."</span> ";
  65. else if ($visites > 1) $bouton .= "<span class='visites visites2'>$visites "._T('info_visites')."</span> ";
  66. else $bouton .= "<span class='visites visites1'>$visites "._T('info_visite')."</span> ";
  67. if ($numero == "(email)") {
  68. $ret .= $bouton . "<b>".$numero."</b>";
  69. } else {
  70. $n = count($lesreferers[$numero]);
  71. if (($n > 1) || ($n > 0 && substr(supprimer_tags($lesreferers[$numero][0]),0,1) != '/')) {
  72. $rac = $lesliensracine[$numero];
  73. $bouton .= "<a href=\"http://".attribut_html($lesurls[$numero])."\" style='font-weight: bold;'>".$numero."</a>"
  74. . (!$rac ? '': (" <span class='spip_x-small'>(" . $rac .")</span>"));
  75. $ret .= bouton_block_depliable($bouton,false)
  76. . debut_block_depliable(false)
  77. . "\n<ul><li>"
  78. . join ("</li><li>",$lesreferers[$numero])
  79. . "</li></ul>"
  80. . fin_block();
  81. } else {
  82. $ret .= $bouton;
  83. $lien = $n ? $lesreferers[$numero][0] : '';
  84. if (preg_match(",^(<a [^>]+>)([^ ]*)( \([0-9]+\))?,i", $lien, $regs)) {
  85. $lien = quote_amp($regs[1]).$numero.$regs[2];
  86. if (!strpos($lien, '</a>')) $lien .= '</a>';
  87. } else
  88. $lien = "<a href=\"http://".attribut_html($numero)."\">".$numero."</a>";
  89. $ret .= "<b>".quote_amp($lien)."</b>"
  90. . ($id_article ? '' : referes($referermd5));
  91. }
  92. }
  93. $aff[]= $ret;
  94. }
  95. return $aff;
  96. }
  97. // Les deux fonctions suivantes sont adaptees du code des "Visiteurs",
  98. // par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
  99. // http://doc.spip.org/@stats_load_engines
  100. function stats_load_engines() {
  101. $arr_engines = Array();
  102. lire_fichier(find_in_path('engines-list.txt'), $moteurs);
  103. foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne) {
  104. $ligne = trim($ligne);
  105. if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)) {
  106. $moteur = $regs[1];
  107. $query = '';
  108. } else if (preg_match(',=$,', $ligne, $regs))
  109. $query = $ligne;
  110. else
  111. $arr_engines[] = array($moteur,$query,$ligne);
  112. }
  113. return $arr_engines;
  114. }
  115. // http://doc.spip.org/@stats_show_keywords
  116. function stats_show_keywords($kw_referer, $kw_referer_host) {
  117. static $arr_engines = '';
  118. static $url_site;
  119. if (!is_array($arr_engines)) {
  120. // Charger les moteurs de recherche
  121. $arr_engines = stats_load_engines();
  122. // initialiser la recherche interne
  123. $url_site = $GLOBALS['meta']['adresse_site'];
  124. $url_site = preg_replace(",^((https?|ftp):?/?/?)?(www\.)?,", "", strtolower($url_site));
  125. }
  126. if ($url = @parse_url( $kw_referer )) {
  127. $query = isset($url['query'])?$url['query']:"";
  128. $host = strtolower($url['host']);
  129. $path = $url['path'];
  130. } else $query = $host = $path ='';
  131. // Cette fonction affecte directement les variables selon la query-string !
  132. parse_str($query);
  133. $keywords = '';
  134. $found = false;
  135. if (!empty($url_site)) {
  136. if (strpos('-'.$kw_referer, $url_site)!==false) {
  137. if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs))
  138. $keywords = urldecode($regs[2]);
  139. else
  140. return array('host' => '');
  141. } else
  142. for ($cnt = 0; $cnt < sizeof($arr_engines) && !$found; $cnt++)
  143. {
  144. if ( $found = preg_match(','.$arr_engines[$cnt][2].',', $host)
  145. OR $found = preg_match(','.$arr_engines[$cnt][2].',', $path))
  146. {
  147. $kw_referer_host = $arr_engines[$cnt][0];
  148. if (strpos($arr_engines[$cnt][1],'=')!==false) {
  149. // Fonctionnement simple: la variable existe
  150. $v = str_replace('=', '', $arr_engines[$cnt][1]);
  151. $keywords = isset($$v)?$$v:"";
  152. // Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable
  153. if (! strlen($keywords) > 0) {
  154. if (preg_match(",".$arr_engines[$cnt][1]."([^\&]*),", $query, $vals)) {
  155. $keywords = urldecode($vals[2]);
  156. }
  157. }
  158. } else {
  159. $keywords = "";
  160. }
  161. if (( ($kw_referer_host == "Google")
  162. || ($kw_referer_host == "AOL" && strpos($query,'enc=iso')===false)
  163. || ($kw_referer_host == "MSN")
  164. )) {
  165. include_spip('inc/charsets');
  166. if (!isset($ie) OR !$cset = $ie) $cset = 'utf-8';
  167. $keywords = importer_charset($keywords,$cset);
  168. }
  169. $buffer["hostname"] = $kw_referer_host;
  170. }
  171. }
  172. }
  173. $buffer["host"] = $host;
  174. if (!isset($buffer["hostname"]) OR !$buffer["hostname"])
  175. $buffer["hostname"] = $host;
  176. $buffer["path"] = substr($path, 1, strlen($path));
  177. $buffer["query"] = $query;
  178. if ($keywords != '')
  179. {
  180. if (strlen($keywords) > 150) {
  181. $keywords = spip_substr($keywords, 0, 148);
  182. // supprimer l'eventuelle entite finale mal coupee
  183. $keywords = preg_replace('/&#?[a-z0-9]*$/', '', $keywords);
  184. }
  185. $buffer["keywords"] = trim(entites_html(urldecode(stripslashes($keywords))));
  186. }
  187. return $buffer;
  188. }
  189. //
  190. // Recherche des articles pointes par le referer
  191. //
  192. // http://doc.spip.org/@referes
  193. function referes($referermd5, $serveur='') {
  194. $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);
  195. foreach ($retarts as $k => $rowart) {
  196. $titre = typo($rowart['titre']);
  197. $url = generer_url_entite($rowart['id_article'], 'article');
  198. $retarts[$k] = "<a href='$url'><i>$titre</i></a>";
  199. }
  200. if (count($retarts) > 1)
  201. return '<br />&rarr; '.join(',<br />&rarr; ',$retarts);
  202. if (count($retarts) == 1)
  203. return '<br />&rarr; '. array_shift($retarts);
  204. return '';
  205. }
  206. ?>