[ Index ] |
|
Code source de SPIP Agora 1.4 |
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 = " « ".$buff["keywords"]." »"; 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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |