src/Controller/ContactController.php line 38

Open in your IDE?
  1. <?php
  2. // src/Controller/LuckyController.php
  3. namespace App\Controller;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. use Symfony\Component\Validator\Validator\ValidatorInterface;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  12. use FOS\RestBundle\Request\ParamFetcherInterface;
  13. use FOS\RestBundle\Controller\Annotations\QueryParam;
  14. use FOS\RestBundle\Controller\Annotations\RequestParam;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use App\Entity\Contact;
  17. use App\Helper\EmailHelper;
  18. class ContactController extends AbstractController
  19. {
  20.     /**
  21.     * @Route({
  22.      *     "en": "/contact",
  23.      *     "es": "/contacto",
  24.      *     "de": "/kontakt",
  25.      *     "fr": "/contact_fr",
  26.      *     "it": "/contatto",
  27.      *     "pt": "/contato",
  28.      *     "cn": "/contact_cn",
  29.      *     "cn2": "/contact_cn2",
  30.      * }, name="contact")
  31.      */    
  32.     public function index()
  33.     {
  34.         return $this->render('jelly/contact/index.html.twig', [
  35.             
  36.         ]);
  37.     }
  38.     /**
  39.     * @Route({
  40.      *     "en": "/contact/thanks",
  41.      *     "es": "/contacto/gracias",
  42.      *     "de": "/kontakt/danke",
  43.      *     "fr": "/contact/merci",
  44.      *     "it": "/contatto/grazie",
  45.      *     "pt": "/contato/obrigado",
  46.      *     "cn": "/contact/thanks_cn",
  47.      *     "cn2": "/contact/thanks_cn2",
  48.      * }, name="contact_thanks")
  49.      * @QueryParam(name="embedded", requirements="true|false", default="false", description="Embedded.")
  50.      */    
  51.     public function thanks(ParamFetcherInterface $paramFetcher)
  52.     {
  53.         $embedded $paramFetcher->get('embedded') == 'true';
  54.         return $this->render('jelly/contact/thanks.html.twig', [
  55.             "embedded" => $embedded,                
  56.         ]);
  57.     }    
  58.      /**
  59.      * @Route(
  60.      *    "/services/contact.{_format}", 
  61.      *     name="service_contact",
  62.      *     requirements={
  63.      *         "_format": "json"
  64.      *     },
  65.      *     methods={"POST"}
  66.      * )
  67.      * @RequestParam(name="name", requirements=".*", default=null, nullable=true, strict=true, description="Name.")
  68.      * @RequestParam(name="email", requirements=".*", default=null, nullable=true, strict=true, description="Email.")
  69.      * @RequestParam(name="subject", requirements=".*", default=null, nullable=true, strict=true, description="Subject.")
  70.      * @RequestParam(name="message", requirements=".*", default=null, nullable=true, strict=true, description="Message.")
  71.      * @RequestParam(name="country", requirements=".*", default=null, nullable=true, strict=true, description="Country code (ar, es, us, mx).")
  72.      */
  73.     public function contact(Request $requestParamFetcherInterface $paramFetcherEmailHelper $emailHelper)
  74.     {        
  75.         $name $paramFetcher->get('name');
  76.         $email $paramFetcher->get('email');
  77.         $subject $paramFetcher->get('subject');
  78.         $message $paramFetcher->get('message');
  79.         $country $paramFetcher->get('country');
  80.      
  81.         $contact = new Contact();
  82.         $contact->setName($name);
  83.         $contact->setEmail($email);
  84.         $contact->setSubject($subject);
  85.         $contact->setMessage($message);
  86.         $this->getDoctrine()->getManager()->persist($contact);
  87.         $this->getDoctrine()->getManager()->flush();
  88.         // Determine email recipient based on country parameter (fallback to cookie for legacy compatibility)
  89.         $userCountry $country ?: ($request->cookies->has('country') ? $request->cookies->get('country') : null);
  90.         
  91.         // TEST EMAILS - Replace with actual emails in production
  92.         $emailTo $userCountry == 'ar' "info@beconnected.com.ar" "info@beconnected.com.es";
  93.         // $emailTo = $userCountry == 'ar' ? "1@2.com" : "2@3.com";
  94.         $emailHelper->sendMail$emailTo"Nuevo contacto desde www.beconnected.com.es""email/contact.html.twig", ['name' => $name'email' => $email'subject' => $subject'message' => $message ]  );
  95.         return ['ok' => true];
  96.     }    
  97.     /**
  98.      * @Route("/admin/contact", name="contact_list")
  99.      * @IsGranted("ROLE_ADMIN")
  100.      * @QueryParam(name="page", requirements="\d+", default=1, description="Page number.")
  101.      * @QueryParam(name="sort", requirements="u.name|u.username|u.email|c.name|u.psnCode|u.switchCode", description="Sort.")
  102.      * @QueryParam(name="dir", requirements="asc|desc", default="asc", description="Sort direction.")         
  103.      * @QueryParam(name="q", requirements=".*", default=null, nullable=true, description="Search term.")              
  104.      * @QueryParam(name="folder", requirements="unread|read", default="unread", description="Folder.")              
  105.      */
  106.     public function indexAdmin(ParamFetcherInterface $paramFetcher)
  107.     {
  108.         // parameters
  109.         $page $paramFetcher->get('page');
  110.         $sort $paramFetcher->get('sort');
  111.         $dir $paramFetcher->get('dir');
  112.         $folder $paramFetcher->get('folder');
  113.         // query
  114.         $results_per_page $this->getParameter('app.results_per_page');        
  115.         // filters
  116.         $currentFilters = [];
  117.         if($sort){
  118.             $currentFilters['sort'] = $sort;
  119.             $currentFilters['dir'] = $dir;          
  120.         } 
  121.     
  122.         $repository $this->getDoctrine()->getRepository(Contact::class);
  123.         $contacts $repository->getList($sort$dir$page$results_per_page$folder == "read");
  124.         $totalPages ceil(count($contacts) / $results_per_page);
  125.         return $this->render('angle/contact/index.html.twig', [
  126.             'page' => $page,
  127.             'totalPages' => $totalPages,
  128.             'totalResults' => count($contacts),            
  129.             'currentFilters' => $currentFilters,
  130.             'results_per_page' => $results_per_page,            
  131.             'contacts' => $contacts,
  132.             'folder' => $folder,
  133.         ]);
  134.     }
  135.      /**
  136.      * @IsGranted("ROLE_ADMIN")
  137.      * @Route(
  138.      *    "/services/contact_read.{_format}", 
  139.      *     name="contact_read",
  140.      *     requirements={
  141.      *         "_format": "json"
  142.      *     },
  143.      *     methods={"POST"}
  144.      * )
  145.      */
  146.     public function read(Request $request)
  147.     {        
  148.      
  149.         $repository $this->getDoctrine()->getRepository(Contact::class);
  150.         $ids $request->query->get('id');
  151.         
  152.         $idsArray =  explode(","$ids);
  153.         
  154.         $em $this->getDoctrine()->getManager();
  155.         $readAt = new \DateTimeImmutable;
  156.         foreach($idsArray as $id) if($id){
  157.             $entity $repository->findOneById($id);
  158.             if( $entity->getReadAt() != null ){
  159.                 $entity->setReadAt(null);    
  160.             } else {
  161.                 $entity->setReadAt($readAt);    
  162.             }
  163.             
  164.             
  165.         }
  166.         $em->flush();
  167.         return ['ok' => true];
  168.     }       
  169. }