[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> statistiques.php (source)

   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 = " &laquo;&nbsp;".$buff["keywords"]."&nbsp;&raquo;";
 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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics