app/Plugin/PiaDocumentRequest/Controller/IndexController.php line 64

Open in your IDE?
  1. <?php
  2. namespace Plugin\PiaDocumentRequest\Controller;
  3. use Eccube\Controller\AbstractController;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Plugin\PiaDocumentRequest\Form\Type\PiaDocumentRequestType;
  8. use Eccube\Repository\PageRepository;
  9. use Plugin\PiaDocumentRequest\Service\MailService;
  10. use Plugin\PiaContact\Service\ReCaptchaService;
  11. use Plugin\PiaDocumentRequest\Entity\PiaDocumentRequest;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. /**
  14.  * Class IndexController.
  15.  */
  16. class IndexController extends AbstractController {
  17.   /**
  18.    * @var MailService
  19.    */
  20.   protected $mailService;
  21.   /**
  22.    * @var PageRepository
  23.    */
  24.   private $pageRepository;
  25.   protected $PiaDocumentRequestType;
  26.   /**
  27.    * @var ReCaptchaService
  28.    */
  29.   protected $reCaptchaService;
  30.   /**
  31.    * @var EntityManagerInterface
  32.    */
  33.   protected $entityManager;
  34.   /**
  35.    * ContactController constructor.
  36.    *
  37.    * @param MailService $mailService
  38.    * @param PageRepository $pageRepository
  39.    */
  40.   public function __construct(
  41.   MailService $mailServicePageRepository $pageRepositoryPiaDocumentRequestType $PiaDocumentRequestTypeReCaptchaService $reCaptchaServiceEntityManagerInterface $entityManager) {
  42.     $this->mailService $mailService;
  43.     $this->pageRepository $pageRepository;
  44.     $this->PiaDocumentRequestType $PiaDocumentRequestType;
  45.     $this->reCaptchaService $reCaptchaService;
  46.     $this->entityManager $entityManager;
  47.   }
  48.   /**
  49.    * 商品更新ログ一覧.
  50.    *
  51.    * @Route("/document_request", name="document_request", methods={"GET", "POST"})
  52.    * @Route("/document_request", name="document_request_confirm", methods={"GET", "POST"})
  53.    * @Template("@PiaDocumentRequest/default/document_request/index.twig")
  54.    */
  55.   public function index(Request $request) {
  56.     $builder $this->formFactory->createBuilder(PiaDocumentRequestType::class);
  57.     if ($this->isGranted('ROLE_USER')) {
  58.       $user $this->getUser();
  59.       $builder->setData(
  60.         [
  61.           'name01' => $user->getName01(),
  62.           'name02' => $user->getName02(),
  63.           'kana01' => $user->getKana01(),
  64.           'kana02' => $user->getKana02(),
  65.           'postal_code' => $user->getPostalCode(),
  66.           'pref' => $user->getPref(),
  67.           'addr01' => $user->getAddr01(),
  68.           'addr02' => $user->getAddr02(),
  69.           'phone_number' => $user->getPhoneNumber(),
  70.           'email' => $user->getEmail(),
  71.         ]
  72.       );
  73.     }
  74.     $form $builder->getForm();
  75.     $form->handleRequest($request);
  76.     $htAbout array_flip($this->PiaDocumentRequestType->getHashAbout());
  77.     $htPurpose array_flip($this->PiaDocumentRequestType->getHashPurpose());
  78.     $htCoin array_flip($this->PiaDocumentRequestType->getHashCoin());
  79.     $htSeminar array_flip($this->PiaDocumentRequestType->getHashSeminar());
  80.     $htShowRoom array_flip($this->PiaDocumentRequestType->getHashShowRoom());
  81.     $htGold array_flip($this->PiaDocumentRequestType->getHashGold());
  82.     $htAntique array_flip($this->PiaDocumentRequestType->getHashAntique());
  83.     $htModern array_flip($this->PiaDocumentRequestType->getHashModern());
  84.     if ($form->isSubmitted()) {
  85.         $mode $request->get('mode');
  86.       switch ($request->get('mode')) {
  87.         case 'confirm':
  88.           // reCAPTCHA検証
  89.           $recaptchaToken $request->request->get('g-recaptcha-response''');
  90.           if (!$this->reCaptchaService->verify($recaptchaToken)) {
  91.             $form->addError(new \Symfony\Component\Form\FormError('reCAPTCHAの認証に失敗しました。もう一度お試しください。'));
  92.             break;
  93.           }
  94.           if ($form->isValid()) {
  95.             $data $form->getData();
  96.             $params $_POST["pia_document_request"];
  97.             $name01 = empty($data["name01"]) ? "" $data["name01"];
  98.             $name02 = empty($data["name02"]) ? "" $data["name02"];
  99.             $params["name_nm"] = trim($name01 " " $name02);
  100.             $kana01 = empty($data["kana01"]) ? "" $data["kana01"];
  101.             $kana02 = empty($data["kana02"]) ? "" $data["kana02"];
  102.             $params["kana_nm"] = trim($kana01 " " $kana02);
  103.             $params["pref"] = empty($data["pref"]) ? "" $data["pref"]->getName();
  104.             $params["addr01"] = empty($data["addr01"]) ? "" $data["addr01"];
  105.             $params["addr02"] = empty($data["addr02"]) ? "" $data["addr02"];
  106.             $params["sex_nm"] = empty($data["sex"]) ? "" $data["sex"]->getName();
  107.             $params["how_about_nm"] = empty($params["how_about"]) ? "" $this->_makeDispCheckBox($params["how_about"], $htAbout);
  108.             $params["purpose_nm"] = empty($params["purpose"]) ? "" $this->_makeDispCheckBox($params["purpose"], $htPurpose);
  109.             $params["coin_nm"] = empty($params["coin"]) ? "" $this->_makeDispCheckBox($params["coin"], $htCoin);
  110.             $params["seminar_nm"] = empty($params["seminar"]) ? "" : (empty($htSeminar[$params["seminar"]]) ? "" $htSeminar[$params["seminar"]]);
  111.             $params["show_room_nm"] = empty($params["show_room"]) ? "" : (empty($htShowRoom[$params["show_room"]]) ? "" $htShowRoom[$params["show_room"]]);
  112.             $params["gold_nm"] = empty($params["gold"]) ? "" : (empty($htGold[$params["gold"]]) ? "" $htGold[$params["gold"]]);
  113.             $params["antique_nm"] = empty($params["antique"]) ? "" : (empty($htAntique[$params["antique"]]) ? "" $htAntique[$params["antique"]]);
  114.             $params["modern_nm"] = empty($params["modern"]) ? "" : (empty($htModern[$params["modern"]]) ? "" $htModern[$params["modern"]]);
  115.             $_SESSION["params"] = serialize($params);
  116.             return $this->render('@PiaDocumentRequest/default/document_request/confirm.twig', [
  117.                 'form' => $form->createView(),
  118.                 'params' => $params,
  119.                 'Page' => $this->pageRepository->getPageByRoute('document_request_confirm'),
  120.             ]);
  121.           }
  122.           break;
  123.         case 'complete':
  124.           $params = empty($_SESSION["params"]) ? array() : unserialize($_SESSION["params"]);
  125.           $data $form->getData();
  126.           $this->_saveDocumentRequest($params);
  127.           $this->_saveSpreadSheet($params);
  128.           $this->mailService->sendDocumentRequestMail($params);
  129.           return $this->redirect($this->generateUrl('document_request_complete'));
  130.       }
  131.     }
  132.     return [
  133.       'form' => $form->createView(),
  134.       'recaptcha_site_key' => $this->getParameter('recaptcha_site_key'),
  135.     ];
  136.   }
  137.   /**
  138.    * 資料請求データをDBに保存(管理画面「資料請求管理」からの参照・対応管理用)
  139.    * @param array $data
  140.    */
  141.   private function _saveDocumentRequest($data) {
  142.     $user $this->getUser();
  143.     $customerId = (empty($user) || !method_exists($user"getId")) ? null $user->getId();
  144.     $DocumentRequest = new PiaDocumentRequest();
  145.     $DocumentRequest->setStatus(1);
  146.     $DocumentRequest->setCustomerId($customerId);
  147.     $DocumentRequest->setRequestName($data["name_nm"] ?? '');
  148.     $DocumentRequest->setRequestZip($data["postal_code"] ?? '');
  149.     $DocumentRequest->setRequestPrefNm($data["pref"] ?? '');
  150.     $DocumentRequest->setRequestAddress(trim(($data["addr01"] ?? '') . ($data["addr02"] ?? '')));
  151.     $DocumentRequest->setRequestTel($data["phone_number"] ?? '');
  152.     $DocumentRequest->setRequestEmail($data["email"] ?? '');
  153.     $DocumentRequest->setRequestJender($data["sex_nm"] ?? '');
  154.     $DocumentRequest->setRequestKnowNm($data["how_about_nm"] ?? '');
  155.     $DocumentRequest->setRequestPurposeNm($data["purpose_nm"] ?? '');
  156.     $DocumentRequest->setRequestInterestNm($data["coin_nm"] ?? '');
  157.     $DocumentRequest->setRequestSeminar($data["seminar_nm"] ?? '');
  158.     $DocumentRequest->setRequestShowroom($data["show_room_nm"] ?? '');
  159.     $DocumentRequest->setRequestGold($data["gold_nm"] ?? '');
  160.     $DocumentRequest->setRequestAntique($data["antique_nm"] ?? '');
  161.     $DocumentRequest->setRequestModan($data["modern_nm"] ?? '');
  162.     $DocumentRequest->setRequestContent($data["contents"] ?? '');
  163.     $DocumentRequest->setCreateDate(new \DateTime());
  164.     $DocumentRequest->setUpdateDate(new \DateTime());
  165.     $DocumentRequest->setDelFlg(0);
  166.     $this->entityManager->persist($DocumentRequest);
  167.     $this->entityManager->flush();
  168.   }
  169.   /**
  170.    * スプレッドシートに保存
  171.    * @param array $data
  172.    */
  173.   private function _saveSpreadSheet($data) {
  174.     $key_file __DIR__ "/../../../Library/vendor/coinpalace-form-appraisal-d0023a2a5631.json";
  175.     $path __DIR__ "/../../../Library";
  176.     require_once $path '/vendor/autoload.php';
  177.     define('SCOPES'implode(' ', array(\Google_Service_Sheets::SPREADSHEETS)));
  178.     $client = new \Google_Client();
  179.     $client->setScopes(SCOPES);
  180.     $client->setAuthConfig($key_file);
  181.     $sheet = new \Google_Service_Sheets($client);
  182.     $spreadsheet_id '1qBc9w5NkeiwOo814TyX1cUJ8RJnQgWzGYTPfi6Np94E';
  183.     $value = array();
  184.     $value[] = date("Y-m-d H:i:s");
  185.     $value[] = empty($data["name_nm"]) ? "" $data["name_nm"];
  186.     $value[] = empty($data["postal_code"]) ? "" $data["postal_code"];
  187.     $value[] = empty($data["pref"]) ? "" $data["pref"];
  188.     $addr01 = empty($data["addr01"]) ? "" $data["addr01"];
  189.     $addr02 = empty($data["addr02"]) ? "" $data["addr02"];
  190.     $value[] = $addr01 $addr02;
  191.     $value[] = empty($data["phone_number"]) ? "" $data["phone_number"];
  192.     $value[] = empty($data["email"]) ? "" $data["email"];
  193.     $value[] = empty($data["sex_nm"]) ? "" $data["sex_nm"];
  194.     $value[] = empty($data["how_about_nm"]) ? "" $data["how_about_nm"];
  195.     $value[] = empty($data["purpose_nm"]) ? "" $data["purpose_nm"];
  196.     $value[] = empty($data["coin_nm"]) ? "" $data["coin_nm"];
  197.     $value[] = empty($data["seminar_nm"]) ? "" $data["seminar_nm"];
  198.     $value[] = empty($data["show_room_nm"]) ? "" $data["show_room_nm"];
  199.     $value[] = empty($data["gold_nm"]) ? "" $data["gold_nm"];
  200.     $value[] = empty($data["antique_nm"]) ? "" $data["antique_nm"];
  201.     $value[] = empty($data["modern_nm"]) ? "" $data["modern_nm"];
  202.     $value[] = empty($data["contents"]) ? "" $data["contents"];
  203.     $values = [$value];
  204.     $body = new \Google_Service_Sheets_ValueRange([
  205.       'values' => $values,
  206.     ]);
  207.     $response $sheet->spreadsheets_values->append(
  208.       $spreadsheet_id'資料請求'$body, ["valueInputOption" => 'USER_ENTERED']
  209.     );
  210.   }
  211.   private function _makeDispCheckBox($rows$hash) {
  212.     $ret = array();
  213.     if (is_array($rows) and count($rows) > 0) {
  214.       $tmp = array();
  215.       foreach ($rows as $k) {
  216.         if (empty($hash[$k])) {
  217.           continue;
  218.         }
  219.         $tmp[] = $hash[$k];
  220.       }
  221.       $ret implode("、"$tmp);
  222.     }
  223.     return $ret;
  224.   }
  225.   /**
  226.    * お問い合わせ完了画面.
  227.    *
  228.    * @Route("/document_request/complete", name="document_request_complete", methods={"GET"})
  229.    * @Template("@PiaDocumentRequest/default/document_request/complete.twig")
  230.    */
  231.   public function complete() {
  232.     return [];
  233.   }
  234. }