[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 14 if (!defined("_ECRIRE_INC_VERSION")) return; 15 16 // Les deux fonctions suivantes sont adaptees du code des "Visiteurs", 17 // par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/) 18 19 // http://doc.spip.org/@stats_load_engines 20 function stats_load_engines() { 21 // le moteur de recherche interne 22 $arr_engines = Array(); 23 24 $file_name = 'engines-list.txt'; 25 if ($fp = @fopen($file_name, 'r')) 26 { 27 while ($data = fgets($fp, 256)) 28 { 29 $data = trim(chop($data)); 30 31 if (!ereg('^#', $data) && $data != '') 32 { 33 if (ereg('^\[(.*)\]$', $data, $engines)) 34 { 35 // engine 36 $engine = $engines[1]; 37 38 // query | dir 39 if (!feof($fp)) 40 { 41 $data = fgets($fp, 256); 42 $query_or_dir = trim(chop($data)); 43 } 44 } 45 else 46 { 47 $host = $data; 48 $arr_engines[] = Array($engine, $query_or_dir, $host); 49 } 50 } 51 } 52 fclose($fp); 53 } 54 return $arr_engines; 55 } 56 57 // http://doc.spip.org/@stats_show_keywords 58 function stats_show_keywords($kw_referer, $kw_referer_host) { 59 static $arr_engines; 60 static $url_site; 61 62 if (!$arr_engines) { 63 // Charger les moteurs de recherche 64 $arr_engines = stats_load_engines(); 65 66 // initialiser la recherche interne 67 $url_site = $GLOBALS['meta']['adresse_site']; 68 $url_site = strtolower(eregi_replace("^((https?|ftp)://)?(www\.)?", "", $url_site)); 69 } 70 71 $url = @parse_url( $kw_referer ); 72 $query = $url['query']; 73 $host = strtolower($url['host']); 74 $path = $url['path']; 75 76 // Cette fonction affecte directement les variables selon la query-string ! 77 parse_str($query); 78 79 $keywords = ''; 80 $found = false; 81 82 83 if (strpos('-'.$kw_referer, eregi_replace("^(https?:?/?/?)?(www\.)?", "",$url_site))) { 84 if (eregi("(s|search|r|recherche)=([^&]+)", $kw_referer, $regs)) 85 $keywords = urldecode($regs[2]); 86 87 88 else 89 return ''; 90 } else 91 for ($cnt = 0; $cnt < sizeof($arr_engines) && !$found; $cnt++) 92 { 93 if ($found = (ereg($arr_engines[$cnt][2], $host)) OR $found = (ereg($arr_engines[$cnt][2], $path))) 94 { 95 $kw_referer_host = $arr_engines[$cnt][0]; 96 97 if (ereg('=', $arr_engines[$cnt][1])) { 98 99 // Fonctionnement simple: la variable existe 100 $keywords = $str_replace('=', '', $arr_engines[$cnt][1])}; 101 102 // Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable 103 if (! strlen($keywords) > 0) { 104 if (ereg($arr_engines[$cnt][1]."([^\&]*)", $query, $vals)) { 105 $keywords = urldecode($vals[2]); 106 } 107 } 108 } else { 109 $keywords = ""; 110 } 111 112 if (( ($kw_referer_host == "Google") 113 || ($kw_referer_host == "AOL" && !ereg('enc=iso', $query)) 114 || ($kw_referer_host == "MSN") 115 )) { 116 include_spip('inc/charsets'); 117 if (!$cset = $ie) $cset = 'utf-8'; 118 $keywords = importer_charset($keywords,$cset); 119 } 120 $buffer["hostname"] = $kw_referer_host; 121 } 122 } 123 124 $buffer["host"] = $host; 125 if (!$buffer["hostname"]) 126 $buffer["hostname"] = $host; 127 128 $buffer["path"] = substr($path, 1, strlen($path)); 129 $buffer["query"] = $query; 130 131 if ($keywords != '') 132 { 133 if (strlen($keywords) > 150) { 134 $keywords = spip_substr($keywords, 0, 148); 135 // supprimer l'eventuelle entite finale mal coupee 136 $keywords = preg_replace('/&#?[a-z0-9]*$/', '', $keywords); 137 } 138 $buffer["keywords"] = trim(entites_html(urldecode(stripslashes($keywords)))); 139 } 140 141 return $buffer; 142 143 } 144 145 // 146 // Afficher les referers d'un article (ou du site) 147 // 148 // http://doc.spip.org/@aff_referers 149 function aff_referers ($result, $limit, $plus) { 150 global $spip_lang_right, $source_vignettes; 151 // Charger les moteurs de recherche 152 $arr_engines = stats_load_engines(); 153 $nbvisites = array(); 154 $aff = ''; 155 while ($row = spip_fetch_array($result)) { 156 $referer = interdire_scripts($row['referer']); 157 $visites = $row['vis']; 158 $tmp = ""; 159 160 $buff = stats_show_keywords($referer, $referer); 161 162 if ($buff["host"]) { 163 $numero = substr(md5($buff["hostname"]),0,8); 164 165 $nbvisites[$numero] = $nbvisites[$numero] + $visites; 166 167 if (strlen($buff["keywords"]) > 0) { 168 $criteres = substr(md5($buff["keywords"]),0,8); 169 if (!$lescriteres[$numero][$criteres]) 170 $tmp = " « ".$buff["keywords"]." »"; 171 $lescriteres[$numero][$criteres] = true; 172 } else { 173 $tmp = $buff["path"]; 174 if (strlen($buff["query"]) > 0) $tmp .= "?".$buff['query']; 175 176 if (strlen($tmp) > 30) 177 $tmp = "/".substr($tmp, 0, 27)."..."; 178 else if (strlen($tmp) > 0) 179 $tmp = "/$tmp"; 180 } 181 182 if ($tmp) 183 $lesreferers[$numero][] = "<a href='".quote_amp($referer)."'>".quote_amp(urldecode($tmp))."</a>" . (($visites > 1)?" ($visites)":""); 184 else 185 $lesliensracine[$numero] += $visites; 186 $lesdomaines[$numero] = $buff["hostname"]; 187 $lesurls[$numero] = $buff["host"]; 188 $lesliens[$numero] = $referer; 189 } 190 } 191 192 if (count($nbvisites) > 0) { 193 arsort($nbvisites); 194 195 $aff = ''; 196 for (reset($nbvisites); $numero = key($nbvisites); next($nbvisites)) { 197 if ($lesdomaines[$numero] == '') next; 198 199 $visites = pos($nbvisites); 200 $ret = "\n<li>"; 201 202 if (strlen($source_vignettes) > 0) $ret .= "\n<span style='clear: $spip_lang_right;'></span>\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>"; 203 204 if ($visites > 5) $ret .= "<span style='color: red'>$visites "._T('info_visites')."</span> "; 205 else if ($visites > 1) $ret .= "$visites "._T('info_visites')." "; 206 else $ret .= "<span style='color: #999999'>$visites "._T('info_visite')."</span> "; 207 208 if ($lesdomaines[$numero] == "(email)") { 209 $aff .= $ret; 210 $aff .= "<b>".$lesdomaines[$numero]."</b>"; 211 } 212 else if ((count($lesreferers[$numero]) > 1) || ((substr(supprimer_tags($lesreferers[$numero][0]),0,1) != '/') && (count($lesreferers[$numero]) > 0))) { 213 global $couleur_foncee; 214 $referers = join ("</li><li>",$lesreferers[$numero]); 215 $aff .= $ret; 216 $aff .= "<a href='http://".quote_amp($lesurls[$numero])."'><span style='color: $couleur_foncee; font-weight: bold;'>".$lesdomaines[$numero]."</span></a>"; 217 if ($rac = $lesliensracine[$numero]) $aff .= " <span class='spip_x-small'>($rac)</span>"; 218 $aff .= "\n<ul style='font-size:x-small;'><li>$referers</li></ul>\n"; 219 $aff .= "</li></ul>\n<ul style='font-size:small;'>\n"; 220 } else { 221 $aff .= $ret; 222 $lien = $lesreferers[$numero][0]; 223 if (eregi("^(<a [^>]+>)([^ ]*)( \([0-9]+\))?", $lien, $regs)) { 224 $lien = quote_amp($regs[1]).$lesdomaines[$numero].$regs[2]; 225 if (!strpos($lien, '</a>')) $lien .= '</a>'; 226 } else 227 $lien = "<a href='http://".$lesdomaines[$numero]."'>".$lesdomaines[$numero]."</a>"; 228 $aff .= "<b>".quote_amp($lien)."</b>"; 229 $aff .= "</li>\n"; 230 } 231 } 232 233 if (preg_match(",</ul>\s*<ul style='font-size:small;'>\s*$,",$aff,$r)) 234 $aff = substr($aff,0,(0-strlen($r[0]))); 235 if ($aff) $aff = "<ul>$aff</ul>"; 236 237 // Le lien pour en afficher "plus" 238 if ($plus AND (spip_num_rows($result) == $limit)) { 239 $aff .= "<div style='text-align:right;'><b><a href='$plus'>+++</a></b></div>"; 240 } 241 } 242 243 return $aff; 244 } 245 246 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |