src/Controller/FirmaController.php line 35
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use App\Form\FormularioFirmaType;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\EmpresasRepository;
use App\Repository\OficinasRepository;
use App\Repository\CargosRepository;
use App\Repository\LocalizacionRepository;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use App\Services\EmailService;
use App\Entity\FirmasGeneradas;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
class FirmaController extends AbstractController
{
private $emailService;
private $logger;
public function __construct(EmailService $emailService, LoggerInterface $logger)
{
$this->emailService = $emailService;
$this->logger = $logger;
}
#[Route('/firma', name: 'app_firma')]
public function index(Request $request, SessionInterface $session, EmpresasRepository $empresasRepository, LocalizacionRepository $localizacionRepository , OficinasRepository $oficinasRepository, CargosRepository $cargosRepository, EntityManagerInterface $entityManager): Response
{
$userInfo = $session->get('user_info');
$accessToken = $session->get('access_token');
if (!$accessToken) {
return $this->redirectToRoute('app_home');
}
if (!$userInfo) {
return $this->redirectToRoute('login');
}
$empresas = $empresasRepository->findAll();
$oficinas = $oficinasRepository->findAll();
$cargos = $cargosRepository->findAll();
$localizacion = $localizacionRepository->findAll();
$form = $this->createForm(FormularioFirmaType::class, null, [
'empresas' => $empresas,
'localizacion' => $localizacion,
'oficinas' => $oficinas,
'cargos' => $cargos
]);
$form->handleRequest($request);
$formDataArray = [];
if ($form->isSubmitted() && $form->isValid()) {
$formData = $form->getData();
// var_dump($formData);
// exit();
// Recojo los valores de los checkboxes
$idioma_es = $formData['idioma_es'];
$idioma_ca = $formData['idioma_ca'];
$idioma_en = $formData['idioma_en'];
$localizacion = $formData['localizacion'];
$movil = $formData['movil'];
// Eliminar todos los caracteres no numéricos
$movil = preg_replace("/[^0-9]/", "", $movil);
// Crear un array para guardar cada grupo de números
$movilFormatted = [];
// Agrupar los tres primeros caracteres
$movilFormatted[] = substr($movil, 0, 3);
// Eliminar los primeros tres caracteres de la cadena original
$movil = substr($movil, 3);
// Dividir el resto de los caracteres en grupos de dos
while (strlen($movil) > 0) {
$movilFormatted[] = substr($movil, 0, 2);
$movil = substr($movil, 2);
}
// Convertir el array en una cadena, separando cada grupo con un espacio
$movil = implode(" ", $movilFormatted);
$formDataArray = [
'nombre' => utf8_encode($formData['nombre']),
'empresa' => $formData['empresa']->getNombre(),
'empresa_id' => $formData['empresa']->getId(),
//URL WEB
'url_web' => $formData['empresa']->getUrlWeb(),
//URL FACEBOOK
'url_facebook' => $formData['empresa']->getUrlFacebook(),
//URL INSTAGRAM
'url_instagram' => $formData['empresa']->getUrlInstagram(),
//URL TWITTER
'url_twitter' => $formData['empresa']->getUrlTwitter(),
//URL WECHAT
'url_wechat' => $formData['empresa']->getUrlWechat(),
'oficina' => $formData['oficina']->getNombre(),
'oficina_id' => $formData['oficina']->getId(),
'oficina_direccion' => $formData['oficina']->getDireccion(),
'cargo' => $formData['cargo']->getNombre(),
'cargo_id' => $formData['cargo']->getId(),
// 'movil' => $formData['movil'],
'movil' => $movil,
'prefijo_movil' => $formData['prefijo_movil'],
'tipo_firma' => $formData['tipo_firma'],
'enviar_por_email' => $formData['enviar_por_email'],
'correo_electronico' => $formData['correo_electronico'],
// Agrego los idiomas al array de datos del formulario
'idioma_es' => $idioma_es,
'idioma_ca' => $idioma_ca,
'idioma_en' => $idioma_en,
];
///###
// Recupera los datos del formulario de la sesión
$storedFormData = $session->get('form_data');
// Si los datos del formulario que se están enviando son los mismos que los almacenados en la sesión,
// redirige al usuario a la página /generador
if ($storedFormData == $formDataArray) {
return $this->redirectToRoute('app_generador_de_firmas');
}
// Almacena los datos del formulario en la sesión
$session->set('form_data', $formDataArray);
///###
$oficinaId = $formDataArray['oficina_id'];
$oficina = $oficinasRepository->find($oficinaId);
$telefono = $oficina->getTelefono();
$telefono2 = $oficina->getTelefono2();
$codigo_postal = $oficina->getCodigoPostal();
$formDataArray['codigo_postal'] = $codigo_postal;
$ciudad = $oficina->getCiudad();
$formDataArray['ciudad'] = $ciudad;
$formDataArray['telefono'] = $telefono;
$formDataArray['telefono2'] = $telefono2;
$empresaId = $formDataArray['empresa_id'];
$empresa = $empresasRepository->find($empresaId);
// Recojo el texto legal dependiendo de los idiomas seleccionados
$formDataArray['texto_legal_es'] = null;
if ($idioma_es) {
$texto_legal = $empresa->getTextoLegalEs();
$formDataArray['texto_legal_es'] = $texto_legal;
}
$formDataArray['texto_legal_ca'] = null;
if ($idioma_ca) {
$texto_legal = $empresa->getTextoLegalCa();
$formDataArray['texto_legal_ca'] = $texto_legal;
}
$formDataArray['texto_legal_en'] = null;
if ($idioma_en) {
$texto_legal = $empresa->getTextoLegalEn();
$formDataArray['texto_legal_en'] = $texto_legal;
}
$enviarPorCorreo = $formDataArray['enviar_por_email'];
$correo = $formDataArray['correo_electronico'];
$tipo_firma = $formDataArray['tipo_firma'];
$firmaGenerada = new FirmasGeneradas();
$firmaGenerada->setNombre($formDataArray['nombre']);
$firmaGenerada->setEmpresa($formDataArray['empresa']);
$firmaGenerada->setOficina($formDataArray['oficina']);
$firmaGenerada->setCargo($formDataArray['cargo']);
$firmaGenerada->setMovil($formDataArray['movil']);
$firmaGenerada->setTipoFirma($formDataArray['tipo_firma']);
$firmaGenerada->setEnviarPorEmail($formDataArray['enviar_por_email']);
$firmaGenerada->setCorreoElectronico($formDataArray['correo_electronico']);
$firmaGenerada->setIpUsuario($request->getClientIp());
$firmaGenerada->setFecha(new \DateTime());
$entityManager->persist($firmaGenerada);
$entityManager->flush();
if ($enviarPorCorreo == 1) {
if ($tipo_firma == 0) {
$emailBody = $this->renderView('email/firma.html.twig', [
'form_data' => $formDataArray,
]);
}
if ($tipo_firma == 1) {
$emailBody = $this->renderView('email/firma.html.twig', [
'form_data' => $formDataArray,
]);
}
$recipient = $formDataArray['correo_electronico'];
$this->logger->info('Enviando correo a: ' . $recipient);
try {
$result = $this->emailService->sendMail($recipient, 'Firma Vilaviniteca', $emailBody);
$this->logger->info('Correo enviado con éxito', ['result' => $result]);
} catch (\Exception $e) {
$this->logger->error('Error al enviar el correo: ' . $e->getMessage());
}
// echo $result;
// exit();
$this->addFlash('notice', $result);
}
if ($tipo_firma == 0) {
return $this->render('firma/web/index.html.twig', [
'controller_name' => 'FirmaController',
'user_name' => $userInfo->getDisplayName(),
'formulario_firma' => $form->createView(),
'form_data' => $formDataArray
]);
}
if ($tipo_firma == 1) {
return $this->render('firma/movil/index.html.twig', [
'controller_name' => 'FirmaController',
'user_name' => $userInfo->getDisplayName(),
'formulario_firma' => $form->createView(),
'form_data' => $formDataArray
]);
}
}
else{
echo "Error en el formulario";
foreach ($form->getErrors(true) as $error) {
echo $error->getMessage();
}
exit();
// return $this->redirectToRoute('app_home');
// exit();
// header('Location: https://firma.vilaviniteca.es');
// exit();
}
}
}