+ // }}}
+
+ function handler_logger(&$page, $action = null, $arg = null) {
+ if ($action == 'session') {
+
+ // we are viewing a session
+ $res = XDB::query("SELECT ls.*, a.alias AS username, sa.alias AS suer
+ FROM logger.sessions AS ls
+ LEFT JOIN aliases AS a ON (a.id = ls.uid AND a.type='a_vie')
+ LEFT JOIN aliases AS sa ON (sa.id = ls.suid AND sa.type='a_vie')
+ WHERE ls.id = {?}", $arg);
+
+ $page->assign('session', $a = $res->fetchOneAssoc());
+
+ $res = XDB::iterator('SELECT a.text, e.data, UNIX_TIMESTAMP(e.stamp) AS stamp
+ FROM logger.events AS e
+ LEFT JOIN logger.actions AS a ON e.action=a.id
+ WHERE e.session={?}', $arg);
+ while ($myarr = $res->next()) {
+ $page->append('events', $myarr);
+ }
+
+ } else {
+ $loguser = $action == 'user' ? $arg : Env::v('loguser');
+
+ $res = XDB::query('SELECT id FROM aliases WHERE alias={?}',
+ $loguser);
+ $loguid = $res->fetchOneCell();
+
+ if ($loguid) {
+ $year = Env::i('year');
+ $month = Env::i('month');
+ $day = Env::i('day');
+ } else {
+ $year = Env::i('year', intval(date('Y')));
+ $month = Env::i('month', intval(date('m')));
+ $day = Env::i('day', intval(date('d')));
+ }
+
+ if (!$year)
+ $month = 0;
+ if (!$month)
+ $day = 0;
+
+ // smarty assignments
+ // retrieve available years
+ $page->assign('years', $this->_getYears());
+ $page->assign('year', $year);
+
+ // retrieve available months for the current year
+ $page->assign('months', $this->_getMonths($year));
+ $page->assign('month', $month);
+
+ // retrieve available days for the current year and month
+ $page->assign('days', $this->_getDays($year, $month));
+ $page->assign('day', $day);
+
+ $page->assign('loguser', $loguser);
+ // smarty assignments
+
+ if ($loguid || $year) {
+
+ // get the requested sessions
+ $where = $this->_makeWhere($year, $month, $day, $loguid);
+ $select = "SELECT s.id, UNIX_TIMESTAMP(s.start) as start, s.uid,
+ a.alias as username
+ FROM logger.sessions AS s
+ LEFT JOIN aliases AS a ON (a.id = s.uid AND a.type='a_vie')
+ $where
+ ORDER BY start DESC";
+ $res = XDB::iterator($select);
+
+ $sessions = array();
+ while ($mysess = $res->next()) {
+ $mysess['events'] = array();
+ $sessions[$mysess['id']] = $mysess;
+ }
+ array_reverse($sessions);
+
+ // attach events
+ $sql = "SELECT s.id, a.text
+ FROM logger.sessions AS s
+ LEFT JOIN logger.events AS e ON(e.session=s.id)
+ INNER JOIN logger.actions AS a ON(a.id=e.action)
+ $where";
+
+ $res = XDB::iterator($sql);
+ while ($event = $res->next()) {
+ array_push($sessions[$event['id']]['events'], $event['text']);
+ }
+ $page->assign_by_ref('sessions', $sessions);
+ } else {
+ $page->assign('msg_nofilters', "Sélectionner une annuée et/ou un utilisateur");
+ }
+ }
+
+ $page->changeTpl('logger-view.tpl');
+
+ $page->assign('xorg_title','Polytechnique.org - Administration - Logs des sessions');
+ }
+
+ function handler_user(&$page, $login = false)
+ {