src/Noahtech/Sistemas/InterjamaBundle/Handler/McUsuarioHandler.php line 52

Open in your IDE?
  1. <?php
  2. namespace Noahtech\Sistemas\InterjamaBundle\Handler;
  3. use Noahtech\Sistemas\InterjamaBundle\Entity\McRol;
  4. use Noahtech\Sistemas\InterjamaBundle\Entity\McUsuario;
  5. use Noahtech\Sistemas\InterjamaBundle\Utils\Constants;
  6. use Noahtech\Sistemas\InterjamaBundle\Utils\EmailsMessages;
  7. use Noahtech\Sistemas\InterjamaBundle\Utils\Encrypt;
  8. use DateInterval;
  9. use DateTime;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\DependencyInjection\ContainerInterface;
  12. use Symfony\Component\HttpKernel\Exception\HttpException;
  13. class McUsuarioHandler extends BaseHandler {
  14.     public function __construct(ContainerInterface $containerEntityManagerInterface $entityManager) {
  15.         $this->container $container;
  16.         $this->entityManager $entityManager;
  17.         $this->repository $entityManager->getRepository(McUsuario::class);
  18.     }
  19.     public function search($offset$limit$sortField$sortDirection$searchParam) {
  20.         $lp $this->repository->search($offset$limit$sortField$sortDirection$searchParam);
  21.         $users $this->toarray($lp->getListado(), 'user');
  22.         $lp->setListado($users);
  23.         return $lp;
  24.     }
  25.     public function getUsuarioByPersona($idPersona) {
  26.         return $this->repository->findOneByPersona($idPersona);
  27.     }
  28.     public function getRoles() {
  29.         $roles $this->entityManager->getRepository(McRol::class)->findAll();
  30.         return $this->toarray($roles'user');
  31.     }
  32.     public function getRolesOrgs() {
  33.         $roles $this->entityManager->getRepository(McRol::class)->getRolesOrgs();
  34.         return $this->toarray($roles'user');
  35.     }
  36.     public function getMenuFromRol(string $rol) {
  37.         $rol $this->om->getRepository('NoahtechSistemasInterjamaBundle:TdRol')->findOneByNombre($rol);
  38.         $submenu $rol->getMenu()->getVdSubMenu();
  39.         return $this->toarray($submenu'menu');
  40.     }
  41.     public function getById($userId) {
  42.         $user $this->repository->findOneById($userId);
  43.         return $this->toarray($user'user');
  44.     }
  45.     
  46.     public function getUserClientes() {
  47.         $clientes $this->repository->findByCliente();
  48.         return $this->toarray($clientes'clientes');
  49.     }
  50.     public function getUsuarioById($userId) {
  51.         return $this->repository->findOneById($userId);        
  52.     }
  53.     private function getCodigoVerificacion($id$fecha) {
  54.         $mensaje $id '_' $fecha;
  55.         $clave $this->container->getParameter('clave_encriptacion_generar_clave');
  56.         $codigo Encrypt::encrypt($mensaje$clave);
  57.         return $codigo;
  58.     }    
  59.     private function enviarMailRecuperarClave($persona$usuario$request) {
  60.         $emailFrom $this->container->getParameter('mailer_user');
  61.         $urlFront strstr($request->headers->get('referer'), 'user'true);
  62.         $emailTo $persona->getEmail();
  63.         $subject 'InterJama - Recuperación de contraseña';
  64.         $apellidoNombre $persona->getApellido() . " " $persona->getNombre();
  65.         $fechaEnvioMail = new DateTime();
  66.         $fechaVerificacion $fechaEnvioMail->getTimestamp();
  67.         $codigo $this->getCodigoVerificacion($usuario->getId(), $fechaVerificacion);
  68.         $linkVerficar $urlFront Constants::URL_RECUPERAR_CLAVE;
  69.         $linkVerificacion $linkVerficar $codigo;
  70.         $mensaje EmailsMessages::mensajeRecuperarClaveEmail($apellidoNombre$usuario->getUsuario(), $linkVerificacion$urlFront);
  71.         $this->container->get(MailHandler::class)->sendMail($emailFrom$emailTo$mensaje$subject);
  72.     }
  73.     public function save($data$id null$request) {
  74.         $persona_entity $this->container->get(McPersonaHandler::class)->savePersona($data["persona"]);
  75.         $user_entity $this->saveUsuario($data["usuario"], $persona_entity$id);
  76.         $result $this->repository->save($user_entity);
  77.         return $this->toarray($result"user");
  78.     }       
  79.     public function saveUsuario($usuario$persona_entity$id) {
  80.         $createUser false;
  81.         $encoder $this->container->get("security.password_encoder");
  82.         $username $usuario["username"];
  83.         $exisiteUsername $this->repository->getUsername($username$id);
  84.         if (COUNT($exisiteUsername) == 0) {
  85.             if (is_null($id)) {
  86.                 $user = new McUsuario();
  87.                 $user->setFechaCreacion(new DateTime());
  88.                 $createUser true;
  89.             } else {
  90.                 $user $this->repository->findOneById($id);
  91.             }
  92.             $user->setUsuario($username);
  93.             $user->setSalt("");  
  94.             $user->setEstado(true);
  95.             if ($createUser) {
  96.                 $password $usuario["password"];
  97.                 $encoded $encoder->encodePassword($user$password);
  98.                 $user->setPassword($encoded);                
  99.             } else {
  100.                 // si es null quiere decir q al ser modificcion no quiso midificar la contraseña
  101.                 if (trim($usuario["password"]) != "" && $usuario["password"] != null) {
  102.                     $encoded $encoder->encodePassword($user$usuario["password"]);
  103.                     $user->setPassword($encoded);
  104.                 }
  105.                 $user->setFechaActualizacion(new DateTime());
  106.             }
  107.             $user->setPersona($persona_entity);
  108.             $rol $this->container->get(McRolHandler::class)->getRolById($usuario["rol"]);
  109.             if (isset($usuario['cliente'])) {
  110.                 $cliente $this->container->get(McClienteHandler::class)->getClienteById($usuario["cliente"]);
  111.                 $user->setCliente($cliente);
  112.             }
  113.             /*             * ***roles anteriores**** */
  114.             $roles $user->getRoles();
  115.             foreach ($roles as $r) {
  116.                 $aux $this->container->get(McRolHandler::class)->getRolByNombre($r);
  117.                 $user->removeRol($aux);
  118.             }
  119.             /*             * *********************** */
  120.             foreach ($usuario['rol'] as $r) {
  121.                 $rol $this->container->get(McRolHandler::class)->getRolById((int)$r);
  122.                 $user->addRol($rol);
  123.             }
  124.             return $user;
  125.         } else {
  126.             throw new HttpException(409"Ya existe el usuario con el con el NOMBRE DE USUARIO: " $username);
  127.         }
  128.     }
  129.     public function getDataPublicUser($clave_encriptada$band) {
  130.         $clave $this->container->getParameter('clave_encriptacion_generar_clave');
  131.         $codigo Encrypt::decrypt($clave_encriptada$clave);
  132.         // Obtengo el id y la fecha del usuario.
  133.         $data explode('_'$codigo);
  134.         if (COUNT($data) != 2) {
  135.             throw new HttpException(409"El link al que quiere ingresar no es válido.");
  136.         }
  137.         $timestamp = (int) $data[1];
  138.         $dt = new DateTime();
  139.         $dt->setTimestamp($timestamp);
  140.         $horas $this->container->getParameter('horas_validar_link_generar_clave');
  141.         if ($horas 0) { // Si el parametro de horas, es mayor que 0, deberá comprobar que la fecha este dentro del rango.
  142.             $inter 'PT' $horas 'H';
  143.             $dt->add(new DateInterval($inter));
  144.             $dtNow = new DateTime();
  145.             if ($dtNow $dt) {
  146.                 throw new HttpException(409"El código del link de generación de clave ya no es válido");
  147.             } else {
  148.                 $usuario $this->getById($data[0]);
  149.             }
  150.         } else { //Si el parametro horas es negativo, no verificara un rango de fecha.
  151.             $usuario $this->getById($data[0]);
  152.         }
  153.         if ($band) { //Cuando $band es true, se esta dando de alta un usuario. Si es falso, es porque el usuario quiere recuperar su clave.
  154.             if (!$usuario["primer_ingreso"]) {
  155.                 throw new HttpException(409"El código del link de generación de clave ya no es válido");
  156.             }
  157.         }
  158.         return $usuario;
  159.     }
  160.     public function updateClave($data) {
  161.         $encoder $this->container->get("security.password_encoder");
  162.         $usuario $this->repository->findOneById($data["id"]);        
  163.         $encoded $encoder->encodePassword($usuario$data["password"]);
  164.         $usuario->setPassword($encoded);        
  165.         $usuario->setFechaActualizacion(new DateTime());
  166.         $result $this->repository->save($usuario);             
  167.         return $this->toarray($result"user");
  168.     }
  169.     public function recuperarClaveEmail($request$cuil) {   
  170.         
  171.         $persona $this->container->get(McPersonaHandler::class)->getPersonaByCuil($cuil);
  172.         
  173.         if (!is_null($persona)) {
  174.             $usuario $this->getUsuarioByPersona($persona->getId());
  175.         } else {
  176.             throw new HttpException(409"El cuil ingresado no pertenece a una persona registrada en el sistema.");
  177.         }
  178.         if (!is_null($usuario)) {
  179.             $this->enviarMailRecuperarClave($persona$usuario$request);
  180.         } else {
  181.             throw new HttpException(409"El cuil ingresado no esta vinculado a un usuario.");
  182.         }
  183.         $usuario $this->toarray($usuario"user");
  184.         return $usuario;
  185.     }
  186.     public function getUsuarios() {
  187.         $usuarios $this->repository->findAll();
  188.         $usuarios $this->toarray($usuarios'user');
  189.         return $usuarios;
  190.     }
  191. }