<?php
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use FOS\RestBundle\Request\ParamFetcherInterface;
use FOS\RestBundle\Controller\Annotations\QueryParam;
use FOS\RestBundle\Controller\Annotations\RequestParam;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Contact;
use App\Helper\EmailHelper;
class ContactController extends AbstractController
{
/**
* @Route({
* "en": "/contact",
* "es": "/contacto",
* "de": "/kontakt",
* "fr": "/contact_fr",
* "it": "/contatto",
* "pt": "/contato",
* "cn": "/contact_cn",
* "cn2": "/contact_cn2",
* }, name="contact")
*/
public function index()
{
return $this->render('jelly/contact/index.html.twig', [
]);
}
/**
* @Route({
* "en": "/contact/thanks",
* "es": "/contacto/gracias",
* "de": "/kontakt/danke",
* "fr": "/contact/merci",
* "it": "/contatto/grazie",
* "pt": "/contato/obrigado",
* "cn": "/contact/thanks_cn",
* "cn2": "/contact/thanks_cn2",
* }, name="contact_thanks")
* @QueryParam(name="embedded", requirements="true|false", default="false", description="Embedded.")
*/
public function thanks(ParamFetcherInterface $paramFetcher)
{
$embedded = $paramFetcher->get('embedded') == 'true';
return $this->render('jelly/contact/thanks.html.twig', [
"embedded" => $embedded,
]);
}
/**
* @Route(
* "/services/contact.{_format}",
* name="service_contact",
* requirements={
* "_format": "json"
* },
* methods={"POST"}
* )
* @RequestParam(name="name", requirements=".*", default=null, nullable=true, strict=true, description="Name.")
* @RequestParam(name="email", requirements=".*", default=null, nullable=true, strict=true, description="Email.")
* @RequestParam(name="subject", requirements=".*", default=null, nullable=true, strict=true, description="Subject.")
* @RequestParam(name="message", requirements=".*", default=null, nullable=true, strict=true, description="Message.")
* @RequestParam(name="country", requirements=".*", default=null, nullable=true, strict=true, description="Country code (ar, es, us, mx).")
*/
public function contact(Request $request, ParamFetcherInterface $paramFetcher, EmailHelper $emailHelper)
{
$name = $paramFetcher->get('name');
$email = $paramFetcher->get('email');
$subject = $paramFetcher->get('subject');
$message = $paramFetcher->get('message');
$country = $paramFetcher->get('country');
$contact = new Contact();
$contact->setName($name);
$contact->setEmail($email);
$contact->setSubject($subject);
$contact->setMessage($message);
$this->getDoctrine()->getManager()->persist($contact);
$this->getDoctrine()->getManager()->flush();
// Determine email recipient based on country parameter (fallback to cookie for legacy compatibility)
$userCountry = $country ?: ($request->cookies->has('country') ? $request->cookies->get('country') : null);
// TEST EMAILS - Replace with actual emails in production
$emailTo = $userCountry == 'ar' ? "info@beconnected.com.ar" : "info@beconnected.com.es";
// $emailTo = $userCountry == 'ar' ? "1@2.com" : "2@3.com";
$emailHelper->sendMail( $emailTo, "Nuevo contacto desde www.beconnected.com.es", "email/contact.html.twig", ['name' => $name, 'email' => $email, 'subject' => $subject, 'message' => $message ] );
return ['ok' => true];
}
/**
* @Route("/admin/contact", name="contact_list")
* @IsGranted("ROLE_ADMIN")
* @QueryParam(name="page", requirements="\d+", default=1, description="Page number.")
* @QueryParam(name="sort", requirements="u.name|u.username|u.email|c.name|u.psnCode|u.switchCode", description="Sort.")
* @QueryParam(name="dir", requirements="asc|desc", default="asc", description="Sort direction.")
* @QueryParam(name="q", requirements=".*", default=null, nullable=true, description="Search term.")
* @QueryParam(name="folder", requirements="unread|read", default="unread", description="Folder.")
*/
public function indexAdmin(ParamFetcherInterface $paramFetcher)
{
// parameters
$page = $paramFetcher->get('page');
$sort = $paramFetcher->get('sort');
$dir = $paramFetcher->get('dir');
$folder = $paramFetcher->get('folder');
// query
$results_per_page = $this->getParameter('app.results_per_page');
// filters
$currentFilters = [];
if($sort){
$currentFilters['sort'] = $sort;
$currentFilters['dir'] = $dir;
}
$repository = $this->getDoctrine()->getRepository(Contact::class);
$contacts = $repository->getList($sort, $dir, $page, $results_per_page, $folder == "read");
$totalPages = ceil(count($contacts) / $results_per_page);
return $this->render('angle/contact/index.html.twig', [
'page' => $page,
'totalPages' => $totalPages,
'totalResults' => count($contacts),
'currentFilters' => $currentFilters,
'results_per_page' => $results_per_page,
'contacts' => $contacts,
'folder' => $folder,
]);
}
/**
* @IsGranted("ROLE_ADMIN")
* @Route(
* "/services/contact_read.{_format}",
* name="contact_read",
* requirements={
* "_format": "json"
* },
* methods={"POST"}
* )
*/
public function read(Request $request)
{
$repository = $this->getDoctrine()->getRepository(Contact::class);
$ids = $request->query->get('id');
$idsArray = explode(",", $ids);
$em = $this->getDoctrine()->getManager();
$readAt = new \DateTimeImmutable;
foreach($idsArray as $id) if($id){
$entity = $repository->findOneById($id);
if( $entity->getReadAt() != null ){
$entity->setReadAt(null);
} else {
$entity->setReadAt($readAt);
}
}
$em->flush();
return ['ok' => true];
}
}