src/Controller/MainController.php line 198
<?phpnamespace App\Controller;use App\Entity\FixedPages;use App\Entity\Letter;use App\Entity\News;use App\Entity\Page;use App\Entity\Santa;use App\Entity\Services;use App\Enum\PdfConverter;use App\Enum\SantaEnum;use App\Repository\MetaRepository;use App\Repository\PageRepository;use App\Services\SpacesUploader;use GuzzleHttp\ClientInterface;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\Mime\Address;use Symfony\Component\Mime\Email;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Mailer\MailerInterface;use App\Entity\Gallery;use Doctrine\ORM\EntityManagerInterface;use Liip\ImagineBundle\Imagine\Cache\CacheManager;use Symfony\Component\Validator\Constraints\Uuid;use Symfony\Contracts\HttpClient\HttpClientInterface;use Symfony\Contracts\Translation\TranslatorInterface;use Gedmo\Translatable\TranslatableListener;class MainController extends AbstractController{private EntityManagerInterface $entityManager;private TranslatableListener $translatableListener;public function __construct(EntityManagerInterface $entityManager,TranslatableListener $translatableListener){$this->translatableListener = $translatableListener;$this->entityManager = $entityManager;}#[Route('/{_locale}/ipad', name: 'page_ipad', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'en'])]public function iphone(MetaRepository $metaRepository, PageRepository $pageRepository){$page = $pageRepository->find(11);$editable = false;$pantum = false;return $this->render('@web/page/template.html.twig', ['page' => $page,'editable' => $editable,'ipad' => true,]);}#[Route('/{_locale}/pantum', name: 'page_pantum', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'en'])]public function pantum(MetaRepository $metaRepository, PageRepository $pageRepository){$page = $pageRepository->find(11);$editable = false;$pantum = true;return $this->render('@web/page/template.html.twig', ['page' => $page,'editable' => $editable,'pantum' => $pantum]);}#[Route('/{_locale}/ipad/may', name: 'page_mayis9', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'en'])]public function page_mayis9(MetaRepository $metaRepository, PageRepository $pageRepository){$page = $pageRepository->find(4);$editable = false;return $this->render('@web/page/template.html.twig', ['page' => $page,'editable' => $editable]);}#[Route('/iphone', name: 'page_iphone', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'en'])]public function ipad(MetaRepository $metaRepository){return $this->render('@web/page/iphone.html.twig');}#[Route('/gallery', name: 'page_gallery')]public function index(MetaRepository $metaRepository){$gallery = $this->entityManager->getRepository(Gallery::class)->findBy(['isShow' => true], ['id' => 'DESC'], 20);return $this->render('@web/page/gallery.html.twig', ['gallery' => $gallery]);}#[Route('/{_locale}', name: 'page_index', requirements: ['_locale' => 'en|ru|hy|es|it|fr|el|ua|ka|de'], defaults: ['_locale' => 'en'])]public function empty(MetaRepository $metaRepository){$banner = $this->entityManager->getRepository(FixedPages::class)->find(1);$services = $this->entityManager->getRepository(Services::class)->findAll();$news = $this->entityManager->getRepository(News::class)->findAll();return $this->render('@web/page/index.html.twig', ['banner' => $banner,'services' => $services,'news' => $news]);}#[Route('{_locale}/services', name: 'page_services')]public function services(MetaRepository $metaRepository){$services = $this->entityManager->getRepository(Services::class)->findAll();return $this->render('@web/page/services.html.twig', ['services' => $services]);}#[Route('{_locale}/service/view/{id}', name: 'page_service')]public function service(Services $services){return $this->render('@web/page/service.html.twig', ['service' => $services]);}#[Route('{_locale}/privacy-policy', name: 'page_policy')]public function policy(){$page = $this->entityManager->getRepository(FixedPages::class)->find(2);return $this->render('@web/page/fixed.html.twig', ['page' => $page]);}#[Route('{_locale}/terms-of-use', name: 'page_terms')]public function terms(){$page = $this->entityManager->getRepository(FixedPages::class)->find(3);return $this->render('@web/page/fixed.html.twig', ['page' => $page]);}#[Route('{_locale}/about-us', name: 'page_about')]public function aboutUs(MetaRepository $metaRepository, PageRepository $pageRepository){$page = $pageRepository->find(2);return $this->render('@web/page/about-us.html.twig', ['page' => $page,'editable' => false]);}#[Route('{_locale}/support', name: 'page_contact_us')]public function contactUs(MetaRepository $metaRepository){return $this->render('@web/page/contact-us.html.twig');}#[Route('/pyunik/view', name: 'page_pyunik_view', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pagePyunik(PageRepository $pageRepository){$editable = false;return $this->render('@web/page/template-pyunik.html.twig', ['editable' => $editable]);}#[Route('{_locale}/view-image', name: 'page_view_image')]public function page_view_image(Request $request){$template = null;$image = null;$code = $request->get('code');if ($code) {$image = $this->entityManager->getRepository(Gallery::class)->findOneBy(['documentNumber' => $code]);if ($image) {$template = $this->entityManager->getRepository(Page::class)->find($image->getTemplateId());} else {return $this->redirectToRoute('page_index');}}// Redirect to Armenian locale if template ID is 62 and current locale is not hyif ($template->getId() == 62 && $request->getLocale() !== $image->getLocale()) {return $this->redirectToRoute('page_view_image', ['_locale' => $image->getLocale(),'code' => $code]);}// Render templatesif ($template->getId() == 62) {$letter = $this->entityManager->getRepository(Letter::class)->find($image->getLetterId());return $this->render('@web/page/template-christmas.html.twig', ['editable' => false,'viewImage' => true,'page' => $template,'letter' => $letter,'image' => $image]);} elseif ($template->getId() == 56) {return $this->render('@web/page/template-dalma.html.twig', ['editable' => false,'dalma' => true,'page' => $template,'image' => $image]);} elseif ($template->getId() == 60) {return $this->render('@web/page/template-sherep.html.twig', ['editable' => false,'dalma' => true,'page' => $template,'image' => $image]);} else {return $this->render('@web/page/view-image.html.twig', ['editable' => false,'page' => $template,'image' => $image]);}}#[Route('/image/test')]public function test(ParameterBagInterface $parameterBag, CacheManager $cacheManager){$imagePath = 'https://infinitemoment.nyc3.cdn.digitaloceanspaces.com/691df26f50fe7.jpg';$filteredPath = $cacheManager->resolve($imagePath, 'small_thumb');$page = $this->entityManager->getRepository(Page::class)->find(10);$origFile = "https://infinitemoment.nyc3.cdn.digitaloceanspaces.com/6912214177e31.jpg";$imgName = pathinfo($origFile, PATHINFO_BASENAME);$destImg = '/var/www/infinitemoment/public/uploads/img/' . $imgName;PdfConverter::resizeImage($origFile, $destImg);$html = $this->renderView('@web/page/template-tmp.html.twig', ['page' => $page,'preview' => false,'image' => 'https://infinitemoment.am/uploads/img/' . $imgName,'editable' => false]);$filename = (string)time();$htmlDir = $parameterBag->get('kernel.project_dir') . '/public/uploads/html/' . $filename . '.html';file_put_contents($htmlDir, $html);$pdfDir = $parameterBag->get('kernel.project_dir') . '/public/uploads/pdf/' . $filename . '.pdf';PdfConverter::convertHtmlToPdf($htmlDir, $pdfDir);}#[Route('/image/delete', name: 'image_delete', methods: ['GET'])]public function delete(Request $request){$ids = ['54302020250427', '21442120250427', '05461720250501', '14131420250509', '15221620250601', '45452020250811', '48002120250901', '35391420250904'];if (!empty($ids)) {foreach ($ids as $id) {$image = $this->entityManager->getRepository(Gallery::class)->findOneBy(['documentNumber' => $id]);if ($image) {// Delete file from filesystem$filePath = $this->getParameter('brochures_directory') . '/' . $image->getImage();if (file_exists($filePath)) {unlink($filePath);}// Remove entity$this->entityManager->remove($image);}}$this->entityManager->flush();$this->addFlash('success', 'Selected images deleted successfully.');} else {$this->addFlash('warning', 'No images selected.');}die;}#[Route('{_locale}/santa', name: 'page_santa', requirements: ['_locale' => 'en|ru|hy|es|it|fr|el|ua|ka|de'], defaults: ['_locale' => 'en'])]public function pageSanta(Request $request,$_locale,SpacesUploader $spacesUploader,TranslatorInterface $translator,MetaRepository $metaRepository,MailerInterface $mailer) {if ($request->isMethod('POST')) {$action = $request->request->get('action');$santa = new Santa();$brochureFile = $request->files->get('image');$brochureFileName = $spacesUploader->upload($brochureFile);$gift = $request->get('gift') ?: time();$santa->setEmail($request->get('email'));$santa->setFromName($request->get('fromName'));$santa->setFromEmail($request->get('fromEmail'));$santa->setGift($gift);$santa->setPhone($request->get('phone'));$santa->setMessage($request->get('comment'));$santa->setImage($brochureFileName);$santa->setLocale($_locale);$santa->setStatus(SantaEnum::SANTA_PROGRESS);$santa->setName($request->get('name'));$this->entityManager->persist($santa);$this->entityManager->flush();if ($action === 'pay_now') {if ($this->getUser()) {return $this->redirect('/payment/confirm?santa_id=' . $santa->getId());}$message = empty($request->get('comment')) ? 1 : 2;return $this->redirect('https://anyrentalcars.com/armenia/infinite?' .'santa_id=' . $santa->getId() .'&locale=' . $santa->getLocale() .'&message=' . $message);}if ($action === 'request') {$santa->setStatus(SantaEnum::SANTA_REQUEST);$this->entityManager->flush();$this->addFlash('success', $translator->trans('Your request has been sent successfully!'));return $this->redirectToRoute('page_index');}}return $this->render('@web/page/santa.html.twig');}#[Route('/payment/reject', name: 'page_reject')]public function pageReject(Request $request){if ($request->get('santa_id')) {$santa = $this->entityManager->getRepository(Santa::class)->find($request->get('santa_id'));$santa->setStatus(SantaEnum::SANTA_REJECTED);return $this->render('@web/page/payment_reject.html.twig');}return $this->redirectToRoute('page_index');}#[Route('/payment/confirm', name: 'page_confirm')]public function pageConfirm(Request $request, HttpClientInterface $client){if ($request->get('santa_id')) {$santa = $this->entityManager->getRepository(Santa::class)->find($request->get('santa_id'));$santa->setStatus(SantaEnum::SANTA_PAID);$this->entityManager->flush();$payload = ['id' => $santa->getId(),'name' => $santa->getName(),'locale' => $santa->getLocale(),'gift' => $santa->getGift(),'message' => $santa->getMessage(),];// Pass the payload to Twigreturn $this->render('@web/page/payment_confirm.html.twig', ['payload' => json_encode($payload),]);}return $this->redirectToRoute('page_index');}#[Route('/send_santa_api', name: 'send_santa_api')]public function sendSantaApi(Request $request, HttpClientInterface $client, RequestStack $requestStack, ParameterBagInterface $parameterBag, MailerInterface $mailer, TranslatorInterface $translator){$payload = json_decode($request->getContent(), true);$santa = $this->entityManager->getRepository(Santa::class)->find($payload['id']);$santa->setStatus(SantaEnum::SANTA_PROCESS);$this->entityManager->flush();// Call the other API$response = $client->request('POST', 'https://santa2025.store/receive_letter_api', ['json' => $payload,'headers' => ['Accept' => 'application/json','Content-Type' => 'application/json','User-Agent' => 'Mozilla/5.0 (Symfony Server)','Referer' => 'https://santa2025.store',],'timeout' => 1500,]);$data = $response->toArray(); // The API response$videoUrl = $data['video_url'] ?? null;$santa->setStatus(SantaEnum::SANTA_COMPLETED);$this->entityManager->flush();$letter = $this->entityManager->getRepository(Letter::class)->findOneBy(['externalId' => $data['letter_id']]);$gallery = $this->entityManager->getRepository(Gallery::class)->findOneBy(['letterId' => $letter->getId()]);$this->entityManager->persist($gallery);$this->entityManager->flush();$preview = false;$viewImage = false;$current = $requestStack->getCurrentRequest();$main = $requestStack->getMainRequest(); // Symfony 5.3+; may be null$locale = $gallery->getLocale();$this->translatableListener->setTranslatableLocale($locale);$page = $this->entityManager->getRepository(Page::class)->createQueryBuilder('p')->where('p.id = :id')->setParameter('id', $gallery->getTemplateId())->getQuery()->getOneOrNullResult();$requestToUse = $main ?? $current ?? $request; // fallback to injected $request paramif ($requestToUse) {// The important one: attributes _locale (LocaleListener checks this)$requestToUse->attributes->set('_locale', $locale);// Also set request locale and session (if available)$requestToUse->setLocale($locale);if ($requestToUse->hasSession()) {$requestToUse->getSession()->set('_locale', $locale);}}// 2) Set translator locale$translator->setLocale($locale);// Optional: also set locale on PHP intl (not usually required)\Locale::setDefault($locale);$html = $this->renderView('@web/page/template-santa-tmp.html.twig', ['page' => $page,'preview' => $preview,'viewImage' => $viewImage,'letter' => $letter,'gallery' => $gallery,'image' => $gallery->getImage(),'editable' => false]);$filename = (string)time();$htmlDir = $parameterBag->get('kernel.project_dir') . '/public/uploads/html/' . $filename . '.html';file_put_contents($htmlDir, $html);$pdfDir = $parameterBag->get('kernel.project_dir') . '/public/uploads/pdf/' . $filename . '.pdf';PdfConverter::convertHtmlToPdf($htmlDir, $pdfDir);$subject = $translator->trans('email_subject', ['%number%' => $gallery->getDocumentNumber(),'%name%' => $santa->getName(),]);$email = (new Email())->from(new Address('support@infinitemoment.life', 'Infinite Moment Santa'))->to($santa->getEmail())->subject($subject)->html($this->renderView('email/santa_'.$santa->getLocale().'.html.twig',['subject' => $santa, 'video_url' => $videoUrl]))->attachFromPath($pdfDir, $filename . '.pdf', 'application/pdf');$mailer->send($email);if ($santa->getFromEmail()) {$email = (new Email())->from(new Address('support@infinitemoment.life', 'Infinite Moment Santa'))->to($santa->getFromEmail(),'developerhovsepyan@gmail.com')->subject($subject)->html($this->renderView('email/santa_'.$santa->getLocale().'.html.twig',['subject' => $santa,'video_url' => $videoUrl]))->attachFromPath($pdfDir, $filename . '.pdf', 'application/pdf');$mailer->send($email);}return new JsonResponse(['video_url' => $videoUrl]);}}