app/Plugin/NZCustomPlugin/Controller/Admin/FormFieldController.php line 74

Open in your IDE?
  1. <?php
  2. namespace Plugin\NZCustomPlugin\Controller\Admin;
  3. use Eccube\Controller\AbstractController;
  4. use Plugin\NZCustomPlugin\Entity\FormField;
  5. use Plugin\NZCustomPlugin\Form\Type\Admin\FormFieldType;
  6. use Plugin\NZCustomPlugin\Repository\CustomFormRepository;
  7. use Plugin\NZCustomPlugin\Repository\FormFieldRepository;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. class FormFieldController extends AbstractController
  12. {
  13.     protected $formRepository;
  14.     protected $fieldRepository;
  15.     
  16.     public function __construct(
  17.         CustomFormRepository $formRepository,
  18.         FormFieldRepository $fieldRepository
  19.     ) {
  20.         $this->formRepository $formRepository;
  21.         $this->fieldRepository $fieldRepository;
  22.     }
  23.     
  24.     /**
  25.      * @Route("/%eccube_admin_route%/nzcustomplugin/{form_id}/field/new", name="nzcustomplugin_admin_field_new", requirements={"form_id" = "\d+"})
  26.      * @Route("/%eccube_admin_route%/nzcustomplugin/{form_id}/field/{field_id}/edit", name="nzcustomplugin_admin_field_edit", requirements={"form_id" = "\d+", "field_id" = "\d+"})
  27.      * @Template("@NZCustomPlugin/admin/field_edit.twig")
  28.      */
  29.     public function edit(Request $request$form_id$field_id null)
  30.     {
  31.         $customForm $this->formRepository->find($form_id);
  32.         if (!$customForm) {
  33.             throw $this->createNotFoundException();
  34.         }
  35.         
  36.         if ($field_id) {
  37.             $field $this->fieldRepository->find($field_id);
  38.             if (!$field || $field->getCustomForm()->getId() !== $customForm->getId()) {
  39.                 throw $this->createNotFoundException();
  40.             }
  41.         } else {
  42.             $field = new FormField();
  43.             $field->setCustomForm($customForm);
  44.             $maxSortNo $this->fieldRepository->getMaxSortNo($form_id);
  45.             $field->setSortNo($maxSortNo 1);
  46.         }
  47.         
  48.         $builder $this->formFactory->createBuilder(FormFieldType::class, $field);
  49.         $form $builder->getForm();
  50.         $form->handleRequest($request);
  51.         
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             $this->entityManager->persist($field);
  54.             $this->entityManager->flush();
  55.             
  56.             $this->addSuccess('フィールドを保存しました。''admin');
  57.             
  58.             return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $customForm->getId()]);
  59.         }
  60.         
  61.         return [
  62.             'form' => $form->createView(),
  63.             'customForm' => $customForm,
  64.             'field' => $field,
  65.         ];
  66.     }
  67.     
  68.     /**
  69.      * @Route("/%eccube_admin_route%/nzcustomplugin/{form_id}/field/{field_id}/delete", name="nzcustomplugin_admin_field_delete", methods={"POST"}, requirements={"form_id" = "\d+", "field_id" = "\d+"})
  70.      */
  71.     public function delete(Request $request$form_id$field_id)
  72.     {
  73.         $token $request->request->get('_token');
  74.         if (!$this->isCsrfTokenValid('delete' $field_id$token)) {
  75.             $this->addError('不正なアクセスです。''admin');
  76.             return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $form_id]);
  77.         }
  78.         
  79.         $field $this->fieldRepository->find($field_id);
  80.         if (!$field || $field->getCustomForm()->getId() != $form_id) {
  81.             throw $this->createNotFoundException();
  82.         }
  83.         
  84.         $this->entityManager->remove($field);
  85.         $this->entityManager->flush();
  86.         
  87.         $this->addSuccess('フィールドを削除しました。''admin');
  88.         
  89.         return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $form_id]);
  90.     }
  91.     
  92.     /**
  93.      * @Route("/%eccube_admin_route%/nzcustomplugin/field/{id}/move-up", name="nzcustomplugin_admin_field_move_up", requirements={"id" = "\d+"})
  94.      */
  95.     public function moveUp(Request $request$id)
  96.     {
  97.         $field $this->fieldRepository->find($id);
  98.         
  99.         if (!$field) {
  100.             throw $this->createNotFoundException();
  101.         }
  102.         
  103.         $customForm $field->getCustomForm();
  104.         $currentSort $field->getSortNo();
  105.         
  106.         // 現在のフィールドより上にあるフィールドを取得
  107.         $qb $this->entityManager->createQueryBuilder();
  108.         $targetField $qb->select('f')
  109.             ->from(FormField::class, 'f')
  110.             ->where('f.customForm = :form')
  111.             ->andWhere('f.sort_no < :sort')
  112.             ->setParameter('form'$customForm)
  113.             ->setParameter('sort'$currentSort)
  114.             ->orderBy('f.sort_no''DESC')
  115.             ->setMaxResults(1)
  116.             ->getQuery()
  117.             ->getOneOrNullResult();
  118.         
  119.         if ($targetField) {
  120.             $targetSort $targetField->getSortNo();
  121.             $targetField->setSortNo($currentSort);
  122.             $field->setSortNo($targetSort);
  123.             
  124.             $this->entityManager->flush();
  125.             $this->addSuccess('フィールドの順序を変更しました。''admin');
  126.         }
  127.         
  128.         return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $customForm->getId()]);
  129.     }
  130.     
  131.     /**
  132.      * @Route("/%eccube_admin_route%/nzcustomplugin/field/{id}/move-down", name="nzcustomplugin_admin_field_move_down", requirements={"id" = "\d+"})
  133.      */
  134.     public function moveDown(Request $request$id)
  135.     {
  136.         $field $this->fieldRepository->find($id);
  137.         
  138.         if (!$field) {
  139.             throw $this->createNotFoundException();
  140.         }
  141.         
  142.         $customForm $field->getCustomForm();
  143.         $currentSort $field->getSortNo();
  144.         
  145.         // 現在のフィールドより下にあるフィールドを取得
  146.         $qb $this->entityManager->createQueryBuilder();
  147.         $targetField $qb->select('f')
  148.             ->from(FormField::class, 'f')
  149.             ->where('f.customForm = :form')
  150.             ->andWhere('f.sort_no > :sort')
  151.             ->setParameter('form'$customForm)
  152.             ->setParameter('sort'$currentSort)
  153.             ->orderBy('f.sort_no''ASC')
  154.             ->setMaxResults(1)
  155.             ->getQuery()
  156.             ->getOneOrNullResult();
  157.         
  158.         if ($targetField) {
  159.             $targetSort $targetField->getSortNo();
  160.             $targetField->setSortNo($currentSort);
  161.             $field->setSortNo($targetSort);
  162.             
  163.             $this->entityManager->flush();
  164.             $this->addSuccess('フィールドの順序を変更しました。''admin');
  165.         }
  166.         
  167.         return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $customForm->getId()]);
  168.     }
  169. }