X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fregister.php;h=340c2905656069229996c8cc1bab3a2aaa7c06c8;hb=1d49ff4ae684f13250408798f4b0a945797a5229;hp=177580e73afadcd7f1fd85ec8e86c17dcc7cc82a;hpb=e46cf8c46341b447cc3701c8afcc9baec3da11e5;p=platal.git
diff --git a/modules/register.php b/modules/register.php
index 177580e..340c290 100644
--- a/modules/register.php
+++ b/modules/register.php
@@ -1,6 +1,6 @@
fetchOneRow()) {
- $sub_state['uid'] = $uid;
- $sub_state['hash'] = $hash;
- $sub_state['promo'] = $promo;
- $sub_state['nom'] = $nom;
- $sub_state['prenom'] = $prenom;
- $sub_state['ourmat'] = $ourmat;
- $sub_state['watch'] = $watch;
- $sub_state['naissance_ini'] = $naiss;
-
- XDB::execute(
- "REPLACE INTO register_mstats (uid,sender,success)
- SELECT m.uid, m.sender, 0
+ require_once 'directory.enums.inc.php';
+
+ $nameTypes = DirEnum::getOptionsArray(DirEnum::NAMETYPES);
+ $nameTypes = array_flip($nameTypes);
+ $res = XDB::query("SELECT a.uid, pd.promo, pnl.name AS lastname, pnf.name AS firstname, p.xorg_id,
+ p.birthdate_ref, FIND_IN_SET('watch', a.flags)
FROM register_marketing AS m
- WHERE m.hash", $sub_state['hash']);
+ INNER JOIN accounts AS a ON (m.uid = a.uid)
+ INNER JOIN account_profiles AS ap ON (a.uid = ap.id AND FIND_IN_SET('owner', ap.perms))
+ INNER JOIN profiles AS p ON (p.pid = ap.id)
+ INNER JOIN profile_display AS pd ON (p.pid = pd.pid)
+ INNER JOIN profile_name AS pnl ON (p.pid = pnl.pid AND pnl.typeid = {?})
+ INNER JOIN profile_name AS pnf ON (p.pid = pnf.pid AND pnf.typeid = {?})
+ WHERE m.hash = {?}",
+ $nameTypes['name_ini'], $nameTypes['firstname_ini'], $hash);
+
+ if (list($uid, $promo, $lastname, $firstname, $xorgid, $birthdate, $watch) = $res->fetchOneRow()) {
+ $sub_state['uid'] = $uid;
+ $sub_state['hash'] = $hash;
+ $sub_state['yearpromo'] = substr($promo, 1, 4);
+ $sub_state['promo'] = $promo;
+ $sub_state['lastname'] = $lastname;
+ $sub_state['firstname'] = $firstname;
+ $sub_state['xorgid'] = $xorgid;
+ $sub_state['birthdate_ref'] = $birthdate;
+ $sub_state['watch'] = $watch;
+
+ XDB::execute('REPLACE INTO register_mstats (uid,sender,success)
+ SELECT m.uid, m.sender, 0
+ FROM register_marketing AS m
+ WHERE m.hash',
+ $sub_state['hash']);
}
}
@@ -89,21 +101,26 @@ class RegisterModule extends PLModule
case 1:
if (Post::has('promo')) {
- $promo = Post::i('promo');
- $res = XDB::query("SELECT COUNT(*)
- FROM auth_user_md5
- WHERE perms='pending' AND deces = '0000-00-00'
- AND promo = {?}",
+ $promo = Post::t('edu_type') . Post::t('promo');
+ $yearpromo = Post::i('promo');
+ $res = XDB::query("SELECT COUNT(*)
+ FROM accounts AS a
+ INNER JOIN account_profile AS pa ON (a.uid = pa.uid AND FIND_IN_SET('owner', ap.perms))
+ INNER JOIN profile AS p ON (p.pid = pa.pid)
+ INNER JOIN profile_display AS pd ON (p.pid = pd.pid)
+ WHERE a.state = 'pending' AND p.deathdate IS NULL AND pd.promo = {?}",
$promo);
+
if (!$res->fetchOneCell()) {
- $err = "La promotion saisie est incorrecte ou tous les camarades de cette promotion sont inscrits !";
+ $error = 'La promotion saisie est incorrecte ou tous les camarades de cette promotion sont inscrits !';
} else {
$sub_state['step'] = 2;
$sub_state['promo'] = $promo;
- if ($promo >= 1996 && $promo<2000) {
- $sub_state['mat'] = ($promo % 100)*10 . '???';
- } elseif($promo >= 2000) {
- $sub_state['mat'] = 100 + ($promo % 100) . '???';
+ $sub_state['yearpromo'] = $yearpromo;
+ if ($yearpromo >= 1996 && $yearpromo < 2000) {
+ $sub_state['schoolid'] = ($yearpromo % 100) * 10 . '???';
+ } elseif($yearpromo >= 2000) {
+ $sub_state['schoolid'] = 100 + ($yearpromo % 100) . '???';
}
}
}
@@ -112,15 +129,17 @@ class RegisterModule extends PLModule
case 2:
if (count($_POST)) {
$this->load('register.inc.php');
- $sub_state['prenom'] = Post::v('prenom');
- $sub_state['nom'] = Post::v('nom');
- $sub_state['mat'] = Post::v('mat');
- $err = check_new_user($sub_state);
-
- if ($err !== true) { break; }
- $err = create_aliases($sub_state);
- if ($err === true) {
- unset($err);
+ $sub_state['firstname'] = Post::v('firstname');
+ $sub_state['lastname'] = Post::v('lastname');
+ $sub_state['schoolid'] = Post::v('schoolid');
+ $error = check_new_user($sub_state);
+
+ if ($error !== true) {
+ break;
+ }
+ $error = create_aliases($sub_state);
+ if ($error === true) {
+ unset($error);
$sub_state['step'] = 3;
}
}
@@ -132,26 +151,29 @@ class RegisterModule extends PLModule
// Validate the email address format and domain.
require_once 'emails.inc.php';
+
if (!isvalid_email(Post::v('email'))) {
- $err[] = "Le champ 'Email' n'est pas valide.";
+ $error[] = "Le champ 'Email' n'est pas valide.";
} elseif (!isvalid_email_redirection(Post::v('email'))) {
- $err[] = $sub_state['forlife']." doit renvoyer vers un email existant ".
- "valide, en particulier, il ne peut pas être renvoyé vers lui-même.";
+ $error[] = $sub_state['forlife'] . ' doit renvoyer vers un email existant '
+ . 'valide, en particulier, il ne peut pas être renvoyé vers lui-même.';
}
// Validate the birthday format and range.
- $birth = trim(Env::v('naissance'));
+ $birth = trim(Env::v('birthdate'));
if (!preg_match('@^[0-3]?\d/[01]?\d/(19|20)?\d{2}$@', $birth)) {
- $err[] = "La 'Date de naissance' n'est pas correcte.";
+ $error[] = "La 'Date de naissance' n'est pas correcte.";
} else {
$birth = explode('/', $birth, 3);
- for ($i = 0; $i < 3; $i++)
+ for ($i = 0; $i < 3; ++$i)
$birth[$i] = intval($birth[$i]);
- if ($birth[2] < 100) $birth[2] += 1900;
+ if ($birth[2] < 100) {
+ $birth[2] += 1900;
+ }
$year = $birth[2];
- $promo = (int)$sub_state['promo'];
+ $promo = (int) $sub_state['promo'];
if ($year > $promo - 15 || $year < $promo - 30) {
- $err[] = "La 'Date de naissance' n'est pas correcte.";
+ $error[] = "La 'Date de naissance' n'est pas correcte.";
$alert = "Date de naissance incorrecte à l'inscription - ";
$sub_state['wrong_naissance'] = $birth;
}
@@ -168,14 +190,14 @@ class RegisterModule extends PLModule
// Validate the password.
if (!Post::v('response2', false)) {
- $err[] = "Le mot de passe n'est pas valide.";
+ $error[] = "Le mot de passe n'est pas valide.";
}
// Check if the given email is known as dangerous.
$res = XDB::query("SELECT w.state, w.description
- FROM emails_watch AS w
+ FROM email_watch AS w
WHERE w.email = {?} AND w.state != 'safe'",
- Post::v('email'));
+ Post::v('email'));
$email_banned = false;
if ($res->numRows()) {
list($state, $description) = $res->fetchOneRow();
@@ -190,20 +212,21 @@ class RegisterModule extends PLModule
}
if (($ip_banned = check_ip('unsafe'))) {
- unset($err);
+ unset($error);
}
- if (isset($err)) {
- $err = join('
', $err);
+ if (isset($error)) {
+ $error = join('
', $error);
} else {
- $sub_state['naissance'] = sprintf("%04d-%02d-%02d",
+ $sub_state['birthdate'] = sprintf("%04d-%02d-%02d",
intval($birth[2]), intval($birth[1]), intval($birth[0]));
$sub_state['email'] = Post::v('email');
$sub_state['password'] = Post::v('response2');
// Update the current alert if the birthdate is incorrect,
// or if the IP address of the user has been banned.
- if ($sub_state['naissance_ini'] != '0000-00-00' && $sub_state['naissance'] != $sub_state['naissance_ini']) {
+ if ($sub_state['birthdate_ref'] != '0000-00-00'
+ && $sub_state['birthdate_ref'] != $sub_state['birthdate']) {
$alert .= "Date de naissance incorrecte à l'inscription - ";
}
if ($ip_banned) {
@@ -213,14 +236,14 @@ class RegisterModule extends PLModule
// Prevent banned user from actually registering; save the current state for others.
if ($email_banned || $ip_banned) {
global $globals;
- $err = "Une erreur s'est produite lors de l'inscription."
+ $error = "Une erreur s'est produite lors de l'inscription."
. " Merci de contacter = 3) {
- $alert .= "Fin d'une inscription hésitante";
+ $alert .= "Fin d'une inscription hésitante.";
}
finish_ins($sub_state);
}
@@ -236,8 +259,8 @@ class RegisterModule extends PLModule
$page->changeTpl('register/step'.intval($sub_state['step']).'.tpl');
$page->addJsLink('motdepasse.js');
- if (isset($err)) {
- $page->trigError($err);
+ if (isset($error)) {
+ $page->trigError($error);
}
}
@@ -249,14 +272,13 @@ class RegisterModule extends PLModule
// Reject registration requests from unsafe IP addresses (and remove the
// registration information from the database, to prevent IP changes).
if (check_ip('unsafe')) {
- send_warning_mail('Une IP surveillée a tenté de finaliser son inscription');
+ send_warning_mail('Une IP surveillée a tenté de finaliser son inscription.');
XDB::execute("DELETE FROM register_pending
WHERE hash = {?} AND hash != 'INSCRIT'", $hash);
return PL_FORBIDDEN;
}
- require_once('user.func.inc.php');
-
+ // /* TODO */
// Retrieve the pre-registration information using the url-provided
// authentication token.
if ($hash) {
@@ -325,7 +347,7 @@ class RegisterModule extends PLModule
}
// Add the registration email address as first and only redirection.
- require_once('emails.inc.php');
+ require_once 'emails.inc.php';
$user = User::getSilent($uid);
$redirect = new Redirect($user);
$redirect->add_email($email);
@@ -342,16 +364,15 @@ class RegisterModule extends PLModule
AXLetter::subscribe(S::user()->id());
break;
case 'imap':
- require_once 'emails.inc.php';
$user = S::user();
$storage = new EmailStorage($user, 'imap');
$storage->activate();
break;
case 'ml_promo':
- $r = XDB::query('SELECT id FROM groupex.asso WHERE diminutif = {?}', S::user()->promo());
+ $r = XDB::query('SELECT id FROM groups WHERE diminutif = {?}', S::user()->promo());
if ($r->numRows()) {
$asso_id = $r->fetchOneCell();
- XDB::execute('REPLACE INTO groupex.membres (uid, asso_id)
+ XDB::execute('REPLACE INTO group_members (uid, asso_id)
VALUES ({?}, {?})',
S::user()->id(), $asso_id);
$mmlist = new MMList(S::user()->id(), S::v('password'));
@@ -378,8 +399,7 @@ class RegisterModule extends PLModule
$mymail->send();
// Index the user, to allow her to appear in searches.
- require_once('user.func.inc.php');
- user_reindex($uid);
+ Profile::rebuildSearchTokens($uid);
// Notify other users which were watching for her arrival.
require_once 'notifs.inc.php';
@@ -390,9 +410,9 @@ class RegisterModule extends PLModule
$promo_forum = 'xorg.promo.x' . $promo;
$registered_forums = array('xorg.general', 'xorg.pa.divers', 'xorg.pa.logements', $promo_forum);
foreach ($registered_forums as $forum) {
- XDB::execute("INSERT INTO forums.abos (fid,uid)
+ XDB::execute("INSERT INTO #forums#.abos (fid,uid)
SELECT fid, {?}
- FROM forums.list
+ FROM #forums#.list
WHERE nom = {?}",
$uid, $val);