[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Agora1-4/ecrire/ -> inc_statistiques.php (source)

   1  <?php
   2  /*****************************************************
   3  * This file is part of Agora, web based content management system.
   4  *
   5  * Agora is free software; you can redistribute it and/or modify
   6  * it under the terms of the GNU General Public License as published by
   7  * the Free Software Foundation; version 2 of the License.
   8  *
   9  * Agora is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details (file "COPYING").
  13  *
  14  * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière.
  15  * List of authors detailed in "copyright_fr.html" file.
  16  * E-mail : agora@sig.premier-ministre.gouv.fr
  17  * Web site : http://www.agora.gouv.fr
  18  *****************************************************/
  19  // Ce fichier ne sera execute qu'une fois
  20  if (defined("_ECRIRE_INC_STATISTIQUES"))
  21      return;
  22  
  23  define("_ECRIRE_INC_STATISTIQUES", "1");
  24  
  25  /* Ajout Clever Age / Antoine Ang�nieux / Couche m�tier */
  26  require_once("PEAR.php");
  27  require_once(dirname(__FILE__). "/include/bd/inc_article_factory.php");
  28  require_once(dirname(__FILE__). "/include/bd/inc_metier_factory.php");
  29  require_once(dirname(__FILE__). "/include/bd/inc_visite_factory.php");
  30  require_once(dirname(__FILE__). "/include/bd/inc_referer_factory.php");
  31  /* fin zone de modification Clever Age */
  32  
  33  // Les deux fonctions suivantes sont adaptees du code des "Visiteurs",
  34  // par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/)
  35  
  36  function stats_load_engines () {
  37      // le moteur de recherche interne
  38      $arr_engines = array();
  39  
  40      $file_name = 'engines-list.txt';
  41  
  42      if ($fp = @fopen($file_name, 'r')) {
  43          while ($data = fgets($fp, 256)) {
  44              $data = trim(chop($data));
  45              if (!ereg('^#', $data) && $data != '') {
  46                  if (ereg('^\[(.*)\]$', $data, $engines)) {
  47                      // engine
  48                      $engine = $engines[1];
  49  
  50                      // query | dir
  51                      if (!feof($fp)) {
  52                          $data = fgets($fp, 256);
  53                          $query_or_dir = trim(chop($data));
  54                      }
  55                  }
  56                  else {
  57                      $host = $data;
  58                      $arr_engines[] = array($engine, $query_or_dir, $host);
  59                  }
  60              }
  61          }
  62          fclose($fp);
  63      }
  64  
  65      return $arr_engines;
  66  }
  67  
  68  function stats_show_keywords ($kw_referer, $kw_referer_host) {
  69      static $arr_engines;
  70      static $url_site;
  71      include_ecrire ("inc_filtres.php");
  72  
  73      if (!$arr_engines) {
  74          // Charger les moteurs de recherche
  75          $arr_engines = stats_load_engines();
  76  
  77          // initialiser la recherche interne
  78          $url_site = lire_meta('adresse_site');
  79          $url_site = strtolower(eregi_replace("^((https?|ftp)://)?(www\.)?", "", $url_site));
  80      }
  81  
  82      $url = parse_url($kw_referer);
  83      $query = $url['query'];
  84      $host = strtolower($url['host']);
  85      $path = $url['path'];
  86  
  87      parse_str($query);
  88  
  89      $keywords = '';
  90      $found = false;
  91  
  92      if (strpos('-' . $kw_referer, eregi_replace("^(https?:?/?/?)?(www\.)?", "", $url_site))) {
  93          if (eregi("(s|search|r|recherche)=([^&]+)", $kw_referer, $regs))
  94              $keywords = urldecode($regs[2]);
  95          else
  96              return '';
  97      }
  98      else
  99          for ($cnt = 0; $cnt < sizeof($arr_engines) && !$found; $cnt++) {
 100              if ($found = (ereg($arr_engines[$cnt][2], $host))) {
 101                  $kw_referer_host = $arr_engines[$cnt][0];
 102                  $keywords = ereg('=', $arr_engines[$cnt][1]) ? $str_replace('=', '', $arr_engines[$cnt][1])}: '';
 103  
 104                  if ((($kw_referer_host == "Google" && ereg('[io]e=UTF-8',
 105                                                             $query))
 106                          || ($kw_referer_host == "AOL" && !ereg('enc=iso', $query)) || ($kw_referer_host == "MSN"))) {
 107                      include_ecrire ('inc_charsets.php');
 108                      $keywords = unicode2charset(charset2unicode($keywords, 'utf-8'));
 109                  }
 110                  $buffer["hostname"] = $kw_referer_host;
 111              }
 112          }
 113  
 114      $buffer["host"] = $host;
 115  
 116      if (!$buffer["hostname"])
 117          $buffer["hostname"] = $host;
 118  
 119      $buffer["path"] = substr($path, 1, strlen($path));
 120      $buffer["query"] = $query;
 121  
 122      if ($keywords != '') {
 123          if (strlen($keywords) > 50)
 124              $keywords = substr($keywords, 0, 48);
 125          $buffer["keywords"] = trim(htmlspecialchars(stripslashes($keywords)));
 126      }
 127  
 128      return $buffer;
 129  }
 130  
 131  //
 132  // Optimiser les informations liees aux referers
 133  //
 134  
 135  function supprimer_referers ($type = "") {
 136      $table = $GLOBALS['table_prefix']. '_referers';
 137  
 138      //----------Modification Clever Age elebescond----------
 139      if ($type == "article") {
 140          $refererMetier = &recuperer_instance_referer();
 141          $count = $refererMetier->howManyArticleId();
 142  
 143          if (PEAR::isError($count)) {
 144              die($count->getMessage());
 145          }
 146  
 147          if (!$count)
 148              $count = 1;
 149  
 150          $visites_min = $refererMetier->getAllArticleVisites($count);
 151  
 152          if (PEAR::isError($visites_min)) {
 153              die($visites_min->getMessage());
 154          }
 155  
 156          $deleteArticleRefererForOptimizeOK = $refererMetier->deleteArticleRefererForOptimize($visites_min);
 157          if (PEAR::isError($deleteArticleRefererForOptimizeOK)) {
 158              die($deleteArticleRefererForOptimizeOK->getMessage());
 159          }
 160      }
 161      else {
 162          $count = 1;
 163          $refererMetier = &recuperer_instance_referer();
 164          $visites_min = $refererMetier->getAllVisites($count);
 165  
 166          if (PEAR::isError($visites_min)) {
 167              die($visites_min->getMessage());
 168          }
 169  
 170          $deleteForOptimizeOK = $refererMetier->deleteForOptimize($visites_min);
 171          if (PEAR::isError($deleteForOptimizeOK)) {
 172              die($deleteForOptimizeOK->getMessage());
 173          }
 174      }
 175  }
 176  
 177  //
 178  // Compiler les statistiques temporaires : referers (si active)
 179  //
 180  
 181  function calculer_n_referers ($nb_referers) {
 182      $date = date("Y-m-d");
 183  
 184      // Selectionner 100 referers sur tout le site
 185      //----------Modification Clever Age elebescond----------
 186      $refererMetier = &recuperer_instance_referer();
 187      $allReferers = $refererMetier->getAllTempReferer($nb_referers);
 188  
 189      if (PEAR::isError($allReferers)) {
 190          die($allReferers->getMessage());
 191      }
 192  
 193      $encore = (sizeOf($allReferers) == $nb_referers);
 194  
 195      $referer_insert = "";
 196      $referer_update = "";
 197  
 198      //var_dump($allReferers);
 199  
 200      while (list(, $monReferer) = each($allReferers)) {
 201          $visites = $monReferer['visites'];
 202          $referer = $monReferer['referer'];
 203          $referer_md5 = $monReferer['md5'];
 204  
 205          $referer_update[$visites][] = "'$referer_md5'";
 206          //$referer_insert[] = "('$date', '$referer', '$referer_md5', $visites, $visites)";
 207  
 208          $referer_insert[] = array('date_heure' => "'" . $date . "'", 'referer' => "'" . $referer . "'",
 209                              'referer_md5' => "'" . $referer_md5 . "'", 'visites1' => $visites,
 210                              'visites2' => $visites);
 211  
 212          $referer_vus[] = "'" . $referer_md5 . "'";
 213      }
 214  
 215      // Mise a jour de la base
 216      if (is_array($referer_update)) {
 217          while (list($visites, $referers) = each($referer_update)) {
 218              //----------Modification Clever Age elebescond----------
 219              $refererMetier = &recuperer_instance_referer();
 220              $updateVisiteForReferersMd5OK = $refererMetier->updateVisiteForReferersMd5($visites, $referers);
 221              if (PEAR::isError($updateVisiteForReferersMd5OK)) {
 222                  die($updateVisiteForReferersMd5OK->getMessage());
 223              }
 224          }
 225      }
 226  
 227      if (is_array($referer_insert)) {
 228          //----------Modification Clever Age elebescond----------
 229          $refererMetier = &recuperer_instance_referer();
 230          $addReferer = $refererMetier->addReferer($referer_insert);
 231          if (PEAR::isError($addReferer)) {
 232              die($addReferer->getMessage());
 233          }
 234      }
 235  
 236      // Ventiler ces referers article par article
 237      $refererMetier = &recuperer_instance_referer();
 238      $allReferers = $refererMetier->getAllTempReferersForTypeAndReferer('article', $referer_vus);
 239  
 240      if (PEAR::isError($allReferers)) {
 241          die($allReferers->getMessage());
 242      }
 243  
 244      $referer_insert = "";
 245      $referer_update = "";
 246  
 247      while (list(, $monReferer) = each($allReferers)) {
 248          $id_article = $monReferer['id_objet'];
 249          $visites = $monReferer['visites'];
 250          $referer = $monReferer['referer'];
 251          $referer_md5 = $monReferer['md5'];
 252  
 253          $referer_update[$visites][] = "(id_article=$id_article AND referer_md5='$referer_md5')";
 254          //$referer_insert[] = "('$date', '$referer', $referer_md5, $id_article, $visites)";
 255          $referer_insert[] = array('date_heure' => "'$date'", 'referer' => "'$referer'",
 256                              'referer_md5' => "'$referer_md5'", 'id_article' => $id_article,
 257                              'visites' => $visites);
 258          $referer_vus[] = "'" . $referer_md5 . "'";
 259      }
 260  
 261      // Mise a jour de la base
 262      if (is_array($referer_update)) {
 263          while (list($visites, $where) = each($referer_update)) {
 264              $updateVisiteArticleForReferersMd5OK = $refererMetier->updateVisiteArticleForReferersMd5($visites, $where);
 265              if (PEAR::isError($updateVisiteArticleForReferersMd5OK)) {
 266                  die($updateVisiteArticleForReferersMd5OK->getMessage());
 267              }
 268          }
 269      }
 270  
 271      if (is_array($referer_insert)) {
 272          //----------Modification Clever Age elebescond----------
 273          $refererMetier = &recuperer_instance_referer();
 274          $addArticleRefererOK = $refererMetier->addArticleReferer($referer_insert);
 275          if (PEAR::isError($addArticleRefererOK)) {
 276              die($addArticleRefererOK->getMessage());
 277          }
 278      }
 279  
 280      // Effacer les referers traites
 281      if (is_array($referer_vus)) {
 282          $refererMetier = &recuperer_instance_referer();
 283          $deleteTempReferersForReferersMd5OK = $refererMetier->deleteTempReferersForReferersMd5($referer_vus);
 284          if (PEAR::isError($deleteTempReferersForReferersMd5OK)) {
 285              die($deleteTempReferersForReferersMd5OK->getMessage());
 286          }
 287      }
 288  
 289      // A-t-on atteint le dernier referer ?
 290      return $encore;
 291  }
 292  
 293  function calculer_referers () {
 294      spip_log("analyse referers");
 295      $encore = calculer_n_referers(100);
 296  
 297      if ($encore) {
 298          include_ecrire ("inc_meta.php");
 299          ecrire_meta("calculer_referers_now", "oui");
 300          ecrire_metas();
 301      }
 302      else {
 303          // Supprimer les referers trop vieux
 304          spip_debug("supprimer referers site");
 305          supprimer_referers();
 306          spip_debug("supprimer referers articles");
 307          supprimer_referers("article");
 308      }
 309  }
 310  
 311  //
 312  // Compiler les statistiques temporaires : visites
 313  //
 314  
 315  function calculer_visites ($date = "") {
 316      spip_log("analyse visites $date");
 317  
 318      // calculer les popularites avant d'effacer les donnees
 319      calculer_popularites();
 320  
 321      // Date par defaut = hier
 322      if (!$date)
 323          $date = date("Y-m-d", time() - 24 * 3600);
 324  
 325      // Sur tout le site, nombre de visiteurs uniques pendant la journee
 326      //----------Modification Clever Age elebescond----------
 327      $visiteMetier = &recuperer_instance_visite();
 328      $total_visites = $visiteMetier->howManyDistinctVisite();
 329  
 330      if (PEAR::isError($total_visites)) {
 331          die($total_visites->getMessage());
 332      }
 333      else {
 334          $visiteMetier->setDate($date);
 335          $visiteMetier->setVisites($total_visites);
 336          $createOK = $visiteMetier->create();
 337          if (PEAR::isError($createOK)) {
 338              die($createOK->getMessage());
 339          }
 340      }
 341  
 342      // Nombre de visiteurs uniques par article
 343      $total_visites = $visiteMetier->getAllUniqueVisiteForArticleId();
 344  
 345      if (PEAR::isError($total_visites)) {
 346          die($total_visites->getMessage());
 347      }
 348  
 349      $visites_insert = "";
 350      $visites_update = "";
 351  
 352      while (list(, $maVisite) = each($total_visites)) {
 353          $id_article = $maVisite['id_objet'];
 354          $visites = $maVisite['visites'];
 355  
 356          $visites_update[$visites][] = $id_article;
 357          $visites_insert[] = array("date" => "'$date'", "id_article" => $id_article, "visites" => $visites);
 358      }
 359  
 360      $deleteAllVisiteTempOK = $visiteMetier->deleteAllVisiteTemp();
 361  
 362      if (PEAR::isError($deleteAllVisiteTempOK)) {
 363          die($deleteAllVisiteTempOK->getMessage());
 364      }
 365  
 366      // Mise a jour de la base
 367      if (is_array($visites_update)) {
 368          while (list($visites, $articles) = each($visites_update)) {
 369              //---------Zone de mofication Clever Age---------------
 370              $articleMetier = &recuperer_instance_article();
 371              $updateVisitesOK = $articleMetier->updateVisites($articles, $visites);
 372              if (PEAR::isError($updateVisitesOK)) {
 373                  die($updateVisitesOK->getMessage());
 374              }
 375          }
 376      }
 377  
 378      if (is_array($visites_insert)) {
 379          $visiteMetier = &recuperer_instance_visite();
 380          $addArticleVisiteOK = $visiteMetier->addArticleVisite($visites_insert);
 381          if (PEAR::isError($addArticleVisiteOK)) {
 382              die($addArticleVisiteOK->getMessage());
 383          }
 384      }
 385  }
 386  
 387  //
 388  // Popularite, modele logarithmique
 389  //
 390  
 391  function calculer_popularites () {
 392      spip_log("analyse popularites");
 393      //---------Zone de modification Clever Age-----------
 394      $articleMetier = recuperer_instance_article();
 395      $result = $articleMetier->computePopularity();
 396  }
 397  
 398  //
 399  // Afficher les referers d'un article (ou du site)
 400  //
 401  function aff_referers ($query, $limit=10, $plus = true) {
 402      // Charger les moteurs de recherche
 403      //die($query);
 404      $arr_engines = stats_load_engines();
 405  
 406      /******** Pas le courage de faire du propre sorry elebescond@clever-age.com ******************/
 407      $dbMetier = &recuperer_instance_metier();
 408      $db = &$dbMetier->_getDB();
 409      $result = $db->limitQuery($query, 0 , $limit);
 410  
 411      while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
 412          $referer = interdire_scripts($row['referer']);
 413          $visites = $row['vis'];
 414          $tmp = "";
 415          $aff = "";
 416  
 417          $buff = stats_show_keywords($referer, $referer);
 418  
 419          if ($buff["host"]) {
 420              $numero = substr(md5($buff["hostname"]),0,8);
 421  
 422              $nbvisites[$numero] = $nbvisites[$numero] + $visites;
 423  
 424              if (strlen($buff["keywords"]) > 0) {
 425                  $criteres = substr(md5($buff["keywords"]),0,8);
 426                  if (!$lescriteres[$numero][$criteres])
 427                      $tmp = " &laquo;&nbsp;".$buff["keywords"]."&nbsp;&raquo;";
 428                      $lescriteres[$numero][$criteres] = true;
 429                                  } else {
 430                                      $tmp = $buff["path"];
 431                                      if (strlen($buff["query"]) > 0) $tmp .= "?".$buff['query'];
 432  
 433                                      if (strlen($tmp) > 30)
 434                                          $tmp = "/".substr($tmp, 0, 27)."...";
 435                                      else if (strlen($tmp) > 0)
 436                                          $tmp = "/$tmp";
 437                                  }
 438  
 439                                  if ($tmp)
 440                                      $lesreferers[$numero][] = "<a href='$referer'>$tmp</a>" . (($visites > 1)?" ($visites)":"");
 441                                  else
 442                                      $lesliensracine[$numero] += $visites;
 443                                  $lesdomaines[$numero] = $buff["hostname"];
 444                                  $lesurls[$numero] = $buff["host"];
 445                                  $lesliens[$numero] = $referer;
 446                              }
 447                          }
 448  
 449                          if (count($nbvisites) > 0) {
 450                              arsort($nbvisites);
 451  
 452                              $aff .= "<ul>";
 453                              for (reset($nbvisites); $numero = key($nbvisites); next($nbvisites)) {
 454                                  if ($lesdomaines[$numero] == '') next;
 455  
 456                                  $visites = pos($nbvisites);
 457                                  $ret = "\n<li>";
 458  
 459                                  if ($visites > 5) $ret .= "<font color='red'>$visites "._T('info_visites')."</font> ";
 460                                  else if ($visites > 1) $ret .= "$visites "._T('info_visites')." ";
 461                                  else $ret .= "<font color='#999999'>$visites "._T('info_visite')."</font> ";
 462  
 463                                  if (count($lesreferers[$numero]) > 1) {
 464                                      $referers = join ($lesreferers[$numero],"</li><li>");
 465                                      $aff .= "<p />";
 466                                      $aff .= $ret;
 467                                      $aff .= "<a href='http://".$lesurls[$numero]."'><b><font color='$couleur_foncee'>".$lesdomaines[$numero]."</font></b></a>";
 468                                      if ($rac = $lesliensracine[$numero]) $aff .= " <font size='1'>($rac)</font>";
 469                                      $aff .= "<ul><font size='1'><li>$referers</li></font></ul>";
 470                                      $aff .= "</li><p />\n";
 471                                  } else {
 472                                      $aff .= $ret;
 473                                      $lien = $lesdomaines[$numero].ereg_replace(" \([0-9]+\)$", "",$lesreferers[$numero][0]);
 474                                      $aff .= "<a href='".$lesliens[$numero]."'><b>$lien</b></a>";
 475                                      $aff .= "</li>";
 476                                  }
 477                              }
 478                              $aff .= "</ul>";
 479  
 480                              // Le lien pour en afficher "plus"
 481                              /********** Modification elebescond@clever-age.com ************/
 482                              if ($plus AND ($result->numRows() == $limit)) {
 483                                  /*
 484                                  if ($plus AND (spip_num_rows($result) == $limit)) {
 485                                  */
 486                                  /********** Fin modification elebescond@clever-age.com ************/
 487                                  $lien = $GLOBALS['clean_link'];
 488                                  $lien->addVar('limit',$limit+200);
 489                                  $aff .= "<div style='text-align:right;'><b><a href='".$lien->getUrl()."'>+++</a></b></div>";
 490                              }
 491                          }
 492  
 493  
 494                          return $aff;
 495                      }
 496  ?>


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7