Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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')." &laquo; $titre &raquo;";
	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();	
}