src/Controller/HomeController.php line 132
<?php
namespace App\Controller;
use App\Service\MailerService;
use App\Service\ThemeDataService;
use App\Service\ThemeHelper;
use App\Service\ThemeService;
use Knp\Snappy\Pdf;
use setasign\Fpdi\PdfReader\PdfReaderException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Tomsgu\PdfMerger\Exception\FileNotFoundException;
use Tomsgu\PdfMerger\Exception\InvalidArgumentException;
class HomeController extends AbstractController
{
private ThemeHelper $themeHelper;
public function __construct(ThemeHelper $themeHelper)
{
$this->themeHelper = $themeHelper;
}
/**
* @return Response
*/
#[Route('/', name: 'homepage')]
public function index(): Response
{
return $this->render('home/index.html.twig');
}
/**
* @return Response
*/
#[Route('/a-propos', name: 'about')]
public function about(): Response
{
return $this->render('about.html.twig');
}
/**
* @param ThemeDataService $themeDataService
* @return Response
*/
#[Route('/comprendre-les-bases-de-la-numerologie', name: 'numbers')]
public function numbers(ThemeDataService $themeDataService): Response
{
$numbersData = $themeDataService::GENERAL_DATA_NUMBERS;
$expressionNumbersData = $themeDataService::EXPRESSION_NUMBERS_DATA;
$classicNumbersData = array_slice($numbersData, 0, 9, true);
$masterNumbersData = array_slice($numbersData, 9, 3, true);
return $this->render('numbers/index.html.twig', [
'classicNumbersData' => $classicNumbersData,
'masterNumbersData' => $masterNumbersData,
'expressionNumbersData' => $expressionNumbersData
]);
}
/**
* @param $number
* @param ThemeDataService $themeDataService
* @return Response
*/
#[Route('/comprendre-les-nombres/le-nombre-{number}', name: 'number')]
public function number($number, ThemeDataService $themeDataService): Response
{
if (!in_array($number, ThemeService::NUMBERS) && !in_array($number, ThemeService::MASTER_NUMBERS)) {
return $this->redirectToRoute('numbers');
}
$numberData = $themeDataService::GENERAL_DATA_NUMBERS[$number];
$numbersData = $themeDataService::GENERAL_DATA_NUMBERS;
$expressionNumbersData = $themeDataService::EXPRESSION_NUMBERS_DATA;
return $this->render('numbers/detail.html.twig', [
'number' => $number,
'numbersData' => $numbersData,
'numberData' => $numberData,
'expressionNumbersData' => $expressionNumbersData
]);
}
/**
* @return Response
*/
#[Route('/calculer-mon-theme-numerologique', name: 'test')]
public function test(): Response
{
return $this->render('test/index.html.twig');
}
/**
* @param Request $request
* @param MailerService $mailerService
* @return Response
*/
#[Route('/contactez-nous', name: 'contact')]
public function contact(Request $request, MailerService $mailerService): Response
{
if ($request->request->get('email') && $request->request->get('subject') && $request->request->get('message')) {
$email = $request->request->get('email');
$subject = $request->request->get('subject');
$message = $request->request->get('message');
$mailerService->sendContactMail($request, $email, $subject, $message);
}
return $this->render('contact.html.twig');
}
/**
* @return Response
*/
#[Route('/mentions-legales', name: 'legales')]
public function legales(): Response
{
return $this->render('legales.html.twig');
}
/**
* @return Response
*/
#[Route('/politique-de-confidentialite', name: 'confidentiality')]
public function confidentiality(): Response
{
return $this->render('confidentiality.html.twig');
}
/**
* @return Response
*/
#[Route('/conditions-générales-de-vente', name: 'cgv')]
public function cgv(): Response
{
return $this->render('cgv.html.twig');
}
/**
* @param Request $request
* @param ThemeService $themeService
* @param ThemeDataService $themeDataService
* @param Pdf $snappyPdf
* @return Response
*/
#[Route('/mon-theme-numerologique', name: 'testResults')]
public function testResults(Request $request, ThemeService $themeService, ThemeDataService $themeDataService, MailerService $mailerService, MailerInterface $mailer): Response
{
$firstnames = trim($request->request->get('firstnames'));
$names = trim($request->request->get('names'));
$birthdate = trim($request->request->get('birthdate'));
if ($firstnames == null || $firstnames == '' || $names == null || $names == '' || $birthdate == null) {
$this->addFlash('warning', "Remplissez tous les champs correctement");
return $this->redirectToRoute('test');
}
$session = $request->getSession();
$session->set("firstnames", $firstnames);
$session->set("names", $names);
$session->set("birthdate", $birthdate);
$theme = $this->themeHelper->getTheme($themeService, $request->request->get('firstnames'), $request->request->get('names'), $request->request->get('birthdate'));
$dataForTheme = $this->themeHelper->provideDataFromThemeDataService($themeDataService);
$pairing = $themeService->getPairing($theme['lifePathNumber']['result_number'], $theme['expressionNumber']['result_number']);
$numbersToLetters = $themeService::NUMBERS_TO_LETTERS;
$userData = [
"firstnames" => $request->getSession()->get("firstnames"),
"names" => $request->getSession()->get("names"),
"birthdate" => $request->getSession()->get("birthdate")
];
$mailerService->notifyAdminThemeGenerated($mailer, $userData, false);
return $this->render('test/results.html.twig', [
'userData' => $userData,
'pairing' => $pairing,
'theme' => $theme,
'numbersToLetters' => $numbersToLetters,
'numbersData' => $dataForTheme["numbersData"],
'lifePathData' => $dataForTheme["lifePathData"],
'karmicDebts' => $dataForTheme["karmicDebts"],
'expressionData' => $dataForTheme["expressionData"],
'activeNumberData' => $dataForTheme["activeNumberData"],
'hereditaryNumberData' => $dataForTheme["hereditaryNumberData"],
'keyNumberData' => $dataForTheme["keyNumberData"],
'lifeDynamicNumberData' => $dataForTheme["lifeDynamicNumberData"],
'intimateNumberData' => $dataForTheme["intimateNumberData"],
'birthdayNumberData' => $dataForTheme["birthdayNumberData"],
'personalYearNumberData' => $dataForTheme["personalYearNumberData"],
'strengthsWeaknessesNumberData' => $dataForTheme["strengthsWeaknessesNumberData"],
'cosmicNumberData' => $dataForTheme["cosmicNumberData"],
'eccentricityNumberData' => $dataForTheme["eccentricityNumberData"],
'realisationNumberData' => $dataForTheme["realisationNumberData"],
'lifeTableData' => $dataForTheme["lifeTableData"],
]);
}
/**
* @param Request $request
* @param Pdf $snappyPdf
* @param ThemeService $themeService
* @param ThemeDataService $themeDataService
* @return BinaryFileResponse
* @throws FileNotFoundException
* @throws InvalidArgumentException
* @throws PdfReaderException
*/
#[Route('/download/theme', name: 'download_theme')]
public function downloadTheme(Request $request,Pdf $snappyPdf, ThemeService $themeService, ThemeDataService $themeDataService): BinaryFileResponse
{
$id = crypt($request->getSession()->get("firstnames") . $request->getSession()->get("names") . $request->getSession()->get("birthdate"), "Blowfish");
$theme = $this->themeHelper->getTheme($themeService, $request->getSession()->get("firstnames"), $request->getSession()->get("names"), $request->getSession()->get("birthdate"));
$dataForTheme = $this->themeHelper->provideDataFromThemeDataService($themeDataService);
$pairing = $themeService->getPairing($theme['lifePathNumber']['result_number'], $theme['expressionNumber']['result_number']);
$userData = [
"firstnames" => $request->getSession()->get("firstnames"),
"names" => $request->getSession()->get("names"),
"birthdate" => $request->getSession()->get("birthdate")
];
$numbersToLetters = $themeService::NUMBERS_TO_LETTERS;
return $this->themeHelper->generateThemePDF($snappyPdf, $userData, $numbersToLetters, $pairing, $dataForTheme, $theme, $id, false, 'Thème Numérologique.pdf');
// $this->themeHelper->mergePdfWithCover($id, false);
// $file = $this->themeHelper->getThemeFile($id, false);
return $this->themeHelper->prepareResponseWithThemeFileAsAttachment($pdfFile, false);
}
/**
* @param Request $request
* @param Pdf $snappyPdf
* @param ThemeService $themeService
* @param ThemeDataService $themeDataService
* @return BinaryFileResponse
*/
#[Route('/download/theme_premium', name: 'download_theme_premium')]
public function downloadThemePremium(Request $request, Pdf $snappyPdf, ThemeService $themeService, ThemeDataService $themeDataService): mixed
{
//trying to retrieve session object for security check
$checkSession = $this->themeHelper->retrieveStripeSession($request->getSession()->get("stripe_session"));
if ($checkSession["status_code"] !== 200 || $checkSession['data'] === null || $checkSession['data']['payment_status'] !== 'paid') {
// throw new NotFoundHttpException($checkSession['message']);
$this->addFlash('warning', "Vous n'êtes pas autorisé à accéder à cette page.");
return $this->redirectToRoute('homepage');
}
$id = crypt($request->getSession()->get("firstnames") . $request->getSession()->get("names") . $request->getSession()->get("birthdate"), "Blowfish");
$file = $this->themeHelper->getThemeFile($id, true);
return $this->themeHelper->prepareResponseWithThemeFileAsAttachment($file, true);
}
#[Route('/testtemplate', name: 'testtemplate')]
public function testtemplate(Request $request, Pdf $snappyPdf, ThemeService $themeService, ThemeDataService $themeDataService): Response
{
$id = crypt($request->getSession()->get("firstnames") . $request->getSession()->get("names") . $request->getSession()->get("birthdate"), "Blowfish");
$file = $this->getParameter('kernel.project_dir') . '/public/themes_pdf/' . $id . '.pdf';
$theme = $themeService->generateTheme($request->getSession()->get("firstnames"), $request->getSession()->get("names"), $request->getSession()->get("birthdate"));
$numbersData = $themeDataService::GENERAL_DATA_NUMBERS;
$karmicDebts = $themeDataService::KARMIC_DEBT_DATA;
$lifePathData = $themeDataService::LIFE_PATH_DATA_NUMBERS;
$expressionData = $themeDataService::EXPRESSION_NUMBERS_DATA;
$activeNumberData = $themeDataService::ACTIVE_NUMBERS_DATA;
$hereditaryNumberData = $themeDataService::HEREDITARY_NUMBERS_DATA;
$keyNumberData = $themeDataService::KEY_NUMBERS_DATA;
$lifeDynamicNumberData = $themeDataService::LIFE_DYNAMIC_NUMBERS_DATA;
$intimateNumberData = $themeDataService::INTIMATE_NUMBERS_DATA;
$personalYearNumberData = $themeDataService::PERSONAL_YEAR_NUMBERS_DATA;
$birthdayNumberData = $themeDataService::BIRTHDAY_NUMBERS_DATA;
$strengthsWeaknessesNumberData = $themeDataService::STRENGTHS_WEAKNESSES_NUMBERS_DATA;
$cosmicNumberData = $themeDataService::COSMIC_NUMBERS_DATA;
$eccentricityNumberData = $themeDataService::ECCENTRICITY_NUMBERS_DATA;
$realisationNumberData = $themeDataService::REALISATION_NUMBERS_DATA;
$lifeTableData = $themeDataService::LIFE_TABLE_NUMBERS_DATA;
return $this->render(
'theme_generation/theme_template.html.twig',
array(
'userData' => [
'firstNames' => $request->getSession()->get("firstnames"),
'lastNames' => $request->getSession()->get("names"),
'birthDate' => $request->getSession()->get("birthdate")],
'pairing' => $themeService->getPairing($theme['lifePathNumber']['result_number'], $theme['expressionNumber']['result_number']),
'theme' => $theme,
'numbersToLetters' => $themeService::NUMBERS_TO_LETTERS,
'numbersData' => $numbersData,
'lifePathData' => $lifePathData,
'karmicDebts' => $karmicDebts,
'expressionData' => $expressionData,
'activeNumberData' => $activeNumberData,
'hereditaryNumberData' => $hereditaryNumberData,
'keyNumberData' => $keyNumberData,
'lifeDynamicNumberData' => $lifeDynamicNumberData,
'intimateNumberData' => $intimateNumberData,
'birthdayNumberData' => $birthdayNumberData,
'personalYearNumberData' => $personalYearNumberData,
'strengthsWeaknessesNumberData' => $strengthsWeaknessesNumberData,
'cosmicNumberData' => $cosmicNumberData,
'eccentricityNumberData' => $eccentricityNumberData,
'realisationNumberData' => $realisationNumberData,
'lifeTableData' => $lifeTableData
)
);
}
}