private function receive_form($options) { if (empty($options['action'])) { return null; } $data['errors'] = array(); $data['notifications'] = array(); $data['form'] = array(); if (!empty($this->request->data)) { Session::set('saveForm', $this->request->data); unset($this->request->data); switch ($options['action']) { case 'index': $this->redirect('?home/' . $options['action']); break; case 'groupe': $this->redirect('?home/' . $options['action'] . '/' . $options['params'][0]); break; case 'reseau': $this->redirect('?home/' . $options['action'] . '/' . $options['params'][0]); break; } } $donnees = Session::get('saveForm'); if (!empty($donnees)) { Session::del('saveForm'); $form['resume'] = PregFucntions::sanitize_string($donnees['resume']); $v = $donnees['visibility']; $n = $donnees['net']; $g = $donnees['gr']; switch ($v[0]) { case '0': $n = 0; $g = 0; $form['concerne'] = 'Tous'; break; case 'r': $n = substr($v, 2, strlen($v)); $g = 0; $form['concerne'] = $n; break; case 'g': $n = 0; $g = substr($v, 2, strlen($v)); $form['concerne'] = $g; break; } if (!$this->history->add(array('tables' => 'history', 'values' => '\'\',' . $options['user']['mem_id'] . ',' . Functions::squote($form['concerne']) . ',' . Functions::squote($form['resume']) . ',' . 'NOW(),' . $n . ',' . $g))) { $data['errors'][] = "Le post n'a pas été soumis correctement, veuillez ressayer plus tard."; } else { $data['notifications'][] = "Le message a correctement été envoyé."; } } return $data; }
function parrainer() { if (!$this->session->islogged()) { $this->redirect("?membre/login"); } $erreurs = array(); $notifications = array(); $soumis = $this->request->data ? $this->request->data : null; $form = array('mail' => ''); if (Session::getToken('parrainage') === false) { Session::addToken(array('name' => 'parrainage', 'limit_time' => 10 * 60, 'time' => time())); } $token = Session::getToken('parrainage'); 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('parrainage')) { $message = conf::DEBUG ? 'Erreur [MEM ' . __LINE__ . '] : La requête a échouée. Veuillez réactualiser la page.' : 'Le jeton CRSF a expiré. 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/parrainer/'); } if (empty($erreurs)) { $_SESSION['saveform'] = $soumis; unset($soumis); $this->redirect('?membre/parrainer/'); } } if (isset($_SESSION['saveform'])) { $soumis = $_SESSION['saveform']; unset($_SESSION['saveform']); if (!Session::isValidToken('parrainage')) { $this->error("Le temps de soumission est dépassé. Veuillez recharger la page."); return false; } $form = array('mail' => PregFucntions::sanitize_string($soumis['mail'])); //on s'assure que le mail est inexistant dans la table des membres $find = $this->membre->find(array('conditions' => 'mem_mail = ' . $form['mail'], 'fecthMethod' => PDO::FETCH_ASSOC)); if ($find) { $erreurs[] = "Le mail est déjà utilisé."; } 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 (empty($erreurs)) { // ajout à la table parrainage $token_de_validation = Session::genereToken(); $this->membre->add(array('tables' => ' parrainage ', 'values' => " " . Functions::squote($_SESSION['membre']['mem_id']) . ",'-1'" . "," . Functions::squote($form['mail']) . "," . "NOW()" . ",'0'" . "," . Functions::squote($token_de_validation))); //Envoyer le mail au fillot if ($this->mail(array('config' => 'nacder.net', 'destinataire' => $form['mail'], 'expediteur' => Conf::$mail['default']['no-reply'], 'aliasExpediteur' => constant('site_i_name'), 'objet' => "[" . constant('site_i_name') . "] - Confirmez votre parrainage", 'message' => Mail::_messageParrainage(array('parrain_login' => $_SESSION['membre']['mem_login'], 'parrain_mail' => $_SESSION['membre']['mem_mail'], 'fillot_mail' => $form['mail'], 'mem_token' => $token_de_validation, 'logo' => Conf::$mail['default']['logo']))))) { $notifications[] = "Votre requête a été transmise."; } else { $erreurs[] = "La requête n'a pas pu être envoyée à l'adresse donnée."; } } Session::addToken(array('name' => 'parrainage', 'limit_time' => 10 * 60, 'time' => time())); } $variables['soumis'] = $soumis; $variables['erreurs'] = $erreurs; $variables['notifications'] = $notifications; $form['token'] = $token['value']; $variables['form'] = $form; $this->myrender(array('menu' => 'menu', 'title' => 'Espace Parrainage', 'view' => 'parrainage', 'variables' => $variables)); }