src/WellCommerce/Bundle/AppBundle/Controller/Admin/UserController.php line 106

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\AppBundle\Controller\Admin;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Security\Core\Security;
  20. use WellCommerce\Bundle\AppBundle\DataGrid\UserDataGrid;
  21. use WellCommerce\Bundle\AppBundle\DataSet\Admin\UserDataSet;
  22. use WellCommerce\Bundle\AppBundle\Entity\User;
  23. use WellCommerce\Bundle\AppBundle\Form\Admin\UserFormBuilder;
  24. use WellCommerce\Bundle\AppBundle\Form\Admin\UserLoginFormBuilder;
  25. use WellCommerce\Bundle\AppBundle\Form\Admin\UserResetPasswordFormBuilder;
  26. use WellCommerce\Bundle\AppBundle\Manager\UserManager;
  27. use WellCommerce\Bundle\AppBundle\Service\Shop\Storage\ShopStorage;
  28. use WellCommerce\Bundle\CoreBundle\Controller\Admin\AbstractAdminController;
  29. use WellCommerce\Bundle\CoreBundle\Helper\Mailer\MailerHelper;
  30. /**
  31.  * Class UserController
  32.  *
  33.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  34.  *
  35.  * @Route("/user", name="admin.user.", options={"expose"="true"})
  36.  */
  37. class UserController extends AbstractAdminController
  38. {
  39.     public function __construct(UserManager $manager)
  40.     {
  41.         parent::__construct($manager);
  42.     }
  43.     /**
  44.      * @Route("/index", name="index")
  45.      * @IsGranted("ROLE_ADMIN")
  46.      */
  47.     public function indexAction(UserDataGrid $dataGrid): Response
  48.     {
  49.         return $this->index($dataGrid);
  50.     }
  51.     /**
  52.      * @Route("/grid", name="grid")
  53.      * @IsGranted("ROLE_ADMIN")
  54.      */
  55.     public function gridAction(Request $requestUserDataSet $dataSet): Response
  56.     {
  57.         return $this->grid($request$dataSet);
  58.     }
  59.     /**
  60.      * @Route("/add", name="add")
  61.      * @IsGranted("ROLE_ADMIN")
  62.      */
  63.     public function addAction(UserFormBuilder $formBuilder): Response
  64.     {
  65.         return $this->save($formBuilder);
  66.     }
  67.     /**
  68.      * @Route("/edit/{id}", name="edit")
  69.      * @IsGranted("ROLE_ADMIN")
  70.      */
  71.     public function editAction(UserFormBuilder $formBuilderUser $entity): Response
  72.     {
  73.         return $this->save($formBuilder$entity);
  74.     }
  75.     /**
  76.      * @Route("/login", name="login")
  77.      */
  78.     public function loginAction(UserLoginFormBuilder $formBuilderRequest $request): Response
  79.     {
  80.         $form $formBuilder->createForm(null, [
  81.             'name'         => 'login',
  82.             'ajax_enabled' => false,
  83.             'class'        => 'login-form',
  84.         ]);
  85.         return $this->displayTemplate('login', [
  86.             'error' => $this->getSecurityErrors($request),
  87.             'form'  => $form,
  88.         ]);
  89.     }
  90.     /**
  91.      * @Route("/ping", name="ping")
  92.      * @IsGranted("ROLE_ADMIN")
  93.      */
  94.     public function ping(): JsonResponse
  95.     {
  96.         return $this->json(['success' => true]);
  97.     }
  98.     /**
  99.      * @Route("/reset", name="reset_password")
  100.      */
  101.     public function resetPasswordAction(UserResetPasswordFormBuilder $formBuilderShopStorage $storageMailerHelper $mailer): Response
  102.     {
  103.         $form $formBuilder->createForm(null, [
  104.             'name'         => 'reset_password',
  105.             'ajax_enabled' => false,
  106.             'class'        => 'login-form',
  107.         ]);
  108.         if ($form->handleRequest()->isSubmitted()) {
  109.             $formValues $form->getValue();
  110.             $username   $formValues['username'];
  111.             $user       $this->manager->getRepository()->findOneBy(['username' => $username]);
  112.             if (!$user instanceof User) {
  113.                 $this->getFlashHelper()->addError(sprintf('User with e-mail "%s" was not found.'$username));
  114.                 return $this->redirectToAction('reset_password');
  115.             }
  116.             $password $this->getSecurityHelper()->generateRandomPassword();
  117.             $user->setPassword($password);
  118.             $this->manager->updateResource($user);
  119.             $mailer->sendEmail([
  120.                 'recipient'     => $user->getEmail(),
  121.                 'subject'       => $this->getTranslatorHelper()->trans('user.email.title.reset_password'),
  122.                 'template'      => 'WellCommerceAppBundle:Admin/Email:reset_password.html.twig',
  123.                 'parameters'    => [
  124.                     'user'     => $user,
  125.                     'password' => $password,
  126.                 ],
  127.                 'configuration' => $storage->getCurrentShop()->getMailerConfiguration(),
  128.             ]);
  129.             $this->getFlashHelper()->addSuccess('user.flash.success.reset_password');
  130.             return $this->redirectToAction('login');
  131.         }
  132.         return $this->displayTemplate('reset_password', [
  133.             'form' => $form,
  134.         ]);
  135.     }
  136.     /**
  137.      * @Route("/login_check", name="login_check")
  138.      */
  139.     public function loginCheckAction()
  140.     {
  141.     }
  142.     /**
  143.      * @Route("/logout", name="logout")
  144.      */
  145.     public function logoutAction()
  146.     {
  147.     }
  148.     /**
  149.      * @Route("/delete/{id}", name="delete")
  150.      * @IsGranted("ROLE_ADMIN")
  151.      */
  152.     public function deleteAction(User $user): Response
  153.     {
  154.         $this->denyAccessUnlessGranted($this->manager->getAlias() . '.delete');
  155.         if ($user === $this->getSecurityHelper()->getAuthenticatedAdmin()) {
  156.             return $this->jsonResponse([
  157.                 'error' => 'You cannot delete your own admin account.',
  158.             ]);
  159.         }
  160.         $this->manager->removeResource($user);
  161.         return $this->jsonResponse(['success' => true]);
  162.     }
  163.     /**
  164.      * @Route("/403", name="access_denied")
  165.      */
  166.     public function accessDeniedAction(): Response
  167.     {
  168.         return $this->displayTemplate('access_denied');
  169.     }
  170.     private function getSecurityErrors(Request $request)
  171.     {
  172.         $session $request->getSession();
  173.         $error   '';
  174.         if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
  175.             $error $request->attributes->get(Security::AUTHENTICATION_ERROR);
  176.         } elseif (null !== $session && $session->has(Security::AUTHENTICATION_ERROR)) {
  177.             $error $session->get(Security::AUTHENTICATION_ERROR);
  178.             $session->remove(Security::AUTHENTICATION_ERROR);
  179.         }
  180.         return $error;
  181.     }
  182. }