app/Plugin/PostCarrier42/Controller/MailmagaBlockController.php line 227

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of PostCarrier for EC-CUBE
  4.  *
  5.  * Copyright(c) IPLOGIC CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.iplogic.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 Plugin\PostCarrier42\Controller;
  13. use Eccube\Common\Constant;
  14. use Eccube\Controller\AbstractController;
  15. use Eccube\Repository\CustomerRepository;
  16. use Plugin\PostCarrier42\Entity\PostCarrierGroupCustomer;
  17. use Plugin\PostCarrier42\Form\Type\PostCarrierMailmagaBlockType;
  18. use Plugin\PostCarrier42\Repository\PostCarrierGroupCustomerRepository;
  19. use Plugin\PostCarrier42\Service\PostCarrierService;
  20. use Plugin\PostCarrier42\Service\PostCarrierUtilService;
  21. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\RequestStack;
  24. use Symfony\Component\HttpFoundation\StreamedResponse;
  25. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  28. class MailmagaBlockController extends AbstractController
  29. {
  30.     /**
  31.      * @var PostCarrierService
  32.      */
  33.     protected $postCarrierService;
  34.     /**
  35.      * @var CustomerRepository
  36.      */
  37.     protected $customerRepository;
  38.     /**
  39.      * @var PostCarrierGroupCustomerRepository
  40.      */
  41.     protected $postCarrierGroupCustomerRepository;
  42.     /**
  43.      * @var PostCarrierUtil
  44.      */
  45.     protected $postCarrierUtil;
  46.     /**
  47.      * @var RequestStack
  48.      */
  49.     protected $requestStack;
  50.     /**
  51.      * PostCarrierHistoryController constructor.
  52.      *
  53.      * @param PostCarrierService $postCarrierService
  54.      * @param CustomerRepository $customerRepository
  55.      * @param PostCarrierGroupCustomerRepository $postCarrierGroupCustomerRepository
  56.      * @param PostCarrierUtil $postCarrierUtil
  57.      */
  58.     public function __construct(
  59.         PostCarrierService $postCarrierService,
  60.         CustomerRepository $customerRepository,
  61.         PostCarrierGroupCustomerRepository $postCarrierGroupCustomerRepository,
  62.         PostCarrierUtilService $postCarrierUtil,
  63.         RequestStack $requestStack
  64.     ) {
  65.         $this->postCarrierService $postCarrierService;
  66.         $this->customerRepository $customerRepository;
  67.         $this->postCarrierGroupCustomerRepository $postCarrierGroupCustomerRepository;
  68.         $this->postCarrierUtil $postCarrierUtil;
  69.         $this->requestStack $requestStack;
  70.     }
  71.     /**
  72.      * メルマガ会員登録解除.
  73.      *
  74.      * @Route("/postcarrier/mailmaga", name="postcarrier_mailmaga")
  75.      *
  76.      * @param Request $request
  77.      *
  78.      * @return array
  79.      */
  80.     public function index(Request $request)
  81.     {
  82.         $postCarrierService $this->postCarrierService;
  83.         $builder $this->formFactory->createNamedBuilder(''PostCarrierMailmagaBlockType::class);
  84.         $form $builder->getForm();
  85.         $action $request->get('action');
  86.         $return_page '';
  87.         if ($action == 'subscribe') {
  88.             $return_page 'postcarrier_subscribe_complete';
  89.         } else if ($action == 'unsubscribe') {
  90.             $return_page 'postcarrier_unsubscribe_complete';
  91.         } else {
  92.             return $this->redirectToRoute('homepage');
  93.         }
  94.         $form->handleRequest($request);
  95.         if ($form->isSubmitted() && $form->isValid()) {
  96.             $formData $form->getData();
  97.             $email $formData['email'];
  98.             $uniqid '';
  99.             $GroupCustomer $this->postCarrierGroupCustomerRepository->findOneBy(['group_id' => 1'email' => $email]);
  100.             if ($action == 'subscribe') {
  101.                 if (is_null($GroupCustomer)) {
  102.                     $uniqid $this->postCarrierGroupCustomerRepository->getUniqueSecretKey();
  103.                     $now = new \DateTime();
  104.                     $GroupCustomer = new PostCarrierGroupCustomer();
  105.                     $GroupCustomer->setGroupId(1);
  106.                     $GroupCustomer->setStatus(1); // 仮登録
  107.                     $GroupCustomer->setEmail($email);
  108.                     $GroupCustomer->setSecretKey($uniqid);
  109.                     $GroupCustomer->setCreateDate($now);
  110.                     $GroupCustomer->setUpdateDate($now);
  111.                     $this->entityManager->persist($GroupCustomer);
  112.                     $this->entityManager->flush($GroupCustomer);
  113.                 } else {
  114.                     // 既にメルマガ本会員(status==2)でも仮登録メールを送信する。
  115.                     $uniqid $GroupCustomer->getSecretKey();
  116.                 }
  117.                 $formData = [
  118.                     'email' => $email,
  119.                     'regist_url' => $this->generateUrl('post_carrier_receive', ['mode'=>'regist','id'=>$uniqid], UrlGeneratorInterface::ABSOLUTE_URL),
  120.                 ];
  121.                 $this->postCarrierUtil->sendRegistrationMail($formData);
  122.             } else if ($action == 'unsubscribe') {
  123.                 if (is_null($GroupCustomer) || $GroupCustomer->getStatus() != 2) {
  124.                     // メルマガ会員でないなら本会員の停止
  125.                     $Customer $this->customerRepository->findOneBy(['email' => $email]);
  126.                     if (is_null($Customer) || $Customer->getPostcarrierFlg() == Constant::DISABLED) {
  127.                         // メルマガ会員でも本会員でもない または
  128.                         // メルマガ会員でなく本会員であるがメルマガ希望でない
  129.                         return $this->redirectToRoute($return_page, ['status' => 'failure']);
  130.                     } else if (is_null($GroupCustomer)) {
  131.                         // メルマガ会員でなく本会員でメルマガ希望なので、仮解除用のメルマガ会員レコードを作成する
  132.                         $GroupCustomer = new PostCarrierGroupCustomer();
  133.                         $GroupCustomer->setGroupId(1);
  134.                         $GroupCustomer->setStatus(1); // 仮登録状態
  135.                         $GroupCustomer->setEmail($email);
  136.                     } else {
  137.                         // 既に仮会員状態でエントリーが存在する場合、再送信する
  138.                     }
  139.                 }
  140.                 $uniqid $this->postCarrierGroupCustomerRepository->getUniqueSecretKey();
  141.                 $GroupCustomer->setSecretKey($uniqid);
  142.                 $GroupCustomer->setUpdateDate(new \DateTime());
  143.                 $this->entityManager->persist($GroupCustomer);
  144.                 $this->entityManager->flush($GroupCustomer);
  145.                 $formData = [
  146.                     'email' => $email,
  147.                     'regist_url' => $this->generateUrl('post_carrier_receive', ['mode'=>'unsubscribe','id'=>$uniqid], UrlGeneratorInterface::ABSOLUTE_URL),
  148.                 ];
  149.                 $this->postCarrierUtil->sendUnsubscribeMail($formData);
  150.             }
  151.             return $this->redirectToRoute($return_page, ['status' => 'temporary']);
  152.         } else {
  153.             return $this->redirectToRoute($return_page, ['status' => 'failure']);
  154.             //return new \Symfony\Component\HttpFoundation\Response($form->getErrors(true));
  155.             //dump($form->getErrors(true));
  156.             //return $this->render('@PostCarrier42/Mailmaga/postcarrier_subscribe_complete.twig');
  157.         }
  158.     }
  159.     /**
  160.      * @Route("/block/postcarrier_mailmaga_block", name="block_postcarrier_mailmaga_block")
  161.      * @Route("/block/postcarrier_mailmaga_block_sp", name="block_postcarrier_mailmaga_block_sp")
  162.      * @Template("Block/postcarrier_mailmaga_block.twig")
  163.      */
  164.     public function postcarrier_mailmaga_block(Request $request)
  165.     {
  166.         $builder $this->formFactory
  167.             ->createNamedBuilder(''PostCarrierMailmagaBlockType::class)
  168.             ->setMethod('POST');
  169.         $request $this->requestStack->getMasterRequest();
  170.         $form $builder->getForm();
  171.         $form->handleRequest($request);
  172.         return [
  173.             'form' => $form->createView(),
  174.         ];
  175.     }
  176.     /**
  177.      * @Route("/postcarrier_subscribe_complete", name="postcarrier_subscribe_complete")
  178.      * @Template("PostCarrier42/Resource/template/Mailmaga/postcarrier_subscribe_complete.twig")
  179.      */
  180.     public function postcarrier_subscribe_complete(Request $request)
  181.     {
  182.         return [];
  183.     }
  184.     /**
  185.      * @Route("/postcarrier_unsubscribe_complete", name="postcarrier_unsubscribe_complete")
  186.      * @Template("PostCarrier42/Resource/template/Mailmaga/postcarrier_unsubscribe_complete.twig")
  187.      */
  188.     public function postcarrier_unsubscribe_complete(Request $request)
  189.     {
  190.         return [];
  191.     }
  192.     /**
  193.      * @Route("/postcarrier_unsubscribe", name="postcarrier_unsubscribe")
  194.      * @Template("PostCarrier42/Resource/template/Mailmaga/postcarrier_unsubscribe.twig")
  195.      */
  196.     public function postcarrier_unsubscribe(Request $request)
  197.     {
  198.         $builder $this->formFactory
  199.             ->createNamedBuilder(''PostCarrierMailmagaBlockType::class)
  200.             ->setMethod('POST');
  201.         $request $this->requestStack->getMasterRequest();
  202.         $form $builder->getForm();
  203.         $form->handleRequest($request);
  204.         return [
  205.             'form' => $form->createView(),
  206.         ];
  207.     }
  208. }