| 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)) { |
| 90 | redirect('annuaire'); |
| 91 | } |
| 92 | |
| 93 | require 'lists.inc.php'; |
| 94 | $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $globals->asso('mail_domain')); |
| 95 | |
| 96 | if (Post::has('change')) { |
| 97 | |
| 98 | if ($user['origine'] != 'X') |
| 99 | { |
| 100 | $globals->xdb->query('UPDATE groupex.membres SET prenom={?}, nom={?}, email={?} WHERE uid={?} AND asso_id={?}', |
| 101 | Post::get('prenom'), Post::get('nom'), Post::get('email'), $user['uid'], $globals->asso('id')); |
| 102 | $user['nom'] = Post::get('nom'); |
| 103 | $user['prenom'] = Post::get('prenom'); |
| 104 | $user['email'] = Post::get('email'); |
| 105 | $user['email2'] = Post::get('email'); |
| 106 | } |
| 107 | |
| 108 | $perms = Post::getInt('is_admin'); |
| 109 | if ($user['perms'] != $perms) { |
| 110 | $globals->xdb->query('UPDATE groupex.membres SET perms={?} WHERE uid={?} AND asso_id={?}', |
| 111 | $perms ? 'admin' : 'membre', $user['uid'], $globals->asso('id')); |
| 112 | $user['perms'] = $perms; |
| 113 | $page->trig('permissions modifiées'); |
| 114 | } |
| 115 | |
| 116 | foreach (Env::getMixed('ml1',array()) as $ml => $state) { |
| 117 | $ask = empty($_REQUEST['ml2'][$ml]) ? 0 : 2; |
| 118 | if ($ask == $state) continue; |
| 119 | if ($state == '1') { |
| 120 | $page->trig("{$user['prenom']} {$user['nom']} a actuellement une demande d'inscription en cours sur <strong>$ml@</strong> !!!"); |
| 121 | } elseif ($ask) { |
| 122 | $client->mass_subscribe($ml, Array($user['email2'])); |
| 123 | $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml@"); |
| 124 | } else { |
| 125 | $client->mass_unsubscribe($ml, Array($user['email2'])); |
| 126 | $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml@"); |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | foreach (Env::getMixed('ml3', array()) as $ml => $state) { |
| 131 | $ask = !empty($_REQUEST['ml4'][$ml]); |
| 132 | if($state == $ask) continue; |
| 133 | if($ask) { |
| 134 | $globals->xdb->query("INSERT INTO virtual_redirect (vid,redirect) |
| 135 | SELECT vid,{?} FROM virtual WHERE alias={?}", |
| 136 | $user['email'], $ml); |
| 137 | $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml"); |
| 138 | } else { |
| 139 | $globals->xdb->query("DELETE FROM virtual_redirect |
| 140 | USING virtual_redirect |
| 141 | INNER JOIN virtual USING(vid) |
| 142 | WHERE redirect={?} AND alias={?}", $user['email'], $ml); |
| 143 | $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml"); |
| 144 | } |
| 145 | } |
| 146 | redirect('annuaire'); |
| 147 | } |
| 148 | |
| 149 | $page->assign('user', $user); |
| 150 | $listes = $client->get_lists($user['email2']); |
| 151 | $page->assign('listes', $listes); |
| 152 | |
| 153 | $res = $globals->xdb->query( |
| 154 | 'SELECT alias, redirect IS NOT NULL as sub |
| 155 | FROM virtual AS v |
| 156 | LEFT JOIN virtual_redirect AS vr ON(v.vid=vr.vid AND redirect={?}) |
| 157 | WHERE alias LIKE {?} AND type="user"', $user['email'], '%@'.$globals->asso('mail_domain')); |
| 158 | $page->assign('alias', $res->fetchAllAssoc()); |
| 159 | } |
| 160 | elseif (Env::has('del')) |
| 161 | { |
| 162 | new_groupadmin_page('xnet/groupe/membres-del.tpl'); |
| 163 | $user = get_infos(Env::get('del')); |
| 164 | if (empty($user)) { |
| 165 | redirect('annuaire'); |
| 166 | } |
| 167 | $page->assign('user', $user); |
| 168 | |
| 169 | if (Post::has('confirm')) { |
| 170 | |
| 171 | $globals->xdb->execute( |
| 172 | "DELETE FROM groupex.membres WHERE uid={?} AND asso_id={?}", |
| 173 | $user['uid'], $globals->asso('id')); |
| 174 | |
| 175 | // don't unsubscribe email from list if other user use same email |
| 176 | $user_same_email = get_infos($user['email']); |
| 177 | |
| 178 | if (($domain = $globals->asso('mail_domain')) && empty($user_same_email)) { |
| 179 | |
| 180 | require 'lists.inc.php'; |
| 181 | $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $domain); |
| 182 | $listes = $client->get_lists($user['email2']); |
| 183 | |
| 184 | foreach ($listes as $liste) { |
| 185 | if ($liste['sub'] == 2) { |
| 186 | $client->mass_unsubscribe($liste['list'], Array($user['email2'])); |
| 187 | $page->trig("{$user['prenom']} {$user['nom']} a été désinscrit de {$liste['list']}"); |
| 188 | } elseif ($liste['sub']) { |
| 189 | $page->trig("{$user['prenom']} {$user['nom']} a une demande d'inscription en cours sur la liste {$liste['list']}@ !"); |
| 190 | } |
| 191 | } |
| 192 | |
| 193 | $globals->xdb->execute( |
| 194 | "DELETE FROM virtual_redirect |
| 195 | USING virtual_redirect |
| 196 | INNER JOIN virtual USING(vid) |
| 197 | WHERE redirect={?} AND alias LIKE {?}", $user['email'], '%@'.$domain); |
| 198 | if (mysql_affected_rows()) { |
| 199 | $page->trig("{$user['prenom']} {$user['nom']} a été désabonné des alias du groupe !"); |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | $page->trig("{$user['prenom']} {$user['nom']} a été retiré du groupe !"); |
| 204 | } |
| 205 | } |
| 206 | else { |
| 207 | redirect('annuaire'); |
| 208 | } |
| 209 | |
| 210 | $page->run(); |
| 211 | |
| 212 | ?> |