src/Controller/RegistrationController.php line 84
<?php// src/Acme/UserBundle/Controller/RegistrationController.phpnamespace 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 ERPif($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 onftp_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);}}