function statistiques_forums_dist($duree, $interval, $type, $id_article, $serveur) { $where = "id_article=$id_article AND statut='publie'"; $total = sql_countsel("spip_forum", $where); if (!$total) return ''; $order = 'date_heure'; $interval = 24 * 3600; $oldscore = 420; $oldlog = array(); while ($interval >= 1) { $log = statistiques_collecte_date('COUNT(*)', "(FLOOR(UNIX_TIMESTAMP($order) / $interval) * $interval)", 'spip_forum', $where, $serveur); if (count($log) > 3) break; $oldlog = $log; $oldinterval = $interval; $interval /= ($interval>3600) ? 24 : 60; } if (count($log) > 20) { $interval = $oldinterval; $log = $oldlog; } $script = generer_url_ecrire('articles_forum', "id_article=$id_article"); $date = sql_getfetsel('UNIX_TIMESTAMP(date)', 'spip_articles', $where); $back = 10*ceil((time()-$date) / 3600); $jour = statistiques_tous($log, $id_article, "spip_forum", $where, "date_heure", $serveur, $back, $interval, $total, 0, '', array(), $script); return "<br />" . gros_titre(_T('titre_page_statistiques_messages_forum'),'', false) . cadre_stat($jour, 'spip_forum', $id_article); }
function exec_statistiques_visites_args($id_article, $duree, $interval, $type, $limit,$serveur='') { $titre = $pourarticle = ""; if ($id_article){ $row = sql_fetsel("titre, visites, popularite", "spip_articles", "statut='publie' AND id_article=$id_article",'','','','',$serveur); if ($row) { $titre = typo($row['titre']); $total_absolu = $row['visites']; $val_popularite = round($row['popularite']); } } else { $row = sql_fetsel("SUM(visites) AS total_absolu", "spip_visites",'','','','','',$serveur); $total_absolu = $row ? $row['total_absolu'] : 0; $val_popularite = 0; } if ($titre) $pourarticle = " "._T('info_pour')." « $titre »"; if ($serveur) { if ($row = sql_fetsel('valeur','spip_meta',"nom='nom_site'",'','','','',$serveur)){ $titre = $row['valeur'].($titre?" / $titre":""); } } $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('titre_page_statistiques_visites').$pourarticle, "statistiques_visites", "statistiques"); echo gros_titre(_T('titre_evolution_visite')."<html>".aide("confstat")."</html>",'', false); // barre_onglets("statistiques", "evolution"); if ($titre) echo gros_titre($titre,'', false); echo debut_gauche('', true); echo "<div class='cadre cadre-e' style='padding: 5px;'>"; echo "<div class='cadre_padding verdana1 spip_x-small'>"; echo typo(_T('info_afficher_visites')); echo "<ul>"; if ($id_article>0) { echo "<li><b><a href='" . generer_url_ecrire("statistiques_visites","") . "'>"._T('info_tout_site')."</a></b></li>"; } else { echo "<li><b>"._T('titre_page_articles_tous')."</b></li>"; } echo "</ul>"; echo "</div>"; echo "</div>"; $classement = array(); $liste = 0; echo aff_statistique_visites_popularite($serveur, $id_article, $classement, $liste); // Par visites depuis le debut $result = aff_statistique_visites_par_visites($serveur, $id_article, $classement); if ($result OR $id_article) echo creer_colonne_droite('', true); if ($id_article) { echo bloc_des_raccourcis(icone_horizontale(_T('icone_retour_article'), generer_url_ecrire("articles","id_article=$id_article"), "article-24.gif","rien.gif", false)); } echo $result; echo debut_droite('', true); if ($id_article) { $table = "spip_visites_articles"; $table_ref = "spip_referers_articles"; $where = "id_article=$id_article"; } else { $table = "spip_visites"; $table_ref = "spip_referers"; $where = ""; } $order = "date"; $where2 = $duree ? "$order > DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).",INTERVAL $duree $type)": ''; if ($where) $where2 = $where2 ? "$where2 AND $where" : $where; // sur certains SQL, la division produit un entier tronque a la valeur inferieure // on ne peut donc faire un CEIL, il faut faire un FLOOR $log = statistiques_collecte_date('visites', "(FLOOR((UNIX_TIMESTAMP($order)+$interval-1) / $interval) * $interval)", $table, $where2, $serveur); if ($log) $res = statistiques_tous($log, $id_article, $table, $where, $order, $serveur, $duree, $interval, $total_absolu, $val_popularite, $classement, $liste); $mois = statistiques_collecte_date("SUM(visites)", "DATE_FORMAT($order,'%Y%m')", $table, "$order > DATE_SUB(NOW(),INTERVAL 2700 DAY)" . ($where ? " AND $where" : ''), $serveur); if (count($mois)>1) { $res[] = "<br /><span class='verdana1 spip_small'><b>" . _T('info_visites_par_mois') . "</b></span>" . statistiques_par_mois($mois, ''); } echo cadre_stat($res, $table, $id_article); if ($id_article) { $signatures = charger_fonction('signatures', 'statistiques'); echo $signatures($duree, $interval, $type, $id_article, $serveur); /* Il faudra optimiser les requetes de ces stats c'est vraiment trop horrible : plusieurs secondes d'attente sur un site comme contrib. par ailleurs, l'affichage presente des defauts : cf http://trac.rezo.net/trac/spip/ticket/1598 $forums = charger_fonction('forums', 'statistiques'); echo $forums($duree, $interval, $type, $id_article, $serveur); */ } $referenceurs = charger_fonction('referenceurs', 'inc'); $res = $referenceurs($id_article, "visites", $table_ref, $where, '', $limit); if ($res) { // Le lien pour en afficher "plus" $args = ($id_article?"id_article=$id_article&" : '') . "limit=" . strval($limit+200); $n = count($res); $plus = generer_url_ecrire('statistiques_visites', $args); if ($plus) { $plus = "<div style='text-align:right;'><b><a href='$plus'>+++</a></b></div>"; } $titre = _T("onglet_origine_visites") . " ($n " . ($n == 1 ? _T('info_site') : _T('info_sites')) . ")"; echo '<br />', gros_titre($titre,'', false); echo "<div style='overflow:hidden;' class='verdana1 spip_small'><br />"; echo "<ul class='referers'><li>"; echo join("</li><li>\n",$res); echo "</li></ul>"; echo $plus; echo "<br /></div>"; } echo fin_gauche(), fin_page(); }