<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller\Compte;
use App\Helper\Utils;
use App\Services\MetaTag;
use App\Controller\EntityUsingController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
use App\Form\Type\Compte\{
InvestisseurPriveType
};
use App\Entity\InvestisseursPrives;
use App\Services\Compte\InvestisseurPrive\InvestisseurPriveManagers;
use App\Services\Encryptage\AesEncrytageStrategy;
class InvestisseurPriveController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
public const ROUTE_TO_LISTE = 'compte_investisseur_prive_liste';
public const ROUTE_TO_EDIT = 'compte_investisseur_prive_modifier';
/**
* @var EntityManagerInterface
*/
protected $em;
/**
*
* @var type
*/
private $ipm;
/**
*
* @var type
*/
private $metaTag;
/**
* @var AesEncrytageStrategy
*/
private $encrypt;
/**
*
* @param EntityManagerInterface $em
* @param MetaTag $metaTag
* @param InvestisseurPriveManagers $ipm
* @param AesEncrytageStrategy $aesEncrytageStrategy
*/
public function __construct(EntityManagerInterface $em, MetaTag $metaTag, InvestisseurPriveManagers $ipm, AesEncrytageStrategy $aesEncrytageStrategy) {
$this->em = $em;
$this->metaTag = $metaTag;
$this->ipm = $ipm;
$this->encrypt = $aesEncrytageStrategy;
}
/**
*
* @param Request $request
* @param PaginatorInterface $paginator
* @param type $codePays
* @return Response
*/
public function referencer(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$newsValues = [// LES Coordonnées utilisateur
"nom" => ($this->getUser()->_get("nom_utilisateur")) ?? NULL,
"prenom" => ($this->getUser()->_get("prenom_utilisateur")) ?? NULL,
"telephone" => ($this->getUser()->_get("telephone_utilisateur")) ? $this->encrypt->decryptage($this->getUser()->_get("telephone_utilisateur")) : NULL,
"indicatif" => ($this->getUser()->_get("indicatif_tel")) ?? NULL,
"email" => ($this->getUser()->_get("email_utilisateur")) ?? NULL
];
$form = $this->createForm(InvestisseurPriveType::class, $newsValues, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
'mode' => NULL
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_ENREGISTRER_TEMPORAIREMENT) {
$form->clearErrors(true);
$data = $form->getData();
$data["mode"] = "attente";
$id = $this->ipm->saveData($data);
$this->addFlash('success_investisseur_prive', 'les données sont enregistrées avec succès');
return $this->redirectToRoute(self::ROUTE_TO_EDIT, ['id' => $id, 'codePays' => $codePays]);
}
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_METTRE_EN_LIGNE) {
if ($form->isValid()) {
$data = $form->getData();
$data["mode"] = "demande_publication";
$this->ipm->saveData($data);
return $this->redirectToRoute(self::ROUTE_TO_LISTE, ['codePays' => $codePays]);
} else {
$this->addFlash('echec_investisseur_prive', 'les champs suivants doivent être renseignés');
}
}
}
}
$metaTag = $this->metaTag->setTitle("Compte / Investisseur privé")->setDescription("Compte / Investisseur privé");
$response = $this->render('compte/investisseur_prive/referencer.html.twig', [
'form' => $form->createView(), "cv" => null,
'metaTag' => $metaTag,
"data" => $form->getData()
]);
return $response;
}
/**
*
* @param Request $request
* @param type $codePays
* @return Response
*/
public function listeInvestisseurs(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$investisseurs = $this->ipm->getListInvestisseursByUtilisateur();
$metaTag = $this->metaTag
->setTitle("Compte / Vos profils d'investisseur référencés")
->setDescription("Compte / Vos profils d'investisseur référencés");
$response = $this->render('compte/investisseur_prive/liste_investisseurs.html.twig', [
'metaTag' => $metaTag, 'investisseurs' => $investisseurs
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE);
return $response;
}
/**
*
* @param Request $request
* @param type $id
* @param type $codePays
* @return Response
*/
public function supprimer(Request $request, $id, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$this->ipm->supprimer($id);
$this->addFlash('success_delete_investisseur_prive', 'Votre investisseur privé est supprimé');
return $this->redirectToRoute(self::ROUTE_TO_LISTE, ['codePays' => $codePays]);
}
/**
*
* @param Request $request
* @param type $id
* @param type $codePays
* @return Response
* @throws MissingMandatoryParams
* @throws NotFound
*/
public function modifier(Request $request, $id, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$id) {
throw new MissingMandatoryParams();
}
$ip = $this->getDoctrine()->getRepository(InvestisseursPrives::class)->find($id);
if (!$ip) {
throw new NotFound();
}
if ($ip->getIdUser() != $this->getUser()->getId()) {
throw $this->createNotFoundException("ce profile n'est pas le votre");
}
$oldCoordonnees = [// LES Coordonnées utilisateur
"nom" => ($ip->_get("nom_contact")) ?? NULL,
"prenom" => ($ip->_get("prenom_contact")) ?? NULL,
"telephone" => ($ip->_get("telephone_contact")) ?? NULL,
"indicatif" => ($ip->_get("indicatif_telephone_contact")) ?? NULL,
"email" => ($ip->_get("email_contact")) ?? NULL
];
$form = $this->createForm(InvestisseurPriveType::class, array_merge(Utils::convertObjectToArray($ip), $oldCoordonnees), [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
'id' => $id
]
),
'method' => 'POST',
'mode' => $ip->_get("mode") ?? NULL
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_METTRE_EN_ATTENTE) {
$form->clearErrors(true);
$data = $form->getData();
$this->ipm->mettreEnAttente($id);
return $this->redirectToRoute(self::ROUTE_TO_EDIT, ['id' => $id, 'codePays' => $codePays]);
}
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_SUPPRIMER) {
$form->clearErrors(true);
$data = $form->getData();
$this->ipm->supprimer($id);
return $this->redirectToRoute(self::ROUTE_TO_EDIT, ['id' => $id, 'codePays' => $codePays]);
}
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_ENREGISTRER_TEMPORAIREMENT) {
$form->clearErrors(true);
$data = $form->getData();
$data["mode"] = "attente";
$this->ipm->saveData($data, $id);
$this->addFlash('success_investisseur_prive', 'les données sont enregistrées avec succès');
return $this->redirectToRoute(self::ROUTE_TO_EDIT, ['id' => $id, 'codePays' => $codePays]);
}
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_METTRE_EN_LIGNE) {
if ($form->isValid()) {
$data = $form->getData();
$data["mode"] = "demande_publication";
$this->ipm->saveData($data, $id);
return $this->redirectToRoute(self::ROUTE_TO_LISTE, ['codePays' => $codePays]);
} else {
$this->addFlash('echec_investisseur_prive', 'les champs suivants doivent être renseignés');
}
}
if ($form->getClickedButton()->getName() === InvestisseurPriveType::$BOUTON_LAISSER_EN_LIGNE) {
if ($form->isValid()) {
$data = $form->getData();
$data["mode"] = "publique";
$this->ipm->saveData($data, $id);
return $this->redirectToRoute(self::ROUTE_TO_LISTE, ['codePays' => $codePays]);
} else {
$this->addFlash('echec_investisseur_prive', 'les champs suivants doivent être renseignés');
}
}
}
}
$metaTag = $this->metaTag->setTitle("Compte / Investisseur privé")->setDescription("Compte / Investisseur privé");
$response = $this->render('compte/investisseur_prive/referencer.html.twig', [
'form' => $form->createView(),
"ip" => $ip,
'metaTag' => $metaTag,
"data" => $form->getData()
]);
return $response;
}
}