detail
[platal.git] / htdocs.net / groupe / membres-edit.php
CommitLineData
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
43 if (Post::has('email')) {
44 if ($x) {
45 require_once 'user.func.inc.php';
d4d71364 46 $emails = explode(" ", Post::get('email'));
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);
d4d71364 56 $forlifes[] = $forlife;
57 }
58 else
59 $page->trig($email." n'est pas un alias polytechnique.org valide");
60 }
61 if (count($forlifes) > 0)
62 header('Location: annuaire.php');
0337d704 63 } else {
64 $email = Post::get('email');
65 if (isvalid_email($email)) {
66 $res = $globals->xdb->query('SELECT MAX(uid)+1 FROM groupex.membres');
67 $uid = max(intval($res->fetchOneCell()), 50001);
68 $globals->xdb->execute('INSERT INTO groupex.membres (uid,asso_id,origine,email) VALUES({?},{?},"ext",{?})',
69 $uid, $globals->asso('id'), $email);
70 header('Location: ?edit='.$email);
71 } else {
72 $page->trig("« <strong>$email</strong> » n'est pas une adresse mail valide");
73 }
74 }
75 }
76 }
77 elseif (Env::has('edit'))
78 {
79 new_groupadmin_page('xnet/groupe/membres-edit.tpl');
80
81 $user = get_infos(Env::get('edit'));
82 if (empty($user)) { header("Location: annuaire.php"); }
83
84 require 'lists.inc.php';
85 $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $globals->asso('mail_domain'));
86
87 if (Post::has('change')) {
88
89 if ($user['origine'] != 'X')
90 {
91 $globals->xdb->query('UPDATE groupex.membres SET prenom={?}, nom={?}, email={?} WHERE uid={?} AND asso_id={?}',
92 Post::get('prenom'), Post::get('nom'), Post::get('email'), $user['uid'], $globals->asso('id'));
93 $user['nom'] = Post::get('nom');
94 $user['prenom'] = Post::get('prenom');
95 $user['email'] = Post::get('email');
96 $user['email2'] = Post::get('email');
97 }
98
99 $perms = Post::getInt('is_admin');
100 if ($user['perms'] != $perms) {
101 $globals->xdb->query('UPDATE groupex.membres SET perms={?} WHERE uid={?} AND asso_id={?}',
102 $perms ? 'admin' : 'membre', $user['uid'], $globals->asso('id'));
103 $user['perms'] = $perms;
104 $page->trig('permissions modifiées');
105 }
106
107 foreach (Env::getMixed('ml1',array()) as $ml => $state) {
108 $ask = empty($_REQUEST['ml2'][$ml]) ? 0 : 2;
109 if ($ask == $state) continue;
110 if ($state == '1') {
111 $page->trig("{$user['prenom']} {$user['nom']} a actuellement une demande d'inscription en cours sur <strong>$ml@</strong> !!!");
112 } elseif ($ask) {
113 $client->mass_subscribe($ml, Array($user['email2']));
114 $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml@");
115 } else {
116 $client->mass_unsubscribe($ml, Array($user['email2']));
117 $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml@");
118 }
119 }
120
121 foreach (Env::getMixed('ml3', array()) as $ml => $state) {
122 $ask = !empty($_REQUEST['ml4'][$ml]);
123 if($state == $ask) continue;
124 if($ask) {
125 $globals->xdb->query("INSERT INTO virtual_redirect (vid,redirect)
126 SELECT vid,{?} FROM virtual WHERE alias={?}",
127 $user['email'], $ml);
128 $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml");
129 } else {
130 $globals->xdb->query("DELETE FROM virtual_redirect
131 USING virtual_redirect
132 INNER JOIN virtual USING(vid)
133 WHERE redirect={?} AND alias={?}", $user['email'], $ml);
134 $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml");
135 }
136 }
d4d71364 137 header("Location: annuaire.php");
0337d704 138 }
139
140 $page->assign('user', $user);
141 $listes = $client->get_lists($user['email2']);
142 $page->assign('listes', $listes);
143
144 $res = $globals->xdb->query(
145 'SELECT alias, redirect IS NOT NULL as sub
146 FROM virtual AS v
147 LEFT JOIN virtual_redirect AS vr ON(v.vid=vr.vid AND redirect={?})
148 WHERE alias LIKE {?} AND type="user"', $user['email'], '%@'.$globals->asso('mail_domain'));
149 $page->assign('alias', $res->fetchAllAssoc());
150 }
151 elseif (Env::has('del'))
152 {
153 new_groupadmin_page('xnet/groupe/membres-del.tpl');
154 $user = get_infos(Env::get('del'));
155 if (empty($user)) { header("Location: annuaire.php"); }
156 $page->assign('user', $user);
157
158 if (Post::has('confirm')) {
159 if ($domain = $globals->asso('mail_domain')) {
160
161 require 'lists.inc.php';
162 $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $domain);
163 $listes = $client->get_lists($user['email2']);
164
165 foreach ($listes as $liste) {
166 if ($liste['sub'] == 2) {
167 $client->mass_unsubscribe($liste['list'], Array($user['email2']));
168 $page->trig("{$user['prenom']} {$user['nom']} a été désinscrit de {$liste['list']}");
169 } elseif ($liste['sub']) {
170 $page->trig("{$user['prenom']} {$user['nom']} a une demande d'inscription en cours sur la liste {$liste['list']}@ !");
171 }
172 }
173
174 $globals->xdb->execute(
175 "DELETE FROM virtual_redirect
176 USING virtual_redirect
177 INNER JOIN virtual USING(vid)
178 WHERE redirect={?} AND alias LIKE {?}", $user['email'], '%@'.$domain);
179 if (mysql_affected_rows()) {
180 $page->trig("{$user['prenom']} {$user['nom']} a été désabonné des alias du groupe !");
181 }
182 }
183
184 $globals->xdb->execute(
185 "DELETE FROM groupex.membres WHERE uid={?} AND asso_id={?}",
186 $user['uid'], $globals->asso('id'));
187 $page->trig("{$user['prenom']} {$user['nom']} a été retiré du groupe !");
188 }
189 }
190 else
191 {
192 header("Location: annuaire.php");
193 }
194
195 $page->run();
196
197?>