src/Eccube/Controller/Mypage/ChangeController.php line 80

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Eccube\Controller\Mypage;
  13. use Eccube\Controller\AbstractController;
  14. use Eccube\Entity\Customer;
  15. use Eccube\Event\EccubeEvents;
  16. use Eccube\Event\EventArgs;
  17. use Eccube\Form\Type\Front\EntryType;
  18. use Eccube\Repository\BaseInfoRepository;
  19. use Eccube\Repository\CustomerRepository;
  20. use Eccube\Service\MailService;
  21. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
  25. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  26. use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
  27. class ChangeController extends AbstractController
  28. {
  29.     /**
  30.      * @var TokenStorage
  31.      */
  32.     protected $tokenStorage;
  33.     /**
  34.      * @var CustomerRepository
  35.      */
  36.     protected $customerRepository;
  37.     /**
  38.      * @var EncoderFactoryInterface
  39.      */
  40.     protected $encoderFactory;
  41.     /**
  42.      * @var MailService
  43.      */
  44.     protected $mailService;
  45.     /**
  46.      * @var baseInfoRepository
  47.      */
  48.     protected $baseInfoRepository;
  49.     private const SESSION_KEY_PRE_EMAIL 'eccube.front.mypage.change.preEmail';
  50.     public function __construct(
  51.         CustomerRepository $customerRepository,
  52.         EncoderFactoryInterface $encoderFactory,
  53.         TokenStorageInterface $tokenStorage,
  54.         BaseInfoRepository $baseInfoRepository,
  55.         MailService $mailService
  56.     ) {
  57.         $this->customerRepository $customerRepository;
  58.         $this->encoderFactory $encoderFactory;
  59.         $this->tokenStorage $tokenStorage;
  60.         $this->baseInfoRepository $baseInfoRepository;
  61.         $this->mailService $mailService;
  62.     }
  63.     /**
  64.      * 会員情報編集画面.
  65.      *
  66.      * @Route("/mypage/change", name="mypage_change", methods={"GET", "POST"})
  67.      * @Template("Mypage/change.twig")
  68.      */
  69.     public function index(Request $request)
  70.     {
  71.         /** @var Customer $Customer */
  72.         $Customer $this->getUser();
  73.         $Customer->setPlainPassword($this->eccubeConfig['eccube_default_password']);
  74.         /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
  75.         $builder $this->formFactory->createBuilder(EntryType::class, $Customer);
  76.         $event = new EventArgs(
  77.             [
  78.                 'builder' => $builder,
  79.                 'Customer' => $Customer,
  80.             ],
  81.             $request
  82.         );
  83.         $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_CHANGE_INDEX_INITIALIZE);
  84.         /* @var $form \Symfony\Component\Form\FormInterface */
  85.         $form $builder->getForm();
  86.         $form->handleRequest($request);
  87.         if ($form->isSubmitted() && $form->isValid()) {
  88.             log_info('会員編集開始');
  89.             if ($Customer->getPlainPassword() !== $this->eccubeConfig['eccube_default_password']) {
  90.                 $encoder $this->encoderFactory->getEncoder($Customer);
  91.                 if ($Customer->getSalt() === null) {
  92.                     $Customer->setSalt($encoder->createSalt());
  93.                 }
  94.                 $Customer->setPassword(
  95.                     $encoder->encodePassword($Customer->getPlainPassword(), $Customer->getSalt())
  96.                 );
  97.             }
  98.             // 会員情報変更時にメールを送信
  99.             if ($this->baseInfoRepository->get()->isOptionMailNotifier()) {
  100.                 // 情報のセット
  101.                 $userData['userAgent'] = $request->headers->get('User-Agent');
  102.                 $userData['preEmail'] = $request->getSession()->get(self::SESSION_KEY_PRE_EMAIL);
  103.                 $userData['ipAddress'] = $request->getClientIp();
  104.                 // メール送信
  105.                 $this->mailService->sendCustomerChangeNotifyMail($Customer$userDatatrans('front.mypage.customer.notify_title'));
  106.             }
  107.             $this->session->remove(self::SESSION_KEY_PRE_EMAIL);
  108.             $this->entityManager->flush();
  109.             log_info('会員編集完了');
  110.             $event = new EventArgs(
  111.                 [
  112.                     'form' => $form,
  113.                     'Customer' => $Customer,
  114.                 ],
  115.                 $request
  116.             );
  117.             $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_CHANGE_INDEX_COMPLETE);
  118.             return $this->redirect($this->generateUrl('mypage_change_complete'));
  119.         }
  120.         $preEmail $form->get('email')->getData();
  121.         $this->session->set(self::SESSION_KEY_PRE_EMAIL$preEmail);
  122.         return [
  123.             'form' => $form->createView(),
  124.         ];
  125.     }
  126.     /**
  127.      * 会員情報編集完了画面.
  128.      *
  129.      * @Route("/mypage/change_complete", name="mypage_change_complete", methods={"GET"})
  130.      * @Template("Mypage/change_complete.twig")
  131.      */
  132.     public function complete(Request $request)
  133.     {
  134.         return [];
  135.     }
  136. }