<?php
/***************************************************************************
- * Copyright (C) 2003-2006 Polytechnique.org *
+ * Copyright (C) 2003-2008 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
function serv_to_str($params) {
$flags = explode(',',$params);
$trad = Array('web' => 'site web', 'mail'=> 'redirection mail',
- 'smtp' => 'serveur sécurisé d\'envoi de mails',
+ 'smtp' => 'serveur sécurisé d\'envoi de mails',
'nntp' => 'serveur des forums de discussion');
$ret = Array();
foreach ($flags as $flag) {
'stats/graph/evolution'
=> $this->make_hook('graph_evo', AUTH_COOKIE),
'stats/promos' => $this->make_hook('promos', AUTH_COOKIE),
+ 'stats/profile' => $this->make_hook('profile', AUTH_COOKIE),
'stats/coupures' => $this->make_hook('coupures', AUTH_PUBLIC),
);
{
define('DUREEJOUR',24*3600);
- //recupere le nombre d'inscriptions par jour sur la plage concernée
+ //recupere le nombre d'inscriptions par jour sur la plage concernée
$res = XDB::iterRow(
"SELECT IF( date_ins>DATE_SUB(NOW(),INTERVAL $jours DAY),
TO_DAYS(date_ins)-TO_DAYS(NOW()),
".(-($jours+1)).") AS jour,
COUNT(user_id) AS nb
- FROM auth_user_md5
- WHERE perms IN ('admin','user')
+ FROM auth_user_md5
+ WHERE perms IN ('admin','user') AND deces = 0
GROUP BY jour");
//genere des donnees compatibles avec GNUPLOT
$inscrits='';
- // la première ligne contient le total des inscrits avant la date de départ (J - $jours)
+ // la première ligne contient le total des inscrits avant la date de départ (J - $jours)
list(,$init_nb) = $res->next();
- $total = $init_nb;
-
- list($numjour, $nb) = $res->next();
+ $total = $init_nb;
+ $numjour = - $jours - 1;
for ($i = -$jours; $i<=0; $i++) {
if ($numjour<$i) {
$inscrits .= date('d/m/y',$i*DUREEJOUR+time())." ".$total."\n";
}
- //Genere le graphique à la volée avec GNUPLOT
+ //Genere le graphique à la volée avec GNUPLOT
header( "Content-type: image/png");
$delt = ($total - $init_nb)/10;
+ $delt = $delt ? $delt : 5;
$ymin = round($init_nb - $delt,0);
$ymax = round($total + $delt,0);
function handler_graph(&$page, $promo = null)
{
if ($promo == 'all') {
- // date de départ
- $depart = 1920;
+ // date de départ
+ $depart = 1930;
- //recupere le nombre d'inscriptions par jour sur la plage concernée
+ //recupere le nombre d'inscriptions par jour sur la plage concernée
$res = XDB::iterRow(
"SELECT promo, SUM(perms IN ('admin', 'user')) / COUNT(*) * 100
FROM auth_user_md5
//genere des donnees compatibles avec GNUPLOT
$inscrits='';
- // la première ligne contient le total des inscrits avant la date de départ
+ // la première ligne contient le total des inscrits avant la date de départ
list($annee, $nb) = $res->next();
for ($i = $depart; $i <= date("Y"); $i++) {
$inscrits .= $i.' '.$nb."\n";
}
- //Genere le graphique à la volée avec GNUPLOT
+ //Genere le graphique à la volée avec GNUPLOT
$fin = $i+2;
$gnuplot = <<<EOF2
set xr [$depart:$fin]
set yr [0:100]
-set title "Nombre d'inscrits par promotion depuis $depart."
+set title "Proportion d'inscrits par promotion depuis $depart, en %."
plot "-" using 1:2 title 'inscrits' with boxes;
{$inscrits}
//nombre de jours sur le graph
$jours = 365;
define('DUREEJOUR',24*3600);
- $res = XDB::query("SELECT min(TO_DAYS(date_ins)-TO_DAYS(now()))
- FROM auth_user_md5
- WHERE promo = {?}
- AND perms IN ('admin', 'user')",
- $promo);
+ $res = XDB::query(
+ "SELECT min(TO_DAYS(date_ins)-TO_DAYS(now()))
+ FROM auth_user_md5
+ WHERE promo = {?} AND perms IN ('admin', 'user') AND deces = 0",
+ $promo);
$jours = -$res->fetchOneCell();
- //recupere le nombre d'inscriptions par jour sur la plage concernée
+ //recupere le nombre d'inscriptions par jour sur la plage concernée
$res = XDB::iterRow(
"SELECT IF( date_ins>DATE_SUB(NOW(),INTERVAL $jours DAY),
TO_DAYS(date_ins)-TO_DAYS(NOW()),
".(-($jours+1)).") AS jour,
COUNT(user_id) AS nb
- FROM auth_user_md5
- WHERE promo = {?} AND perms IN ('admin','user')
+ FROM auth_user_md5
+ WHERE promo = {?} AND perms IN ('admin','user') AND deces = 0
GROUP BY jour", $promo);
//genere des donnees compatibles avec GNUPLOT
$inscrits='';
- // la première ligne contient le total des inscrits avant la date de départ (J - $jours)
+ // la première ligne contient le total des inscrits avant la date de départ (J - $jours)
list(,$init_nb) = $res->next();
$total = $init_nb;
$inscrits .= date('d/m/y',$i*DUREEJOUR+time())." ".$total."\n";
}
- //Genere le graphique à la volée avec GNUPLOT
+ //Genere le graphique à la volée avec GNUPLOT
$delt = ($total - $init_nb) / 10;
$delt += ($delt < 1);
$ymin = round($init_nb - $delt,0);
$res = XDB::iterRow(
"SELECT promo,COUNT(*)
FROM auth_user_md5
- WHERE promo > 1900 AND perms IN ('admin','user')
+ WHERE promo > 1900 AND perms IN ('admin','user') AND deces = 0
GROUP BY promo
ORDER BY promo");
$max=0; $min=3000;
$cp = $res->fetchOneAssoc();
}
- if($cp) {
+ if(@$cp) {
$cp['lg_services'] = serv_to_str($cp['services']);
$page->assign_by_ref('cp',$cp);
} else {
$sql = "SELECT id, debut, resume, services
FROM coupures where debut > '$beginning_date' order by debut desc";
$page->assign('coupures', XDB::iterator($sql));
+ $res = XDB::iterator("SELECT host, text
+ FROM mx_watch
+ WHERE state != 'ok'");
+ $page->assign('mxs', $res);
+ }
+ }
+
+ function handler_profile(&$page, $period = 'overall')
+ {
+ $page->changeTpl('stats/profile.tpl');
+
+ $time = '';
+ switch ($period) {
+ case 'week': case 'month': case 'year':
+ $time = ' AND e.stamp > DATE_SUB(CURDATE(), INTERVAL 1 ' . strtoupper($period) . ')';
+ break;
}
+ $rows = XDB::iterator("SELECT IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom,
+ u.prenom, u.promo, e.data AS forlife, COUNT(*) AS count
+ FROM logger.events AS e
+ INNER JOIN logger.actions AS act ON (e.action = act.id)
+ INNER JOIN aliases AS a ON (a.alias = e.data)
+ INNER JOIN auth_user_md5 AS u ON (u.user_id = a.id)
+ WHERE act.text = 'view_profile' $time
+ GROUP BY e.data
+ ORDER BY count DESC
+ LIMIT 10");
+ $page->assign('profiles', $rows);
+ $page->assign('period', $period);
}
}
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
?>