src/Controller/RegistrationController.php line 267
- <?php
- // src/Acme/UserBundle/Controller/RegistrationController.php
- namespace App\Controller;
- use Symfony\Component\HttpFoundation\RedirectResponse;
- use FOS\UserBundle\Controller\RegistrationController as BaseController;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\Routing\Annotation\Route;
- use Doctrine\ORM\EntityManager;
- use Symfony\Component\Form\Forms;
- // use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
- use App\Entity\User;
- use App\Services\ConfigurationManager;
- use App\Services\SettingsManager;
- use App\Services\WebServiceUsuarios;
- use App\Services\WebServiceFunciones;
- use App\Utils\Util;
- use Doctrine\Persistence\ManagerRegistry;
- use Symfony\Component\Form\Extension\Core\Type\HiddenType;
- use Symfony\Component\Form\Extension\Core\Type\TextType;
- use Symfony\Component\Form\Extension\Core\Type\PasswordType;
- use Symfony\Bridge\Doctrine\Form\Type\EntityType;
- use Symfony\Component\Form\Extension\Core\Type\NumberType;
- use Symfony\Component\Form\Extension\Core\Type\SubmitType;
- use Doctrine\ORM\EntityManagerInterface;
- use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
- use FOS\UserBundle\Form\Factory\FactoryInterface;
- use FOS\UserBundle\Model\UserManagerInterface;
- use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
- use FOS\UserBundle\CompatibilityUtil;
- use Symfony\Component\Form\FormFactoryInterface;
- use App\Form\Type\CheckDniType;
- use App\Form\Type\CheckDniDateType;
- use App\Form\Type\UserRegistrationNoCorreoType;
- use App\Form\Type\UserRegistrationCheckCorreoType;
- use FOS\UserBundle\Event\FormEvent;
- use FOS\UserBundle\FOSUserEvents;
- use FOS\UserBundle\Event\GetResponseUserEvent;
- use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
- use FOS\UserBundle\Event\FilterUserResponseEvent;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- use Symfony\Component\HttpClient\HttpClient;
- use Symfony\Component\Process\Process;
- use Symfony\Component\HttpFoundation\File\File;
- use Symfony\Bundle\SecurityBundle\Security;
- class RegistrationController extends BaseController
- {
- private $wsu;
- private $sm;
- private $ffi;
- private $params;
- public function __construct(EventDispatcherInterface $eventDispatcher, FactoryInterface $formFactory, UserManagerInterface $userManager, TokenStorageInterface $tokenStorage, WebServiceUsuarios $wsu, SettingsManager $sm, FormFactoryInterface $ffi, WebServiceFunciones $wsf, EntityManagerInterface $em, ParameterBagInterface $params, ConfigurationManager $cm)
- {
- $this->eventDispatcher = CompatibilityUtil::upgradeEventDispatcher($eventDispatcher);
- $this->formFactory = $formFactory;
- $this->userManager = $userManager;
- $this->tokenStorage = $tokenStorage;
- $this->wsu = $wsu;
- $this->wsf = $wsf;
- $this->sm = $sm;
- $this->ffi = $ffi;
- $this->em = $em;
- $this->params = $params;
- $this->cm = $cm;
- }
- public function authenticateUser($user, Security $security)
- {
- $redirectResponse = $security->login($user,'security.authenticator.form_login.main');
- return $redirectResponse;
- }
- #[Route(path: [
- 'es' => '/registro/{email}',
- 'en' => '/en/register/{email}'
- ], name: 'fos_user_registration_register')]
- public function registerAction(Request $request, ?string $email = null, Security $security = null): Response
- {
- $wsu = $this->wsu;
- $wsf = $this->wsf;
- $sm = $this->sm;
- $em = $this->em;
- $cm = $this->cm;
- // $options = $this->container->get('dinamic_settings.manager');
- /**** Bloque de formulario de usuario sin correo en el ERP *******/
- $formNoCorreo = $this->ffi->create(UserRegistrationNoCorreoType::class,null,["sm" => $sm]);
- $formNoCorreo->handleRequest($request);
- // dump($formNoCorreo);die();
- if($formNoCorreo->isSubmitted() and $formNoCorreo->isValid()){
- $data=$formNoCorreo->getData();
- // $WSU = $this->container->get('web.service.usuarios',$em);
- // $WSF=$this->container->get('web.service.funciones',$em);
- $userERP=$wsf->getClienteporNumId($data['Dni_correo_sin']);
- $userERPD = $wsu->findBy('No',$userERP);
- if($userERP){
- $wsf->modificarEmail($userERP,$data['email']);
- $user = new User();
- $user->setIdCard($data['Dni_correo_sin']);
- $user->setEmail($data['email']);
- $user->setPassword($data['password1']);
- $user->setPlainPassword($data['password1']);
- $user->setName($userERPD['Name']. ' '.$userERPD['Name2']);
- $user->setErpId($userERP);
- $user->setEnabled(1);
- // $userManager = $this->container->get('fos_user.user_manager');
- $this->userManager->updatePassword($user);
- $em->persist($user);
- $em->flush();
- // $url = $this->container->get('router')->generate('fos_user_registration_confirmed');
- if ($request->query->has('t')) {
- $url = $this->generateUrl('fos_user_registration_confirmed', ['t' => $request->query->get('t')]);
- } else {
- $url = $this->generateUrl('fos_user_registration_confirmed');
- }
- $response = new RedirectResponse($url);
- $this->authenticateUser($user, $security);
- return $response;
- }
- }
- else{
- //echo $formNoCorreo->getErrorsAsString();
- }
- /***** Bloque de codigo de usuario con correo en el ERP ********/
- $user = $this->userManager->createUser();
- $user->setEnabled(true);
- $event = new GetResponseUserEvent($user, $request);
- $this->eventDispatcher->dispatch($event, FOSUserEvents::REGISTRATION_INITIALIZE);
- if (null !== $event->getResponse()) {
- return $event->getResponse();
- }
- $locale = $request->getLocale();
- $fullForm = $this->formFactory->createForm(["sm" => $sm]);
- $fullForm->setData($user);
- $fullForm->handleRequest($request);
- $confirmationEnabled = $this->params->get('fos_user.registration.confirmation.enabled');
- // dump($fullForm->handleRequest($request));die();
- if ($fullForm->isSubmitted()) {
- if ($fullForm->isValid()) {
- // dump($fullForm->getData());dump($fullForm->getData()->getFechaCaducidad());dump($user->getName());die();
- $event = new FormEvent($fullForm, $request);
- $this->eventDispatcher->dispatch($event, FOSUserEvents::REGISTRATION_SUCCESS);
- // dump($user);die();
- if ($this->onRegistrationSuccess($user)) {
- if ($confirmationEnabled) {
- // $userERP = $user->getErpId();
- // dump($userERP);
- // $userERPD = $wsu->findBy('No',$userERP);
- // dump($userERPD);die();
- // $request->getSession()->set('fos_user_send_confirmation_email/email', $userERPD['email']);
- if ($request->query->has('t')) {
- $user->setEnabled(true);
- $this->userManager->updateUser($user);
- $this->authenticateUser($user, $security);
- $url = $this->generateUrl('app_cart_3', ['t' => $request->query->get('t')]);
- } else {
- $user->setEnabled(false);
- $url = $this->generateUrl('fos_user_registration_check_email');
- $this->userManager->updateUser($user);
- }
- $response = new RedirectResponse($url);
- return $response;
- }
- $this->userManager->updateUser($user);
- if (null === $response = $event->getResponse()) {
- if ($request->query->has('t')) {
- $url = $this->generateUrl('fos_user_registration_confirmed', ['t' => $request->query->get('t')]);
- } else {
- $url = $this->generateUrl('fos_user_registration_confirmed');
- }
- $response = new RedirectResponse($url);
- }
- $this->eventDispatcher->dispatch(new FilterUserResponseEvent($user, $request, $response), FOSUserEvents::REGISTRATION_COMPLETED);
- // $this->onRegistrationCompleted($user);
- return $response;
- }
- else {
- $this->addFlash('error', $this->sm->getValue('error.registro'));
- }
- // }
- }
- $event = new FormEvent($fullForm, $request);
- $this->eventDispatcher->dispatch($event, FOSUserEvents::REGISTRATION_FAILURE);
- if (null !== $response = $event->getResponse()) {
- return $response;
- }
- }
- //Formulario busqueda cliente
- $formShortReg = $this->ffi->create(CheckDniType::class,null,["sm" => $sm]);
- $formShortRegDate = $this->ffi->create(CheckDniDateType::class,null,["sm" => $sm]);
- if ($request->query->has('dni')) {
- $dniTrans = $request->query->get('dni');
- } else {
- $dniTrans = null;
- }
- //Formulario de comprobacion de correo
- $formCorreo = $this->ffi->create(UserRegistrationCheckCorreoType::class,null,["sm" => $sm]);
- $formCorreo->handleRequest($request);
- if($formCorreo->isSubmitted() and $formCorreo->isValid()){
- $data=$formCorreo->getData();
- $user=$em->getRepository('App\Entity\User')->findOneByUsername(strtolower($data['Dni_correo_con']));
- if($user && $user->getConfirmationToken()==$data['codigo_correo']){
- $user->setPlainPassword($data['password1']);
- $user->setConfirmationToken(null);
- $user->setPasswordRequestedAt(null);
- if ($request->query->has('t')) {
- $url = $this->generateUrl('fos_user_registration_confirmed', ['t' => $request->query->get('t')]);
- } else {
- $url = $this->generateUrl('fos_user_registration_confirmed');
- }
- $response = new RedirectResponse($url);
- $this->authenticateUser($user, $security);
- return $response;
- }
- else{
- }
- }
- else{
- //echo "ERROR";
- //die;
- }
- return $this->render('@FOSUser/Registration/register.html.twig', array(
- 'formShortReg' => $formShortReg->createView(),
- 'formShortRegDate' => $formShortRegDate->createView(),
- 'formCorreo' => $formCorreo->createView(),
- 'fullForm' => $fullForm->createView(),
- 'formNoCorreo' => $formNoCorreo->createView(),
- 'dniTrans' => $dniTrans
- ));
- }
- /**
- * Tell the user to check their email provider.
- */
- public function checkEmailAction(Request $request): Response
- {
- $email = $request->getSession()->get('fos_user_send_confirmation_email/email');
- // dump($email); die();
- if (empty($email)) {
- return new RedirectResponse($this->generateUrl('fos_user_registration_register'));
- }
- $request->getSession()->remove('fos_user_send_confirmation_email/email');
- $user = $this->userManager->findUserByEmail($email);
- if (null === $user) {
- return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login'));
- }
- return $this->render('@FOSUser/Registration/check_email.html.twig', [
- 'user' => $user,
- ]);
- }
- /**
- * Receive the confirmation token from user email provider, login the user.
- *
- * @param string $token
- */
- public function confirmAction(Request $request, $token): Response
- {
- $userManager = $this->userManager;
- $user = $userManager->findUserByConfirmationToken($token);
- if (null === $user) {
- return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login'));
- }
- $user->setConfirmationToken(null);
- $user->setEnabled(true);
- $event = new GetResponseUserEvent($user, $request);
- $this->eventDispatcher->dispatch($event, FOSUserEvents::REGISTRATION_CONFIRM);
- $userManager->updateUser($user);
- // $this->onRegistrationCompleted($user);
- if (null === $response = $event->getResponse()) {
- $url = $this->generateUrl('fos_user_registration_confirmed');
- $response = new RedirectResponse($url);
- }
- $this->eventDispatcher->dispatch(new FilterUserResponseEvent($user, $request, $response), FOSUserEvents::REGISTRATION_CONFIRMED);
- return $response;
- }
- /**
- * Tell the user his account is now confirmed.
- */
- public function confirmedAction(Request $request): Response
- {
- $user = $this->getUser();
- // dump($user);
- // dump($user instanceof UserInterface); die();
- // dump($user); die();
- if (!is_object($user) || !$user instanceof User) {
- throw new AccessDeniedException('This user does not have access to this section.');
- }
- new RedirectResponse($this->container->get('router')->generate('app_profile'));
- return $this->render('@FOSUser/Registration/confirmed.html.twig', [
- 'user' => $user,
- 'targetUrl' => ''
- //'targetUrl' => $this->getTargetUrlFromSession($request->getSession()),
- ]);
- }
- private function getTargetUrlFromSession(SessionInterface $session): ?string
- {
- $key = sprintf('_security.%s.target_path', $this->tokenStorage->getToken()->getProviderKey());
- if ($session->has($key)) {
- return $session->get($key);
- }
- return null;
- }
- public function onRegistrationSuccess($user)
- {
- $user->setUsername($user->getIdCard());
- $ERPCODE=$this->wsf->getClienteporNumId($user->getIdCard());
- $user->setRoles([]);
- //Ya está en la base de datos del ERP
- if($ERPCODE){
- $user->setErpId($ERPCODE);
- if($this->em->getRepository('App\Entity\User')->findOneByErpId($ERPCODE)){
- //User already in db
- //echo "Ya estas en la base de datos";
- return false;
- }
- }
- else{
- $salidaERP=$this->wsf->RegistrarCliente($user);
- if(!$salidaERP) {
- $this->userManager->updateUser($user);
- return false;
- }
- $user->setErpId($salidaERP);
- }
- $this->userManager->updateUser($user);
- $this->processImages($user);
- return true;
- }
- public function processImages($user)
- {
- $em = $this->em;
- $SM = $this->sm;
- $WS = $this->wsf;
- if($user->getUrlImagen()){
- $file = $user->getUrlImagen();
- if ($file->guessExtension() == 'pdf') {
- $randName = md5(uniqid());
- $pdfName = $randName . '.pdf';
- $file->move($this->getParameter('dni_directory'), $pdfName);
- $pdfFile = $this->getParameter('dni_directory').'/'.$pdfName;
- $outputFile = $this->getParameter('dni_directory').'/'.$randName.'.jpg';
- //exec("/usr/bin/gs -dNOPAUSE -dBATCH -sDEVICE=jpeg -r150 -dFirstPage=1 -dLastPage=1 -sOutputFile=\"$outputFile\" \"$pdfFile\"", $output, $returnVar);
- shell_exec("/bin/gs -dNOPAUSE -dBATCH -sDEVICE=jpeg -r150 -dFirstPage=1 -dLastPage=1 -sOutputFile=\"$outputFile\" \"$pdfFile\"");
- unlink($this->getParameter('dni_directory').'/'.$pdfName);
- if (!file_exists($outputFile)) {
- throw new \Exception("Error al convertir PDF a JPG");
- }
- $fileName = $randName.'.jpg';
- } else {
- $newName = $fileName= md5(uniqid()).'.'.$file->guessExtension();
- $file->move(
- $this->params->get('dni_directory'),
- $fileName
- );
- }
- // $newName = $fileName= md5(uniqid()).'.'.$file->guessExtension();
- // $file->move(
- // $this->params->get('dni_directory'),
- // $fileName
- // );
- $fileName_r = $fileName;
- $file_image = Util::smart_resize_image($this->params->get('dni_directory').'/'.$fileName,null, 1200, 1200, true, $this->params->get('dni_directory').'/'.$fileName, true, false, 100);
- //$file_image = imagecreatefromjpeg($this->params->get('dni_directory').'/'.$fileName);
- $file_image = imagecreatefromstring(file_get_contents($this->params->get('dni_directory').'/'.$fileName));
- $fileNameee = $this->params->get('dni_directory').'/'.$newName;
- // dump($fileNameee);
- $fileName1=NULL;
- if ($user->getUrlImagen2()) {
- $file1 = $user->getUrlImagen2();
- $newName1=$fileName1 = md5(uniqid()).'.'.$file1->guessExtension();
- $file1->move($this->params->get('dni_directory'), $fileName1);
- $file1_image = Util::smart_resize_image($this->params->get('dni_directory').'/'.$fileName1,null, 1200, 1200, true, $this->params->get('dni_directory').'/'.$fileName1, true, false, 100);
- $file1_image = imagecreatefromstring(file_get_contents($this->params->get('dni_directory').'/'.$fileName1));
- $tamano1 = getimagesize($this->params->get('dni_directory').'/'.$fileName);
- $tamano2 = getimagesize($this->params->get('dni_directory').'/'.$fileName1);
- $anchoGrande = 0;
- if($tamano1[0] > $tamano2[0]){
- $anchoGrande = $tamano1[0];
- }else{
- $anchoGrande = $tamano2[0];
- }
- $altura = $tamano1[1]+$tamano2[1];
- $altura1 = $altura - $tamano2[1];
- $image_aux = imagecreatetruecolor($anchoGrande,$altura);
- imagecopymerge($image_aux, $file_image, 0, 0, 0, 0, $tamano1[0], $tamano1[1], 100);
- imagecopymerge($image_aux, $file1_image, 0, $altura1, 0, 0, $tamano2[0], $tamano2[1], 100);
- $filename_image11 = md5(uniqid());
- imagepng($image_aux,$this->params->get('dni_directory').'/'.$filename_image11.'.png');
- $file = $image_aux;
- $fileName = $filename_image11.'.png';
- $fileNameFinal = $fileName;
- $fileNameee = $this->params->get('dni_directory').'/'.$filename_image11.'.png';
- $newName= $filename_image11.'.png';
- }
- // dump($fileNameee);
- // die();
- try{
- //Upload the image to Eurochange FTP
- $ftp_server = $this->params->get('get_ftp_domain');
- $ftp_user_name = $this->params->get('get_ftp_user');
- $ftp_user_pass = $this->params->get('get_ftp_password');
- $ftp_user_folder = $this->params->get('get_ftp_dni_folder');
- $conn_id = ftp_connect($ftp_server);
- $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
- if ((!$conn_id) || (!$login_result)) {
- //echo "conexion fallida";
- dump("error");
- }
- // dump($login_result);
- //turn passive mode on
- ftp_pasv($conn_id, true);
- $dni_path=$this->params->get('dni_directory');
- $upload = ftp_put($conn_id, $ftp_user_folder.$newName, $fileNameee, FTP_BINARY);
- // dump($upload);
- //TODO activar en produccion
- $WS->CargarImagen($user->getErpId(),$newName);
- //Tras subir la imagen al FTP del ERP, borramos la nuestra
- // if(file_exists($fileNameee)){
- // unlink($fileNameee);
- // }
- if(file_exists($dni_path.'/'. $fileName1)){
- unlink($dni_path.'/'.$fileName1);
- }
- if(file_exists($dni_path.'/'.$fileName_r)){
- unlink($dni_path.'/'.$fileName_r);
- }
- }catch(\Exception $e){
- //$logger = $this->get('logger');
- //$logger->error('[DINAMIC][ERROR][SUBIDA DNI] ' . $e->getCode() . ' ' . $e->getMessage());
- }
- //Register the new image
- $user->setUrlImagen($newName);
- $user->setUrlImagen2($fileName1);
- }
- // die();
- $this->userManager->updateUser($user);
- }
- }