0337d704 |
1 | <?php |
2 | |
3 | require 'xnet.inc.php'; |
4 | |
5 | function get_infos($email) |
6 | { |
7 | global $globals; |
8 | |
9 | $email = strtolower($email); |
10 | if (strpos($email, '@') === false) { |
11 | $email .= '@m4x.org'; |
12 | } |
13 | list($mbox,$dom) = split('@', $email); |
14 | |
15 | if ($dom == 'polytechnique.org' || $dom == 'm4x.org') { |
16 | $res = $globals->xdb->query( |
17 | "SELECT user_id AS uid, u.promo, IF(u.nom_usage<>'', u.nom_usage, u.nom) as nom, u.prenom, b.alias, |
18 | CONCAT(b.alias, '@m4x.org') AS email, |
19 | CONCAT(b.alias, '@polytechnique.org') AS email2, |
20 | m.perms='admin' AS perms, m.origine |
21 | FROM auth_user_md5 AS u |
22 | INNER JOIN aliases AS a ON ( u.user_id = a.id AND a.type != 'homonyme' ) |
23 | INNER JOIN aliases AS b ON ( u.user_id = b.id AND b.type = 'a_vie' ) |
24 | INNER JOIN groupex.membres AS m ON ( m.uid = u.user_id AND asso_id={?}) |
25 | WHERE a.alias = {?} AND u.user_id < 50000", $globals->asso('id'), $mbox); |
26 | $user = $res->fetchOneAssoc(); |
27 | } else { |
28 | $res = $globals->xdb->query( |
29 | "SELECT uid, nom, prenom, email, email AS email2, perms='admin', origine |
30 | FROM groupex.membres |
31 | WHERE email = {?} AND asso_id = {?}", $email, $globals->asso('id')); |
32 | $user = $res->fetchOneAssoc(); |
33 | } |
34 | |
35 | return $user; |
36 | } |
37 | |
38 | if (Env::has('new')) |
39 | { |
40 | new_groupadmin_page('xnet/groupe/membres-add.tpl'); |
41 | $x = (Env::get('new') == 'x'); |
42 | |
f12c9f83 |
43 | if (Env::has('email')) { |
0337d704 |
44 | if ($x) { |
45 | require_once 'user.func.inc.php'; |
f12c9f83 |
46 | $emails = explode(" ", Env::get('email')); |
d4d71364 |
47 | foreach ($emails as $email) |
48 | { |
49 | if ($forlife = get_user_forlife($email)) { |
50 | $globals->xdb->execute( |
0337d704 |
51 | 'INSERT INTO groupex.membres (uid,asso_id,origine) |
52 | SELECT user_id,{?},"X" |
53 | FROM auth_user_md5 AS u |
54 | INNER JOIN aliases AS a ON (u.user_id = a.id) |
55 | WHERE a.alias={?}', $globals->asso('id'), $forlife); |
f12c9f83 |
56 | header('Location: ?edit='.$email); |
57 | } else { |
d4d71364 |
58 | $page->trig($email." n'est pas un alias polytechnique.org valide"); |
f12c9f83 |
59 | } |
d4d71364 |
60 | } |
0337d704 |
61 | } else { |
f12c9f83 |
62 | $email = Env::get('email'); |
0337d704 |
63 | if (isvalid_email($email)) { |
64 | $res = $globals->xdb->query('SELECT MAX(uid)+1 FROM groupex.membres'); |
65 | $uid = max(intval($res->fetchOneCell()), 50001); |
66 | $globals->xdb->execute('INSERT INTO groupex.membres (uid,asso_id,origine,email) VALUES({?},{?},"ext",{?})', |
67 | $uid, $globals->asso('id'), $email); |
68 | header('Location: ?edit='.$email); |
69 | } else { |
70 | $page->trig("« <strong>$email</strong> » n'est pas une adresse mail valide"); |
71 | } |
72 | } |
73 | } |
74 | } |
75 | elseif (Env::has('edit')) |
76 | { |
77 | new_groupadmin_page('xnet/groupe/membres-edit.tpl'); |
78 | |
79 | $user = get_infos(Env::get('edit')); |
80 | if (empty($user)) { header("Location: annuaire.php"); } |
81 | |
82 | require 'lists.inc.php'; |
83 | $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $globals->asso('mail_domain')); |
84 | |
85 | if (Post::has('change')) { |
86 | |
87 | if ($user['origine'] != 'X') |
88 | { |
89 | $globals->xdb->query('UPDATE groupex.membres SET prenom={?}, nom={?}, email={?} WHERE uid={?} AND asso_id={?}', |
90 | Post::get('prenom'), Post::get('nom'), Post::get('email'), $user['uid'], $globals->asso('id')); |
91 | $user['nom'] = Post::get('nom'); |
92 | $user['prenom'] = Post::get('prenom'); |
93 | $user['email'] = Post::get('email'); |
94 | $user['email2'] = Post::get('email'); |
95 | } |
96 | |
97 | $perms = Post::getInt('is_admin'); |
98 | if ($user['perms'] != $perms) { |
99 | $globals->xdb->query('UPDATE groupex.membres SET perms={?} WHERE uid={?} AND asso_id={?}', |
100 | $perms ? 'admin' : 'membre', $user['uid'], $globals->asso('id')); |
101 | $user['perms'] = $perms; |
102 | $page->trig('permissions modifiées'); |
103 | } |
104 | |
105 | foreach (Env::getMixed('ml1',array()) as $ml => $state) { |
106 | $ask = empty($_REQUEST['ml2'][$ml]) ? 0 : 2; |
107 | if ($ask == $state) continue; |
108 | if ($state == '1') { |
109 | $page->trig("{$user['prenom']} {$user['nom']} a actuellement une demande d'inscription en cours sur <strong>$ml@</strong> !!!"); |
110 | } elseif ($ask) { |
111 | $client->mass_subscribe($ml, Array($user['email2'])); |
112 | $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml@"); |
113 | } else { |
114 | $client->mass_unsubscribe($ml, Array($user['email2'])); |
115 | $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml@"); |
116 | } |
117 | } |
118 | |
119 | foreach (Env::getMixed('ml3', array()) as $ml => $state) { |
120 | $ask = !empty($_REQUEST['ml4'][$ml]); |
121 | if($state == $ask) continue; |
122 | if($ask) { |
123 | $globals->xdb->query("INSERT INTO virtual_redirect (vid,redirect) |
124 | SELECT vid,{?} FROM virtual WHERE alias={?}", |
125 | $user['email'], $ml); |
126 | $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml"); |
127 | } else { |
128 | $globals->xdb->query("DELETE FROM virtual_redirect |
129 | USING virtual_redirect |
130 | INNER JOIN virtual USING(vid) |
131 | WHERE redirect={?} AND alias={?}", $user['email'], $ml); |
132 | $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml"); |
133 | } |
134 | } |
d4d71364 |
135 | header("Location: annuaire.php"); |
0337d704 |
136 | } |
137 | |
138 | $page->assign('user', $user); |
139 | $listes = $client->get_lists($user['email2']); |
140 | $page->assign('listes', $listes); |
141 | |
142 | $res = $globals->xdb->query( |
143 | 'SELECT alias, redirect IS NOT NULL as sub |
144 | FROM virtual AS v |
145 | LEFT JOIN virtual_redirect AS vr ON(v.vid=vr.vid AND redirect={?}) |
146 | WHERE alias LIKE {?} AND type="user"', $user['email'], '%@'.$globals->asso('mail_domain')); |
147 | $page->assign('alias', $res->fetchAllAssoc()); |
148 | } |
149 | elseif (Env::has('del')) |
150 | { |
151 | new_groupadmin_page('xnet/groupe/membres-del.tpl'); |
152 | $user = get_infos(Env::get('del')); |
153 | if (empty($user)) { header("Location: annuaire.php"); } |
154 | $page->assign('user', $user); |
155 | |
156 | if (Post::has('confirm')) { |
157 | if ($domain = $globals->asso('mail_domain')) { |
158 | |
159 | require 'lists.inc.php'; |
160 | $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $domain); |
161 | $listes = $client->get_lists($user['email2']); |
162 | |
163 | foreach ($listes as $liste) { |
164 | if ($liste['sub'] == 2) { |
165 | $client->mass_unsubscribe($liste['list'], Array($user['email2'])); |
166 | $page->trig("{$user['prenom']} {$user['nom']} a été désinscrit de {$liste['list']}"); |
167 | } elseif ($liste['sub']) { |
168 | $page->trig("{$user['prenom']} {$user['nom']} a une demande d'inscription en cours sur la liste {$liste['list']}@ !"); |
169 | } |
170 | } |
171 | |
172 | $globals->xdb->execute( |
173 | "DELETE FROM virtual_redirect |
174 | USING virtual_redirect |
175 | INNER JOIN virtual USING(vid) |
176 | WHERE redirect={?} AND alias LIKE {?}", $user['email'], '%@'.$domain); |
177 | if (mysql_affected_rows()) { |
178 | $page->trig("{$user['prenom']} {$user['nom']} a été désabonné des alias du groupe !"); |
179 | } |
180 | } |
181 | |
182 | $globals->xdb->execute( |
183 | "DELETE FROM groupex.membres WHERE uid={?} AND asso_id={?}", |
184 | $user['uid'], $globals->asso('id')); |
185 | $page->trig("{$user['prenom']} {$user['nom']} a été retiré du groupe !"); |
186 | } |
187 | } |
188 | else |
189 | { |
190 | header("Location: annuaire.php"); |
191 | } |
192 | |
193 | $page->run(); |
194 | |
195 | ?> |