Commit | Line | Data |
---|---|---|
0337d704 | 1 | <?php |
2 | /*************************************************************************** | |
12262f13 | 3 | * Copyright (C) 2003-2011 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 | ||
94590511 | 22 | // {{{ function checkId |
0337d704 | 23 | |
26ba053e | 24 | function checkId($subState) |
0337d704 | 25 | { |
94590511 SJ |
26 | $subState->set('xorgid', Profile::getXorgId($subState->i('schoolid'))); |
27 | if (!$subState->v('xorgid')) { | |
28 | return 'Le matricule est incorrect.'; | |
0337d704 | 29 | } |
30 | ||
94590511 | 31 | $uf = new UserFilter(new PFC_And( |
16c709a0 | 32 | new UFC_SchoolId('xorg', $subState->i('xorgid')), |
f09bdd3d FB |
33 | new PFC_Not(new UFC_Dead()), |
34 | new PFC_Not(new UFC_Registered(true)) | |
94590511 | 35 | )); |
4b0cf4e4 | 36 | $profile = $uf->getProfile(); |
f09bdd3d | 37 | if (is_null($profile)) { |
94590511 SJ |
38 | return "Tu es déjà inscrit ou ton matricule est incorrect !"; |
39 | } | |
f09bdd3d | 40 | |
4b0cf4e4 | 41 | if ($profile->promo() != $subState->s('promo')) { |
94590511 SJ |
42 | return 'Le matricule est incorrect.'; |
43 | } | |
0337d704 | 44 | |
4b0cf4e4 | 45 | if (!$profile->compareNames($subState->s('firstname'), $subState->s('lastname'))) { |
94590511 | 46 | return "Erreur dans l'identification. Réessaie, il y a une erreur quelque part !"; |
0337d704 | 47 | } |
48 | ||
4b0cf4e4 SJ |
49 | $subState->set('lastname', $profile->lastName()); |
50 | $subState->set('firstname', $profile->firstName()); | |
51 | $subState->set('uid', $profile->owner()->id()); | |
52 | $subState->set('watch', $profile->owner()->watch); | |
53 | $subState->set('birthdateRef', $profile->__get('birthdate_ref')); | |
0337d704 | 54 | return true; |
55 | } | |
56 | ||
57 | // }}} | |
94590511 | 58 | // {{{ function checkOldId |
0337d704 | 59 | |
26ba053e | 60 | function checkOldId($subState) |
0337d704 | 61 | { |
94590511 SJ |
62 | $uf = new UserFilter(new PFC_And( |
63 | new PFC_Not(new UFC_Dead()), | |
64 | new UFC_Promo('=', UserFilter::DISPLAY, $subState->s('promo')), | |
65 | new PFC_Not(new UFC_Registered(true)) | |
66 | )); | |
67 | $it = $uf->iterProfiles(); | |
68 | while ($profile = $it->next()) { | |
69 | if ($profile->compareNames($subState->s('firstname'), $subState->s('lastname'))) { | |
70 | $subState->set('lastname', $profile->lastName()); | |
71 | $subState->set('firstname', $profile->firstName()); | |
72 | $subState->set('uid', $profile->owner()->id()); | |
4b0cf4e4 | 73 | $subState->set('watch', $profile->owner()->watch); |
94590511 SJ |
74 | $subState->set('birthdateRef', $profile->__get('birthdate_ref')); |
75 | $subState->set('xorgid', $profile->__get('xorg_id')); | |
0337d704 | 76 | return true; |
77 | } | |
78 | } | |
79 | ||
94590511 SJ |
80 | $uf = new UserFilter(new PFC_And( |
81 | new PFC_Not(new UFC_Dead()), | |
82 | new UFC_Promo('=', UserFilter::DISPLAY, $subState->s('promo')), | |
83 | new UFC_Registered(true) | |
84 | )); | |
85 | $it = $uf->iterProfiles(); | |
86 | while ($profile = $it->next()) { | |
87 | if ($profile->compareNames($subState->s('firstname'), $subState->s('lastname'))) { | |
88 | $subState->set('uid', $profile->owner()->id()); | |
4b0cf4e4 | 89 | $subState->set('watch', $profile->owner()->watch); |
94590511 SJ |
90 | $subState->set('birthdateRef', $profile->__get('birthdate_ref')); |
91 | $subState->set('xorgid', $profile->__get('xorg_id')); | |
92 | return 'Tu es vraisemblablement déjà inscrit !'; | |
0337d704 | 93 | } |
94 | } | |
94590511 | 95 | return 'Erreur : vérifie que tu as bien orthographié ton nom !'; |
0337d704 | 96 | } |
97 | ||
98 | // }}} | |
94590511 | 99 | // {{{ function checkNewUser |
0337d704 | 100 | |
26ba053e | 101 | function checkNewUser($subState) |
0337d704 | 102 | { |
94590511 SJ |
103 | $firstname = preg_replace("/[ \t]+/", ' ', $subState->t('firstname')); |
104 | $firstname = preg_replace("/--+/", '-', $firstname); | |
105 | $firstname = preg_replace("/''+/", '\'', $firstname); | |
106 | $subState->set('firstname', PlUser::fixFirstnameCase($firstname)); | |
107 | ||
108 | $lastname = preg_replace("/[ \t]+/", ' ', $subState->t('lastname')); | |
109 | $lastname = preg_replace("/--+/", '-', $lastname); | |
110 | $lastname = preg_replace("/''+/", '\'', $lastname); | |
111 | $subState->set('lastname', mb_strtoupper($lastname)); | |
112 | ||
f0a52f1b | 113 | if ($subState->i('yearpromo') >= 1996 && $subState->v('edu_type') == 'X') { |
94590511 | 114 | $res = checkId($subState); |
0337d704 | 115 | } else { |
94590511 SJ |
116 | $res = checkOldId($subState); |
117 | } | |
f0a52f1b SJ |
118 | if ($subState->v('edu_type') != 'X' && |
119 | $subState->v('xorgid') != $subState->v('schoolid')) { | |
120 | return 'Le matricule est incorrect.'; | |
121 | } | |
94590511 SJ |
122 | if ($res !== true) { |
123 | return $res; | |
0337d704 | 124 | } |
0337d704 | 125 | |
126 | return true; | |
127 | } | |
128 | ||
129 | // }}} | |
94590511 | 130 | // {{{ function createAliases |
0337d704 | 131 | |
26ba053e | 132 | function createAliases($subState) |
0337d704 | 133 | { |
115c90db | 134 | global $globals; |
0337d704 | 135 | |
94590511 SJ |
136 | $emailXorg = PlUser::makeUserName($subState->t('firstname'), $subState->t('lastname')); |
137 | $emailXorg2 = $emailXorg . sprintf(".%02u", ($subState->i('yearpromo') % 100)); | |
0337d704 | 138 | |
f0a52f1b | 139 | $res = XDB::query("SELECT hruid, state, type |
94590511 | 140 | FROM accounts |
4c5a5921 FB |
141 | WHERE uid = {?} AND hruid != ''", |
142 | $subState->i('uid')); | |
56081a9c VZ |
143 | if ($res->numRows() == 0) { |
144 | return "Tu n'as pas d'adresse à vie pré-attribuée.<br />" | |
4c5a5921 | 145 | . "Envoie un mail à <a href=\"mailto:support@{$globals->mail->domain}\">" |
56081a9c VZ |
146 | . "support@{$globals->mail->domain}</a> en expliquant ta situation."; |
147 | } else { | |
f0a52f1b | 148 | list($forlife, $state, $type) = $res->fetchOneRow(); |
4c5a5921 FB |
149 | } |
150 | if ($state == 'active') { | |
151 | return "Tu es déjà inscrit, si tu ne te souviens plus de ton mot de passe d'accès au site, " | |
152 | . "tu peux suivre <a href=\"recovery\">la procédure de récupération de mot de passe</a>."; | |
153 | } else if ($state == 'disabled') { | |
154 | return "Ton compte a été désactivé par les administrateurs du site suite à des abus. " | |
155 | . "Pour plus d'information ou pour demander la réactivation du compte, tu peux t'adresser à " | |
156 | . "<a href=\"mailto:support@{$globals->mail->domain}\">support@{$globals->mail->domain}</a>."; | |
0337d704 | 157 | } |
eaf30d86 | 158 | |
f0a52f1b SJ |
159 | $res = XDB::query('SELECT uid, expire |
160 | FROM email_source_account | |
161 | WHERE email = {?} AND type != \'alias_aux\'', | |
162 | $emailXorg); | |
163 | if ($res->numRows()) { | |
f036c896 SJ |
164 | list($h_id, $expire) = $res->fetchOneRow(); |
165 | if (empty($expire)) { | |
166 | XDB::execute('UPDATE email_source_account | |
167 | SET expire = ADDDATE(NOW(), INTERVAL 1 MONTH) | |
168 | WHERE email = {?} AND type != \'alias_aux\'', | |
169 | $emailXorg); | |
f88d9154 | 170 | $hrmid = User::makeHomonymHrmid($emailXorg); |
4371e993 | 171 | XDB::execute('INSERT IGNORE INTO homonyms_list (hrmid, uid) |
00ba8a74 | 172 | VALUES ({?}, {?}), ({?}, {?})', |
4371e993 | 173 | $hrmid, $h_id, $hrmid, $subState->i('uid')); |
f036c896 SJ |
174 | $als = XDB::fetchColumn('SELECT email |
175 | FROM email_source_account | |
176 | WHERE uid = {?} AND type != \'alias_aux\' AND expire IS NULL', | |
177 | $h_id); | |
0337d704 | 178 | |
f036c896 | 179 | $homonym = User::getSilentWithUID($h_id); |
94590511 | 180 | $mailer = new PlMailer('register/lostalias.mail.tpl'); |
f036c896 | 181 | $mailer->addTo($homonym); |
94590511 SJ |
182 | $mailer->setSubject("Perte de ton alias $emailXorg dans un mois !"); |
183 | $mailer->assign('emailXorg', $emailXorg); | |
184 | $mailer->assign('als', join(', ', $als)); | |
0337d704 | 185 | $mailer->SetTxtBody(wordwrap($msg,72)); |
186 | $mailer->send(); | |
187 | } | |
188 | ||
94590511 SJ |
189 | $subState->set('forlife', $forlife); |
190 | $subState->set('bestalias', $emailXorg2); | |
191 | $subState->set('emailXorg2', null); | |
0337d704 | 192 | } else { |
94590511 SJ |
193 | $subState->set('forlife', $forlife); |
194 | $subState->set('bestalias', $emailXorg); | |
195 | $subState->set('emailXorg2', $emailXorg2); | |
0337d704 | 196 | } |
f0a52f1b | 197 | $subState->set('main_mail_domain', User::$sub_mail_domains[$type] . Platal::globals()->mail->domain); |
0337d704 | 198 | |
199 | return true; | |
200 | } | |
201 | ||
202 | // }}} | |
94590511 | 203 | // {{{ function finishRegistration |
0337d704 | 204 | |
94590511 | 205 | function finishRegistration($subState) |
0337d704 | 206 | { |
207 | global $globals; | |
0337d704 | 208 | |
97a82cd2 | 209 | $hash = rand_url_id(12); |
b4b8ebbf JPAMAJ |
210 | XDB::execute('INSERT INTO register_pending (uid, forlife, bestalias, mailorg2, password, |
211 | email, date, relance, naissance, hash, services) | |
212 | VALUES ({?}, {?}, {?}, {?}, {?}, {?}, NOW(), 0, {?}, {?}, {?}) | |
213 | ON DUPLICATE KEY UPDATE password=VALUES(password), email=VALUES(email), | |
214 | date=VALUES(date), naissance=VALUES(naissance), | |
215 | hash=VALUES(hash), services=VALUES(services)', | |
94590511 SJ |
216 | $subState->i('uid'), $subState->s('forlife'), $subState->s('bestalias'), |
217 | $subState->s('emailXorg2'), $subState->s('password'), $subState->s('email'), | |
218 | $subState->s('birthdate'), $hash, implode(',', $subState->v('services'))); | |
219 | ||
220 | $mymail = new PlMailer('register/end.mail.tpl'); | |
221 | $mymail->assign('emailXorg', $subState->s('bestalias')); | |
4b0cf4e4 | 222 | $mymail->assign('to', $subState->s('email')); |
0337d704 | 223 | $mymail->assign('baseurl', $globals->baseurl); |
94590511 | 224 | $mymail->assign('hash', $hash); |
f036c896 | 225 | $mymail->assign('subject', ucfirst($globals->mail->domain) . ' : ' . $subState->s('bestalias')); |
0337d704 | 226 | $mymail->send(); |
227 | } | |
228 | ||
229 | // }}} | |
a7de4ef7 | 230 | // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: |
0337d704 | 231 | ?> |