raspisms/controllers/profile.php

183 lines
4.6 KiB
PHP
Executable File

<?php
/**
* Page de profile
*/
class profile extends Controller
{
/**
* Cette fonction est appelée avant toute les autres :
* Elle vérifie que l'utilisateur est bien connecté
* @return void;
*/
public function before()
{
internalTools::verifyConnect();
}
/**
* Cette fonction est alias de show()
*/
public function byDefault()
{
$this->show();
}
/**
* Cette fonction retourne la fenetre du profile
* @return void;
*/
public function show()
{
//Creation de l'object de base de données
global $db;
$this->render('profile');
}
/**
* Cette fonction change le mot de passe de l'utilisateur
* @param string $_POST['password'] : Le nouveau mot de passe de l'utilisateur
* @param string $_POST['verif_password'] : La vérification du nouveau mot de passe de l'utilisateur
* @return void;
*/
public function changePassword()
{
//On vérifie que le jeton csrf est bon
if (!internalTools::verifyCSRF())
{
header('Location: ' . $this->generateUrl('profile', 'showAll', array(
'errormessage' => 'Jeton CSRF invalide !'
)));
return true;
}
//Creation de l'object de base de données
global $db;
if (empty($_POST['password']) || empty($_POST['verif_password']) || $_POST['password'] != $_POST['verif_password'])
{
header('Location: ' . $this->generateUrl('profile', 'show', array(
'errormessage' => 'Les mots de passe ne correspondent pas.'
)));
return false;
}
$user = $db->getUserFromEmail($_SESSION['email']);
$password = sha1($_POST['password']);
if ($db->updateUser($user['id'], $user['email'], $password, $user['admin']))
{
header('Location: ' . $this->generateUrl('profile', 'show', array(
'successmessage' => 'Les données ont été mises à jour.'
)));
return false;
}
}
/**
* Cette fonction change l'email de l'utilisateur
* @param string $_POST['email'] : Le nouvel email de l'utilisateur
* @param string $_POST['verif_email'] : La vérification du nouvel email de l'utilisateur
* @return void;
*/
public function changeEmail()
{
//On vérifie que le jeton csrf est bon
if (!internalTools::verifyCSRF())
{
header('Location: ' . $this->generateUrl('profile', 'showAll', array(
'errormessage' => 'Jeton CSRF invalide !'
)));
return true;
}
//Creation de l'object de base de données
global $db;
if (empty($_POST['mail']) || empty($_POST['verif_mail']) || $_POST['mail'] != $_POST['verif_mail'])
{
header('Location: ' . $this->generateUrl('profile', 'show', array(
'errormessage' => 'Les e-mails ne correspondent pas.'
)));
return false;
}
$email = $_POST['mail'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
header('Location: ' . $this->generateUrl('profile', 'show', array(
'errormessage' => 'L\'adresse e-mail est invalide.'
)));
return false;
}
$user = $db->getUserFromEmail($_SESSION['email']);
if ($db->updateUser($user['id'], $email, $user['password'], $user['admin']))
{
$_SESSION['email'] = $email;
header('Location: ' . $this->generateUrl('profile', 'show', array(
'successmessage' => 'Les données ont été mises à jour.'
)));
return false;
}
header('Location: ' . $this->generateUrl('profile', 'show', array(
'errormessage' => 'Cette adresse e-mail est déjà utilisée.'
)));
return false;
}
/**
* Cette fonction supprime l'utilisateur
* @param string $_POST['delete_account'] : La vérification que l'on veux bien supprimer l'utilisateur
* @return void;
*/
public function delete()
{
//On vérifie que le jeton csrf est bon
if (!internalTools::verifyCSRF())
{
header('Location: ' . $this->generateUrl('profile', 'showAll', array(
'errormessage' => 'Jeton CSRF invalide !'
)));
return true;
}
//Creation de l'object de base de données
global $db;
//Si l'utilisateur veux vraiment supprimer son compte
if (!empty($_POST['delete_account']))
{
$user = $db->getUserFromEmail($_SESSION['email']); //On récupère l'utilisateur en base
$db->deleteUsersIn(array($user['id'])); //On supprime l'utilisateur
$this->logout();
return true;
}
header('Location: ' . $this->generateUrl('profile', 'show', array(
'errormessage' => 'Le compte n\'a pas été supprimé'
)));
return false;
}
/**
* Cette fonction déconnecte un utilisateur et le renvoie sur la page d'accueil
* @return void
*/
public function logout()
{
session_unset();
session_destroy();
header('Location: ' . $this->generateUrl(''));
return true;
}
}