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

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. /**
  12.  * Class IndexController.
  13.  */
  14. class IndexController extends AbstractController {
  15.   /**
  16.    * @var MailService
  17.    */
  18.   protected $mailService;
  19.   /**
  20.    * @var PageRepository
  21.    */
  22.   private $pageRepository;
  23.   protected $PiaDocumentRequestType;
  24.   /**
  25.    * @var ReCaptchaService
  26.    */
  27.   protected $reCaptchaService;
  28.   /**
  29.    * ContactController constructor.
  30.    *
  31.    * @param MailService $mailService
  32.    * @param PageRepository $pageRepository
  33.    */
  34.   public function __construct(
  35.   MailService $mailServicePageRepository $pageRepositoryPiaDocumentRequestType $PiaDocumentRequestTypeReCaptchaService $reCaptchaService) {
  36.     $this->mailService $mailService;
  37.     $this->pageRepository $pageRepository;
  38.     $this->PiaDocumentRequestType $PiaDocumentRequestType;
  39.     $this->reCaptchaService $reCaptchaService;
  40.   }
  41.   /**
  42.    * 商品更新ログ一覧.
  43.    *
  44.    * @Route("/document_request", name="document_request", methods={"GET", "POST"})
  45.    * @Route("/document_request", name="document_request_confirm", methods={"GET", "POST"})
  46.    * @Template("@PiaDocumentRequest/default/document_request/index.twig")
  47.    */
  48.   public function index(Request $request) {
  49.     $builder $this->formFactory->createBuilder(PiaDocumentRequestType::class);
  50.     if ($this->isGranted('ROLE_USER')) {
  51.       $user $this->getUser();
  52.       $builder->setData(
  53.         [
  54.           'name01' => $user->getName01(),
  55.           'name02' => $user->getName02(),
  56.           'kana01' => $user->getKana01(),
  57.           'kana02' => $user->getKana02(),
  58.           'postal_code' => $user->getPostalCode(),
  59.           'pref' => $user->getPref(),
  60.           'addr01' => $user->getAddr01(),
  61.           'addr02' => $user->getAddr02(),
  62.           'phone_number' => $user->getPhoneNumber(),
  63.           'email' => $user->getEmail(),
  64.         ]
  65.       );
  66.     }
  67.     $form $builder->getForm();
  68.     $form->handleRequest($request);
  69.     $htAbout array_flip($this->PiaDocumentRequestType->getHashAbout());
  70.     $htPurpose array_flip($this->PiaDocumentRequestType->getHashPurpose());
  71.     $htCoin array_flip($this->PiaDocumentRequestType->getHashCoin());
  72.     $htSeminar array_flip($this->PiaDocumentRequestType->getHashSeminar());
  73.     $htShowRoom array_flip($this->PiaDocumentRequestType->getHashShowRoom());
  74.     $htGold array_flip($this->PiaDocumentRequestType->getHashGold());
  75.     $htAntique array_flip($this->PiaDocumentRequestType->getHashAntique());
  76.     $htModern array_flip($this->PiaDocumentRequestType->getHashModern());
  77.     if ($form->isSubmitted()) {
  78.         $mode $request->get('mode');
  79.       switch ($request->get('mode')) {
  80.         case 'confirm':
  81.           // reCAPTCHA検証
  82.           $recaptchaToken $request->request->get('g-recaptcha-response''');
  83.           if (!$this->reCaptchaService->verify($recaptchaToken)) {
  84.             $form->addError(new \Symfony\Component\Form\FormError('reCAPTCHAの認証に失敗しました。もう一度お試しください。'));
  85.             break;
  86.           }
  87.           if ($form->isValid()) {
  88.             $data $form->getData();
  89.             $params $_POST["pia_document_request"];
  90.             $name01 = empty($data["name01"]) ? "" $data["name01"];
  91.             $name02 = empty($data["name02"]) ? "" $data["name02"];
  92.             $params["name_nm"] = trim($name01 " " $name02);
  93.             $kana01 = empty($data["kana01"]) ? "" $data["kana01"];
  94.             $kana02 = empty($data["kana02"]) ? "" $data["kana02"];
  95.             $params["kana_nm"] = trim($kana01 " " $kana02);
  96.             $params["pref"] = empty($data["pref"]) ? "" $data["pref"]->getName();
  97.             $params["addr01"] = empty($data["addr01"]) ? "" $data["addr01"];
  98.             $params["addr02"] = empty($data["addr02"]) ? "" $data["addr02"];
  99.             $params["sex_nm"] = empty($data["sex"]) ? "" $data["sex"]->getName();
  100.             $params["how_about_nm"] = empty($params["how_about"]) ? "" $this->_makeDispCheckBox($params["how_about"], $htAbout);
  101.             $params["purpose_nm"] = empty($params["purpose"]) ? "" $this->_makeDispCheckBox($params["purpose"], $htPurpose);
  102.             $params["coin_nm"] = empty($params["coin"]) ? "" $this->_makeDispCheckBox($params["coin"], $htCoin);
  103.             $params["seminar_nm"] = empty($params["seminar"]) ? "" : (empty($htSeminar[$params["seminar"]]) ? "" $htSeminar[$params["seminar"]]);
  104.             $params["show_room_nm"] = empty($params["show_room"]) ? "" : (empty($htShowRoom[$params["show_room"]]) ? "" $htShowRoom[$params["show_room"]]);
  105.             $params["gold_nm"] = empty($params["gold"]) ? "" : (empty($htGold[$params["gold"]]) ? "" $htGold[$params["gold"]]);
  106.             $params["antique_nm"] = empty($params["antique"]) ? "" : (empty($htAntique[$params["antique"]]) ? "" $htAntique[$params["antique"]]);
  107.             $params["modern_nm"] = empty($params["modern"]) ? "" : (empty($htModern[$params["modern"]]) ? "" $htModern[$params["modern"]]);
  108.             $_SESSION["params"] = serialize($params);
  109.             return $this->render('@PiaDocumentRequest/default/document_request/confirm.twig', [
  110.                 'form' => $form->createView(),
  111.                 'params' => $params,
  112.                 'Page' => $this->pageRepository->getPageByRoute('document_request_confirm'),
  113.             ]);
  114.           }
  115.           break;
  116.         case 'complete':
  117.           $params = empty($_SESSION["params"]) ? array() : unserialize($_SESSION["params"]);
  118.           $data $form->getData();
  119.           $this->_saveSpreadSheet($params);
  120.           $this->mailService->sendDocumentRequestMail($params);
  121.           return $this->redirect($this->generateUrl('document_request_complete'));
  122.       }
  123.     }
  124.     return [
  125.       'form' => $form->createView(),
  126.       'recaptcha_site_key' => $this->getParameter('recaptcha_site_key'),
  127.     ];
  128.   }
  129.   /**
  130.    * スプレッドシートに保存
  131.    * @param array $data
  132.    */
  133.   private function _saveSpreadSheet($data) {
  134.     $key_file __DIR__ "/../../../Library/vendor/coinpalace-form-appraisal-d0023a2a5631.json";
  135.     $path __DIR__ "/../../../Library";
  136.     require_once $path '/vendor/autoload.php';
  137.     define('SCOPES'implode(' ', array(\Google_Service_Sheets::SPREADSHEETS)));
  138.     $client = new \Google_Client();
  139.     $client->setScopes(SCOPES);
  140.     $client->setAuthConfig($key_file);
  141.     $sheet = new \Google_Service_Sheets($client);
  142.     $spreadsheet_id '1qBc9w5NkeiwOo814TyX1cUJ8RJnQgWzGYTPfi6Np94E';
  143.     $value = array();
  144.     $value[] = date("Y-m-d H:i:s");
  145.     $value[] = empty($data["name_nm"]) ? "" $data["name_nm"];
  146.     $value[] = empty($data["postal_code"]) ? "" $data["postal_code"];
  147.     $value[] = empty($data["pref"]) ? "" $data["pref"];
  148.     $addr01 = empty($data["addr01"]) ? "" $data["addr01"];
  149.     $addr02 = empty($data["addr02"]) ? "" $data["addr02"];
  150.     $value[] = $addr01 $addr02;
  151.     $value[] = empty($data["phone_number"]) ? "" $data["phone_number"];
  152.     $value[] = empty($data["email"]) ? "" $data["email"];
  153.     $value[] = empty($data["sex_nm"]) ? "" $data["sex_nm"];
  154.     $value[] = empty($data["how_about_nm"]) ? "" $data["how_about_nm"];
  155.     $value[] = empty($data["purpose_nm"]) ? "" $data["purpose_nm"];
  156.     $value[] = empty($data["coin_nm"]) ? "" $data["coin_nm"];
  157.     $value[] = empty($data["seminar_nm"]) ? "" $data["seminar_nm"];
  158.     $value[] = empty($data["show_room_nm"]) ? "" $data["show_room_nm"];
  159.     $value[] = empty($data["gold_nm"]) ? "" $data["gold_nm"];
  160.     $value[] = empty($data["antique_nm"]) ? "" $data["antique_nm"];
  161.     $value[] = empty($data["modern_nm"]) ? "" $data["modern_nm"];
  162.     $value[] = empty($data["contents"]) ? "" $data["contents"];
  163.     $values = [$value];
  164.     $body = new \Google_Service_Sheets_ValueRange([
  165.       'values' => $values,
  166.     ]);
  167.     $response $sheet->spreadsheets_values->append(
  168.       $spreadsheet_id'資料請求'$body, ["valueInputOption" => 'USER_ENTERED']
  169.     );
  170.   }
  171.   private function _makeDispCheckBox($rows$hash) {
  172.     $ret = array();
  173.     if (is_array($rows) and count($rows) > 0) {
  174.       $tmp = array();
  175.       foreach ($rows as $k) {
  176.         if (empty($hash[$k])) {
  177.           continue;
  178.         }
  179.         $tmp[] = $hash[$k];
  180.       }
  181.       $ret implode("、"$tmp);
  182.     }
  183.     return $ret;
  184.   }
  185.   /**
  186.    * お問い合わせ完了画面.
  187.    *
  188.    * @Route("/document_request/complete", name="document_request_complete", methods={"GET"})
  189.    * @Template("@PiaDocumentRequest/default/document_request/complete.twig")
  190.    */
  191.   public function complete() {
  192.     return [];
  193.   }
  194. }