<?php
namespace App\Controller;
use App\Entity\Equipe;
use App\Entity\Tokenpassword;
use App\Form\EquipeType;
use App\Repository\EquipeRepository;
use App\Repository\UserRepository;
use App\Repository\ResetPasswordRequestRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Service\FileUploader;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use App\Form\ChangePasswordFormType;
use App\Form\ResetPasswordRequestFormType;
use Datetime;
use App\Service\EmailSender;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Contracts\Translation\TranslatorInterface;
use SymfonyCasts\Bundle\ResetPassword\Controller\ResetPasswordControllerTrait;
use SymfonyCasts\Bundle\ResetPassword\Exception\ResetPasswordExceptionInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use SymfonyCasts\Bundle\ResetPassword\ResetPasswordHelperInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use SymfonyCasts\Bundle\ResetPassword\Model\ResetPasswordToken;
/**
* @Route("/equipe")
*/
class EquipeController extends AbstractController
{
private $resetPasswordHelper;
private $entityManager;
public function __construct(ResetPasswordHelperInterface $resetPasswordHelper, EntityManagerInterface $entityManager)
{
$this->resetPasswordHelper = $resetPasswordHelper;
$this->entityManager = $entityManager;
}
/**
* @Route("/", name="app_equipe", methods={"GET", "POST"})
*/
public function index(EquipeRepository $equipeRepository): Response
{
$equipe= $equipeRepository->findAll();
$tab=[];
$equipes=[];
// id,type as owner,client as name ,date,file ,batiment
foreach ($equipe as $value) {
$tab['id']=$value->getId();
$tab['name']=$value->getNom();
$tab['owner']=$value->getPrenom();
$tab['industry_type']=$value->getPhone();
$tab['location']=explode("_",$value->getRole())[1];
$tab['contact_email']=$value->getEmail();
$tab['image_src']=$value->getPhoto() ? "https://kaje-cee.net/assets/uplaod-equipe/".$value->getPhoto() : "https://kaje-cee.net/assets/images/user.png";
$tab['employee']="equipe";
$equipes[]=$tab;
}
$clientjson = json_encode($equipes);
// var_dump(json_encode($clientjson ));
file_put_contents('assets/json/equipe-list.json', $clientjson);
return $this->render('equipe/index.html.twig', [
'equipes' => $equipeRepository->findAll(),
]);
}
/**
* @Route("/new", name="app_equipe_new", methods={"GET", "POST"})
*/
public function new(Request $request, EquipeRepository $equipeRepository,EntityManagerInterface $entityManager ,UserPasswordHasherInterface $userPasswordHasher,
FileUploader $uploader,UserRepository $userRepository,MailerInterface $mailer, TranslatorInterface $translator): Response
{
$equipe = new Equipe();
// $form = $this->createForm(EquipeType::class, $equipe);
// $form->handleRequest($request);
if ($request->getMethod() == "POST") {
$form = $request->request;
$userold=$userRepository->findOneBy(["email"=>$form->get('email')]);
// var_dump($userold);die('test');
if ($userold != null) {
return $this->render('equipe/index.html.twig', [
'equipes' => $equipeRepository->findAll(),
'messageuser'=>'Membre Equipe deja Ajouter'
]);
}
$user = new User();
$user->setEmail($form->get('email'));
$roles[]=$form->get('role');
if ($form->get('role') == "ROLE_ADMIN") {
$roles[]="ROLE_MANAGER";
}
foreach ($form->get('permission') as $value) {
$roles[]="ROLE_".$value;
}
$user->setRoles($roles);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,'kagekali01'
)
);
$entityManager->persist($user);
$equipe->setUser($user);
$permission=[];
foreach ($form->get('permission') as $value) {
$permission[]=$value;
}
if ($request->files->get('photo-file')) {
$nom=explode(".",$request->files->get('photo-file')->getClientOriginalName())[0];
$uploader->setTargetDirectory($this->getParameter('equipe_directory'));
$uploader->upload($request->files->get('photo-file'),$nom);
$equipe->setPhoto($uploader->getFileName());
}
$equipe->setNom($form->get('nom'));
$equipe->setPrenom($form->get('prenom'));
$equipe->setEmail($form->get('email'));
$equipe->setPhone($form->get('phone'));
$equipe->setRole($form->get('role'));
$equipe->setPermissions($permission);
// $produit->setNom($form->get("nom"));
// $produit->setReference($form->get("reference"));
// $produit->setPrix($form->get("prix"));
// $produit->setDescription($form->get("description"));
// $produitRepository->add($produit, true);
$equipeRepository->add($equipe, true);
$username= $equipe->getPrenom()." ".$equipe->getNom();
return $this->processSendingPasswordResetEmail(
$form->get('email'),
$mailer,
$translator,$username
);
return $this->redirectToRoute('app_equipe', [], Response::HTTP_SEE_OTHER);
}
// if ($form->isSubmitted() && $form->isValid()) {
// $equipeRepository->add($equipe, true);
// return $this->redirectToRoute('app_equipe', [], Response::HTTP_SEE_OTHER);
// }
return $this->renderForm('equipe/new.html.twig', [
'equipe' => $equipe
]);
}
/**
* @Route("/{id}", name="app_equipe_show", methods={"GET"})
*/
public function show(Equipe $equipe): Response
{
return $this->redirectToRoute('app_equipe_edit', ['id' =>$equipe->getId()], Response::HTTP_SEE_OTHER);
// return $this->render('equipe/show.html.twig', [
// 'equipe' => $equipe,
// ]);
}
/**
* @Route("/{id}/edit", name="app_equipe_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, Equipe $equipe, EquipeRepository $equipeRepository,FileUploader $uploader,CsrfTokenManagerInterface $csrfTokenManager,
UserRepository $userRepository): Response
{
// $form = $this->createForm(EquipeType::class, $equipe);
// $form->handleRequest($request);
$csrfToken = $csrfTokenManager->getToken('equipe_edit');
if ($request->getMethod() == "POST") {
$token = $request->request->get('_token');
$id = explode("A@",explode("12OU#@R",$token)[1])[0];
if ($id!=$equipe->getId()) {
return $this->redirectToRoute('app_equipe_edit', ['id' => $id], Response::HTTP_SEE_OTHER);
}
$form = $request->request;
$user = $equipe->getUser();
if ($user->getEmail()!= $form->get('email')) {
$user->setEmail($form->get('email'));
}
if ($equipe->getRole() != 'ROLE_ADMIN' && $equipe->getRole() != 'ROLE_MANAGER' ) {
if (!$this->isGranted('ROLE_CONTROLER') && !$this->isGranted('ROLE_CONTROLER') ) {
$roles[]=$form->get('role');
if ($form->get('permission') != null) {
foreach ($form->get('permission') as $value) {
$roles[]="ROLE_".$value;
}
}
$user->setRoles($roles);
}
}
$userRepository->add($user, true);
// $user->setEmail($form->get('email'));
// $roles[]=$form->get('role');
// $user->setRoles($roles);
// $user->setPassword(
// $userPasswordHasher->hashPassword(
// $user,'kagekali01'
// )
// );
// $entityManager->persist($user);
if (!$this->isGranted('ROLE_CONTROLER') && !$this->isGranted('ROLE_CONTROLER') ) {
$permission=[];
if ($form->get('permission') != null ) {
foreach ($form->get('permission') as $value) {
$permission[]=$value;
}
}
}
// var_dump($request->files->get('photo-file'));die('test');
if ($request->files->get('photo-file')) {
$nom=explode(".",$request->files->get('photo-file')->getClientOriginalName())[0];
$uploader->setTargetDirectory($this->getParameter('equipe_directory'));
$uploader->upload($request->files->get('photo-file'),$nom);
$equipe->setPhoto($uploader->getFileName());
}
if ($request->files->get('signature-file')) {
$nom=explode(".",$request->files->get('signature-file')->getClientOriginalName())[0];
$uploader->setTargetDirectory($this->getParameter('equipe_directory'));
$uploader->upload($request->files->get('signature-file'),$nom);
$equipe->setSignature($uploader->getFileName());
}
$equipe->setNom($form->get('nom'));
$equipe->setPrenom($form->get('prenom'));
$equipe->setEmail($form->get('email'));
$equipe->setPhone($form->get('phone'));
$equipe->setRole($form->get('role'));
if (!$this->isGranted('ROLE_CONTROLER') && !$this->isGranted('ROLE_CONTROLER') ) {
$equipe->setPermissions($permission);
}
// $produit->setNom($form->get("nom"));
// $produit->setReference($form->get("reference"));
// $produit->setPrix($form->get("prix"));
// $produit->setDescription($form->get("description"));
// $produitRepository->add($produit, true);
$equipeRepository->add($equipe, true);
// return $this->redirectToRoute('app_equipe', [], Response::HTTP_SEE_OTHER);
}
// if ($form->isSubmitted() && $form->isValid()) {
// $equipeRepository->add($equipe, true);
// return $this->redirectToRoute('app_equipe', [], Response::HTTP_SEE_OTHER);
// }
return $this->renderForm('equipe/edit.html.twig', [
'equipe' => $equipe,
'csrf_token' => $csrfToken->getValue().'12OU#@R'.$equipe->getId()."A@T9"
]);
}
/**
* @Route("/{id}", name="app_equipe_delete", methods={"POST"})
*/
public function delete(Request $request, Equipe $equipe, EquipeRepository $equipeRepository,UserRepository $userRepository,
ResetPasswordRequestRepository $resetPasswordRequestRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$equipe->getId(), $request->request->get('_token'))) {
$user=$userRepository->findOneBy(["email"=>$equipe->getEmail()]);
// foreach ($resetPasswordRequestRepository->findBy(["user"=>$user->getId()]) as $value) {
// var_dump($value);die('test');
// $resetPasswordRequestRepository->remove($value, true);
// }
foreach ($resetPasswordRequestRepository->findBy(["user"=>$user->getId()]) as $value) {
$resetPasswordRequestRepository->remove($value, true);
}
foreach ($equipe->getDossiercontroler1() as $key => $value) {
$equipe->removeDossiercontroler1($value);
}
foreach ($equipe->getDossiercontroler2() as $key => $value) {
$equipe->removeDossiercontroler2($value);
}
foreach ($equipe->getCommentairesControlles() as $key => $value) {
$equipe->removeCommentairesControlle($value);
}
foreach ($equipe->getActiviteDossiers() as $key => $value) {
$equipe->removeActiviteDossier($value);
}
foreach ($equipe->getActiviteDeals() as $key => $value) {
$equipe->removeActiviteDeal($value);
}
foreach ($user->getNotifications() as $key => $value) {
$user->removeNotification($value);
}
foreach ($user->getSendernotif() as $key => $value) {
$user->removeSendernotif($value);
}
foreach ($user->getTokenpasswords() as $key => $value) {
$user->removeTokenpassword($value);
}
foreach ($user->getHistoriqueDeals() as $key => $value) {
$user->removeHistoriqueDeal($value);
}
foreach ($user->getCommentaireDeals() as $key => $value) {
$user->removeCommentaireDeal($value);
}
foreach ($user->getCommentaireInstalleurs() as $key => $value) {
$user->removeCommentaireInstalleur($value);
}
foreach ($user->getFiltres() as $key => $value) {
$user->removeFiltre($value);
}
foreach ($user->getCommentaireContrats() as $key => $value) {
$user->removeCommentaireContrat($value);
}
foreach ($user->getCommentaireFactureaafs() as $key => $value) {
$user->removeCommentaireFactureaaf($value);
}
foreach ($user->getCommentaireAppelqualites() as $key => $value) {
$user->removeCommentaireAppelqualite($value);
}
$equipeRepository->remove($equipe, true);
$userRepository->remove($user, true);
}
return $this->redirectToRoute('app_equipe', [], Response::HTTP_SEE_OTHER);
}
private function processSendingPasswordResetEmail(string $emailFormData, MailerInterface $mailer, TranslatorInterface $translator,$username): RedirectResponse
{
$user = $this->entityManager->getRepository(User::class)->findOneBy([
'email' => $emailFormData,
]);
// Do not reveal whether a user account was found or not.
if (!$user) {
return $this->redirectToRoute('app_check_email');
}
try {
$resetToken = $this->resetPasswordHelper->generateResetToken($user);
$tokenpassword = new Tokenpassword();
$tokenpassword->setToken($resetToken->getToken());
$tokenpassword->setUser($user);
$tokenpassword->setDate(new Datetime());
$this->entityManager->persist($tokenpassword);
$this->entityManager->flush();
} catch (ResetPasswordExceptionInterface $e) {
// If you want to tell the user why a reset email was not sent, uncomment
// the lines below and change the redirect to 'app_forgot_password_request'.
// Caution: This may reveal if a user is registered or not.
//
// $this->addFlash('reset_password_error', sprintf(
// '%s - %s',
// $translator->trans(ResetPasswordExceptionInterface::MESSAGE_PROBLEM_HANDLE, [], 'ResetPasswordBundle'),
// $translator->trans($e->getReason(), [], 'ResetPasswordBundle')
// ));
// var_dump($e->getReason()); die('test');
return $this->redirectToRoute('app_check_email');
}
$email = (new TemplatedEmail())
->from(new Address('contact@kaje-cee.net', 'KAJE CEE'))
->to($user->getEmail())
->subject('Nouveau compte KAJE CEE')
->htmlTemplate('email/email-confirmation-compte.html.twig')
->context([
'resetToken' => $resetToken,
'username' => $username
])
;
$mailer->send($email);
return $this->redirectToRoute('app_equipe', [], Response::HTTP_SEE_OTHER);
// Store the token object in session for retrieval in check-email route.
// $this->setTokenObjectInSession($resetToken);
}
}