app/Plugin/MailMagazine42/Controller/MailMagazineHistoryController.php line 78

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 Plugin\MailMagazine42\Controller;
  13. use Eccube\Controller\AbstractController;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Plugin\MailMagazine42\Entity\MailMagazineSendHistory;
  18. use Plugin\MailMagazine42\Repository\MailMagazineSendHistoryRepository;
  19. use Plugin\MailMagazine42\Service\MailMagazineService;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  22. use Eccube\Repository\Master\PageMaxRepository;
  23. use Eccube\Entity\Master\Sex;
  24. class MailMagazineHistoryController extends AbstractController
  25. {
  26.     /**
  27.      * @var MailMagazineSendHistoryRepository
  28.      */
  29.     protected $mailMagazineSendHistoryRepository;
  30.     /**
  31.      * @var PageMaxRepository
  32.      */
  33.     protected $pageMaxRepository;
  34.     /**
  35.      * @var MailMagazineService
  36.      */
  37.     protected $mailMagazineService;
  38.     /**
  39.      * MailMagazineHistoryController constructor.
  40.      *
  41.      * @param MailMagazineService $mailMagazineService
  42.      * @param MailMagazineSendHistoryRepository $mailMagazineSendHistoryRepository
  43.      * @param PageMaxRepository $pageMaxRepository
  44.      */
  45.     public function __construct(
  46.         MailMagazineService $mailMagazineService,
  47.         MailMagazineSendHistoryRepository $mailMagazineSendHistoryRepository,
  48.         PageMaxRepository $pageMaxRepository
  49.     ) {
  50.         $this->mailMagazineService $mailMagazineService;
  51.         $this->mailMagazineSendHistoryRepository $mailMagazineSendHistoryRepository;
  52.         $this->pageMaxRepository $pageMaxRepository;
  53.     }
  54.     /**
  55.      * 配信履歴一覧.
  56.      *
  57.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history", name="plugin_mail_magazine_history")
  58.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/{page_no}",
  59.      *     requirements={"page_no" = "\d+"},
  60.      *     name="plugin_mail_magazine_history_page"
  61.      * )
  62.      * @Template("@MailMagazine42/admin/history_list.twig")
  63.      *
  64.      * @param Request $request
  65.      * @param PaginatorInterface $paginator
  66.      * @param int $page_no
  67.      *
  68.      * @return array
  69.      */
  70.     public function index(Request $requestPaginatorInterface $paginator$page_no 1)
  71.     {
  72.         $pageNo $page_no;
  73.         $pageMaxis $this->pageMaxRepository->findAll();
  74.         $pageCount $this->eccubeConfig['eccube_default_page_count'];
  75.         $pageCountParam $request->get('page_count');
  76.         if ($pageCountParam && is_numeric($pageCountParam)) {
  77.             foreach ($pageMaxis as $pageMax) {
  78.                 if ($pageCountParam == $pageMax->getName()) {
  79.                     $pageCount $pageMax->getName();
  80.                     break;
  81.                 }
  82.             }
  83.         }
  84.         // リストをView変数に突っ込む
  85.         $pagination null;
  86.         $searchForm $this->formFactory
  87.             ->createBuilder()
  88.             ->getForm();
  89.         $searchForm->handleRequest($request);
  90.         $searchData $searchForm->getData();
  91.         $qb $this->mailMagazineSendHistoryRepository->getQueryBuilderBySearchData($searchData);
  92.         $pagination $paginator->paginate($qb$pageNo$pageCount);
  93.         return [
  94.             'pagination' => $pagination,
  95.             'pageMaxis' => $pageMaxis,
  96.             'page_count' => $pageCount,
  97.         ];
  98.     }
  99.     /**
  100.      * プレビュー
  101.      *
  102.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/{id}/preview",
  103.      *     requirements={"id":"\d+"},
  104.      *     name="plugin_mail_magazine_history_preview"
  105.      * )
  106.      * @Template("@MailMagazine42/admin/history_preview.twig")
  107.      *
  108.      * @param MailMagazineSendHistory $mailMagazineSendHistory
  109.      *
  110.      * @return array
  111.      */
  112.     public function preview(MailMagazineSendHistory $mailMagazineSendHistory)
  113.     {
  114.         // 配信履歴を取得する
  115.         return [
  116.             'history' => $mailMagazineSendHistory,
  117.         ];
  118.     }
  119.     /**
  120.      * 配信条件を表示する.
  121.      *
  122.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/{id}/condition",
  123.      *      requirements={"id":"\d+"},
  124.      *      name="plugin_mail_magazine_history_condition",
  125.      * )
  126.      * @Template("@MailMagazine42/admin/history_condition.twig")
  127.      *
  128.      * @param MailMagazineSendHistory $mailMagazineSendHistory
  129.      *
  130.      * @throws BadRequestHttpException
  131.      *
  132.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response|array
  133.      */
  134.     public function condition(MailMagazineSendHistory $mailMagazineSendHistory)
  135.     {
  136.         // 検索条件をアンシリアライズする
  137.         // base64,serializeされているので注意すること
  138.         $searchData unserialize(base64_decode($mailMagazineSendHistory->getSearchData()));
  139.         // 区分値を文字列に変更する
  140.         // 必要な項目のみ
  141.         $displayData $this->searchDataToDisplayData($searchData);
  142.         return [
  143.             'search_data' => $displayData,
  144.         ];
  145.     }
  146.     /**
  147.      * search_dataの配列を表示用に変換する.
  148.      *
  149.      * @param array $searchData
  150.      *
  151.      * @return array
  152.      */
  153.     protected function searchDataToDisplayData($searchData)
  154.     {
  155.         $data $searchData;
  156.         // 会員種別
  157.         $val = [];
  158.         if (isset($searchData['customer_status']) && is_array($searchData['customer_status'])) {
  159.             array_map(function ($CustomerStatus) use (&$val) {
  160.                 /* @var \Eccube\Entity\Master\CustomerStatus $CustomerStatus */
  161.                 $val[] = $CustomerStatus->getName();
  162.             }, $searchData['customer_status']);
  163.         }
  164.         $data['customer_status'] = implode(', '$val);
  165.         // 性別
  166.         $val = [];
  167.         if (isset($searchData['sex']) && is_array($searchData['sex'])) {
  168.             array_map(function ($Sex) use (&$val) {
  169.                 /* @var Sex $Sex */
  170.                 $val[] = $Sex->getName();
  171.             }, $searchData['sex']);
  172.         }
  173.         $data['sex'] = implode(', '$val);
  174.         return $data;
  175.     }
  176.     /**
  177.      * 配信履歴を論理削除する
  178.      * RequestがPOST以外の場合はBadRequestHttpExceptionを発生させる.
  179.      *
  180.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/{id}/delete",
  181.      *     requirements={"id":"\d+"},
  182.      *     name="plugin_mail_magazine_history_delete",
  183.      *     methods={"POST"}
  184.      * )
  185.      *
  186.      * @param MailMagazineSendHistory $mailMagazineSendHistory
  187.      *
  188.      * @throws BadRequestHttpException
  189.      *
  190.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  191.      */
  192.     public function delete(MailMagazineSendHistory $mailMagazineSendHistory)
  193.     {
  194.         try {
  195.             $this->isTokenValid();
  196.             $id $mailMagazineSendHistory->getId();
  197.             $this->mailMagazineSendHistoryRepository->delete($mailMagazineSendHistory);
  198.             $this->entityManager->flush();
  199.             $this->mailMagazineService->unlinkHistoryFiles($id);
  200.             $this->addSuccess('admin.mailmagazine.history.delete.sucesss''admin');
  201.         } catch (\Exception $e) {
  202.             $this->addError('admin.mailmagazine.history.delete.failure''admin');
  203.         }
  204.         // メルマガテンプレート一覧へリダイレクト
  205.         return $this->redirect($this->generateUrl('plugin_mail_magazine_history'));
  206.     }
  207.     /**
  208.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/{id}/retry",
  209.      *     requirements={"id":"\d+"},
  210.      *     name="plugin_mail_magazine_history_retry",
  211.      *     methods={"POST"}
  212.      * )
  213.      *
  214.      * @param Request $request
  215.      * @param MailMagazineSendHistory $mailMagazineSendHistory
  216.      *
  217.      * @return mixed
  218.      */
  219.     public function retry(Request $requestMailMagazineSendHistory $mailMagazineSendHistory)
  220.     {
  221.         // Ajax/POSTでない場合は終了する
  222.         if (!$request->isXmlHttpRequest() || 'POST' !== $request->getMethod()) {
  223.             throw new BadRequestHttpException();
  224.         }
  225.         try {
  226.             log_info('メルマガ再試行前処理開始', ['id' => $mailMagazineSendHistory->getId()]);
  227.             $this->mailMagazineService->markRetry($mailMagazineSendHistory->getId());
  228.             log_info('メルマガ再試行前処理完了', ['id' => $mailMagazineSendHistory->getId()]);
  229.             $status true;
  230.         } catch (\Exception $e) {
  231.             log_error(__METHOD__, [$e]);
  232.             $status false;
  233.         }
  234.         return $this->json(['status' => $status]);
  235.     }
  236.     /**
  237.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/result/{id}",
  238.      *     requirements={"id":"\d+"},
  239.      *     name="plugin_mail_magazine_history_result"
  240.      * )
  241.      * @Route("/%eccube_admin_route%/plugin/mail_magazine/history/result/{id}/{page_no}",
  242.      *     requirements={"id":"\d+", "page_no" = "\d+"},
  243.      *     name="plugin_mail_magazine_history_result_page"
  244.      * )
  245.      * @Template("@MailMagazine42/admin/history_result.twig")
  246.      *
  247.      * @param Request $request
  248.      * @param MailMagazineSendHistory $mailMagazineSendHistory
  249.      * @param PaginatorInterface $paginator
  250.      * @param int $page_no
  251.      *
  252.      * @return mixed
  253.      */
  254.     public function result(Request $requestMailMagazineSendHistory $mailMagazineSendHistoryPaginatorInterface $paginator$page_no 1)
  255.     {
  256.         $resultFile $this->mailMagazineService->getHistoryFileName($mailMagazineSendHistory->getId(), false);
  257.         $pageMaxis $this->pageMaxRepository->findAll();
  258.         $pageCount $request->get('page_count');
  259.         $pageCount $pageCount $pageCount $this->eccubeConfig['eccube_default_page_count'];
  260.         $pagination $paginator->paginate($resultFile,
  261.             $page_no,
  262.             $pageCount
  263.         );
  264.         return [
  265.             'historyId' => $mailMagazineSendHistory->getId(),
  266.             'pagination' => $pagination,
  267.             'pageMaxis' => $pageMaxis,
  268.             'page_count' => $pageCount,
  269.         ];
  270.     }
  271. }