src/MDS/ApiBundle/Controller/ApiMobileAppUserController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\MDS\ApiBundle\Controller;
  3. use App\Entity\MobileAppUsers;
  4. use App\Entity\AppMobileGuest// Entidad del invitado al evento
  5. use App\Entity\MobileAppEvent;
  6. use App\MDS\ApiBundle\Auth;
  7. use App\Service\MobileAppUsersService;
  8. use App\Service\EmailService// Tu servicio de emails
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use FOS\RestBundle\Controller\AbstractFOSRestController;
  11. use FOS\RestBundle\Controller\Annotations as Rest;
  12. use Psr\Log\LoggerInterface;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  16. final class ApiMobileAppUserController extends AbstractFOSRestController
  17. {
  18.     private $logger;
  19.     private $mobileAppUsersService;
  20.     private $normalizer;
  21.     private $em;
  22.     private $emailService;
  23.     public function __construct(
  24.         LoggerInterface $logger,
  25.         MobileAppUsersService $mobileAppUsersService,
  26.         NormalizerInterface $normalizer,
  27.         EntityManagerInterface $em,
  28.         EmailService $emailService
  29.     ) {
  30.         $this->logger $logger;
  31.         $this->mobileAppUsersService $mobileAppUsersService;
  32.         $this->normalizer $normalizer;
  33.         $this->em $em;
  34.         $this->emailService $emailService;
  35.     }
  36.     /**
  37.      * @Rest\Post("/api/mobileappuser/register")
  38.      */
  39.     public function registerMobileAppUserAction(Request $request): JsonResponse
  40.     {
  41.         $data json_decode($request->getContent(), true);
  42.         $eid $data['eid'] ?? 23;
  43.         $status $data['status'] ?? 'registered';
  44.         $email str_replace(" """$data['email']);
  45.         $event $this->em->getRepository(MobileAppEvent::class)->find($eid);
  46.         // 1. Buscar o Crear Invitado
  47.         $guest $this->em->getRepository(AppMobileGuest::class)->findOneBy(['eid' => $eid'email' => $email]);
  48.         if (!$guest) {
  49.             $guest = new AppMobileGuest();
  50.             $guest->setEid($eid);
  51.             $guest->setEmail($email);
  52.             $guest->setToken(md5($email time()));
  53.         }
  54.         $guest->setFirstName($data['firstName']);
  55.         $guest->setLastName($data['lastName']);
  56.         $guest->setPrefix($data['middleName'] ?? null);
  57.         if ($status === 'declined') {
  58.             $guest->setRegistrationStatus('Declined');
  59.             $guest->setObservations("USER DECLINED. Reason: " . ($data['reason'] ?? 'None'));
  60.             $subject "Attendance Update | " $event->getName();
  61.             $body "Dear " $data['firstName'] . ",<br><br>"
  62.     "We’re sorry to hear that you won’t be able to join us at our " $event->getName() . ". "
  63.     "This email confirms that you’ve declined the invitation.<br><br>"
  64.     "If you’d like to share any feedback or have any questions, please feel free to reach out to your local Xiaomi contact.<br><br>"
  65.     "Best regards,<br>"
  66.     "Xiaomi Team";
  67.         } else {
  68.             $guest->setRegistrationStatus('Pending');
  69.             $guest->setCountry($data['country'] ?? null);
  70.             $guest->setTelephone($data['telephone'] ?? null);
  71.             $guest->setDni($data['dni'] ?? null);
  72.             if (!empty($data['birthDate'])) $guest->setBirthDate(new \DateTime($data['birthDate']));
  73.             if (!empty($data['expireDate'])) $guest->setExpireDate(new \DateTime($data['expireDate']));
  74.             // --- NUEVA LÓGICA DE MAPEO DE CAMPOS ---
  75.             // 1. Guardar el tipo de documento en ParticipantType
  76.             $guest->setParticipantType($data['docType'] ?? null);
  77.             // 2. Guardar alergias en Allergens
  78.             $guest->setAllergens($data['allergens'] ?? null);
  79.             // 3. Guardar las observaciones (remarks) en Observations
  80.             $guest->setObservations($data['observations'] ?? null);
  81.             $subject "Confirmation of attendance | " $event->getName();
  82.             $body $event->getMailContent();
  83.         }
  84.         $this->em->persist($guest);
  85.         $this->em->flush();
  86.         // 2. Enviar Email (Mismo formato Xiaomi)
  87.         $emailData = [
  88.             'urlhost' => 'https://mantevents-mcp.develup.solutions/',
  89.             'body' => $body,
  90.             'image' => $event->getImage(),
  91.             'logo' => $event->getLogo(),
  92.             'event' => $eid,
  93.             'description' => $event->getDescription(),
  94.             'title' => $event->getName(),
  95.             'urlappandroid' => '',
  96.             'urlappios' => ''
  97.         ];
  98.         $this->emailService->sendEmail([
  99.             'from' => ["events@develup.solutions" => $event->getName()],
  100.             'to' => [$email],
  101.             'subject' => $subject,
  102.             'template' => 'external/email/email-register.html.twig',
  103.             'context' => ['data' => $emailData'status' => $status]
  104.         ]);
  105.         return new JsonResponse(['success' => true]);
  106.     }
  107.     private function _generateToken(MobileAppUsers $mobileAppUser)
  108.     {
  109.         return Auth::signIn([
  110.             'uid' => $mobileAppUser->getId(),
  111.             'username' => $mobileAppUser->getUsername(),
  112.             'pass' => $mobileAppUser->getPass(),
  113.         ]);
  114.     }
  115. }