3 require 'xnet.inc.php';
5 function get_infos($email)
9 $email = strtolower($email);
10 if (strpos($email, '@') === false
) {
13 list($mbox,$dom) = explode('@', $email);
15 $res = $globals->xdb
->query(
16 "SELECT uid, nom, prenom, email, email AS email2, perms='admin', origine
18 WHERE email = {?} AND asso_id = {?}", $email, $globals->asso('id'));
19 if ($res->numRows()) {
20 return $res->fetchOneAssoc();
21 } elseif ($dom == 'polytechnique.org' ||
$dom == 'm4x.org') {
22 $res = $globals->xdb
->query(
23 "SELECT user_id AS uid, u.promo, IF(u.nom_usage<>'', u.nom_usage, u.nom) as nom, u.prenom, b.alias,
24 CONCAT(b.alias, '@m4x.org') AS email,
25 CONCAT(b.alias, '@polytechnique.org') AS email2,
26 m.perms='admin' AS perms, m.origine
27 FROM auth_user_md5 AS u
28 INNER JOIN aliases AS a ON ( u.user_id = a.id AND a.type != 'homonyme' )
29 INNER JOIN aliases AS b ON ( u.user_id = b.id AND b.type = 'a_vie' )
30 INNER JOIN groupex.membres AS m ON ( m.uid = u.user_id AND asso_id={?})
31 WHERE a.alias = {?} AND u.user_id < 50000", $globals->asso('id'), $mbox);
32 return $res->fetchOneAssoc();
40 new_groupadmin_page('xnet/groupe/membres-add.tpl');
41 $x = (Env
::get('new') == 'x');
43 if (Env
::has('email')) {
44 $email = Env
::get('email');
45 list(,$fqdn) = explode('@', $email);
46 $fqdn = strtolower($fqdn);
47 if ($fqdn == 'polytechnique.org' ||
$fqdn == 'melix.org' ||
48 $fqdn == 'm4x.org' ||
$fqdn == 'melix.net')
54 require_once 'user.func.inc.php';
55 if ($forlife = get_user_forlife($email)) {
56 $globals->xdb
->execute(
57 'INSERT INTO groupex.membres (uid,asso_id,origine)
58 SELECT user_id,{?},"X"
59 FROM auth_user_md5 AS u
60 INNER JOIN aliases AS a ON (u.user_id = a.id)
61 WHERE a.alias={?}', $globals->asso('id'), $forlife);
62 redirect('?edit='.$email);
64 $page->trig($email." n'est pas un alias polytechnique.org valide");
67 if (isvalid_email($email)) {
68 $res = $globals->xdb
->query('SELECT MAX(uid)+1 FROM groupex.membres');
69 $uid = max(intval($res->fetchOneCell()), 50001);
70 $globals->xdb
->execute('INSERT INTO groupex.membres (uid,asso_id,origine,email) VALUES({?},{?},"ext",{?})',
71 $uid, $globals->asso('id'), $email);
72 redirect('?edit='.$email);
74 $page->trig("« <strong>$email</strong> » n'est pas une adresse mail valide");
79 elseif (Env
::has('edit'))
81 new_groupadmin_page('xnet/groupe/membres-edit.tpl');
83 $user = get_infos(Env
::get('edit'));
84 if (empty($user)) { redirect("annuaire.php"); }
86 require 'lists.inc.php';
87 $client =& lists_xmlrpc(Session
::getInt('uid'), Session
::get('password'), $globals->asso('mail_domain'));
89 if (Post
::has('change')) {
91 if ($user['origine'] != 'X')
93 $globals->xdb
->query('UPDATE groupex.membres SET prenom={?}, nom={?}, email={?} WHERE uid={?} AND asso_id={?}',
94 Post
::get('prenom'), Post
::get('nom'), Post
::get('email'), $user['uid'], $globals->asso('id'));
95 $user['nom'] = Post
::get('nom');
96 $user['prenom'] = Post
::get('prenom');
97 $user['email'] = Post
::get('email');
98 $user['email2'] = Post
::get('email');
101 $perms = Post
::getInt('is_admin');
102 if ($user['perms'] != $perms) {
103 $globals->xdb
->query('UPDATE groupex.membres SET perms={?} WHERE uid={?} AND asso_id={?}',
104 $perms ?
'admin' : 'membre', $user['uid'], $globals->asso('id'));
105 $user['perms'] = $perms;
106 $page->trig('permissions modifiées');
109 foreach (Env
::getMixed('ml1',array()) as $ml => $state) {
110 $ask = empty($_REQUEST['ml2'][$ml]) ?
0 : 2;
111 if ($ask == $state) continue;
113 $page->trig("{$user['prenom']} {$user['nom']} a actuellement une demande d'inscription en cours sur <strong>$ml@</strong> !!!");
115 $client->mass_subscribe($ml, Array($user['email2']));
116 $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml@");
118 $client->mass_unsubscribe($ml, Array($user['email2']));
119 $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml@");
123 foreach (Env
::getMixed('ml3', array()) as $ml => $state) {
124 $ask = !empty($_REQUEST['ml4'][$ml]);
125 if($state == $ask) continue;
127 $globals->xdb
->query("INSERT INTO virtual_redirect (vid,redirect)
128 SELECT vid,{?} FROM virtual WHERE alias={?}",
129 $user['email'], $ml);
130 $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml");
132 $globals->xdb
->query("DELETE FROM virtual_redirect
133 USING virtual_redirect
134 INNER JOIN virtual USING(vid)
135 WHERE redirect={?} AND alias={?}", $user['email'], $ml);
136 $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml");
139 redirect("annuaire.php");
142 $page->assign('user', $user);
143 $listes = $client->get_lists($user['email2']);
144 $page->assign('listes', $listes);
146 $res = $globals->xdb
->query(
147 'SELECT alias, redirect IS NOT NULL as sub
149 LEFT JOIN virtual_redirect AS vr ON(v.vid=vr.vid AND redirect={?})
150 WHERE alias LIKE {?} AND type="user"', $user['email'], '%@'.$globals->asso('mail_domain'));
151 $page->assign('alias', $res->fetchAllAssoc());
153 elseif (Env
::has('del'))
155 new_groupadmin_page('xnet/groupe/membres-del.tpl');
156 $user = get_infos(Env
::get('del'));
157 if (empty($user)) { redirect("annuaire.php"); }
158 $page->assign('user', $user);
160 if (Post
::has('confirm')) {
161 if ($domain = $globals->asso('mail_domain')) {
163 require 'lists.inc.php';
164 $client =& lists_xmlrpc(Session
::getInt('uid'), Session
::get('password'), $domain);
165 $listes = $client->get_lists($user['email2']);
167 foreach ($listes as $liste) {
168 if ($liste['sub'] == 2) {
169 $client->mass_unsubscribe($liste['list'], Array($user['email2']));
170 $page->trig("{$user['prenom']} {$user['nom']} a été désinscrit de {$liste['list']}");
171 } elseif ($liste['sub']) {
172 $page->trig("{$user['prenom']} {$user['nom']} a une demande d'inscription en cours sur la liste {$liste['list']}@ !");
176 $globals->xdb
->execute(
177 "DELETE FROM virtual_redirect
178 USING virtual_redirect
179 INNER JOIN virtual USING(vid)
180 WHERE redirect={?} AND alias LIKE {?}", $user['email'], '%@'.$domain);
181 if (mysql_affected_rows()) {
182 $page->trig("{$user['prenom']} {$user['nom']} a été désabonné des alias du groupe !");
186 $globals->xdb
->execute(
187 "DELETE FROM groupex.membres WHERE uid={?} AND asso_id={?}",
188 $user['uid'], $globals->asso('id'));
189 $page->trig("{$user['prenom']} {$user['nom']} a été retiré du groupe !");
193 redirect("annuaire.php");