<?php
namespace App\Controller\Mvc;
use App\Entity\Account\Account;
use App\Entity\Account\Owner;
use App\Form\Account\OwnerRegistrationType;
use App\Service\InquiryControllerService;
use App\Utils\FormUtil;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/contact")
*/
class ContactController extends AbstractController
{
private const SESSION_NAME = "contact_resume";
/**
* @Route("/", name="contact_index", methods={"GET"})
*/
public function index(
Request $request,
InquiryControllerService $inquiryService
): Response {
$form = $inquiryService->prepareForm(
$request,
self::SESSION_NAME,
OwnerRegistrationType::class,
$this->createEmptyAccount()
);
return $this->render("pages/contact/index.html.twig", [
"form" => $form->createView(),
"retry" => false
]);
}
/**
* @Route("/confirm", name="contact_confirm", methods={"POST"})
*/
public function confirm(
Request $request,
InquiryControllerService $inquiryService
): Response {
$Account = $this->createEmptyAccount();
$form = $inquiryService->getSubmittedForm(
$request,
OwnerRegistrationType::class,
$Account
);
if(false === $inquiryService->formValidation($request, $form, $Account)) {
return $this->render("pages/contact/index.html.twig", [
"form" => $form->createView(),
"retry" => true
]);
}
return $this->render('pages/contact/confirm.html.twig', [
"inquiry" => $Account,
"form" => $form->createView(),
"confirmForm" => $inquiryService->saveSession($request, $form, self::SESSION_NAME)->createView()
]);
}
/**
* @Route("/send", name="contact_send", methods={"POST"})
*/
public function send(
Request $request,
InquiryControllerService $inquiryService,
UserPasswordHasherInterface $passwordHasher
): Response {
// confirm csrf
if(!$inquiryService->handleConfirmForm($request)) {
return $this->redirectToRoute("contact_index");
}
// form data load from session
$Account = $this->createEmptyAccount();
if(!$form = $inquiryService->loadSessionAndGetForm(
$request,
$Account,
OwnerRegistrationType::class,
self::SESSION_NAME
)) {
return $this->redirectToRoute('contact_index');
}
// validate again
if(!$inquiryService->formValidation($request, $form, $Account)) {
return $this->render('pages/contact/index.html.twig', [
"form" => $form->createView(),
"retry" => true,
]);
}
$Account
->setPassword(
$passwordHasher->hashPassword(
$Account,
$form->get('plain_password')->getData()
)
)
->setRoles(["ROLE_OWNER"])
->getOwner()->setStatus(Owner::STATUS_DISABLE)
;
// persist - sendmail
$inquiryService
->persistAndSessionRemove($request, $Account, self::SESSION_NAME)
->sendmail($Account, $form)
;
// perdotのような送信がある場合、HTMLをここでレンダリング
// return $this->render('ownerregistration/send.html.twig', [
// "inquiry" => $Ownerregistration
// ]);
// goto complete
return $this->redirectToRoute('contact_complete');
}
/**
* @Route("/complete", name="contact_complete", methods={"GET"})
*/
public function complete(): Response
{
return $this->render("pages/contact/complete.html.twig", []);
}
/**
* @Route("/pardot_mock", name="contact_pardot_mock", methods={"POST"})
*/
public function pardotMock(Request $request, LoggerInterface $logger) {
$logger->info('Owner registration pardot mock. send: '. print_r($request->request->all(), true));
return $this->redirectToRoute('contact_complete');
}
/**
* @Route("/dev_mock", name="contact_dev_mock", methods={"GET"})
*/
public function devMock(Request $request) {
$Account = $this->createEmptyAccount();
$Account
->setEmail('dev_mock@triple-e.jp')
->getOwner()
->setCompanyName('Triple-E JAPAN')
->setCompanyKana('トリプルイージャパン')
->setManagerName('運営者名')
->setRepresentativeName('飯見裕一郎')
->setRepresentativeKana('いいみゆういちろう')
->setChargerName('土屋慎二')
->setPhone('052-325-3648')
->setAddress('愛知県名古屋市中村区大閤3丁目7-76')
->setUrl('https://triple-e.jp')
;
$form = $this->createForm(OwnerRegistrationType::class, $Account);
$request->getSession()->set(self::SESSION_NAME, FormUtil::getViewData($form));
return $this->redirectToRoute('contact_index');
}
/**
* @return Account
*/
private function createEmptyAccount(): Account
{
$Account = new Account();
$Owner = new Owner();
$Account->setOwner($Owner);
return $Account;
}
}