Пример #1
0
 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));
 }