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