Merge remote branch 'origin/platal-1.0.0'
[platal.git] / modules / stats.php
index 2304aaa..d931031 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2009 Polytechnique.org                              *
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -36,15 +36,13 @@ class StatsModule extends PLModule
     function handlers()
     {
         return array(
-            'stats'           => $this->make_hook('stats',     AUTH_COOKIE),
-            'stats/evolution' => $this->make_hook('evolution', AUTH_COOKIE),
-            'stats/graph'     => $this->make_hook('graph',     AUTH_COOKIE),
-            '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),
+            'stats'                 => $this->make_hook('stats',     AUTH_COOKIE),
+            'stats/evolution'       => $this->make_hook('evolution', AUTH_COOKIE),
+            'stats/graph'           => $this->make_hook('graph',     AUTH_COOKIE),
+            'stats/graph/evolution' => $this->make_hook('graph_evo', AUTH_COOKIE),
+            'stats/promos'          => $this->make_hook('promos',    AUTH_COOKIE),
+
+            'stats/coupures'        => $this->make_hook('coupures',  AUTH_PUBLIC),
         );
     }
 
@@ -67,9 +65,9 @@ class StatsModule extends PLModule
         $res = XDB::iterRow('SELECT  IF(registration_date > DATE_SUB(NOW(), INTERVAL {?} DAY),
                                         TO_DAYS(registration_date) - TO_DAYS(NOW()),
                                         -{?}) AS jour,
-                                     COUNT(uid) AS nb
+                                     COUNT(a.uid) AS nb
                                FROM  accounts AS a
-                          LEFT JOIN  account_profiles AS ap ON(ap.uid = a.uid AND FIND_IN_SET(\'owner\', ap.flags))
+                          LEFT JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET(\'owner\', ap.perms))
                           LEFT JOIN  profiles AS p ON (ap.pid = p.pid)
                               WHERE  state = \'active\' AND p.deathdate IS NULL
                            GROUP BY  jour', (int)$jours, 1 + (int)$jours);
@@ -94,7 +92,7 @@ class StatsModule extends PLModule
         }
 
         //Genere le graphique à la volée avec GNUPLOT
-        header( "Content-type: image/png");
+        pl_cached_dynamic_content_headers("image/png");
 
         $delt = ($total - $init_nb)/10;
         $delt = $delt ? $delt : 5;
@@ -134,7 +132,7 @@ EOF2;
                                    FROM  accounts AS a
                              INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
                              INNER JOIN  profiles AS p ON (p.pid = ap.pid)
-                             INNER JOIN  profile_education AS pe ON (pe.uid = ap.pid AND FIND_IN_SET('primary', pe.flags))
+                             INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET('primary', pe.flags))
                                   WHERE  pe.entry_year >= {?} AND p.deathdate IS NULL
                                GROUP BY  promo", $depart);
 
@@ -183,7 +181,7 @@ EOF2;
             $res = XDB::query("SELECT  MIN(TO_DAYS(a.registration_date) - TO_DAYS(NOW()))
                                  FROM  accounts AS a
                            INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
-                           INNER JOIN  profile_education AS pe ON (pe.uid = ap.pid AND FIND_IN_SET('primary', pe.flags))
+                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET('primary', pe.flags))
                                 WHERE  pe.entry_year = {?} AND a.state = 'active'", (int)$promo);
             $jours = -$res->fetchOneCell();
 
@@ -194,7 +192,7 @@ EOF2;
                                          COUNT(a.uid) AS nb
                                    FROM  accounts AS a
                              INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
-                             INNER JOIN  profile_education AS pe ON (pe.uid = ap.pid AND FIND_IN_SET('primary', pe.flags))
+                             INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET('primary', pe.flags))
                                   WHERE  pe.entry_year = {?} AND a.state = 'active'
                                GROUP BY  jour", (int)$jours, 1 + (int)$jours, (int)$promo);
 
@@ -243,7 +241,7 @@ EOF
 EOF2;
         }
 
-        header('Content-type: image/png');
+        pl_cached_dynamic_content_headers("image/png");
         passthru($gnuplot);
         exit;
     }
@@ -255,7 +253,7 @@ EOF2;
         $res = XDB::iterRow('SELECT  pe.entry_year AS promo, COUNT(*)
                                FROM  accounts AS a
                          INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET(\'owner\', ap.perms))
-                         INNER JOIN  profile_education AS pe ON (pe.uid = ap.pid AND FIND_IN_SET(\'primary\', pe.flags))
+                         INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'primary\', pe.flags))
                               WHERE  pe.entry_year >= 1900  AND a.state = \'active\'
                            GROUP BY  promo
                            ORDER BY  promo');
@@ -283,7 +281,7 @@ EOF2;
             $res = XDB::query("SELECT  debut,
                                        TIME_FORMAT(duree,'%kh%i') AS duree,
                                        resume, description, services
-                                 FROM  coupures
+                                 FROM  downtimes
                                 WHERE  id = {?}", $cp_id);
             $cp  = $res->fetchOneAssoc();
         }
@@ -294,7 +292,7 @@ EOF2;
         } else {
             $beginning_date = date("Ymd", time() - 3600*24*21) . "000000";
             $sql = "SELECT  id, debut, resume, services
-                      FROM  coupures where debut > '$beginning_date' order by debut desc";
+                      FROM  downtimes where debut > '$beginning_date' order by debut desc";
             $page->assign('coupures', XDB::iterator($sql));
             $res = XDB::iterator("SELECT  host, text
                                     FROM  mx_watch
@@ -302,31 +300,6 @@ EOF2;
             $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::fetchAllAssoc("SELECT  p.pid AS profile, COUNT(*) AS count
-                                      FROM  logger.events AS e
-                                INNER JOIN  logger.actions AS act ON (e.action = act.id)
-                                INNER JOIN  profiles AS p ON (p.hrpid = e.data)
-                                     WHERE  act.text = 'view_profile' $time
-                                  GROUP BY  e.data
-                                  ORDER BY  count DESC
-                                     LIMIT  10");
-        foreach ($rows as $key=>$row) {
-            $rows[$key]['profile'] = Profile::get($rows[$key]['profile']);
-        }
-        $page->assign('profiles', $rows);
-        $page->assign('period', $period);
-    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: