X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fadmin.php;h=b0bad9a20666500d9a98d7829ab3a18ead8c534c;hb=4b239f6e6cb26cdd814b42f3efcbcae40fa862a4;hp=e1e5709a1e9490e37569df7d9d2da3f9951452e6;hpb=dbbfabe9138005367547465c13e50b98f121bc36;p=platal.git diff --git a/modules/admin.php b/modules/admin.php index e1e5709..b0bad9a 100644 --- a/modules/admin.php +++ b/modules/admin.php @@ -47,6 +47,7 @@ class AdminModule extends PLModule 'admin/wiki' => $this->make_hook('wiki', AUTH_MDP, 'admin'), 'admin/ipwatch' => $this->make_hook('ipwatch', AUTH_MDP, 'admin'), 'admin/icons' => $this->make_hook('icons', AUTH_MDP, 'admin'), + 'admin/accounts' => $this->make_hook('accounts', AUTH_MDP, 'admin'), ); } @@ -401,7 +402,7 @@ class AdminModule extends PLModule FROM auth_user_md5 WHERE user_id = {?}"; $mr = XDB::query($userinfo_query, $user->id())->fetchOneAssoc(); - $redirect = ($registered ? new Redirect($user->id()) : null); + $redirect = ($registered ? new Redirect($user) : null); // Processes admin requests, if any. foreach($_POST as $key => $val) { @@ -466,7 +467,7 @@ class AdminModule extends PLModule // Eventually adds the alias to the right domain. if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) { - $req = new AliasReq($user->id(), $alias, 'Admin request', false); + $req = new AliasReq($user, $alias, 'Admin request', false); if ($req->commit()) { $page->trigSuccess("Nouvel alias '$alias@$domain' attribué"); } else { @@ -495,7 +496,7 @@ class AdminModule extends PLModule SET rewrite = '' WHERE uid = {?} AND rewrite LIKE CONCAT({?}, '@%')", $user->id(), $val); - fix_bestalias($user->id()); + fix_bestalias($user); $page->trigSuccess("L'alias '$val' a été supprimé"); } break; @@ -511,7 +512,7 @@ class AdminModule extends PLModule // As having a non-null bestalias value is critical in // plat/al's code, we do an a posteriori check on the // validity of the bestalias. - fix_bestalias($user->id()); + fix_bestalias($user); break; // Profile edition. @@ -661,7 +662,11 @@ class AdminModule extends PLModule "SELECT alias FROM virtual INNER JOIN virtual_redirect USING (vid) - WHERE type = 'user' AND redirect LIKE CONCAT({?}, '@%')", $user->id())); + WHERE type = 'user' AND (redirect = {?} OR redirect = {?})", + $user->forlifeEmail(), + // TODO: remove this über-ugly hack. The issue is that you need + // to remove all @m4x.org addresses in virtual_redirect first. + $user->login() . '@' . $globals->mail->domain2)); $page->assign('aliases', XDB::iterator( "SELECT alias, type='a_vie' AS for_life,FIND_IN_SET('bestalias',flags) AS best,expire @@ -685,6 +690,15 @@ class AdminModule extends PLModule $page->assign('bans', $bans); } + function getHruid($line, $key) + { + var_dump($line); + if (!isset($line['nom']) || !isset($line['prenom']) || !isset($line['promo'])) { + return null; + } + return make_forlife($line['prenom'], $line['nom'], $line['promo']); + } + function getMatricule($line, $key) { $mat = $line['matricule']; @@ -705,7 +719,7 @@ class AdminModule extends PLModule $action = Env::v('valid_promo') == 'Ajouter des membres' ? 'add' : 'ax'; pl_redirect('admin/promo/' . $action . '/' . Env::i('promo')); } else { - $page->trigError('Promo non valide'); + $page->trigError('Promotion non valide.'); } } @@ -717,12 +731,13 @@ class AdminModule extends PLModule } $importer = new CSVImporter('auth_user_md5', 'matricule'); - $importer->registerFunction('matricule', 'matricle Ecole vers X.org', array($this, 'getMatricule')); + $importer->registerFunction('matricule', 'matricule Ecole vers X.org', array($this, 'getMatricule')); switch ($action) { case 'add': - $fields = array('nom', 'nom_ini', 'prenom', 'naissance_ini', + $fields = array('hruid', 'nom', 'nom_ini', 'prenom', 'naissance_ini', 'prenom_ini', 'promo', 'promo_sortie', 'flags', 'matricule', 'matricule_ax', 'perms'); + $importer->forceValue('hruid', array($this, 'getHruid')); $importer->forceValue('promo', $promo); $importer->forceValue('promo_sortie', $promo + 3); break; @@ -733,7 +748,8 @@ class AdminModule extends PLModule $importer->apply($page, "admin/promo/$action/$promo", $fields); } - function handler_homonyms(&$page, $op = 'list', $target = null) { + function handler_homonyms(&$page, $op = 'list', $target = null) + { $page->changeTpl('admin/homonymes.tpl'); $page->setTitle('Administration - Homonymes'); require_once("homonymes.inc.php"); @@ -762,6 +778,7 @@ class AdminModule extends PLModule send_warning_homonyme($prenom, $nom, $forlife, $loginbis); switch_bestalias($target, $loginbis); $op = 'list'; + $page->trigSuccess('Email envoyé à ' . $forlife . '.'); break; case 'correct': @@ -772,6 +789,7 @@ class AdminModule extends PLModule XDB::execute("REPLACE INTO homonymes (homonyme_id,user_id) VALUES({?},{?})", $target, $target); send_robot_homonyme($prenom, $nom, $forlife, $loginbis); $op = 'list'; + $page->trigSuccess('Email envoyé à ' . $forlife . ', alias supprimé.'); break; } } @@ -840,7 +858,6 @@ class AdminModule extends PLModule if ($validate) { S::assert_xsrf_token(); - $new_deces = array(); $res = XDB::iterRow("SELECT user_id,matricule,nom,prenom,deces FROM auth_user_md5 WHERE promo = {?}", $promo); while (list($uid,$mat,$nom,$prenom,$deces) = $res->next()) { $val = Env::v($mat); @@ -849,7 +866,7 @@ class AdminModule extends PLModule } XDB::execute('UPDATE auth_user_md5 SET deces={?} WHERE matricule = {?}', $val, $mat); - $new_deces[] = array('name' => "$prenom $nom", 'date' => "$val"); + $page->trigSuccess('Ajout du décès de ' . $prenom . " " . $nom . ' le ' . $val . '.'); if($deces == '0000-00-00' || empty($deces)) { require_once('notifs.inc.php'); register_watch_op($uid, WATCH_DEATH, $val); @@ -857,7 +874,6 @@ class AdminModule extends PLModule user_clear_all_subs($uid, false); // by default, dead ppl do not loose their email } } - $page->assign('new_deces',$new_deces); } $res = XDB::iterator('SELECT matricule, nom, prenom, deces FROM auth_user_md5 WHERE promo = {?} ORDER BY nom,prenom', $promo); @@ -869,9 +885,8 @@ class AdminModule extends PLModule $page->setTitle('Administration - Décédés'); $res = XDB::iterator( - "SELECT u.promo, u.nom, u.prenom, u.deces, u.matricule_ax, a.alias, DATE(MAX(s.start)) AS last + "SELECT u.promo, u.nom, u.prenom, u.deces, u.matricule_ax, u.hruid, DATE(MAX(s.start)) AS last FROM auth_user_md5 AS u - LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') LEFT JOIN logger.sessions AS s ON (s.uid = u.user_id AND suid = 0) WHERE perms IN ('admin', 'user') AND deces <> 0 GROUP BY u.user_id @@ -933,7 +948,11 @@ class AdminModule extends PLModule S::assert_xsrf_token(); $req = Validate::get_typed_request(Env::v('uid'), Env::v('type'), Env::v('stamp')); - $req->handle_formu(); + if ($req) { + $req->handle_formu(); + } else { + $page->trigWarning('La validation a déjà été effectuée.'); + } } $r = XDB::iterator('SHOW COLUMNS FROM requests_answers'); @@ -1036,7 +1055,7 @@ class AdminModule extends PLModule { if (S::v('core_rss_hash')) { $page->setRssLink('Changement Récents', - '/Site/AllRecentChanges?action=rss&user=' . S::v('forlife') . '&hash=' . S::v('core_rss_hash')); + '/Site/AllRecentChanges?action=rss&user=' . S::v('hruid') . '&hash=' . S::v('core_rss_hash')); } // update wiki perms @@ -1145,18 +1164,18 @@ class AdminModule extends PLModule $sql = "SELECT w.ip, IF(s.ip IS NULL, IF(w.ip = s2.ip, s2.host, s2.forward_host), IF(w.ip = s.ip, s.host, s.forward_host)), - w.mask, w.detection, w.state, a.alias AS forlife + w.mask, w.detection, w.state, u.hruid FROM ip_watch AS w LEFT JOIN logger.sessions AS s ON (s.ip = w.ip) LEFT JOIN logger.sessions AS s2 ON (s2.forward_ip = w.ip) - LEFT JOIN aliases AS a ON (a.id = s.uid AND a.type = 'a_vie') - GROUP BY w.ip, a.alias - ORDER BY w.state, w.ip, a.alias"; + LEFT JOIN auth_user_md5 AS u ON (u.user_id = s.uid) + GROUP BY w.ip, u.hruid + ORDER BY w.state, w.ip, u.hruid"; $it = Xdb::iterRow($sql); $table = array(); $props = array(); - while (list($ip, $host, $mask, $date, $state, $forlife) = $it->next()) { + while (list($ip, $host, $mask, $date, $state, $hruid) = $it->next()) { $ip = uint_to_ip($ip); $mask = uint_to_ip($mask); if (count($props) == 0 || $props['ip'] != $ip) { @@ -1168,9 +1187,9 @@ class AdminModule extends PLModule 'host' => $host, 'detection' => $date, 'state' => $state, - 'users' => array($forlife)); + 'users' => array($hruid)); } else { - $props['users'][] = $forlife; + $props['users'][] = $hruid; } } if (count($props) > 0) { @@ -1179,18 +1198,18 @@ class AdminModule extends PLModule $page->assign('table', $table); } elseif ($action == 'edit') { $sql = "SELECT w.detection, w.state, w.last, w.description, w.mask, - a1.alias AS edit, a2.alias AS forlife, s.host + u1.hruid AS edit, u2.hruid AS hruid, s.host FROM ip_watch AS w - LEFT JOIN aliases AS a1 ON (a1.id = w.uid AND a1.type = 'a_vie') + LEFT JOIN auth_user_md5 AS u1 ON (u1.user_id = w.uid) LEFT JOIN logger.sessions AS s ON (w.ip = s.ip) - LEFT JOIN aliases AS a2 ON (a2.id = s.uid AND a2.type = 'a_vie') + LEFT JOIN auth_user_md5 AS u2 ON (u2.user_id = s.uid) WHERE w.ip = {?} - GROUP BY a2.alias - ORDER BY a2.alias"; + GROUP BY u2.hruid + ORDER BY u2.hruid"; $it = Xdb::iterRow($sql, ip_to_uint($ip)); $props = array(); - while (list($detection, $state, $last, $description, $mask, $edit, $forlife, $host) = $it->next()) { + while (list($detection, $state, $last, $description, $mask, $edit, $hruid, $host) = $it->next()) { if (count($props) == 0) { $props = array('ip' => $ip, 'mask' => uint_to_ip($mask), @@ -1200,9 +1219,9 @@ class AdminModule extends PLModule 'last' => $last, 'description' => $description, 'edit' => $edit, - 'users' => array($forlife)); + 'users' => array($hruid)); } else { - $props['users'][] = $forlife; + $props['users'][] = $hruid; } } $page->assign('ip', $props); @@ -1225,6 +1244,19 @@ class AdminModule extends PLModule sort($icons); $page->assign('icons', $icons); } + + function handler_accounts(&$page) + { + $page->changeTpl('admin/accounts.tpl'); + $page->assign('disabled', XDB::iterator('SELECT u.nom, u.prenom, u.promo, u.comment, u.hruid + FROM auth_user_md5 AS u + WHERE perms = \'disabled\' + ORDER BY nom, prenom')); + $page->assign('admins', XDB::iterator('SELECT u.nom, u.prenom, u.promo, u.hruid + FROM auth_user_md5 AS u + WHERE perms = \'admin\' + ORDER BY nom, prenom')); + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: