app/Plugin/NZCustomPlugin/Controller/Admin/AdminFormController.php line 73

Open in your IDE?
  1. <?php
  2. namespace Plugin\NZCustomPlugin\Controller\Admin;
  3. use Eccube\Controller\AbstractController;
  4. use Plugin\NZCustomPlugin\Entity\CustomForm;
  5. use Plugin\NZCustomPlugin\Form\Type\Admin\FormType;
  6. use Plugin\NZCustomPlugin\Repository\CustomFormRepository;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. /**
  11.  * 管理画面用フォームコントローラー
  12.  */
  13. class AdminFormController extends AbstractController
  14. {
  15.     protected $formRepository;
  16.     public function __construct(CustomFormRepository $formRepository)
  17.     {
  18.         $this->formRepository $formRepository;
  19.     }
  20.     /**
  21.      * フォーム一覧
  22.      * @Route("/%eccube_admin_route%/nzcustomplugin", name="nzcustomplugin_admin_list")
  23.      * @Template("@NZCustomPlugin/admin/list.twig")
  24.      */
  25.     public function list()
  26.     {
  27.         $forms $this->formRepository->findAll();
  28.         
  29.         return [
  30.             'forms' => $forms,
  31.         ];
  32.     }
  33.     /**
  34.      * フォーム新規作成
  35.      * @Route("/%eccube_admin_route%/nzcustomplugin/new", name="nzcustomplugin_admin_new")
  36.      * @Template("@NZCustomPlugin/admin/form_edit.twig")
  37.      */
  38.     public function create(Request $request)
  39.     {
  40.         $customForm = new CustomForm();
  41.         $customForm->setCreateDate(new \DateTime());
  42.         $customForm->setUpdateDate(new \DateTime());
  43.         $form $this->createForm(FormType::class, $customForm);
  44.         $form->handleRequest($request);
  45.         if ($form->isSubmitted() && $form->isValid()) {
  46.             $this->entityManager->persist($customForm);
  47.             $this->entityManager->flush();
  48.             $this->addSuccess('フォームを作成しました。''admin');
  49.             return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $customForm->getId()]);
  50.         }
  51.         return [
  52.             'form' => $form->createView(),
  53.             'customForm' => $customForm,
  54.         ];
  55.     }
  56.     /**
  57.      * フォーム編集
  58.      * @Route("/%eccube_admin_route%/nzcustomplugin/{id}/edit", name="nzcustomplugin_admin_edit", requirements={"id" = "\d+"})
  59.      * @Template("@NZCustomPlugin/admin/form_edit.twig")
  60.      */
  61.     public function edit(Request $request$id)
  62.     {
  63.         $customForm $this->formRepository->find($id);
  64.         if (!$customForm) {
  65.             throw $this->createNotFoundException();
  66.         }
  67.         $form $this->createForm(FormType::class, $customForm);
  68.         $form->handleRequest($request);
  69.         if ($form->isSubmitted() && $form->isValid()) {
  70.             $customForm->setUpdateDate(new \DateTime());
  71.             $this->entityManager->flush();
  72.             $this->addSuccess('フォームを更新しました。''admin');
  73.             return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $customForm->getId()]);
  74.         }
  75.         return [
  76.             'form' => $form->createView(),
  77.             'customForm' => $customForm,
  78.         ];
  79.     }
  80.     /**
  81.      * フォーム削除
  82.      * @Route("/%eccube_admin_route%/nzcustomplugin/{id}/delete", name="nzcustomplugin_admin_delete", requirements={"id" = "\d+"}, methods={"POST"})
  83.      */
  84.     public function delete(Request $request$id)
  85.     {
  86.         // CSRFトークンの検証
  87.         $token $request->request->get('_token');
  88.         if (!$this->isCsrfTokenValid('delete' $id$token)) {
  89.             $this->addError('不正なアクセスです。''admin');
  90.             return $this->redirectToRoute('nzcustomplugin_admin_list');
  91.         }
  92.         $customForm $this->formRepository->find($id);
  93.         if (!$customForm) {
  94.             throw $this->createNotFoundException();
  95.         }
  96.         $this->entityManager->remove($customForm);
  97.         $this->entityManager->flush();
  98.         $this->addSuccess('フォームを削除しました。''admin');
  99.         return $this->redirectToRoute('nzcustomplugin_admin_list');
  100.     }
  101.     /**
  102.      * フォーム複製
  103.      * @Route("/%eccube_admin_route%/nzcustomplugin/{id}/duplicate", name="nzcustomplugin_admin_duplicate", requirements={"id" = "\d+"}, methods={"POST"})
  104.      */
  105.     public function duplicate(Request $request$id)
  106.     {
  107.         // CSRFトークンの検証
  108.         $token $request->request->get('_token');
  109.         if (!$this->isCsrfTokenValid('duplicate' $id$token)) {
  110.             $this->addError('不正なアクセスです。''admin');
  111.             return $this->redirectToRoute('nzcustomplugin_admin_list');
  112.         }
  113.         $originalForm $this->formRepository->find($id);
  114.         if (!$originalForm) {
  115.             throw $this->createNotFoundException();
  116.         }
  117.         // 新しいフォームを作成
  118.         $duplicatedForm = new CustomForm();
  119.         $duplicatedForm->setName($originalForm->getName() . ' (コピー)');
  120.         
  121.         // ユニークなフォームキーを生成
  122.         $baseKey $originalForm->getFormKey() . '_copy';
  123.         $formKey $baseKey;
  124.         $counter 1;
  125.         while ($this->formRepository->findOneBy(['form_key' => $formKey])) {
  126.             $formKey $baseKey '_' $counter;
  127.             $counter++;
  128.         }
  129.         $duplicatedForm->setFormKey($formKey);
  130.         
  131.         // 基本情報をコピー
  132.         $duplicatedForm->setDescription($originalForm->getDescription());
  133.         $duplicatedForm->setIsActive(false); // 複製後は無効にしておく
  134.         $duplicatedForm->setLayout($originalForm->getLayout());
  135.         $duplicatedForm->setLayoutMobile($originalForm->getLayoutMobile());
  136.         $duplicatedForm->setPublishStartDate($originalForm->getPublishStartDate());
  137.         $duplicatedForm->setPublishEndDate($originalForm->getPublishEndDate());
  138.         $duplicatedForm->setRequireLogin($originalForm->getRequireLogin());
  139.         $duplicatedForm->setSendCustomerMail($originalForm->getSendCustomerMail());
  140.         $duplicatedForm->setSendAdminMail($originalForm->getSendAdminMail());
  141.         $duplicatedForm->setAdminMailAddress($originalForm->getAdminMailAddress());
  142.         $duplicatedForm->setMailSubject($originalForm->getMailSubject());
  143.         $duplicatedForm->setMailTemplate($originalForm->getMailTemplate());
  144.         $duplicatedForm->setCreateDate(new \DateTime());
  145.         $duplicatedForm->setUpdateDate(new \DateTime());
  146.         $this->entityManager->persist($duplicatedForm);
  147.         $this->entityManager->flush();
  148.         // フィールドを複製
  149.         foreach ($originalForm->getFormFields() as $originalField) {
  150.             $duplicatedField = new \Plugin\NZCustomPlugin\Entity\FormField();
  151.             $duplicatedField->setCustomForm($duplicatedForm);
  152.             $duplicatedField->setFieldName($originalField->getFieldName());
  153.             $duplicatedField->setLabel($originalField->getLabel());
  154.             $duplicatedField->setFieldType($originalField->getFieldType());
  155.             $duplicatedField->setRequired($originalField->getRequired());
  156.             $duplicatedField->setRequiredType($originalField->getRequiredType());
  157.             $duplicatedField->setPlaceholder($originalField->getPlaceholder());
  158.             $duplicatedField->setHelpText($originalField->getHelpText());
  159.             $duplicatedField->setOptions($originalField->getOptions());
  160.             $duplicatedField->setSortNo($originalField->getSortNo());
  161.             $duplicatedField->setMaxFileSize($originalField->getMaxFileSize());
  162.             $duplicatedField->setAllowedExtensions($originalField->getAllowedExtensions());
  163.             $this->entityManager->persist($duplicatedField);
  164.         }
  165.         $this->entityManager->flush();
  166.         $this->addSuccess('フォームを複製しました。''admin');
  167.         return $this->redirectToRoute('nzcustomplugin_admin_edit', ['id' => $duplicatedForm->getId()]);
  168.     }
  169.     /**
  170.      * フォームプレビュー
  171.      * @Route("/%eccube_admin_route%/nzcustomplugin/{id}/preview", name="nzcustomplugin_admin_preview", requirements={"id" = "\d+"})
  172.      */
  173.     public function preview($id)
  174.     {
  175.         $customForm $this->formRepository->find($id);
  176.         if (!$customForm) {
  177.             throw $this->createNotFoundException();
  178.         }
  179.         return $this->redirectToRoute('nzcustomplugin_form_display', ['key' => $customForm->getFormKey()]);
  180.     }
  181. }