src/Eccube/Controller/Admin/Setting/System/MemberController.php line 67

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\Admin\Setting\System;
  13. use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
  14. use Eccube\Controller\AbstractController;
  15. use Eccube\Entity\Member;
  16. use Eccube\Event\EccubeEvents;
  17. use Eccube\Event\EventArgs;
  18. use Eccube\Form\Type\Admin\MemberType;
  19. use Eccube\Repository\MemberRepository;
  20. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  24. use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
  25. class MemberController extends AbstractController
  26. {
  27.     /**
  28.      * @var TokenStorageInterface
  29.      */
  30.     protected $tokenStorage;
  31.     /**
  32.      * @var MemberRepository
  33.      */
  34.     protected $memberRepository;
  35.     /**
  36.      * @var EncoderFactoryInterface
  37.      */
  38.     protected $encoderFactory;
  39.     /**
  40.      * MemberController constructor.
  41.      *
  42.      * @param EncoderFactoryInterface $encoderFactory
  43.      * @param MemberRepository $memberRepository
  44.      * @param TokenStorageInterface $tokenStorage
  45.      */
  46.     public function __construct(
  47.         EncoderFactoryInterface $encoderFactory,
  48.         MemberRepository $memberRepository,
  49.         TokenStorageInterface $tokenStorage
  50.     ) {
  51.         $this->encoderFactory $encoderFactory;
  52.         $this->memberRepository $memberRepository;
  53.         $this->tokenStorage $tokenStorage;
  54.     }
  55.     /**
  56.      * @Route("/%eccube_admin_route%/setting/system/member", name="admin_setting_system_member", methods={"GET", "PUT"})
  57.      * @Template("@admin/Setting/System/member.twig")
  58.      */
  59.     public function index(Request $request)
  60.     {
  61.         $Members $this->memberRepository->findBy([], ['sort_no' => 'DESC']);
  62.         $builder $this->formFactory->createBuilder();
  63.         $event = new EventArgs(
  64.             [
  65.                 'builder' => $builder,
  66.                 'Members' => $Members,
  67.             ],
  68.             $request
  69.         );
  70.         $this->eventDispatcher->dispatch($eventEccubeEvents::ADMIN_SETTING_SYSTEM_MEMBER_INDEX_INITIALIZE);
  71.         $form $builder->getForm();
  72.         return [
  73.             'form' => $form->createView(),
  74.             'Members' => $Members,
  75.         ];
  76.     }
  77.     /**
  78.      * @Route("/%eccube_admin_route%/setting/system/member/new", name="admin_setting_system_member_new", methods={"GET", "POST"})
  79.      * @Template("@admin/Setting/System/member_edit.twig")
  80.      */
  81.     public function create(Request $request)
  82.     {
  83.         $Member = new Member();
  84.         $builder $this->formFactory
  85.             ->createBuilder(MemberType::class, $Member);
  86.         $event = new EventArgs([
  87.             'builder' => $builder,
  88.             'Member' => $Member,
  89.         ], $request);
  90.         $this->eventDispatcher->dispatch($eventEccubeEvents::ADMIN_SETTING_SYSTEM_MEMBER_EDIT_INITIALIZE);
  91.         $form $builder->getForm();
  92.         $form->handleRequest($request);
  93.         if ($form->isSubmitted() && $form->isValid()) {
  94.             $encoder $this->encoderFactory->getEncoder($Member);
  95.             $salt $encoder->createSalt();
  96.             $password $Member->getPlainPassword();
  97.             $password $encoder->encodePassword($password$salt);
  98.             $Member
  99.                 ->setSalt($salt)
  100.                 ->setPassword($password);
  101.             $this->memberRepository->save($Member);
  102.             $event = new EventArgs(
  103.                 [
  104.                     'form' => $form,
  105.                     'Member' => $Member,
  106.                 ],
  107.                 $request
  108.             );
  109.             $this->eventDispatcher->dispatch($eventEccubeEvents::ADMIN_SETTING_SYSTEM_MEMBER_EDIT_COMPLETE);
  110.             $this->addSuccess('admin.common.save_complete''admin');
  111.             return $this->redirectToRoute('admin_setting_system_member_edit', ['id' => $Member->getId()]);
  112.         }
  113.         return [
  114.             'form' => $form->createView(),
  115.             'Member' => $Member,
  116.         ];
  117.     }
  118.     /**
  119.      * @Route("/%eccube_admin_route%/setting/system/member/{id}/edit", requirements={"id" = "\d+"}, name="admin_setting_system_member_edit", methods={"GET", "POST"})
  120.      * @Template("@admin/Setting/System/member_edit.twig")
  121.      */
  122.     public function edit(Request $requestMember $Member)
  123.     {
  124.         $Member->setPlainPassword($this->eccubeConfig['eccube_default_password']);
  125.         $builder $this->formFactory
  126.             ->createBuilder(MemberType::class, $Member);
  127.         $event = new EventArgs(
  128.             [
  129.                 'builder' => $builder,
  130.                 'Member' => $Member,
  131.             ],
  132.             $request
  133.         );
  134.         $this->eventDispatcher->dispatch($eventEccubeEvents::ADMIN_SETTING_SYSTEM_MEMBER_EDIT_INITIALIZE);
  135.         $form $builder->getForm();
  136.         $form->handleRequest($request);
  137.         if ($form->isSubmitted() && $form->isValid()) {
  138.             if ($Member->getPlainPassword() !== $this->eccubeConfig['eccube_default_password']) {
  139.                 $salt $Member->getSalt();
  140.                 // 2系からのデータ移行でsaltがセットされていない場合はsaltを生成.
  141.                 if (empty($salt)) {
  142.                     $salt bin2hex(openssl_random_pseudo_bytes(5));
  143.                     $Member->setSalt($salt);
  144.                 }
  145.                 $password $Member->getPlainPassword();
  146.                 $encoder $this->encoderFactory->getEncoder($Member);
  147.                 $password $encoder->encodePassword($password$salt);
  148.                 $Member->setPassword($password);
  149.             }
  150.             $this->memberRepository->save($Member);
  151.             $event = new EventArgs(
  152.                 [
  153.                     'form' => $form,
  154.                     'Member' => $Member,
  155.                 ],
  156.                 $request
  157.             );
  158.             $this->eventDispatcher->dispatch($eventEccubeEvents::ADMIN_SETTING_SYSTEM_MEMBER_EDIT_COMPLETE);
  159.             $this->addSuccess('admin.common.save_complete''admin');
  160.             return $this->redirectToRoute('admin_setting_system_member_edit', ['id' => $Member->getId()]);
  161.         }
  162.         return [
  163.             'form' => $form->createView(),
  164.             'Member' => $Member,
  165.         ];
  166.     }
  167.     /**
  168.      * @Route("/%eccube_admin_route%/setting/system/member/{id}/up", requirements={"id" = "\d+"}, name="admin_setting_system_member_up", methods={"PUT"})
  169.      */
  170.     public function up(Request $requestMember $Member)
  171.     {
  172.         $this->isTokenValid();
  173.         try {
  174.             $this->memberRepository->up($Member);
  175.             $this->addSuccess('admin.common.move_complete''admin');
  176.         } catch (\Exception $e) {
  177.             log_error('メンバー表示順更新エラー', [$Member->getId(), $e]);
  178.             $this->addError('admin.common.move_error''admin');
  179.         }
  180.         return $this->redirectToRoute('admin_setting_system_member');
  181.     }
  182.     /**
  183.      * @Route("/%eccube_admin_route%/setting/system/member/{id}/down", requirements={"id" = "\d+"}, name="admin_setting_system_member_down", methods={"PUT"})
  184.      */
  185.     public function down(Request $requestMember $Member)
  186.     {
  187.         $this->isTokenValid();
  188.         try {
  189.             $this->memberRepository->down($Member);
  190.             $this->addSuccess('admin.common.move_complete''admin');
  191.         } catch (\Exception $e) {
  192.             log_error('メンバー表示順更新エラー', [$Member->getId(), $e]);
  193.             $this->addError('admin.common.move_error''admin');
  194.         }
  195.         return $this->redirectToRoute('admin_setting_system_member');
  196.     }
  197.     /**
  198.      * @Route("/%eccube_admin_route%/setting/system/member/{id}/delete", requirements={"id" = "\d+"}, name="admin_setting_system_member_delete", methods={"DELETE"})
  199.      */
  200.     public function delete(Request $requestMember $Member)
  201.     {
  202.         $this->isTokenValid();
  203.         log_info('メンバー削除開始', [$Member->getId()]);
  204.         try {
  205.             $this->memberRepository->delete($Member);
  206.             $event = new EventArgs(
  207.                 [
  208.                     'Member' => $Member,
  209.                 ],
  210.                 $request
  211.             );
  212.             $this->eventDispatcher->dispatch($eventEccubeEvents::ADMIN_SETTING_SYSTEM_MEMBER_DELETE_COMPLETE);
  213.             $this->addSuccess('admin.common.delete_complete''admin');
  214.             log_info('メンバー削除完了', [$Member->getId()]);
  215.         } catch (ForeignKeyConstraintViolationException $e) {
  216.             log_info('メンバー削除エラー', [$Member->getId()]);
  217.             $message trans('admin.common.delete_error_foreign_key', ['%name%' => $Member->getName()]);
  218.             $this->addError($message'admin');
  219.         } catch (\Exception $e) {
  220.             log_info('メンバー削除エラー', [$Member->getId(), $e]);
  221.             $message trans('admin.common.delete_error');
  222.             $this->addError($message'admin');
  223.         }
  224.         return $this->redirectToRoute('admin_setting_system_member');
  225.     }
  226. }