src/Controller/UserController.php line 334

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Company;
  4. use App\Entity\User;
  5. use App\Entity\UserSetting;
  6. use App\Form\CompanyType;
  7. use App\Form\UserSearchType;
  8. use App\Form\UserType;
  9. use App\Repository\CompanyRepository;
  10. use App\Repository\SettingRepository;
  11. use App\Repository\ShopRepository;
  12. use App\Repository\UserRepository;
  13. use App\Repository\UserSettingRepository;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use mysql_xdevapi\Exception;
  16. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  19. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  23. use Symfony\Component\Mailer\MailerInterface;
  24. use Symfony\Component\Mime\Address;
  25. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher;
  26. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  29. use Symfony\Component\String\Slugger\SluggerInterface;
  30. // @dth: to encode the pass
  31. /**
  32.  * @Route("/{_locale<%app.supported_locales%>}/user")
  33.  */
  34. class UserController extends AbstractController
  35. {
  36.     private $passwordEncoder;
  37.     private $settings;
  38.     public function __construct(UserPasswordEncoderInterface $passwordEncoder)
  39.     {
  40.         $this->passwordEncoder $passwordEncoder;
  41.     }
  42.     /**
  43.      * @Route("/", name="app_user_index", methods={"GET"})
  44.      */
  45.     public function index(UserRepository $userRepositoryPaginatorInterface $paginatorRequest $request): Response
  46.     {
  47.         if (!$activeUser $userRepository->findOneBy(['active' => 1])) {
  48.             foreach ($userRepository->findAll() as $k => $user) {
  49.                 $user->setActive(1);
  50.                 $userRepository->add($user);
  51.             }
  52.         }
  53.         //temp
  54.         /*
  55.         foreach($userRepository->findAll() as $k=>$user) {
  56.             if($shop=$user->getShop()) {
  57.                 $user->addShop($shop);
  58.                 $userRepository->add($user);
  59.                 $orders=$user->getOrders();
  60.                 foreach($orders as $a=>$order) {
  61.                     $order->setShop($shop);
  62.                 }
  63.                 //echo $user->getId()." - ".$user->getShop()->getId()."<br/>";
  64.             }
  65.         }*/
  66.         if ($this->isGranted('ROLE_SUPER_ADMIN')) {
  67.             //$users = $userRepository->findAll();
  68.             $query $userRepository->findAll([]);
  69.             $users $paginator->paginate(
  70.                 $query/* query NOT result */
  71.                 $request->query->getInt('page'1)/*limit per page*/,
  72.                 30
  73.             );
  74.         } else {
  75.             $user $this->getUser();
  76.             $shop $user->getShop();
  77.             //$users = $userRepository->findByDql(array('shop'=>$shop));
  78.             $query $userRepository->findByDql(array('shop' => $shop));
  79.             $users $paginator->paginate(
  80.                 $query/* query NOT result */
  81.                 $request->query->getInt('page'1), /*page number*/
  82.                 30 /*limit per page*/
  83.             );
  84.         }
  85.         $searchForm $this->createForm(UserSearchType::class, new User, ['method' => 'GET']);
  86.         $searchForm->handleRequest($request);
  87.         return $this->renderForm('user/index.html.twig', [
  88.             'users' => $users,
  89.             'form' => $searchForm
  90.         ]);
  91.     }
  92.     /**
  93.      * @Route("/new", name="app_user_new", methods={"GET", "POST"})
  94.      */
  95.     public function new(Request $requestUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasherShopRepository $shopRepositoryMailerInterface $mailerParameterBagInterface $params): Response
  96.     {
  97.         $user = new User();
  98.         $shop null;
  99.         if (!$this->isGranted('ROLE_SUPER_ADMIN')) {
  100.             $shop $this->get('security.token_storage')->getToken()->getUser()->getShop();
  101.         }
  102.         $form $this->createForm(UserType::class, $user);
  103.         $form->handleRequest($request);
  104.         if ($form->isSubmitted() && $form->isValid()) {
  105.             if ($shop) {
  106.                 //$user->setShop($shop);
  107.                 $user->addShop($shop);
  108.             }
  109.             $user->setPassword(
  110.                 $userPasswordHasher->hashPassword(
  111.                     $user,
  112.                     'random'//$form->get('plainPassword')->getData()
  113.                 )
  114.             );
  115.             if (!$this->isGranted('ROLE_SUPER_ADMIN') && $this->isGranted('ROLE_ADMIN')) {
  116.                 $parentUser $this->getUser();
  117.                 $user->setParent($parentUser);
  118.             }
  119.             if (!$this->isGranted('ROLE_SUPER_ADMIN')) {
  120.                 $shop $this->getUser()->getShop();
  121.                 $user->addShop($shop);
  122.                 $user->setShop($shop);
  123.             }
  124.             $user->setActive(1);
  125.             $userRepository->add($user);
  126.             $mailer_sender $params->get('app.mailer_sender');
  127.             $bcc = array($mailer_sender'eric@caravanemedia.com');
  128.             if ($mailCopy $user->getShop()->getMailCopy()) {
  129.                 $bcc array_merge($bccexplode(','$mailCopy));
  130.             }
  131.             $subject "Création d'un compte Bak2";
  132.             $template 'emails/order/welcome.html.twig';
  133.             if (file_exists($params->get('kernel.project_dir') . "/private/shops/" $user->getShop()->getId() . "/templates/mail/welcome.html.twig")) {
  134.                 $template "shops/" $user->getShop()->getId() . "/templates/mail/welcome.html.twig";
  135.             }
  136.             $email = (new TemplatedEmail())
  137.                 ->from($mailer_sender)
  138.                 ->to($user->getEmail())
  139.                 ->bcc(...$bcc)
  140.                 ->subject($subject)
  141.                 // path of the Twig template to render
  142.                 ->htmlTemplate($template)
  143.                 // pass variables (name => value) to the template
  144.                 ->context([
  145.                     'user' => $user
  146.                 ]);
  147.             try {
  148.                 $mailer->send($email);
  149.             } catch (TransportExceptionInterface $e) {
  150.                 // some error prevented the email sending; display an
  151.                 // error message or try to resend the message
  152.                 echo "<pre>";
  153.                 var_dump($e);
  154.                 echo "</pre>";
  155.             }
  156.             if ($request->query->get('from') && $request->query->get('type')) {
  157.                 return $this->redirect($request->request->get('referer'));
  158.             }
  159.             return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  160.         }
  161.         return $this->renderForm('user/new.html.twig', [
  162.             'user' => $user,
  163.             'form' => $form,
  164.         ]);
  165.     }
  166.     /**
  167.      * @Route("/me/orders", name="app_user_orders", methods={"GET"})
  168.      */
  169.     public function orders(): Response
  170.     {
  171.         $user $this->getUser();
  172.         return $this->render('user/orders.html.twig', [
  173.             'user' => $user,
  174.         ]);
  175.     }
  176.     /**
  177.      * @Route("/me/address", name="app_user_addresses", methods={"GET"})
  178.      */
  179.     public function addresses(): Response
  180.     {
  181.         $user $this->getUser();
  182.         return $this->render('user/address.html.twig', [
  183.             'user' => $user,
  184.         ]);
  185.     }
  186.     /**
  187.      * @Route("/me/sav", name="app_user_sav", methods={"GET"})
  188.      */
  189.     public function sav(): Response
  190.     {
  191.         $user $this->getUser();
  192.         $savs $user->getSavs();
  193.         return $this->render('user/sav.html.twig', [
  194.             'user' => $user,
  195.             'savs' => $savs
  196.         ]);
  197.     }
  198.     /**
  199.      * @Route("/me/information", name="app_user_me_infos", methods={"GET"})
  200.      */
  201.     public function infos(): Response
  202.     {
  203.         $user $this->getUser();
  204.         return $this->render('user/infos.html.twig', [
  205.             'user' => $user,
  206.         ]);
  207.     }
  208.     /**
  209.      * @Route("/me/company", name="app_user_company", methods={"GET","POST"})
  210.      */
  211.     public function company(CompanyRepository $companyRepositoryUserRepository $userRepositorySluggerInterface $sluggerRequest $request): Response
  212.     {
  213.         $user $this->getUser();
  214.         $shop $user->getShop();
  215.         $shopConfig $shop->getConfig();
  216.         $isB2b $shopConfig['type'] == 'b2b' true false;
  217.         if (!$company $user->getCompany()) {
  218.             $company = new Company();
  219.         }
  220.         $form $this->createForm(CompanyType::class, $company, ['isB2b' => $isB2b]);
  221.         $form->handleRequest($request);
  222.         if ($form->isSubmitted() && $form->isValid()) {
  223.             $company->addUser($user);
  224.             $shopDirectory $this->getParameter('kernel.project_dir') . '/private/shops/' $shop->getId() . "/documents";
  225.             $kbisFile $form->get('kbis')->getData();
  226.             if ($kbisFile) {
  227.                 $originalFilename pathinfo($kbisFile->getClientOriginalName(), PATHINFO_FILENAME);
  228.                 // this is needed to safely include the file name as part of the URL
  229.                 $safeFilename $slugger->slug($originalFilename);
  230.                 $newFilename $safeFilename '-' uniqid() . '.' $kbisFile->guessExtension();
  231.                 // Move the file to the directory where brochures are stored
  232.                 try {
  233.                     $kbisFile->move($shopDirectory$newFilename);
  234.                 } catch (FileException $e) {
  235.                     // ... handle exception if something happens during file upload
  236.                 }
  237.                 // updates the 'brochureFilename' property to store the PDF file name
  238.                 // instead of its contents
  239.                 $company->setKbisFilename($newFilename);
  240.             }
  241.             $companyRepository->add($company);
  242.             $user->setCompany($company);
  243.             $userRepository->add($user);
  244.             return $this->redirectToRoute('app_user_me');
  245.         }
  246.         return $this->renderForm('user/company.html.twig', [
  247.             'user' => $user,
  248.             'company' => $company,
  249.             'form' => $form,
  250.         ]);
  251.     }
  252.     /**
  253.      * @Route("/me", name="app_user_me", methods={"GET"})
  254.      */
  255.     public function me(): Response
  256.     {
  257.         $user $this->getUser();
  258.         return $this->render('user/me.html.twig', [
  259.             'user' => $user,
  260.         ]);
  261.     }
  262.     /**
  263.      * @Route("/{id}", name="app_user_show", methods={"GET"})
  264.      */
  265.     public function show(User $user): Response
  266.     {
  267.         return $this->render('user/show.html.twig', [
  268.             'user' => $user,
  269.         ]);
  270.     }
  271.     /**
  272.      * @Route("/{id}/edit", name="app_user_edit", methods={"GET", "POST"})
  273.      */
  274.     public function edit(Request $requestUser $userUserRepository $userRepositorySettingRepository $settingRepositoryUserSettingRepository $userSettingRepositoryUserPasswordHasherInterface $userPasswordHasher): Response
  275.     {
  276.         $settings $settingRepository->findByTarget('User');
  277.         foreach ($settings as $setting) {
  278.             if (!$userSetting $userSettingRepository->findOneBy(array('user' => $user'setting' => $setting))) {
  279.                 $userSetting = new UserSetting();
  280.                 $userSetting->setUser($user);
  281.                 $userSetting->setSetting($setting);
  282.                 $userSetting->setValue($setting->getDefaultValue());
  283.                 $userSettingRepository->add($userSetting);
  284.             }
  285.         }
  286.         $form $this->createForm(UserType::class, $user);
  287.         $form->handleRequest($request);
  288.         if ($form->isSubmitted() && $form->isValid()) {
  289.             if ($this->isGranted('ROLE_ADMIN') && $form->get('plainPassword')->getData() != '') {
  290.                 $user->setPassword(
  291.                     $userPasswordHasher->hashPassword(
  292.                         $user,
  293.                         $form->get('plainPassword')->getData()
  294.                     )
  295.                 );
  296.             }
  297.             $userRepository->add($user);
  298.             if ($request->query->get('from') && $request->query->get('type')) {
  299.                 switch ($request->query->get('type')) {
  300.                     case 'company':
  301.                         return $this->redirectToRoute('app_company_edit', ['id' => $request->query->get('company')], Response::HTTP_SEE_OTHER);
  302.                         break;
  303.                 }
  304.             }
  305.             return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  306.         }
  307.         return $this->renderForm('user/edit.html.twig', [
  308.             'user' => $user,
  309.             'form' => $form,
  310.         ]);
  311.     }
  312.     /**
  313.      * @Route("/{id}", name="app_user_delete", methods={"POST"})
  314.      */
  315.     public function delete(Request $requestUser $userUserRepository $userRepository): Response
  316.     {
  317.         if ($this->isCsrfTokenValid('delete' $user->getId(), $request->request->get('_token'))) {
  318.             //$userRepository->remove($user);
  319.             $user->setActive(0);
  320.             $userRepository->add($user);
  321.         }
  322.         return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  323.     }
  324.     private function getDefaultSettings()
  325.     {
  326.         $settings = array(
  327.             'seePublicPrice' => array('label' => 'See public prices''value' => false),
  328.             'seeBuyingPrice' => array('label' => 'See reseller prices''value' => false),
  329.             'seeSellingPrice' => array('label' => 'See seller prices''value' => false)
  330.         );
  331.     }
  332.     /**
  333.      * @Route("/{id}/mailme", name="app_user_mailme", methods={"GET"})
  334.      */
  335.     public function mailMe(Request $requestUser $userMailerInterface $mailer): Response
  336.     {
  337.         // $user = $this->getUser();
  338.         $email = (new TemplatedEmail())
  339.             ->from('sales@bak2.com')
  340.             ->to($user->getEmail())
  341.             ->cc('test-yyfqvmjc5@srv1.mail-tester.com')
  342.             ->subject("Test email subject")
  343.             ->text('Text test email')
  344.             ->html('<p>Html test email</p>');;
  345.         try {
  346.             $success $mailer->send($email);
  347.             //var_dump($success);
  348.         } catch (TransportExceptionInterface $e) {
  349.             // some error prevented the email sending; display an
  350.             // error message or try to resend the message
  351.             echo "<pre>cc-";
  352.             var_dump($e);
  353.             echo "</pre>";
  354.         }
  355.         //$success = mail('sales@bak2.com', 'test mail mail only', "mail only");
  356.         //var_dump($success);
  357.         return $this->render('user/show.html.twig', [
  358.             'user' => $user,
  359.         ]);
  360.     }
  361. }