PageRenderTime 37ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/exec/statistiques_visites.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 188 lines | 129 code | 34 blank | 25 comment | 31 complexity | a0093610572cc2e9e07ccb7129bba744 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. include_spip('inc/presentation');
  13. include_spip('inc/statistiques');
  14. // http://doc.spip.org/@exec_statistiques_visites_dist
  15. function exec_statistiques_visites_dist()
  16. {
  17. $id_article = intval(_request('id_article'));
  18. $type = _request('type');
  19. if (!preg_match('/^\w+$/', $type)) $type = 'day';
  20. $duree = intval(_request('duree'));
  21. if (!$duree) $duree = 105;
  22. $interval = intval(_request('interval'));
  23. if (!$interval) {
  24. if ($type == 'day')
  25. $interval = 3600*24;
  26. else $interval = 3600;
  27. }
  28. // nombre de referers a afficher
  29. $limit = intval(_request('limit'));
  30. if ($limit == 0) $limit = 100;
  31. if (!autoriser('voirstats', $id_article ? 'article':'', $id_article)) {
  32. include_spip('inc/minipres');
  33. echo minipres();
  34. } else exec_statistiques_visites_args($id_article, $duree, $interval, $type, $limit);
  35. }
  36. // http://doc.spip.org/@exec_statistiques_visites_args
  37. function exec_statistiques_visites_args($id_article, $duree, $interval, $type, $limit,$serveur='')
  38. {
  39. $titre = $pourarticle = "";
  40. if ($id_article){
  41. $row = sql_fetsel("titre, visites, popularite", "spip_articles", "statut='publie' AND id_article=$id_article",'','','','',$serveur);
  42. if ($row) {
  43. $titre = typo($row['titre']);
  44. $total_absolu = $row['visites'];
  45. $val_popularite = round($row['popularite']);
  46. }
  47. } else {
  48. $row = sql_fetsel("SUM(visites) AS total_absolu", "spip_visites",'','','','','',$serveur);
  49. $total_absolu = $row ? $row['total_absolu'] : 0;
  50. $val_popularite = 0;
  51. }
  52. if ($titre) $pourarticle = " "._T('info_pour')." &laquo; $titre &raquo;";
  53. if ($serveur) {
  54. if ($row = sql_fetsel('valeur','spip_meta',"nom='nom_site'",'','','','',$serveur)){
  55. $titre = $row['valeur'].($titre?" / $titre":"");
  56. }
  57. }
  58. $commencer_page = charger_fonction('commencer_page', 'inc');
  59. echo $commencer_page(_T('titre_page_statistiques_visites').$pourarticle, "statistiques_visites", "statistiques");
  60. echo gros_titre(_T('titre_evolution_visite')."<html>".aide("confstat")."</html>",'', false);
  61. // barre_onglets("statistiques", "evolution");
  62. if ($titre) echo gros_titre($titre,'', false);
  63. echo debut_gauche('', true);
  64. echo "<div class='cadre cadre-e' style='padding: 5px;'>";
  65. echo "<div class='cadre_padding verdana1 spip_x-small'>";
  66. echo typo(_T('info_afficher_visites'));
  67. echo "<ul>";
  68. if ($id_article>0) {
  69. echo "<li><b><a href='" . generer_url_ecrire("statistiques_visites","") . "'>"._T('info_tout_site')."</a></b></li>";
  70. } else {
  71. echo "<li><b>"._T('titre_page_articles_tous')."</b></li>";
  72. }
  73. echo "</ul>";
  74. echo "</div>";
  75. echo "</div>";
  76. $classement = array();
  77. $liste = 0;
  78. echo aff_statistique_visites_popularite($serveur, $id_article, $classement, $liste);
  79. // Par visites depuis le debut
  80. $result = aff_statistique_visites_par_visites($serveur, $id_article, $classement);
  81. if ($result OR $id_article)
  82. echo creer_colonne_droite('', true);
  83. if ($id_article) {
  84. echo bloc_des_raccourcis(icone_horizontale(_T('icone_retour_article'), generer_url_ecrire("articles","id_article=$id_article"), "article-24.gif","rien.gif", false));
  85. }
  86. echo $result;
  87. echo debut_droite('', true);
  88. if ($id_article) {
  89. $table = "spip_visites_articles";
  90. $table_ref = "spip_referers_articles";
  91. $where = "id_article=$id_article";
  92. } else {
  93. $table = "spip_visites";
  94. $table_ref = "spip_referers";
  95. $where = "";
  96. }
  97. $order = "date";
  98. $where2 = $duree ? "$order > DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).",INTERVAL $duree $type)": '';
  99. if ($where) $where2 = $where2 ? "$where2 AND $where" : $where;
  100. // sur certains SQL, la division produit un entier tronque a la valeur inferieure
  101. // on ne peut donc faire un CEIL, il faut faire un FLOOR
  102. $log = statistiques_collecte_date('visites', "(FLOOR((UNIX_TIMESTAMP($order)+$interval-1) / $interval) * $interval)", $table, $where2, $serveur);
  103. if ($log)
  104. $res = statistiques_tous($log, $id_article, $table, $where, $order, $serveur, $duree, $interval, $total_absolu, $val_popularite, $classement, $liste);
  105. $mois = statistiques_collecte_date("SUM(visites)",
  106. "DATE_FORMAT($order,'%Y%m')",
  107. $table,
  108. "$order > DATE_SUB(NOW(),INTERVAL 2700 DAY)"
  109. . ($where ? " AND $where" : ''),
  110. $serveur);
  111. if (count($mois)>1) {
  112. $res[] = "<br /><span class='verdana1 spip_small'><b>"
  113. . _T('info_visites_par_mois')
  114. . "</b></span>"
  115. . statistiques_par_mois($mois, '');
  116. }
  117. echo cadre_stat($res, $table, $id_article);
  118. if ($id_article) {
  119. $signatures = charger_fonction('signatures', 'statistiques');
  120. echo $signatures($duree, $interval, $type, $id_article, $serveur);
  121. /*
  122. Il faudra optimiser les requetes de ces stats c'est vraiment trop horrible :
  123. plusieurs secondes d'attente sur un site comme contrib.
  124. par ailleurs, l'affichage presente des defauts :
  125. cf http://trac.rezo.net/trac/spip/ticket/1598
  126. $forums = charger_fonction('forums', 'statistiques');
  127. echo $forums($duree, $interval, $type, $id_article, $serveur);
  128. */
  129. }
  130. $referenceurs = charger_fonction('referenceurs', 'inc');
  131. $res = $referenceurs($id_article, "visites", $table_ref, $where, '', $limit);
  132. if ($res) {
  133. // Le lien pour en afficher "plus"
  134. $args = ($id_article?"id_article=$id_article&" : '') . "limit=" . strval($limit+200);
  135. $n = count($res);
  136. $plus = generer_url_ecrire('statistiques_visites', $args);
  137. if ($plus) {
  138. $plus = "<div style='text-align:right;'><b><a href='$plus'>+++</a></b></div>";
  139. }
  140. $titre = _T("onglet_origine_visites")
  141. . " ($n "
  142. . ($n == 1 ? _T('info_site') : _T('info_sites'))
  143. . ")";
  144. echo '<br />', gros_titre($titre,'', false);
  145. echo "<div style='overflow:hidden;' class='verdana1 spip_small'><br />";
  146. echo "<ul class='referers'><li>";
  147. echo join("</li><li>\n",$res);
  148. echo "</li></ul>";
  149. echo $plus;
  150. echo "<br /></div>";
  151. }
  152. echo fin_gauche(), fin_page();
  153. }
  154. ?>