<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller\Compte;
use App\Services\MetaTag;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\{
AnnuaireRepreneurs
};
use App\Controller\EntityUsingController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use App\Form\Type\Compte\{
CvRepreneurType
};
use App\Services\Compte\CvRepreneurs\CvRepreneursManagers;
use App\Helper\Utils;
use App\Services\LogMarketingProvider;
class CvRepreneurController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
/**
* @var EntityManagerInterface
*/
protected $em;
/**
* @var MetaTag
*/
private $metaTag;
/**
*
* @var type
*/
protected $cvm;
/**
* @var LogMarketingProvider
*/
private $lmp;
/**
*
* @param EntityManagerInterface $em
* @param CvRepreneursManagers $cvm
*/
public function __construct(EntityManagerInterface $em, CvRepreneursManagers $cvm, MetaTag $metaTag, LogMarketingProvider $lmp) {
$this->em = $em;
$this->cvm = $cvm;
$this->metaTag = $metaTag;
$this->lmp = $lmp;
}
/**
*
* @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
$user = $this->getUser();
if (!$user) { // authentification obligatoire
throw new AccessDeniedException();
}
$model = $this->cvm->getData();
$mode_profil = (!empty($model['modeProfil'])) ? $model['modeProfil'] : "creation";
$form = $this->createForm(CvRepreneurType::class, $model, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
'mode_profil' => $mode_profil,
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->getClickedButton()->getName() === CvRepreneurType::$BOUTON_ENREGISTRER_TEMPORAIREMENT) {
if ($form->isValid()) {
$data = $form->getData();
$this->cvm->enregistrerCV($data);
$this->addFlash('success_modif_cv_repreneur', 'Votre profil est modifié');
}
}
if ($form->getClickedButton()->getName() === CvRepreneurType::$BOUTON_METTRE_EN_LIGNE) {
if ($form->isValid()) {
$data = $form->getData();
$idCv = $this->cvm->publierCv($data);
return $this->redirectToRoute('compte_cv_repreneur_mise_en_avant',
[
'codePays' => $codePays,
"id" => $idCv,
"slug" => Utils::slugify($data["nom"] . " " . $data["prenom"] . " " . $data["formation"])
]);
} else {
$this->addFlash('echec_modif_cv_repreneur', "Certains champs sont vides ou invalides.");
}
}
if ($form->getClickedButton()->getName() === CvRepreneurType::$BOUTON_METTRE_EN_ATTENTE) {
if ($form->isValid()) {
$data = $form->getData();
if (!empty($data["idRepreneur"])) {
$this->cvm->changerStatut($data["idRepreneur"], "attente");
$this->addFlash('success_modif_cv_repreneur', 'Votre profil est mis en attente');
return $this->redirectToRoute('compte_cv_repreneur',
[
'codePays' => $codePays
]
);
}
}
}
}
}
$response = $this->render('compte/cv_repreneur/referencer.html.twig',
['form' => $form->createView(), 'cv' => $model]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
public function miseEnAvant(Request $request, $id, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$user = $this->getUser();
if (!$user) { // authentification obligatoire
throw new AccessDeniedException();
}
$cv = $this->em->getRepository(AnnuaireRepreneurs::class)->find($id);
if ($user->getLogin() !== $cv->getLogin()) { // le cv n'est pas le votre
throw new AccessDeniedException();
}
$response = $this->render('compte/cv_repreneur/mise_en_avant.html.twig',
['cv' => $cv]
);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
public function envoyePourValidation(Request $request, $id, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$user = $this->getUser();
if (!$user) { // authentification obligatoire
throw new AccessDeniedException();
}
$cv = $this->em->getRepository(AnnuaireRepreneurs::class)->find($id);
if ($user->getLogin() !== $cv->getLogin()) { // le cv n'est pas le votre
throw new AccessDeniedException();
}
$response = $this->render('compte/cv_repreneur/envoye_pour_validation.html.twig', []);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
public function supprimer(Request $request, $id, $codePays): Response {
$this->cvm->supprimerCV($id);
$this->addFlash('success_modif_cv_repreneur', 'Votre profil est supprimé');
return $this->redirectToRoute('compte_cv_repreneur',
[
'codePays' => $codePays
]
);
}
}