<?php
namespace User\Controller;
use App\Controller\Traits\FunctionsController;
use App\Entity\Association;
use Core\Controller\Traits\BaseController;
use DateTime;
use Shopping\Controller\Traits\BaseShoppingController;
use Shopping\Entity\Cart;
use Shopping\Entity\CartProduct;
use Shopping\Entity\Order;
use Shopping\Entity\OrderCommission;
use Shopping\Entity\ProductDesign;
use Shopping\Service\CommissionManager\CommissionManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use User\Controller\Traits\BaseUserController;
use User\Entity\AccountType;
use User\Entity\User;
use User\Entity\UserAddress;
use User\Entity\UserAssociationCategory;
use User\Entity\UserAssociationLocalisation;
/**
* Controller répondant aux methods "GET" de l'application
*/
class PageController extends AbstractController
{
use BaseController;
use BaseShoppingController;
use BaseUserController;
use FunctionsController;
/**
* Page de connexion d'un utilisateur
*/
public function connect(Request $request)
{
// Vérification si l'utilisteur est déjà connecté
$redirection = $this->checkUserConnected();
if ($redirection != null) {
// Redirection vers une page spécifique
return $this->redirect($redirection);
}
// Affichage de la page de connexion
return $this->generateTemplate('@app/user/login', []);
}
/**
* Page de déconnexion d'un utilisateur
*/
public function disconnect(Request $request)
{
// Demande de déconnexion
$response = $this->forward('User\Controller\ActionController::disconnect_user', [
'request' => $request
]);
// Affichage de la page de déconnexion
return $this->generateTemplate('@app/user/logout', []);
}
/**
* Page d'inscription d'un utilisateur
*/
public function register(Request $request)
{
// Vérification si l'utilisteur est déjà connecté
$redirection = $this->checkUserConnected();
if ($redirection != null) {
// Redirection s'il est connecté
return $this->redirect($redirection);
}
// Affichage de la page d'inscription
return $this->generateTemplate('@app/user/register', []);
}
/**
* Page de connexion / inscription d'un utilisateur
*/
public function connect_register(Request $request)
{
// Vérification si l'utilisteur est déjà connecté
$redirection = $this->checkUserConnected();
if ($redirection != null) {
// Redirection s'il est connecté
return $this->redirect($redirection);
}
// Affichage de la page d'inscription
return $this->generateTemplate('@app/user/login_register', []);
}
/**
* Page de suppression du compte utilisateur
*/
public function user_remove(Request $request)
{
// Affichage de la page après la supperession du compte
return $this->generateTemplate('@app/user/user_remove', []);
}
/**
* Page de compte désactivé
*/
public function user_desactive(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserDesactive();
if (!$redirection) {
// Redirection s'il n'est pas connecté
// return $this->redirect($this->vars['pages']['list']['page_default_604cdefd8f455']->getUri());
}
// Affichage de la page de compte désactivé
return $this->generateTemplate('@app/user/messages/desactive', []);
}
/**
* Page de réinitialisation du mot de passe
*/
public function forgot_password(Request $request)
{
// Vérification si l'utilisteur est déjà connecté
$redirection = $this->checkUserConnected();
if ($redirection != null) {
// Redirection s'il est déjà connecté
return $this->redirect($redirection);
}
// Affichage de la page de réinitialisation du mot de passe
return $this->generateTemplate('@app/user/messages/forgot_password', []);
}
/**
* Page de réinitialisation du mot de passe - Confirmation
*/
public function forgot_password_reset(Request $request)
{
// Vérification si l'utilisteur est déjà connecté
$redirection = $this->checkUserConnected();
if ($redirection != null) {
return $this->redirect($redirection);
}
$query = $request->server->get('QUERY_STRING');
preg_match('/token=([a-zA-Z0-9-_]+)&email=([a-zA-Z0-9@-_\.]+)/', $query, $matches, PREG_OFFSET_CAPTURE);
$this->vars['forgot_token'] = $token = $matches[1][0];
$this->vars['forgot_email'] = $email = $matches[2][0];
// Vérification de l'inexistance de l'utilisateur
$user = $this->getDoctrine()->getRepository(User::class)->findByEmail($email);
if ($user == null) {
// Aucun utilisateur avec cette adresse e-mail
return $this->redirect($this->vars['pages']['page_default_5fc9203cb6e67']->getUri());
}
if ($user->getForgotToken() != $token) {
// Erreur sur le token
return $this->redirect($this->vars['pages']['list']['page_default_5fc9203cb6e67']->getUri());
}
$maxTime = $user->getForgotTime();
$maxTime->modify('+1 day');
$nowTime = new DateTime();
if ($nowTime > $maxTime) {
$em = $this->getDoctrine()->getManager();
$user->setForgotToken(null);
$user->setForgotTime(null);
$em->persist($user);
$em->flush();
// Temps écoulé pour la réinitialisation
return $this->generateTemplate('@app/user/messages/forgot_password_expire', []);
}
return $this->generateTemplate('@app/user/messages/forgot_password_reset', []);
}
/**
* Tableau de bords du compte utilisateur
*/
public function account(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
return $this->redirect('/compte/commandes');
// return $this->generateTemplate('@app/user/account/dashboard', []);
}
/**
* Informations du compte utilisateur ( Mot de passe, date de naissance, ... )
*/
public function account_information_particulier(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
// Vérification des accès
if ($this->vars['account']['user']->getAccountType() != AccountType::PARTICULAR) {
return $this->redirectNotFoundException($request);
}
return $this->generateTemplate('@app/user/account/informations', []);
}
/**
* Informations du compte utilisateur ( Mot de passe, date de naissance, ... )
*/
public function account_information_profesionnel(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
// Vérification des accès
if ($this->vars['account']['user']->getAccountType() != AccountType::PROFESSIONAL) {
return $this->redirectNotFoundException($request);
}
return $this->generateTemplate('@app/user/account/informations_professionnel', []);
}
/**
* Liste des adresses associées au compte utilisateur ( facturation, livraison )
*/
public function account_addresses(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
return $this->generateTemplate('@app/user/account/addresses', []);
}
/**
* Affichage d'une adresse associée au compte utilisateur
*/
public function account_address(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
$address_id = $this->getCurrentPageSlug($request, 2);
// Récupération de l'adresse utilisateur
$this->vars['address'] = $address = $this->getDoctrine()->getRepository(UserAddress::class)->find($address_id);
// ECHEC - L'utilisateur n'est pas le propriétaire de l'adresse demandée
if ($address != null && $address->getUser()->getId() != $this->vars['account']['user']->getId()) {
return $this->redirectNotFoundException($request);
}
return $this->generateTemplate('@app/user/account/address', []);
}
/**
* Inscriptions aux newsletters du compte utilisateur
*/
public function account_newsletter(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
return $this->generateTemplate('@app/user/account/newsletter', []);
}
/**
* Liste des commandes réalisées par le compte utilisateur
*/
public function account_orders(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
$user = $this->vars['account']['user'];
$this->vars['orders'] = $orders = $this->getDoctrine()->getRepository(Order::class)->findBy([
'user' => $user->getId(),
'is_visible' => true
], ['created_at' => 'DESC']);
return $this->generateTemplate('@app/user/account/orders', []);
}
/**
* Affichage d'une commande réalisée par le compte utilisateur
*/
public function account_order(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
$order_slug = $this->getCurrentPageSlug($request, 2);
// Récupération de l'adresse utilisateur
$this->vars['order'] = $order = $this->getDoctrine()->getRepository(Order::class)->findByReference($order_slug);
// ECHEC - L'utilisateur n'est pas le propriétaire de la commande
if ($order != null && $order->getUser()->getId() != $this->vars['account']['user']->getId()) {
return $this->redirectNotFoundException($request);
}
// Commande non finalisée
if(!$order->getIsVisible()){
return $this->redirectNotFoundException($request);
}
return $this->generateTemplate('@app/user/account/order', []);
}
/**
* Affichage la configuration de l'utilisateur
*/
public function account_settings(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
return $this->generateTemplate('@app/user/account/settings', []);
}
/**
* Affichage de la liste des favoris
*/
public function account_favoris(Request $request)
{
// Vérification si l'utilisteur est désactivé
$redirection = $this->checkUserConnected();
if (!$redirection) {
// Redirection s'il n'est pas connecté
return $this->redirect($this->vars['pages']['list']['page_default_5fc91ba0ae778']->getUri());
}
$objects = $this->vars['account']['user']->getFavoris();
$results = [];
foreach ($objects as $object) {
$item = new \Shopping\Service\Product\Product($this->getDoctrine(), $this->vars['account']['user']);
$item->createProduct($object->getProduct()->getId());
$results[] = [
'favoris' => $object,
'entity_manager' => $item
];
}
return $this->generateTemplate('@app/user/account/favoris', [
'favoris' => $results
]);
}
}