Merge branch 'master' into fusionax
[platal.git] / modules / register / register.inc.php
CommitLineData
0337d704 1<?php
2/***************************************************************************
179afa7f 3 * Copyright (C) 2003-2008 Polytechnique.org *
0337d704 4 * http://opensource.polytechnique.org/ *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
22require_once 'xorg.misc.inc.php';
23
24// {{{ function user_cmp
25
26function user_cmp($prenom, $nom, $_prenom, $_nom)
27{
28 $_nom = strtoupper(replace_accent($_nom));
29 $_prenom = strtoupper(replace_accent($_prenom));
30 $nom = strtoupper(replace_accent($nom));
31 $prenom = strtoupper(replace_accent($prenom));
32
33 $is_ok = strtoupper($_prenom) == strtoupper($prenom);
eaf30d86 34
0337d704 35 $tokens = preg_split("/[ \-']/", $nom, -1, PREG_SPLIT_NO_EMPTY);
36 $maxlen = 0;
37
38 foreach ($tokens as $str) {
39 $is_ok &= strpos($_nom, $str)!==false;
40 $maxlen = max($maxlen, strlen($str));
41 }
42
43 return $is_ok && ($maxlen > 2 || $maxlen == strlen($_nom));
44}
45
46// }}}
0337d704 47// {{{ function check_mat
48
ecc734a5 49function check_mat($promo, $mat, $nom, $prenom, &$ourmat, &$ourid, &$watch, &$naiss)
0337d704 50{
0337d704 51 if (!preg_match('/^[0-9][0-9][0-9][0-9][0-9][0-9]$/', $mat)) {
52 return "Le matricule doit comporter 6 chiffres.";
53 }
54
55 $year = intval(substr($mat, 0, 3));
56 $rang = intval(substr($mat, 3, 3));
57 if ($year > 200) { $year /= 10; };
58 if ($year < 96) {
59 return "ton matricule est incorrect";
60 } else {
61 $ourmat = sprintf('%04u%04u', 1900+$year, $rang);
62 }
63
08cce2ff 64 $res = XDB::query(
fbc210fa 65 'SELECT user_id, promo, perms IN ("admin","user"), nom, prenom, FIND_IN_SET(\'watch\', flags), naissance_ini
0337d704 66 FROM auth_user_md5
67 WHERE matricule={?} and deces = 0', $ourmat);
ecc734a5 68 list ($uid, $_promo, $_already, $_nom, $_prenom, $watch, $naiss) = $res->fetchOneRow();
a7de4ef7 69 if ($_already) { return "tu es déjà inscrit ou ton matricule est incorrect !"; }
0337d704 70 if ($_promo != $promo) { return "erreur de matricule"; }
71
72 if (!user_cmp($prenom, $nom, $_prenom, $_nom)) {
a7de4ef7 73 return "erreur dans l'identification. Réessaie, il y a une erreur quelque part !";
0337d704 74 }
75
76 $ourid = $uid;
77 return true;
78}
79
80// }}}
81// {{{ function check_old_mat
82
ecc734a5 83function check_old_mat($promo, $mat, $nom, $prenom, &$ourmat, &$ourid, &$watch, &$naiss)
0337d704 84{
08cce2ff 85 $res = XDB::iterRow(
ecc734a5 86 'SELECT user_id, nom, prenom, matricule, FIND_IN_SET(\'watch\', flags), naissance_ini
0337d704 87 FROM auth_user_md5
88 WHERE promo={?} AND deces=0 AND perms="pending"', $promo);
ecc734a5 89 while (list($_uid, $_nom, $_prenom, $_mat, $watch, $naiss) = $res->next()) {
0337d704 90 if (user_cmp($prenom, $nom, $_prenom, $_nom)) {
91 $ourid = $_uid;
92 $ourmat = $_mat;
93 return true;
94 }
95 }
96
08cce2ff 97 $res = XDB::iterRow(
ecc734a5 98 'SELECT user_id, nom, prenom, matricule, alias, FIND_IN_SET(\'watch\', u.flags), naissance_ini
0337d704 99 FROM auth_user_md5 AS u
100 INNER JOIN aliases AS a ON (u.user_id = a.id and FIND_IN_SET("bestalias", a.flags))
101 WHERE promo={?} AND deces=0 AND perms IN ("user","admin")', $promo);
ecc734a5 102 while (list($_uid, $_nom, $_prenom, $_mat, $alias, $watch, $naiss) = $res->next()) {
0337d704 103 if (user_cmp($prenom, $nom, $_prenom, $_nom)) {
104 $ourid = $_uid;
105 $ourmat = $_mat;
a7de4ef7 106 return "Tu es vraisemblablement déjà inscrit !";
0337d704 107 }
108 }
a7de4ef7 109 return "erreur: vérifie que tu as bien orthographié ton nom !";
0337d704 110}
111
112// }}}
113// {{{ function check_new_user
114
115function check_new_user(&$sub)
116{
0337d704 117 extract($sub);
118
119 $prenom = preg_replace("/[ \t]+/", ' ', trim($prenom));
eb8e3f3c 120 $prenom = preg_replace("/--+/", '-', $prenom);
121 $prenom = preg_replace("/''+/", '\'', $prenom);
0337d704 122 $prenom = make_firstname_case($prenom);
123
124 $nom = preg_replace("/[ \t]+/", ' ', trim($nom));
eb8e3f3c 125 $nom = preg_replace("/--+/", '-', $nom);
126 $nom = preg_replace("/''+/", '\'', $nom);
0337d704 127 $nom = strtoupper(replace_accent($nom));
128
129 if ($promo >= 1996) {
ecc734a5 130 $res = check_mat($promo, $mat, $nom, $prenom, $ourmat, $ourid, $watch, $naiss);
0337d704 131 } else {
ecc734a5 132 $res = check_old_mat($promo, $mat, $nom, $prenom, $ourmat, $ourid, $watch, $naiss);
0337d704 133 }
134 if ($res !== true) { return $res; }
135
136 $sub['nom'] = $nom;
137 $sub['prenom'] = $prenom;
138 $sub['ourmat'] = $ourmat;
139 $sub['uid'] = $ourid;
0be07aa6 140 $sub['watch'] = $watch;
ecc734a5 141 $sub['naissance_ini'] = $naiss;
0337d704 142
143 return true;
144}
145
146// }}}
147// {{{ function create_aliases
148
149function create_aliases (&$sub)
150{
115c90db 151 global $globals;
0337d704 152 extract ($sub);
153
a11b5424 154 require_once "xorg.misc.inc.php";
0337d704 155 $mailorg = make_username($prenom, $nom);
156 $mailorg2 = $mailorg.sprintf(".%02u", ($promo%100));
157 $forlife = make_forlife($prenom, $nom, $promo);
158
08cce2ff 159 $res = XDB::query('SELECT COUNT(*) FROM aliases WHERE alias={?}', $forlife);
0337d704 160 if ($res->fetchOneCell() > 0) {
161 return "Tu as un homonyme dans ta promo, il faut traiter ce cas manuellement.<br />".
d7dd70be 162 "envoie un mail à <a href=\"mailto:support@{$globals->mail->domain}</a>\">" .
163 "support@{$globals->mail->domain}</a> en expliquant ta situation.";
0337d704 164 }
eaf30d86 165
08cce2ff 166 $res = XDB::query('SELECT id, type, expire FROM aliases WHERE alias={?}', $mailorg);
0337d704 167
168 if ( $res->numRows() ) {
169
170 list($h_id, $h_type, $expire) = $res->fetchOneRow();
0337d704 171
172 if ( $h_type != 'homonyme' and empty($expire) ) {
08cce2ff 173 XDB::execute('UPDATE aliases SET expire=ADDDATE(NOW(),INTERVAL 1 MONTH) WHERE alias={?}', $mailorg);
174 XDB::execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $h_id);
175 XDB::execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $uid);
176 $res = XDB::query("SELECT alias FROM aliases WHERE id={?} AND expire IS NULL", $h_id);
0337d704 177 $als = $res->fetchColumn();
178
1e33266a 179 $mailer = new PlMailer();
1d55fe45 180 $mailer->setFrom('"Support Polytechnique.org" <support@' . $globals->mail->domain . '>');
181 $mailer->addTo("$mailorg@" . $globals->mail->domain);
0337d704 182 $mailer->setSubject("perte de ton alias $mailorg dans un mois !");
1d55fe45 183 $mailer->addCc('"Support Polytechnique.org" <support@' . $globals->mail->domain . '>');
0337d704 184 $msg =
e945001b 185 "Bonjour,\n\n".
eaf30d86 186
e945001b 187 "Un homonyme vient de s'inscrire. La politique de Polytechnique.org est de fournir des\n".
188 "adresses mail devinables, nous ne pouvons donc pas conserver ton alias '$mailorg' qui\n".
a7de4ef7 189 "correspond maintenant à deux personnes.\n\n".
eaf30d86 190
a7de4ef7 191 "Tu gardes tout de même l'usage de cet alias pour un mois encore à compter de ce jour.\n\n".
eaf30d86 192
a7de4ef7 193 "Lorsque cet alias sera désactivé, l'adresse $mailorg@polytechnique.org renverra vers un \n".
194 "robot qui indiquera qu'il y a plusieurs personnes portant le même nom ;\n".
195 "cela évite que l'un des homonymes reçoive des courriels destinés à l'autre.\n\n".
eaf30d86 196
e945001b 197 "Pour te connecter au site, tu pourras utiliser comme identifiant n'importe lequel de tes\n".
198 "autres alias :\n".
0337d704 199 " ".join(', ', $als)."\n";
a7de4ef7 200 "Commence dès aujourd'hui à communiquer à tes correspondants la nouvelle adresse que tu comptes utiliser !\n\n".
eaf30d86 201
a7de4ef7 202 "En nous excusant pour le désagrément occasionné,\n".
e945001b 203 "Cordialement,\n\n".
eaf30d86 204
0337d704 205 "-- \n".
a7de4ef7 206 "L'équipe de Polytechnique.org\n".
207 "\"Le portail des élèves & anciens élèves de l'X\"";
0337d704 208 $mailer->SetTxtBody(wordwrap($msg,72));
209 $mailer->send();
210 }
211
212 $sub['forlife'] = $forlife;
213 $sub['bestalias'] = $mailorg2;
214 $sub['mailorg2'] = null;
215 } else {
216 $sub['forlife'] = $forlife;
217 $sub['bestalias'] = $mailorg;
218 $sub['mailorg2'] = $mailorg2;
219 }
220
221 return true;
222}
223
224// }}}
225// {{{ function finish_ins
226
227function finish_ins($sub_state)
228{
229 global $globals;
230 extract($sub_state);
46bde4d1 231 require_once('secure_hash.inc.php');
0337d704 232
233 $pass = rand_pass();
f4ba548f 234 $pass_encrypted = hash_encrypt($pass);
0337d704 235 $hash = rand_url_id(12);
eaf30d86 236
08cce2ff 237 XDB::execute('UPDATE auth_user_md5 SET last_known_email={?} WHERE matricule = {?}', $email, $mat);
0337d704 238
08cce2ff 239 XDB::execute(
0337d704 240 "REPLACE INTO register_pending (uid, forlife, bestalias, mailorg2, password, email, date, relance, naissance, hash)
241 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, NOW(), 0, {?}, {?})",
46bde4d1 242 $uid, $forlife, $bestalias, $mailorg2, $pass_encrypted, $email, $naissance, $hash);
0337d704 243
1e33266a 244 $mymail = new PlMailer('register/inscrire.mail.tpl');
0337d704 245 $mymail->assign('mailorg', $bestalias);
246 $mymail->assign('lemail', $email);
247 $mymail->assign('pass', $pass);
248 $mymail->assign('baseurl', $globals->baseurl);
249 $mymail->assign('hash', $hash);
1d55fe45 250 $mymail->assign('subj', $bestalias."@" . $globals->mail->domain);
0337d704 251 $mymail->send();
252}
253
254// }}}
a7de4ef7 255// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
0337d704 256?>