<?php
/**
* Created by PhpStorm.
* User: manueljb
* Date: 10/12/2018
* Time: 10:49
*/
namespace App\Controller;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\UsuarioService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerBuilder;
use App\Entity\Cuenta;
use Swift_Mailer;
use Symfony\Component\Serializer\SerializerInterface;
use App\Repository\CuentaRepository;
use Psr\Log\LoggerInterface;
class UsuarioController extends AbstractFOSRestController
{
private $serviceUsuario;
private $cuentasRepository;
private $serializer;
private $mailer;
private $log;
//private $servidorWeb="http://83.48.105.27:8989";
// private $servidorWeb="http://192.168.10.80:8889";
public function __construct(UsuarioService $serviceUsuario, SerializerInterface $serializer, Swift_Mailer $mailer, CuentaRepository $cuentasRepository, LoggerInterface $logger)
{
$this->serviceUsuario = $serviceUsuario;
$this->serializer = $serializer;
$this->mailer = $mailer;
$this->cuentasRepository = $cuentasRepository;
$this->log = $logger;
}
/**
* @Route("api/usuarios", name="GetUsuariosByCuenta", methods="GET")
*/
public function getAllUsuarioByAdmin(Request $request)
{
/*
$response = new Response(Response::HTTP_BAD_REQUEST);
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if($usr=='anon.' || $usr->getCuenta() == null) {
return new Response(Response::HTTP_BAD_REQUEST);
}else {
$data = $this->serviceUsuario ->getUsuarioByCuenta($usr->getCuenta());
if(!$data)
{
$data = [];
}
$response = new Response($serializer->serialize($data, 'json', SerializationContext::create()->setGroups('clienteAdmin')),Response::HTTP_OK);
$response->headers->set('Content-Type', 'json'); //xml
$response->prepare($request);
return $response;
}
} catch (Exception $e) {
error_log($e);
return new Response(Response::HTTP_BAD_REQUEST);
}
*/
$response = new Response(Response::HTTP_BAD_REQUEST);
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
try {
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
$result = $this->serviceUsuario->getUsuarioByCuenta($cuenta);
$response = new Response($serializer->serialize($result, 'json', SerializationContext::create()->setGroups('clienteAdmin')), Response::HTTP_OK);
} catch (Exception $e) {
error_log($e);
}
return $response;
}
/**
* @Route("api/usuarioUpdate", name="Create OR Update User", methods="POST")
*/
public function CreateORReplaceUsuario(Request $request)
{
try {
$correcto = null;
$response = new Response(Response::HTTP_BAD_REQUEST);
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
/*
$usr = $this->get('security.token_storage')->getToken()->getUser();
if($usr->getTipo() != 1)
return new Response("permisos insuficientes",Response::HTTP_BAD_REQUEST);
*/
$serializer = $this->serializer;
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$usuario = json_decode($request->getContent(), true);
if ($usuario['id'] != null && $usuario['id'] != '') {
//Tenemos Id por lo que es una actulizacion
$correcto = $this->serviceUsuario->updateUsuarioByCuenta($usuario);
} else {
$correcto = $this->serviceUsuario->creaUsuarioByCuenta($cuenta, $usuario);
}
}
//$serializer = $this->get('jms_serializer');
if ($correcto != null) {
$response = new Response(Response::HTTP_OK);
} else {
$response = new Response(Response::HTTP_BAD_REQUEST);
}
$response->prepare($request);
return $response;
} catch (Exception $e) {
error_log($e);
return new Response(Response::HTTP_BAD_REQUEST);
}
}
/**
* @Route("api/cuentaUpdateDisclaimer", name="Update account disclaimer", methods="POST")
*/
public function updateDisclaimerAccept(Request $request)
{
try {
$correo = $request->request->get("correo");
$disclaimer = $request->request->get("aceptacionDisclaimer");
$correcto = true;
$datos = $request->getContent();
$cuenta = $this->serviceUsuario->buscaCuentabyCorreo($correo, $disclaimer); //Implemento aqui la actualizacion del disclaimer porque por alguna razon lo de abajo da error 400
//$result = $this->usuarioService->aceptarDisclaimer($datos, $cuenta);
if ($cuenta === null) {
$correcto = false;
}
if ($correcto) {
$response = new Response('ok', Response::HTTP_OK);
} else {
$response = new Response(Response::HTTP_BAD_REQUEST);
}
$response->prepare($request);
return $response;
} catch (\Exception $e) {
error_log($e);
return new Response(Response::HTTP_BAD_REQUEST);
}
}
/*
* Panel Administrador
*/
/**
* @Route("api/admin/cuentaUpdate", name="Create OR Update Cuenta", methods="POST")
*/
public function CreateORReplaceCuenta(Request $request)
{
try {
$correcto = null;
$response = new Response(Response::HTTP_BAD_REQUEST);
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$cuenta = json_decode($request->getContent(), true);
$datos = $request->getContent();
if (isset($datos['aceptacionDisclaimer'])) {
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
$correcto = $this->usuarioService->aceptarDisclaimer($datos, $cuenta);
} else {
if ($cuenta['id'] === null || $cuenta['id'] === '') {
$correcto = $this->serviceUsuario->gestionCuenta($cuenta);
$this->enviarCorreoCuentaNueva($correcto);
} else {
if (isset($cuenta['reset'])) {
if ($cuenta['reset'] === true) {
$correcto = $this->cuentasRepository->find($cuenta['id']);
$this->enviarCorreoCuentaNueva($correcto);
} else {
$correcto = $this->serviceUsuario->gestionCuenta($cuenta);
}
} else {
$correcto = $this->serviceUsuario->gestionCuenta($cuenta);
}
}
}
}
if ($correcto != null) {
$response = new Response(Response::HTTP_OK);
} else {
$response = new Response(Response::HTTP_BAD_REQUEST);
}
$response->prepare($request);
return $response;
} catch (\Exception $e) {
$this->log->info('ERROR: ' . $e);
error_log($e);
return new Response(Response::HTTP_BAD_REQUEST);
}
}
/**
* @Route("api/admin/cuentas", name="GetCuentas", methods="GET")
*/
public function getAllCuentas(Request $request)
{
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
// $serializer = $this->get('jms_serializer');
$data = $this->serviceUsuario->getAll();
if (!$data) {
$data = [];
}
$response = new Response($serializer->serialize($data, 'json', SerializationContext::create()->setGroups('cuenta')), Response::HTTP_OK);
$response->headers->set('Content-Type', 'json'); //xml
$response->prepare($request);
return $response;
}
/**
* @Route("api/admin/cuentasConFormula", name="GetCuentasConFormula", methods="GET")
*/
public function getAllCuentasConFormula(Request $request)
{
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
// $serializer = $this->get('jms_serializer');
$data = $this->serviceUsuario->getAllFormula();
if (!$data) {
$data = [];
}
$response = new Response($serializer->serialize($data, 'json', SerializationContext::create()->setGroups('cuenta')), Response::HTTP_OK);
$response->headers->set('Content-Type', 'json'); //xml
$response->prepare($request);
return $response;
}
/**
* @Rest\Post("api/admin/updateCuentas", name="adminUpdateCuentas")
*/
public function updateCuentasFromCSV(Request $request)
{
$response = new Response('Error, Cuenta de la peticion no autorizada, o identificador no valido', Response::HTTP_BAD_REQUEST);
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if ($usr->getId() == 1) {
$cuenta = $this->serviceUsuario->updateCuentas();
$response = new Response('OK', Response::HTTP_OK);
return $response;
} else {
return $response;
}
} catch (\Exception $e) {
error_log($e);
return $response;
}
}
/**
* @Rest\Post("api/admin/copyPersonalComps", name="adminCopyPersonalComps")
*/
public function copyPersonalComps(Request $request)
{
$response = new Response('Error, Cuenta de la peticion no autorizada, o identificador no valido', Response::HTTP_BAD_REQUEST);
$datos = json_decode($request->getContent(), true);
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if ($usr->getId() == 1) {
$personalComps = $this->serviceUsuario->copyPersonalComps($datos, $cuenta);
if ($personalComps == true) {
$response = new Response('OK', Response::HTTP_OK);
} else {
$response = new Response('Error: ' . $personalComps, Response::HTTP_BAD_REQUEST);
}
return $response;
} else {
return $response;
}
} catch (\Exception $e) {
error_log($e);
$response = new Response('Error: ' . $e, Response::HTTP_BAD_REQUEST);
return $response;
}
}
/**
* @Rest\Post("api/admin/copyFPto", name="adminCopyFPto")
*/
public function copyFPto(Request $request)
{
$response = new Response('Error, Cuenta de la peticion no autorizada, o identificador no valido', Response::HTTP_BAD_REQUEST);
$datos = json_decode($request->getContent(), true);
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if ($usr->getId() == 1) {
$formulasPers = $this->serviceUsuario->copyFPto($datos, $cuenta);
$response = new Response("OK", Response::HTTP_OK);
$response->prepare($request);
return $response;
} else {
$response->prepare($request);
return $response;
}
} catch (\Exception $e) {
error_log($e);
$response->prepare($request);
return $response;
}
}
/**
* @Rest\Post("api/admin/resetGroups", name="adminResetGroups")
*/
public function resetGroups(Request $request)
{
$response = new Response('Error, Cuenta de la peticion no autorizada, o identificador no valido', Response::HTTP_BAD_REQUEST);
$datos = json_decode($request->getContent(), true);
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if ($usr->getId() == 1) {
$cuenta = $this->serviceUsuario->resetGroups($datos, $cuenta);
$response = new Response('OK', Response::HTTP_OK);
$response->prepare($request);
return $response;
} else {
return $response;
}
} catch (\Exception $e) {
error_log($e);
$response->prepare($request);
return $response;
}
}
/**
* @Rest\Post("api/admin/resetConfig", name="adminResetConfig")
*/
public function resetConfig(Request $request)
{
$response = new Response('Error, Cuenta de la peticion no autorizada, o identificador no valido', Response::HTTP_BAD_REQUEST);
$datos = json_decode($request->getContent(), true);
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if ($usr->getId() == 1) {
$cuenta = $this->serviceUsuario->resetConfig($datos, $cuenta);
$response->prepare($request);
$response = new Response('OK', Response::HTTP_OK);
return $response;
} else {
return $response;
}
} catch (\Exception $e) {
error_log($e);
$response->prepare($request);
return $response;
}
}
/**
* @Rest\Post("api/admin/resetCuenta", name="adminResetCuenta")
*/
public function resetCuenta(Request $request)
{
$response = new Response('Error, Cuenta de la peticion no autorizada, o identificador no valido', Response::HTTP_BAD_REQUEST);
$datos = json_decode($request->getContent(), true);
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
try {
$usr = $this->get('security.token_storage')->getToken()->getUser();
if ($usr->getId() == 1) {
$cuenta = $this->serviceUsuario->resetCuenta($datos, $cuenta);
$response = new Response('OK', Response::HTTP_OK);
$response->prepare($request);
return $response;
} else {
return $response;
}
} catch (\Exception $e) {
error_log($e);
$response->prepare($request);
return $response;
}
}
/**
* @Route("extra/olvidoPassword", name="olvidoPasswordMail", methods="POST" )
*/
public function olvidoPassword(Request $request)
{
$correo = $request->request->get("correo");
$cuenta = null;
if (isset($correo)) {
$cuenta = $this->serviceUsuario->buscaCuentabyCorreo($correo, '');
}
if ($cuenta != null) {
$idiomaCuenta = "";
$mailTemplate = "";
$idiomaCuenta = $cuenta->getConfiguracion()->getValor()['languages']['languageSelected'];
switch (strtoupper($idiomaCuenta)) {
case "ES":
$mailTemplate = "mail/mailOlvidoPassword_es.html.twig";
$subject = 'Reestablecer contraseña';
break;
case "EN":
$mailTemplate = "mail/mailOlvidoPassword_en.html.twig";
$subject = 'Reset password';
break;
case "FR":
$mailTemplate = "mail/mailOlvidoPassword_fr.html.twig";
$subject = 'Réinitialiser le mot de passe';
break;
default:
$mailTemplate = "mail/mailOlvidoPassword_en.html.twig";
$subject = 'Reset password';
}
$message = (new \Swift_Message())
->setFrom('urki-system@besa.es')
->setTo($cuenta->getEmail())
->setBody(
$this->renderView(
$mailTemplate,
array(
'name' => $cuenta->getContacto(),
'token' => $cuenta->getToken(),
'locale' => $cuenta->getConfiguracion()->getValor()['languages']['languageSelected'],
'usr' => $cuenta->getId(),
)
),
'text/html'
)->setSubject($subject);
$this->mailer->send($message);
$response = new Response('true', Response::HTTP_OK);
return $response;
} else {
$response = new Response('false', Response::HTTP_BAD_REQUEST);
return $response;
}
}
/**
* @Route("extra/{_locale}/nuevoPassword", defaults={"_locale"="es"}, name="muevaPassword", methods="POST" )
*/
public function nuevaPassword(Request $request)
{
$id = $request->request->get("usuario");
$token = $request->request->get("token");
$password = $request->request->get("password");
if (isset($id, $token, $password)) {
if ($this->serviceUsuario->nuevaPassword($id, $token, $password)) {
$response = new Response('true', Response::HTTP_OK);
return $response;
} else {
$response = new Response($token, Response::HTTP_BAD_REQUEST);
return $response;
}
} else {
$response = new Response('false', Response::HTTP_BAD_REQUEST);
return $response;
}
return true;
}
public function enviarCorreoCuentaNueva(Cuenta $cuenta)
{
$idiomaCuenta = "";
$mailTemplate = "";
$idiomaCuenta = $cuenta->getConfiguracion()->getValor()['languages']['languageSelected'];
switch (strtoupper($idiomaCuenta)) {
case "ES":
$mailTemplate = "mail/registration_es.html.twig";
$subject = 'Bienvenido a Urki-System';
break;
case "EN":
$mailTemplate = "mail/registration_en.html.twig";
$subject = 'Welcome to Urki-System';
break;
case "FR":
$mailTemplate = "mail/registration_fr.html.twig";
$subject = 'Bienvenue à Urki-System';
break;
default:
$mailTemplate = "mail/registration_en.html.twig";
$subject = 'Welcome to Urki-System';
}
$message = (new \Swift_Message('Bienvenido'))
->setFrom('urki-system@besa.es')
->setTo($cuenta->getEmail())
->setBody(
$this->renderView(
$mailTemplate,
array(
'name' => $cuenta->getContacto(),
'token' => $cuenta->getToken(),
'locale' => $cuenta->getConfiguracion()->getValor()['languages']['languageSelected'],
'usr' => $cuenta->getId()
)
),
'text/html'
)->setSubject($subject);
//$mailer = new \Swift_Mailer();
$this->mailer->send($message);
}
/**
* @Route("extra/compruebaAdmin", name="compruebaAdmin")
*/
public function compruebaAdminPassword(Request $request)
{
$id = $request->request->get("usuario");
$token = $request->request->get("token");
$usuarioAdmin = $request->request->get("usuarioadmin");
$password = $request->request->get("password");
if ($this->serviceUsuario->compruebaAdmin($id, $token, $password, $usuarioAdmin)) {
$response = new Response('true', Response::HTTP_OK);
return $response;
} else {
$response = new Response('false', Response::HTTP_BAD_REQUEST);
return $response;
}
}
/*
* VISTAS
*/
/**
* @Route("extra/{_locale}/generaPassword", name="generaPassword1vez")
*/
public function generarPassword(Request $request)
{
$id = 0;
$token = "";
if ($request->query->get('usr') != null && $request->query->get('usr') != "") {
$usr = $request->query->get('usr');
$token = $request->query->get('token');
//$element = explode('_',$usr,2);
$id = $usr;
//$token=$element[1];
}
if ($id != 0 && $token != "") {
return $this->render('password/generarPassord.html.twig', [
'usr' => $id,
'token' => $token
]);
} else {
return $this->render('error.html.twig');
}
}
/**
* @Route("extra/{_locale}/olvidoPassword", defaults={"_locale"="es"}, requirements={"_locale"="en|fr|es"}, name="regeneraPassword")
*/
public function regenerarPassword(Request $request)
{
$id = 0;
$token = "";
if ($request->query->get('usr') != null && $request->query->get('usr') != "") {
$usr = $request->query->get('usr');
$token = $request->query->get('token');
$usuario = $this->serviceUsuario->findCuentabyId($usr);
//dd($usuario);
//dd($usuario->getToken());
//dd($usuario);
if (!$usuario || $usuario->getToken() != $token) {
return $this->render('error.html.twig');
}
}
return $this->render('password/olvidoPassword.html.twig', [
'usr' => $usuario->getId(),
'token' => $token,
'name' => $usuario->getContacto()
]);
}
/*
* FIN VISTA
*/
}