Merge branch 'master' of /home/git/platal into profile_edit
[platal.git] / modules / register / register.inc.php
CommitLineData
0337d704 1<?php
2/***************************************************************************
5ddeb07c 3 * Copyright (C) 2003-2007 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);
787bb3d7 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{
0337d704 151 extract ($sub);
152
a11b5424 153 require_once "xorg.misc.inc.php";
0337d704 154 $mailorg = make_username($prenom, $nom);
155 $mailorg2 = $mailorg.sprintf(".%02u", ($promo%100));
156 $forlife = make_forlife($prenom, $nom, $promo);
157
08cce2ff 158 $res = XDB::query('SELECT COUNT(*) FROM aliases WHERE alias={?}', $forlife);
0337d704 159 if ($res->fetchOneCell() > 0) {
160 return "Tu as un homonyme dans ta promo, il faut traiter ce cas manuellement.<br />".
d7dd70be 161 "envoie un mail à <a href=\"mailto:support@{$globals->mail->domain}</a>\">" .
162 "support@{$globals->mail->domain}</a> en expliquant ta situation.";
0337d704 163 }
787bb3d7 164
08cce2ff 165 $res = XDB::query('SELECT id, type, expire FROM aliases WHERE alias={?}', $mailorg);
0337d704 166
167 if ( $res->numRows() ) {
168
169 list($h_id, $h_type, $expire) = $res->fetchOneRow();
0337d704 170
171 if ( $h_type != 'homonyme' and empty($expire) ) {
08cce2ff 172 XDB::execute('UPDATE aliases SET expire=ADDDATE(NOW(),INTERVAL 1 MONTH) WHERE alias={?}', $mailorg);
173 XDB::execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $h_id);
174 XDB::execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $uid);
175 $res = XDB::query("SELECT alias FROM aliases WHERE id={?} AND expire IS NULL", $h_id);
0337d704 176 $als = $res->fetchColumn();
177
1e33266a 178 $mailer = new PlMailer();
1d55fe45 179 $mailer->setFrom('"Support Polytechnique.org" <support@' . $globals->mail->domain . '>');
180 $mailer->addTo("$mailorg@" . $globals->mail->domain);
0337d704 181 $mailer->setSubject("perte de ton alias $mailorg dans un mois !");
1d55fe45 182 $mailer->addCc('"Support Polytechnique.org" <support@' . $globals->mail->domain . '>');
0337d704 183 $msg =
e945001b 184 "Bonjour,\n\n".
787bb3d7 185
e945001b 186 "Un homonyme vient de s'inscrire. La politique de Polytechnique.org est de fournir des\n".
187 "adresses mail devinables, nous ne pouvons donc pas conserver ton alias '$mailorg' qui\n".
a7de4ef7 188 "correspond maintenant à deux personnes.\n\n".
787bb3d7 189
a7de4ef7 190 "Tu gardes tout de même l'usage de cet alias pour un mois encore à compter de ce jour.\n\n".
787bb3d7 191
a7de4ef7 192 "Lorsque cet alias sera désactivé, l'adresse $mailorg@polytechnique.org renverra vers un \n".
193 "robot qui indiquera qu'il y a plusieurs personnes portant le même nom ;\n".
194 "cela évite que l'un des homonymes reçoive des courriels destinés à l'autre.\n\n".
787bb3d7 195
e945001b 196 "Pour te connecter au site, tu pourras utiliser comme identifiant n'importe lequel de tes\n".
197 "autres alias :\n".
0337d704 198 " ".join(', ', $als)."\n";
a7de4ef7 199 "Commence dès aujourd'hui à communiquer à tes correspondants la nouvelle adresse que tu comptes utiliser !\n\n".
787bb3d7 200
a7de4ef7 201 "En nous excusant pour le désagrément occasionné,\n".
e945001b 202 "Cordialement,\n\n".
787bb3d7 203
0337d704 204 "-- \n".
a7de4ef7 205 "L'équipe de Polytechnique.org\n".
206 "\"Le portail des élèves & anciens élèves de l'X\"";
0337d704 207 $mailer->SetTxtBody(wordwrap($msg,72));
208 $mailer->send();
209 }
210
211 $sub['forlife'] = $forlife;
212 $sub['bestalias'] = $mailorg2;
213 $sub['mailorg2'] = null;
214 } else {
215 $sub['forlife'] = $forlife;
216 $sub['bestalias'] = $mailorg;
217 $sub['mailorg2'] = $mailorg2;
218 }
219
220 return true;
221}
222
223// }}}
224// {{{ function finish_ins
225
226function finish_ins($sub_state)
227{
228 global $globals;
229 extract($sub_state);
46bde4d1 230 require_once('secure_hash.inc.php');
0337d704 231
232 $pass = rand_pass();
46bde4d1 233 $pass_encrypted = hash_encrypt($pass_clair);
0337d704 234 $hash = rand_url_id(12);
787bb3d7 235
08cce2ff 236 XDB::execute('UPDATE auth_user_md5 SET last_known_email={?} WHERE matricule = {?}', $email, $mat);
0337d704 237
08cce2ff 238 XDB::execute(
0337d704 239 "REPLACE INTO register_pending (uid, forlife, bestalias, mailorg2, password, email, date, relance, naissance, hash)
240 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, NOW(), 0, {?}, {?})",
46bde4d1 241 $uid, $forlife, $bestalias, $mailorg2, $pass_encrypted, $email, $naissance, $hash);
0337d704 242
1e33266a 243 $mymail = new PlMailer('register/inscrire.mail.tpl');
0337d704 244 $mymail->assign('mailorg', $bestalias);
245 $mymail->assign('lemail', $email);
246 $mymail->assign('pass', $pass);
247 $mymail->assign('baseurl', $globals->baseurl);
248 $mymail->assign('hash', $hash);
1d55fe45 249 $mymail->assign('subj', $bestalias."@" . $globals->mail->domain);
0337d704 250 $mymail->send();
251}
252
253// }}}
a7de4ef7 254// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
0337d704 255?>