function suscribe($param_mail, $param_mail_token) { if ($this->session->islogged()) { $this->redirect("?home/"); } if (!$this->controlParam()) { $this->error(Conf::DEBUG ? "Erreur [" . get_class($this) . " " . __LINE__ . "] : Un des paramètres n'a pas le bon type ou est mal configuré, ou l'utilisateur n'existe pas." : "L'url spécifiée n'existe pas."); } $erreurs = array(); $notifications = array(); $soumis = $this->request->data ? $this->request->data : null; $form = array('mail' => $param_mail, 'pass' => '', 'pass2' => '', 'login' => '', 'temperament' => ''); if (Session::getToken('inscription') === false) { Session::addToken(array('name' => 'inscription', 'limit_time' => 10 * 60, 'time' => time())); } $token = Session::getToken('inscription'); if ($soumis) { // à ce niveau, le formulaire a été envoyé. /* Si la requete provient d'un autre site ou n'a pas de http_referer (a été directement écrite dans l'url) * on la rejette illico */ //on rejette les requetes extérieures ou tapées dans l'url ou par un autre moyen que post if ($this->request->is('no-origin') || !Session::isValidToken('inscription')) { $message = 'Erreur [MEM ' . __LINE__ . '] : La requête a échouée. Veuillez réactualiser la page.'; $this->error($message); return false; } //on vérifie aussi que le token enregistré et celui envoyé sont les mêmes if ($token['value'] !== $soumis['token']) { $this->redirect('?membre/suscribe/' . $param_mail . '/' . $param_mail_token); } if (empty($erreurs)) { $_SESSION['saveform'] = $soumis; unset($soumis); $this->redirect('?membre/suscribe/' . $param_mail . '/' . $param_mail_token); } } if (isset($_SESSION['saveform'])) { $soumis = $_SESSION['saveform']; unset($_SESSION['saveform']); if (!Session::isValidToken('inscription')) { $this->error("Le temps de soumission est dépassé. Veuillez recharger la page."); return false; } $form = array('mail' => PregFucntions::sanitize_string($soumis['mail']), 'pass' => PregFucntions::sanitize_string($soumis['pass']), 'pass2' => PregFucntions::sanitize_string($soumis['pass2']), 'login' => PregFucntions::sanitize_string($soumis['login']), 'year' => PregFucntions::sanitize_string($soumis['year']), 'ue' => PregFucntions::sanitize_string($soumis['ue']), 'temperament' => PregFucntions::sanitize_string($soumis['temperament']), 'renew_pass' => Session::genereToken(), 'droit' => 'user', 'etat' => 0); //on s'assure que le cours corrsepond à l'année Ex: algpr => ei1 $find = $this->reseau->find(array('conditions' => 'net_niveau = ' . $form['year'] . ' AND net_nom = ' . Functions::squote($form['ue']) . ' ', 'fecthMethod' => PDO::FETCH_ASSOC)); if (!$find) { $erreurs[] = "L'ue ne correspond pas à l'année choisie."; } if (!(substr($form['mail'], strrpos($form['mail'], '@')) === '@eleves.ec-nantes.fr')) { $erreurs[] = "Vous n'êtes pas de l'école Centrale. Il vous faut un mail du type xxx@eleves.ec-nantes.fr"; } if (!PregFucntions::verifyAlphaNum($form['login'])) { $erreurs[] = "Le login ne doit contenir que des caractères alphanumériques, espaces, tirets et apostrophes"; } if (!PregFucntions::verifyLength($form['login'], 6, 30)) { $erreurs[] = "Le login doit contenir entre 6 et 30 caractères, le login entre 6 et 30."; } if (!is_string($form['temperament'])) { $erreurs[] = "Le tempérament ne doit contenir que des lettres."; } if (!PregFucntions::verifyLength($form['temperament'], 6, 30)) { $erreurs[] = "Le tempérament doit contenir entre 6 et 30 caractères."; } if (!PregFucntions::verifyLength($form['pass'], 8, 15)) { $erreurs[] = "Le mot de passe doit contenir entre 8 et 15 caractères"; } if ($form['pass'] != $form['pass2']) { $erreurs[] = "Les 2 mots de passe doivent concorder"; } if (!PregFucntions::verifyPassword($form['pass'])) { $erreurs[] = "Le mot de passe ne doit contenir que des lettres, des chiffres ou les caractères suivants -.?!'\" "; } if (empty($erreurs)) { $user = $this->membre->findFirst(array('conditions' => " mem_login = "******" OR mem_mail = " . Functions::squote($form['mail']), 'fecthMethod' => PDO::FETCH_ASSOC)); if (empty($user)) { // inscription $this->membre->add(array('tables' => ' membre ', 'values' => " ''" . "," . Functions::squote($form['mail']) . "," . Functions::squote($form['login']) . "," . Functions::squote(sha1($form['pass'])) . "," . Functions::squote($form['droit']) . "," . $form['year'] . "," . Functions::squote($form['ue']) . "," . Functions::squote(Session::genereToken()) . "," . Functions::squote($form['temperament']) . "," . "NOW()" . "," . Functions::squote($form['etat']) . "," . Functions::squote(Session::genereToken()))); //on vérifie qu'il est bien inscrit $user = $this->membre->findFirst(array('conditions' => " mem_login = "******" AND fillot_mail = '" . $param_mail . "'")); /* ... et on supprime les autres lignes de parrainage qui concerne cette utilisateur*/ $this->membre->delete(array('tables' => ' parrainage ', 'conditions' => 'token <> \'' . $param_mail_token . '\'' . " AND fillot_mail = '" . $param_mail . "'")); /* ... pour finir, on récupère le parrain, puis on augmente son nombre de parrainages*/ $parrain = $this->membre->findFirst(array('tables' => 'parrainage', 'conditions' => 'token = \'' . $param_mail_token . '\'' . " AND fillot_mail = '" . $param_mail . "'", 'fecthMethod' => PDO::FETCH_ASSOC)); if ($parrain) { $this->membre->upDate(array('tables' => ' activite_membre ', 'affectations' => ' nb_parrainages = nb_parrainages+1 ', 'conditions' => ' id_user = \'' . $parrain['parrain'] . '\'')); } } //L'inscription s'est bien déroulée if (!empty($user)) { //on l'ajoute à la 2e base $this->membre->add(array('tables' => " openu_users ", 'values' => "'','" . $user['mem_login'] . "','" . $user['mem_pass'] . "','" . $user['mem_login'] . "','registered','" . $user['mem_mail'] . "','fr','" . $user['mem_date_joined'] . "','" . $user['mem_renew_pass'] . "'," . "1")); // ajouter au réseau $reseau = $this->reseau->findFirst(array('conditions' => " net_nom = " . Functions::squote($form['ue']))); $this->reseau->add(array('tables' => " reseau_membre ", 'values' => "" . $reseau->net_id . "," . $user['mem_id'])); //ajouter dans l'historique reseau et dans l'historique public $this->history->add(array('tables' => 'history', 'values' => "''," . $user['mem_id'] . "," . Functions::squote("Inscription") . "," . Functions::squote($user['mem_login'] . " vient de rejoindre la communauté.") . ",NOW()" . "," . $reseau->net_id . ",0")); //on crée un le lien entre l'utilisateur et l'admin $admin = $this->membre->findFirst(array('conditions' => " mem_login = '******' ")); $this->membre->add(array('tables' => " contact_membre ", 'values' => "" . $user['mem_id'] . "," . $admin->mem_id . ",0")); //Envoyer le mail $this->mail(array('config' => 'nacder.net', 'destinataire' => $user['mem_mail'], 'expediteur' => Conf::$mail['default']['no-reply'], 'aliasExpediteur' => constant('site_i_name'), 'objet' => "[" . constant('site_i_name') . "] - Confirmez votre inscription", 'message' => Mail::_messageSuscribe(array('mem_login' => $user['mem_login'], 'mem_token' => $user['mem_token'], 'logo' => Conf::$mail['default']['logo'])))); /** * on ne crée pas la session, car il doit maintenant se connecter après avoir cliqué sur le lien reçu par mail */ //$_SESSION['membre'] = $user; //$_SESSION['loggedIn']='yes'; //setcookie('loggedAs',$user['mem_token'],time()+3600*5,WEBROOT.DS,'',false); //setcookie('dejaVenu',$user['mem_token'],time()+3600*5,WEBROOT.DS,'',false); //Session::begin(); //$this->redirect(Router::url('?home/index')); $notifications[] = "Pour achever votre inscription veuillez suivre les instructions du mail que vous allez recevoir."; } else { $erreurs[] = "Un problème est survenu. Veuillez ressayer plus tard."; } } else { $erreurs[] = "Désolé, un compte avec ce mail ou ce login existe déjà. Si c'est le votre et que vous souhaitez le récupérer" . ", cliquez sur <i>Mot de passe perdu ?</i>. "; } } //Une fois le formulaire soumis, on génère un nouveau jeton, et ce quelque soit l'issue (formulaire validé ou non, envoyé ou non) Session::addToken(array('name' => 'inscription', 'limit_time' => 10 * 60, 'time' => time(), 'erase' => true)); } $list_ue['ei1'] = $this->reseau->find(array('conditions' => 'net_niveau=1', 'fecthMethod' => PDO::FETCH_ASSOC)); $list_ue['ei2'] = $this->reseau->find(array('conditions' => 'net_niveau=2', 'fecthMethod' => PDO::FETCH_ASSOC)); $list_ue['ei3'] = $this->reseau->find(array('conditions' => 'net_niveau=3', 'fecthMethod' => PDO::FETCH_ASSOC)); $variables['list_ue'] = $list_ue; $variables['soumis'] = $soumis; $variables['erreurs'] = $erreurs; $variables['notifications'] = $notifications; $form['token'] = $token['value']; $variables['form'] = $form; $variables['form_action'] = $param_mail . '/' . $param_mail_token; $this->myrender(array('menu' => 'menu', 'title' => 'Espace Inscription', 'view' => 'suscribe', 'variables' => $variables)); }