backport : demande de confirmation pour la suppression d'un evenement
[platal.git] / include / register.inc.php
CommitLineData
0337d704 1<?php
2/***************************************************************************
3 * Copyright (C) 2003-2004 Polytechnique.org *
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);
34
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// }}}
47// {{{ function get_X_mat
48function get_X_mat($ourmat)
49{
50 if (!preg_match('/^[0-9]{8}$/', $ourmat)) {
51 // le matricule de notre base doit comporter 8 chiffres
52 return 0;
53 }
54
55 $year = intval(substr($ourmat, 0, 4));
56 $rang = intval(substr($ourmat, 5, 3));
57 if ($year < 1996) {
58 return;
59 } elseif ($year < 2000) {
60 $year = intval(substr(1900 - $year, 1, 3));
61 return sprintf('%02u0%03u', $year, $rang);
62 } else {
63 $year = intval(substr(1900 - $year, 1, 3));
64 return sprintf('%03u%03u', $year, $rang);
65 }
66}
67
68// }}}
69// {{{ function check_mat
70
71function check_mat($promo, $mat, $nom, $prenom, &$ourmat, &$ourid)
72{
73 global $globals;
74 if (!preg_match('/^[0-9][0-9][0-9][0-9][0-9][0-9]$/', $mat)) {
75 return "Le matricule doit comporter 6 chiffres.";
76 }
77
78 $year = intval(substr($mat, 0, 3));
79 $rang = intval(substr($mat, 3, 3));
80 if ($year > 200) { $year /= 10; };
81 if ($year < 96) {
82 return "ton matricule est incorrect";
83 } else {
84 $ourmat = sprintf('%04u%04u', 1900+$year, $rang);
85 }
86
87 $res = $globals->xdb->query(
88 'SELECT user_id, promo, perms IN ("admin","user"), nom, prenom
89 FROM auth_user_md5
90 WHERE matricule={?} and deces = 0', $ourmat);
91 list ($uid, $_promo, $_already, $_nom, $_prenom) = $res->fetchOneRow();
92 if ($_already) { return "tu es déjà inscrit ou ton matricule est incorrect !"; }
93 if ($_promo != $promo) { return "erreur de matricule"; }
94
95 if (!user_cmp($prenom, $nom, $_prenom, $_nom)) {
96 return "erreur dans l'identification. Réessaie, il y a une erreur quelque part !";
97 }
98
99 $ourid = $uid;
100 return true;
101}
102
103// }}}
104// {{{ function check_old_mat
105
106function check_old_mat($promo, $mat, $nom, $prenom, &$ourmat, &$ourid)
107{
108 global $globals;
109
110 $res = $globals->xdb->iterRow(
111 'SELECT user_id, nom, prenom, matricule
112 FROM auth_user_md5
113 WHERE promo={?} AND deces=0 AND perms="pending"', $promo);
114 while (list($_uid, $_nom, $_prenom, $_mat) = $res->next()) {
115 if (user_cmp($prenom, $nom, $_prenom, $_nom)) {
116 $ourid = $_uid;
117 $ourmat = $_mat;
118 return true;
119 }
120 }
121
122 $res = $globals->xdb->iterRow(
123 'SELECT user_id, nom, prenom, matricule, alias
124 FROM auth_user_md5 AS u
125 INNER JOIN aliases AS a ON (u.user_id = a.id and FIND_IN_SET("bestalias", a.flags))
126 WHERE promo={?} AND deces=0 AND perms IN ("user","admin")', $promo);
127 while (list($_uid, $_nom, $_prenom, $_mat, $alias) = $res->next()) {
128 if (user_cmp($prenom, $nom, $_prenom, $_nom)) {
129 $ourid = $_uid;
130 $ourmat = $_mat;
131 return "Tu es vraissemblablement déjà inscrit !";
132 }
133 }
134 return "erreur: vérifie que tu as bien orthographié ton nom !";
135}
136
137// }}}
138// {{{ function check_new_user
139
140function check_new_user(&$sub)
141{
142 global $globals;
143 extract($sub);
144
145 $prenom = preg_replace("/[ \t]+/", ' ', trim($prenom));
eb8e3f3c 146 $prenom = preg_replace("/--+/", '-', $prenom);
147 $prenom = preg_replace("/''+/", '\'', $prenom);
0337d704 148 $prenom = make_firstname_case($prenom);
149
150 $nom = preg_replace("/[ \t]+/", ' ', trim($nom));
eb8e3f3c 151 $nom = preg_replace("/--+/", '-', $nom);
152 $nom = preg_replace("/''+/", '\'', $nom);
0337d704 153 $nom = strtoupper(replace_accent($nom));
154
155 if ($promo >= 1996) {
156 $res = check_mat($promo, $mat, $nom, $prenom, $ourmat, $ourid);
157 } else {
158 $res = check_old_mat($promo, $mat, $nom, $prenom, $ourmat, $ourid);
159 }
160 if ($res !== true) { return $res; }
161
162 $sub['nom'] = $nom;
163 $sub['prenom'] = $prenom;
164 $sub['ourmat'] = $ourmat;
165 $sub['uid'] = $ourid;
166
167 return true;
168}
169
170// }}}
171// {{{ function create_aliases
172
173function create_aliases (&$sub)
174{
175 global $globals;
176 extract ($sub);
177
178 $mailorg = make_username($prenom, $nom);
179 $mailorg2 = $mailorg.sprintf(".%02u", ($promo%100));
180 $forlife = make_forlife($prenom, $nom, $promo);
181
182 $res = $globals->xdb->query('SELECT COUNT(*) FROM aliases WHERE alias={?}', $forlife);
183 if ($res->fetchOneCell() > 0) {
184 return "Tu as un homonyme dans ta promo, il faut traiter ce cas manuellement.<br />".
185 "envoie un mail à <a href=\"mailto:support@polytechnique.org\">support@polytechnique.org</a> en expliquant ta situation.";
186 }
187
188 $res = $globals->xdb->query('SELECT id, type, expire FROM aliases WHERE alias={?}', $mailorg);
189
190 if ( $res->numRows() ) {
191
192 list($h_id, $h_type, $expire) = $res->fetchOneRow();
193 $res->free();
194
195 if ( $h_type != 'homonyme' and empty($expire) ) {
196 $globals->xdb->execute('UPDATE aliases SET expire=ADDDATE(NOW(),INTERVAL 1 MONTH) WHERE alias={?}', $mailorg);
197 $globals->xdb->execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $h_id);
198 $globals->xdb->execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $uid);
199 $res = $globals->xdb->query("SELECT alias FROM aliases WHERE id={?} AND expire IS NULL", $h_id);
200 $als = $res->fetchColumn();
201
202 require_once('diogenes/diogenes.hermes.inc.php');
203 $mailer = new HermesMailer();
204 $mailer->setFrom('"Support Polytechnique.org" <support@polytechnique.org>');
205 $mailer->addTo("$mailorg@polytechnique.org");
206 $mailer->setSubject("perte de ton alias $mailorg dans un mois !");
207 $mailer->addCc('"Support Polytechnique.org" <support@polytechnique.org>');
208 $msg =
209 "Un homonyme s'est inscrit, nous ne pouvons donc garder ton alias '$mailorg'.\n\n".
210 "Tu gardes tout de même l'usage de cet alias pour un mois encore à compter de ce jour.\n\n".
211 "Lorsque cet alias sera désactivé, l'adresse :\n".
212 " $mailorg@polytechnique.org\n".
213 "renverra vers un robot qui indique qu'il y a plusieurs personnes portant le même nom ;\n".
214 "cela évite que l'un des homonymes reçoive des courriels destinés à l'autre.\n\n".
215 "Pour te connecter au site, tu pourras utiliser comme identifiant n'importe lequel de tes autres alias :\n".
216 " ".join(', ', $als)."\n";
217 "Commence dès aujourd'hui à communiquer à tes correspondants la nouvelle adresse que tu comptes utiliser !\n\n".
218 "En nous excusant pour le désagrément occasionné,\n".
219 "cordialement,\n".
220 "-- \n".
221 "L'équipe de Polytechnique.org\n".
222 "\"Le portail des élèves & anciens élèves de l'X\"";
223 $mailer->SetTxtBody(wordwrap($msg,72));
224 $mailer->send();
225 }
226
227 $sub['forlife'] = $forlife;
228 $sub['bestalias'] = $mailorg2;
229 $sub['mailorg2'] = null;
230 } else {
231 $sub['forlife'] = $forlife;
232 $sub['bestalias'] = $mailorg;
233 $sub['mailorg2'] = $mailorg2;
234 }
235
236 return true;
237}
238
239// }}}
240// {{{ function finish_ins
241
242function finish_ins($sub_state)
243{
244 global $globals;
245 extract($sub_state);
246
247 $pass = rand_pass();
248 $pass_md5 = md5($pass_clair);
249 $hash = rand_url_id(12);
250
251 $globals->xdb->execute('UPDATE auth_user_md5 SET last_known_email={?} WHERE matricule = {?}', $email, $mat);
252
253 $globals->xdb->execute(
254 "REPLACE INTO register_pending (uid, forlife, bestalias, mailorg2, password, email, date, relance, naissance, hash)
255 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, NOW(), 0, {?}, {?})",
256 $uid, $forlife, $bestalias, $mailorg2, $pass_md5, $email, $naissance, $hash);
257
258 require_once('xorg.mailer.inc.php');
259 $mymail = new XOrgMailer('inscrire.mail.tpl');
260 $mymail->assign('mailorg', $bestalias);
261 $mymail->assign('lemail', $email);
262 $mymail->assign('pass', $pass);
263 $mymail->assign('baseurl', $globals->baseurl);
264 $mymail->assign('hash', $hash);
265 $mymail->assign('subj', $bestalias."@polytechnique.org");
266 $mymail->send();
267}
268
269// }}}
270?>