From 58ae0b56d93b5d55eae1cedd29b7261e7bfbe7ba Mon Sep 17 00:00:00 2001
From: davidruiz-gnoss
Date: Fri, 6 Oct 2023 15:11:34 +0200
Subject: [PATCH] Security Improvement
---
Dockerfile-views | 2 +-
.../HashGenerator.php | 16 +
.../AdministrarCategoriasController.cs | 2 +-
.../AdministrarDatosExtraController.cs | 558 ++++
.../AdministrarDisenioController.cs | 12 +
.../AdministrarVistasController.cs | 4 +-
.../CMSAdminDisenioController.cs | 9 +
.../AdministrarNewsletterController.cs | 2 +-
...dministrarSolicitudesUsuariosController.cs | 4 +-
.../Controllers/BusquedaController.cs | 2 -
.../ComAdminElemSemanticosController.cs | 1 +
.../ControllerBase/ControllerBaseWeb.cs | 109 +-
.../ControllerBase/ControllerCabeceraBase.cs | 2 +-
.../EditarBioComunidadController.cs | 2 +-
.../EditarPerfilComunidadController.cs | 63 +-
.../Controllers/FichaPerfilController.cs | 72 +-
.../Controllers/FichaRecursoController.cs | 2 +-
.../Controllers/RegistroController.cs | 22 +-
.../Controllers/RegistroDatosController.cs | 16 +-
.../Services/RouteValueTransformer.cs | 5 +-
.../_home-community-section.cshtml | 8 +
.../AdministrarDatosExtra/Index.cshtml | 186 ++
.../AdministrarDatosExtra/_FichaOpcion.cshtml | 72 +
.../AdministrarDatosExtra/_PintarDato.cshtml | 80 +
.../_PintarDatoVirtuoso.cshtml | 79 +
.../_modal-views/_delete-extra-data.cshtml | 45 +
.../_modal-views/_edit-extra-data.cshtml | 120 +
.../_modal-views/_new-extra-data.cshtml | 140 +
.../AdministrarDisenio/Index.cshtml | 2 +-
...ntity-property-addPrimaryControlInt.cshtml | 10 +-
.../_FichaExportacion.cshtml | 3 +-
.../_FichaExportacionPropiedad.cshtml | 6 +-
.../_partial-views/_translate-item.cshtml | 4 +-
.../_PermisosRecursos.cshtml | 61 +-
.../_Propiedad_ListaIDs.cshtml | 22 +-
.../_modal-views/_index.cshtml | 11 +-
.../CMSAdminDisenio/Index.cshtml | 2 +-
.../Views/BandejaSuscripciones/Manage.cshtml | 9 +-
.../Busqueda/Index_AdministrarMiembros.cshtml | 11 +-
.../Views/CambiarPassword/Index.cshtml | 6 +-
.../_tesauro-create-element.cshtml | 14 +-
.../Views/EditarPerfilComunidad/Index.cshtml | 2 +-
.../_PerfilPersonal.cshtml | 6 +-
.../_RedesSociales.cshtml | 14 +-
.../Views/EditarRecurso/_SubirRecurso.cshtml | 19 +-
Gnoss.Web.Open/Views/FichaPerfil/Index.cshtml | 487 +--
.../Views/FichaPerfil/_SummaryBio.cshtml | 391 ++-
.../Views/FichaRecurso/_FichaAcciones.cshtml | 30 +-
.../_send-newsletter-group.cshtml | 135 +-
.../FichaRecurso/_modal-views/_send.cshtml | 2 +-
.../Views/Registro/_FormularioLogin.cshtml | 43 +-
.../Views/Registro/_FormularioRegistro.cshtml | 54 +-
.../Head/_FicherosJavascript_Admin.cshtml | 9 +-
.../Layout/_Layout_CMS_Builder_Admin.cshtml | 15 +-
.../_modal-views/_accept-cookies.cshtml | 10 +-
..._layout-left-navigation-panel_Admin.cshtml | 130 +-
.../Views/Shared/SemCms/_AddControlInt.cshtml | 3 +-
.../_PropiedadOntoSelectorEntidad.cshtml | 9 +-
.../_menu-lateral-metabuscador.cshtml | 2 +-
.../_partial-views/_add-resource.cshtml | 39 +-
Gnoss.Web/wwwroot/ckeditor_admin/config.js | 13 +-
Gnoss.Web/wwwroot/js/unificado.js | 310 +-
.../wwwroot/jsUnificar/MVC.EditarRecurso.js | 2 +-
.../wwwroot/jsUnificar/MVC.EditarSEMCMS.js | 50 +-
Gnoss.Web/wwwroot/lang/en/text.js | 6 +-
.../wwwroot/responsive/theme/community.css | 1 +
Gnoss.Web/wwwroot/responsive/theme/helpers.js | 9 +-
.../wwwroot/responsive/theme/logic/WS.js | 78 +
.../responsive/theme/logic/busquedas.js | 2776 +++++++++++++++++
.../responsive/theme/logic/configuracion.js | 893 +++++-
.../responsive/theme/logic/estructura.js | 181 +-
.../theme/logic/grafo_conocimiento.js | 5 +-
.../wwwroot/responsive/theme/logic/jMsAjax.js | 114 +
Gnoss.Web/wwwroot/responsive/theme/theme.css | 50 +-
Gnoss.Web/wwwroot/responsive/theme/theme.js | 4 +-
75 files changed, 6827 insertions(+), 861 deletions(-)
create mode 100644 Gnoss.Matomo.PhpHashGenerator/HashGenerator.php
create mode 100644 Gnoss.Web.Open/Controllers/Administracion/AdministrarDatosExtraController.cs
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/Index.cshtml
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_FichaOpcion.cshtml
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_PintarDato.cshtml
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_PintarDatoVirtuoso.cshtml
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_delete-extra-data.cshtml
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_edit-extra-data.cshtml
create mode 100644 Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_new-extra-data.cshtml
create mode 100644 Gnoss.Web/wwwroot/responsive/theme/logic/WS.js
create mode 100644 Gnoss.Web/wwwroot/responsive/theme/logic/busquedas.js
create mode 100644 Gnoss.Web/wwwroot/responsive/theme/logic/jMsAjax.js
diff --git a/Dockerfile-views b/Dockerfile-views
index f54f201..345cd80 100644
--- a/Dockerfile-views
+++ b/Dockerfile-views
@@ -1,4 +1,4 @@
-FROM gnoss/gnoss.web.opencore:latest
+FROM docker.gnoss.com/web:latest
COPY CargadorFacetas/*.cshtml Views/CargadorFacetas/
diff --git a/Gnoss.Matomo.PhpHashGenerator/HashGenerator.php b/Gnoss.Matomo.PhpHashGenerator/HashGenerator.php
new file mode 100644
index 0000000..8c51d4b
--- /dev/null
+++ b/Gnoss.Matomo.PhpHashGenerator/HashGenerator.php
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/Gnoss.Web.Open/Controllers/Administracion/AdministrarCategoriasController.cs b/Gnoss.Web.Open/Controllers/Administracion/AdministrarCategoriasController.cs
index 813804a..08d2f68 100644
--- a/Gnoss.Web.Open/Controllers/Administracion/AdministrarCategoriasController.cs
+++ b/Gnoss.Web.Open/Controllers/Administracion/AdministrarCategoriasController.cs
@@ -2152,7 +2152,7 @@ private List ObtenerListaCategorias(string pIdiomaTesauro = null)
foreach (CategoriaTesauro catTes in GestorTesauro.ListaCategoriasTesauroPrimerNivel.Values)
{
- CategoryModel categoriaTesauro = CargarCategoria(catTes);
+ CategoryModel categoriaTesauro = CargarCategoria(catTes, pIdiomaTesauro);
if (!string.IsNullOrEmpty(pIdiomaTesauro))
{
categoriaTesauro.Lang = pIdiomaTesauro;
diff --git a/Gnoss.Web.Open/Controllers/Administracion/AdministrarDatosExtraController.cs b/Gnoss.Web.Open/Controllers/Administracion/AdministrarDatosExtraController.cs
new file mode 100644
index 0000000..80f0a55
--- /dev/null
+++ b/Gnoss.Web.Open/Controllers/Administracion/AdministrarDatosExtraController.cs
@@ -0,0 +1,558 @@
+using Es.Riam.AbstractsOpen;
+using Es.Riam.Gnoss.AD.EncapsuladoDatos;
+using Es.Riam.Gnoss.AD.EntityModel;
+using Es.Riam.Gnoss.AD.EntityModel.Models.ParametroGeneralDS;
+using Es.Riam.Gnoss.AD.EntityModel.Models.VistaVirtualDS;
+using Es.Riam.Gnoss.AD.EntityModelBASE;
+using Es.Riam.Gnoss.AD.ServiciosGenerales;
+using Es.Riam.Gnoss.AD.Virtuoso;
+using Es.Riam.Gnoss.CL;
+using Es.Riam.Gnoss.CL.ParametrosProyecto;
+using Es.Riam.Gnoss.Elementos.ParametroGeneralDSEspacio;
+using Es.Riam.Gnoss.Logica.ParametrosProyecto;
+using Es.Riam.Gnoss.Util.Configuracion;
+using Es.Riam.Gnoss.Util.General;
+using Es.Riam.Gnoss.Web.Controles.Administracion;
+using Es.Riam.Gnoss.Web.Controles.ParametroGeneralDSName;
+using Es.Riam.Gnoss.Web.MVC.Filters;
+using Es.Riam.Gnoss.Web.MVC.Models.AdministrarTraducciones;
+using Es.Riam.Gnoss.Web.MVC.Models.ViewModels;
+using Es.Riam.Interfaces.InterfacesOpen;
+using Es.Riam.InterfacesOpen;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Infrastructure;
+using Microsoft.AspNetCore.Mvc.ViewEngines;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Text;
+using Es.Riam.Gnoss.Web.MVC.Models.Administracion;
+using Es.Riam.Gnoss.Web.MVC.Controllers;
+using Es.Riam.Gnoss.Web.MVC.Controllers.Administracion;
+using Es.Riam.Gnoss.Logica.ServiciosGenerales;
+using Es.Riam.Gnoss.AD.EntityModel.Models.ProyectoDS;
+using System.IO.Pipelines;
+
+namespace Gnoss.Web.Open.Controllers.Administracion
+{
+ public class AdministrarDatosExtraController : ControllerBaseWeb
+ {
+ public AdministrarDatosExtraController(LoggingService loggingService, ConfigService configService, EntityContext entityContext, RedisCacheWrapper redisCacheWrapper, GnossCache gnossCache, VirtuosoAD virtuosoAD, IHttpContextAccessor httpContextAccessor, ICompositeViewEngine viewEngine, EntityContextBASE entityContextBASE, IHostingEnvironment env, IActionContextAccessor actionContextAccessor, IUtilServicioIntegracionContinua utilServicioIntegracionContinua, IServicesUtilVirtuosoAndReplication servicesUtilVirtuosoAndReplication, IOAuth oAuth)
+ : base(loggingService, configService, entityContext, redisCacheWrapper, gnossCache, virtuosoAD, httpContextAccessor, viewEngine, entityContextBASE, env, actionContextAccessor, utilServicioIntegracionContinua, servicesUtilVirtuosoAndReplication, oAuth)
+ {
+ }
+
+ private AdministrarDatosExtraViewModel mPaginaModel = null;
+
+ private DataWrapperProyecto mDatosExtraProyectoDataWrapperProyecto = null;
+
+ public IActionResult Index()
+ {
+ EliminarPersonalizacionVistas();
+ CargarPermisosAdministracionComunidadEnViewBag();
+
+ // Añadir clase para el body del Layout
+ ViewBag.BodyClassPestanya = "configuracion edicionTraducciones edicion no-max-width-container";
+ ViewBag.ActiveSection = AdministracionSeccionesDevTools.SeccionesDevTools.Configuracion;
+ ViewBag.ActiveSubSection = AdministracionSeccionesDevTools.SubSeccionesDevTools.Configuracion_DatosExtra;
+ // Establecer el título para el header de DevTools
+ ViewBag.HeaderParentTitle = UtilIdiomas.GetText("DEVTOOLS", "CONFIGURACION");
+ ViewBag.HeaderTitle = UtilIdiomas.GetText("DEVTOOLS", "ADMINISTRARDATOSEXTRA");
+
+ // Establecer en el ViewBag el idioma por defecto
+ ViewBag.IdiomaPorDefecto = IdiomaPorDefecto;
+ ViewBag.isInEcosistemaPlatform = EsAdministracionEcosistema ? "true" : "false";
+ ViewBag.UrlActionSaveExtraData = "";
+
+ return View(PaginaModel);
+ }
+
+ public IActionResult Guardar(string pNombre, string pTipo, string pOpciones, bool pObligatorio, int pOrden, string pPredicadoRDF)
+ {
+ string error = ComprobarErrores(pNombre, pTipo, pOpciones, EsAdministracionEcosistema);
+
+ bool iniciado = false;
+ try
+ {
+ iniciado = HayIntegracionContinua;
+ }
+ catch (Exception ex)
+ {
+ GuardarLogError(ex, "Se ha comprobado que tiene la integración continua configurada y no puede acceder al API de Integración Continua.");
+ return GnossResultERROR("Contacte con el administrador del Proyecto, no es posible atender la petición.");
+ }
+
+ if (string.IsNullOrEmpty(pPredicadoRDF))
+ {
+ pPredicadoRDF = "";
+ }
+
+ if (!string.IsNullOrEmpty(error))
+ {
+ return GnossResultERROR(error);
+ }
+
+ try
+ {
+ TipoDatoExtra tipo;
+ bool tipoCorrecto = Enum.TryParse(pTipo, out tipo);
+ ControladorDatosExtra controladorDE = new ControladorDatosExtra(ProyectoSeleccionado, mLoggingService, mEntityContext, mConfigService, mRedisCacheWrapper, mVirtuosoAD, mEntityContextBASE, mGnossCache, mHttpContextAccessor, mServicesUtilVirtuosoAndReplication);
+
+ //Tipo
+ if (string.IsNullOrEmpty(pTipo) || !tipoCorrecto)
+ {
+ return GnossResultERROR("El tipo del dato no es correcto");
+ }
+
+ Guid datoExtraID = Guid.NewGuid();
+
+ if (EsAdministracionEcosistema)
+ {
+ if (tipo.Equals(TipoDatoExtra.Opcion))
+ {
+ string[] opciones = pOpciones.Split(',');
+
+ controladorDE.GuardarNuevoDatoExtraEcosistema(datoExtraID, pNombre, pObligatorio, pOpciones, pOrden, pPredicadoRDF);
+ }
+ else
+ {
+ controladorDE.GuardarNuevoDatoExtraVirtuosoEcosistema(datoExtraID, pNombre, pObligatorio, pOrden, pPredicadoRDF);
+ }
+ }
+ else
+ {
+ if (tipo.Equals(TipoDatoExtra.Opcion))
+ {
+ string[] opciones = pOpciones.Split(',');
+
+ controladorDE.GuardarNuevoDatoExtraProyecto(ProyectoSeleccionado.Clave, ProyectoSeleccionado.FilaProyecto.OrganizacionID, datoExtraID, pNombre, pObligatorio, pOpciones, pOrden, pPredicadoRDF);
+ }
+ else
+ {
+ controladorDE.GuardarNuevoDatoExtraVirtuosoProyecto(ProyectoSeleccionado.Clave, ProyectoSeleccionado.FilaProyecto.OrganizacionID, datoExtraID, pNombre, pObligatorio, pOrden, pPredicadoRDF);
+ }
+ }
+
+ controladorDE.GuardarCambios();
+
+ if (iniciado)
+ {
+ DatoExtraModel datoExtraModel = new DatoExtraModel();
+
+ datoExtraModel.DatoExtraID = datoExtraID;
+ datoExtraModel.OrganizacionID = ProyectoSeleccionado.FilaProyecto.OrganizacionID;
+ datoExtraModel.Opciones = ObtenerOpciones(datoExtraID, EsAdministracionEcosistema, tipo);
+ datoExtraModel.Orden = pOrden;
+ datoExtraModel.Deleted = false;
+ datoExtraModel.Obligatorio = pObligatorio;
+ datoExtraModel.Tipo = tipo;
+ datoExtraModel.PredicadoRDF = pPredicadoRDF;
+ datoExtraModel.Nombre = pNombre;
+ datoExtraModel.ProyectoID = ProyectoSeleccionado.Clave;
+
+ HttpResponseMessage resultado = InformarCambioAdministracion("DatosExtra", JsonConvert.SerializeObject(datoExtraModel, Formatting.Indented));
+ if (!resultado.StatusCode.Equals(HttpStatusCode.OK))
+ {
+ throw new Exception("Contacte con el administrador del Proyecto, no es posible atender la petición.");
+ }
+ }
+ }
+ catch(Exception ex)
+ {
+ mLoggingService.GuardarLogError(ex.Message);
+ return GnossResultERROR("Ha habido un error al guardar los datos");
+ }
+
+ return GnossResultOK("El dato extra ha sido creado correctamente");
+ }
+
+ public IActionResult Editar(Guid pDatoExtraID, string pNombre, string pTipo, string pOpciones, bool pObligatorio, int pOrden, string pPredicadoRDF)
+ {
+ string error = ComprobarErrores(pNombre, pTipo, pOpciones, EsAdministracionEcosistema);
+
+ bool iniciado = false;
+ try
+ {
+ iniciado = HayIntegracionContinua;
+ }
+ catch (Exception ex)
+ {
+ GuardarLogError(ex, "Se ha comprobado que tiene la integración continua configurada y no puede acceder al API de Integración Continua.");
+ return GnossResultERROR("Contacte con el administrador del Proyecto, no es posible atender la petición.");
+ }
+
+ if (string.IsNullOrEmpty(pPredicadoRDF))
+ {
+ pPredicadoRDF = "";
+ }
+
+ if (!string.IsNullOrEmpty(error))
+ {
+ return GnossResultERROR(error);
+ }
+
+ try
+ {
+ TipoDatoExtra tipo;
+ bool tipoCorrecto = Enum.TryParse(pTipo, out tipo);
+ ControladorDatosExtra controladorDE = new ControladorDatosExtra(ProyectoSeleccionado, mLoggingService, mEntityContext, mConfigService, mRedisCacheWrapper, mVirtuosoAD, mEntityContextBASE, mGnossCache, mHttpContextAccessor, mServicesUtilVirtuosoAndReplication);
+
+ //Tipo
+ if (string.IsNullOrEmpty(pTipo) || !tipoCorrecto)
+ {
+ return GnossResultERROR("El tipo del dato no es correcto");
+ }
+ // se cambia el tipo
+ DatoExtraModel datoExtra = PaginaModel.ListaDatosExtraProyecto.Where(x => x.DatoExtraID.Equals(pDatoExtraID)).FirstOrDefault();
+
+ if (datoExtra != null)
+ {
+ if (!datoExtra.Tipo.Equals(tipo))
+ {
+ Eliminar(pDatoExtraID);
+ Guardar(pNombre, pTipo, pOpciones, pObligatorio, pOrden, pPredicadoRDF);
+
+ return GnossResultOK("El dato extra ha sido modificado correctamente");
+ }
+ }
+ else
+ {
+ DatoExtraVirtuosoModel datoExtraVirtuoso = PaginaModel.ListaDatosExtraVirtuoso.Where(x => x.DatoExtraID.Equals(pDatoExtraID)).FirstOrDefault();
+ if (datoExtraVirtuoso != null)
+ {
+ if (!datoExtraVirtuoso.Tipo.Equals(tipo))
+ {
+ Eliminar(pDatoExtraID);
+ Guardar(pNombre, pTipo, pOpciones, pObligatorio, pOrden, pPredicadoRDF);
+
+ return GnossResultOK("El dato extra ha sido modificado correctamente");
+ }
+ }
+ }
+
+ if (EsAdministracionEcosistema)
+ {
+ if (tipo.Equals(TipoDatoExtra.Opcion))
+ {
+ string[] opciones = pOpciones.Split(',');
+
+ controladorDE.ModificarDatoExtraEcosistema(pDatoExtraID, pNombre, pObligatorio, pOpciones, pOrden, pPredicadoRDF);
+ }
+ else
+ {
+ controladorDE.ModificarDatoExtraVirtuosoEcosistema(pDatoExtraID, pNombre, pObligatorio, pOrden, pPredicadoRDF);
+ }
+ }
+ else
+ {
+ if (tipo.Equals(TipoDatoExtra.Opcion))
+ {
+ string[] opciones = pOpciones.Split(',');
+
+ controladorDE.ModificarDatoExtraProyecto(ProyectoSeleccionado.Clave, ProyectoSeleccionado.FilaProyecto.OrganizacionID, pDatoExtraID, pNombre, pObligatorio, pOpciones, pOrden, pPredicadoRDF);
+ }
+ else
+ {
+ controladorDE.ModificarDatoExtraVirtuosoProyecto(ProyectoSeleccionado.Clave, ProyectoSeleccionado.FilaProyecto.OrganizacionID, pDatoExtraID, pNombre, pObligatorio, pOrden, pPredicadoRDF);
+ }
+ }
+
+ controladorDE.GuardarCambios();
+
+ if (iniciado)
+ {
+ DatoExtraModel datoExtraModel = new DatoExtraModel();
+
+ datoExtraModel.DatoExtraID = pDatoExtraID;
+ datoExtraModel.OrganizacionID = ProyectoSeleccionado.FilaProyecto.OrganizacionID;
+ datoExtraModel.Opciones = ObtenerOpciones(pDatoExtraID, EsAdministracionEcosistema, tipo);
+ datoExtraModel.Orden = pOrden;
+ datoExtraModel.PredicadoRDF = pPredicadoRDF;
+ datoExtraModel.Deleted = false;
+ datoExtraModel.Obligatorio = pObligatorio;
+ datoExtraModel.Tipo = tipo;
+ datoExtraModel.ProyectoID = ProyectoSeleccionado.Clave;
+ datoExtraModel.Nombre = pNombre;
+
+ HttpResponseMessage resultado = InformarCambioAdministracion("DatosExtra", JsonConvert.SerializeObject(datoExtraModel, Formatting.Indented));
+ if (!resultado.StatusCode.Equals(HttpStatusCode.OK))
+ {
+ throw new Exception("Contacte con el administrador del Proyecto, no es posible atender la petición.");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ mLoggingService.GuardarLogError(ex.Message);
+ return GnossResultERROR("Ha habido un error al guardar los datos");
+ }
+
+ return GnossResultOK("El dato extra ha sido modificado correctamente");
+ }
+
+ public IActionResult Eliminar(Guid pDatoExtraID)
+ {
+ bool iniciado = false;
+ try
+ {
+ iniciado = HayIntegracionContinua;
+ }
+ catch (Exception ex)
+ {
+ GuardarLogError(ex, "Se ha comprobado que tiene la integración continua configurada y no puede acceder al API de Integración Continua.");
+ return GnossResultERROR("Contacte con el administrador del Proyecto, no es posible atender la petición.");
+ }
+
+ if (pDatoExtraID.Equals(Guid.Empty))
+ {
+ return GnossResultERROR("Error al eliminar el dato extra, el ID no es correcto");
+ }
+ try
+ {
+ ControladorDatosExtra controladorDE = new ControladorDatosExtra(ProyectoSeleccionado, mLoggingService, mEntityContext, mConfigService, mRedisCacheWrapper, mVirtuosoAD, mEntityContextBASE, mGnossCache, mHttpContextAccessor, mServicesUtilVirtuosoAndReplication);
+
+ controladorDE.EliminarDatoExtra(pDatoExtraID, EsAdministracionEcosistema);
+ controladorDE.GuardarCambios();
+
+ if (iniciado)
+ {
+ DatoExtraModel datoExtraModel = new DatoExtraModel();
+
+ datoExtraModel.DatoExtraID = pDatoExtraID;
+ datoExtraModel.OrganizacionID = ProyectoSeleccionado.FilaProyecto.OrganizacionID;
+ datoExtraModel.PredicadoRDF = string.Empty;
+ datoExtraModel.Opciones = null;
+ datoExtraModel.Orden = 0;
+ datoExtraModel.Deleted = true;
+ datoExtraModel.Obligatorio = false;
+ datoExtraModel.Tipo = TipoDatoExtra.TextoLibre;
+
+ HttpResponseMessage resultado = InformarCambioAdministracion("DatosExtra", JsonConvert.SerializeObject(datoExtraModel, Formatting.Indented));
+ if (!resultado.StatusCode.Equals(HttpStatusCode.OK))
+ {
+ throw new Exception("Contacte con el administrador del Proyecto, no es posible atender la petición.");
+ }
+ }
+ }
+ catch(Exception ex)
+ {
+ mLoggingService.GuardarLogError(ex.Message);
+ return GnossResultERROR("Error al eliminar el dato extra");
+ }
+
+ return GnossResultOK();
+ }
+
+ [TypeFilter(typeof(PermisosPaginasUsuariosAttribute), Arguments = new object[] { TipoPaginaAdministracion.Texto, "AdministracionVistasPermitido" })]
+ public IActionResult CargarModalEdicion(Guid pDatoID)
+ {
+ DatoExtraEditModel model = new DatoExtraEditModel();
+ DatoExtraModel datoExtraOpcion = PaginaModel.ListaDatosExtraProyecto.Where(item => item.DatoExtraID.Equals(pDatoID)).FirstOrDefault();
+ DatoExtraVirtuosoModel datoExtraLibre = null;
+
+ if (datoExtraOpcion == null)
+ {
+ datoExtraLibre = PaginaModel.ListaDatosExtraVirtuoso.Where(item => item.DatoExtraID.Equals(pDatoID)).FirstOrDefault();
+
+ if (datoExtraLibre == null)
+ {
+ return GnossResultERROR();
+ }
+
+ model.Nombre = datoExtraLibre.Nombre;
+ model.Obligatorio = datoExtraLibre.Obligatorio;
+ model.DatoExtraID = pDatoID;
+ model.Opciones = new List();
+ model.Tipo = datoExtraLibre.Tipo;
+ model.Orden = datoExtraLibre.Orden;
+ model.PredicadoRDF = datoExtraLibre.PredicadoRDF;
+ }
+ else
+ {
+ model.Nombre = datoExtraOpcion.Nombre;
+ model.Obligatorio = datoExtraOpcion.Obligatorio;
+ model.DatoExtraID = pDatoID;
+ model.Opciones = datoExtraOpcion.Opciones;
+ model.Tipo = datoExtraOpcion.Tipo;
+ model.Orden = datoExtraOpcion.Orden;
+ model.PredicadoRDF = datoExtraOpcion.PredicadoRDF;
+ }
+
+ return GnossResultHtml("../AdministrarDatosExtra/_modal-views/_edit-extra-data", model);
+ }
+
+ private List ObtenerOpciones(Guid pDatoExtraID, bool pEcosistema, TipoDatoExtra pTipo)
+ {
+ List listaOpciones = new List();
+
+ if (pTipo.Equals(TipoDatoExtra.Opcion))
+ {
+ ControladorDatosExtra controladorDE = new ControladorDatosExtra(ProyectoSeleccionado, mLoggingService, mEntityContext, mConfigService, mRedisCacheWrapper, mVirtuosoAD, mEntityContextBASE, mGnossCache, mHttpContextAccessor, mServicesUtilVirtuosoAndReplication);
+
+ listaOpciones = controladorDE.ObtenerOpciones(pDatoExtraID, pEcosistema);
+ }
+
+ return listaOpciones;
+ }
+ private string ComprobarErrores(string pNombre, string pTipo, string pOpciones, bool pEcosistema)
+ {
+ TipoDatoExtra tipo;
+ bool tipoCorrecto = Enum.TryParse(pTipo, out tipo);
+
+ //Tipo
+ if (string.IsNullOrEmpty(pTipo) || !tipoCorrecto)
+ {
+ return "El dato extra debe tener un tipo";
+ }
+
+ //Opciones
+ if (tipo.Equals(TipoDatoExtra.Opcion) && string.IsNullOrEmpty(pOpciones))
+ {
+ return "El dato extra de tipo OPCION debe tener al menos una opción";
+ }
+
+ //Nombre
+ if (string.IsNullOrEmpty(pNombre))
+ {
+ return "El dato extra debe tener un nombre";
+ }
+
+ return string.Empty;
+ }
+
+ public AdministrarDatosExtraViewModel PaginaModel
+ {
+ get
+ {
+ if (mPaginaModel == null)
+ {
+ mPaginaModel = new AdministrarDatosExtraViewModel();
+ mPaginaModel.ListaDatosExtraVirtuoso = new List();
+ mPaginaModel.ListaDatosExtraProyecto = new List();
+
+ if (EsAdministracionEcosistema)
+ {
+ // DatoExtraEcosistema -> opciones
+ foreach (DatoExtraEcosistema datoExtraEcosistema in DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraEcosistema)
+ {
+ DatoExtraModel datoExtraModel = new DatoExtraModel();
+
+ datoExtraModel.DatoExtraID = datoExtraEcosistema.DatoExtraID;
+ datoExtraModel.Obligatorio = datoExtraEcosistema.Obligatorio;
+ datoExtraModel.Nombre = datoExtraEcosistema.Titulo;
+ datoExtraModel.PredicadoRDF = datoExtraEcosistema.PredicadoRDF;
+ datoExtraModel.Orden = datoExtraEcosistema.Orden;
+ datoExtraModel.Tipo = TipoDatoExtra.Opcion;
+ datoExtraModel.Opciones = new List();
+
+ foreach (DatoExtraEcosistemaOpcion opcion in DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraEcosistemaOpcion.Where(x => x.DatoExtraID.Equals(datoExtraModel.DatoExtraID)).ToList())
+ {
+ DatoExtraOpcionModel opcionModel = new DatoExtraOpcionModel();
+
+ opcionModel.DatoExtraID = opcion.DatoExtraID;
+ opcionModel.OpcionID = opcion.OpcionID;
+ opcionModel.Orden = opcion.Orden;
+ opcionModel.Nombre = opcion.Opcion;
+
+ datoExtraModel.Opciones.Add(opcionModel);
+ }
+
+ mPaginaModel.ListaDatosExtraProyecto.Add(datoExtraModel);
+ }
+
+ // DatoExtraEcosistemaVirtuoso -> texto libre
+ foreach (DatoExtraEcosistemaVirtuoso datoExtraEcosistemaVirtuoso in DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraEcosistemaVirtuoso)
+ {
+ DatoExtraVirtuosoModel datoExtraModel = new DatoExtraVirtuosoModel();
+
+ datoExtraModel.DatoExtraID = datoExtraEcosistemaVirtuoso.DatoExtraID;
+ datoExtraModel.Obligatorio = datoExtraEcosistemaVirtuoso.Obligatorio;
+ datoExtraModel.Nombre = datoExtraEcosistemaVirtuoso.Titulo;
+ datoExtraModel.PredicadoRDF = datoExtraEcosistemaVirtuoso.PredicadoRDF;
+ datoExtraModel.Orden = datoExtraEcosistemaVirtuoso.Orden;
+ datoExtraModel.NombreInput = datoExtraEcosistemaVirtuoso.InputID;
+ datoExtraModel.QueryVirtuoso = datoExtraEcosistemaVirtuoso.QueryVirtuoso;
+ datoExtraModel.Tipo = TipoDatoExtra.TextoLibre;
+
+ mPaginaModel.ListaDatosExtraVirtuoso.Add(datoExtraModel);
+ }
+ }
+ else
+ {
+ // DatoExtraProyecto -> opciones
+ foreach (DatoExtraProyecto datoExtraProyecto in DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraProyecto)
+ {
+ DatoExtraModel datoExtraModel = new DatoExtraModel();
+
+ datoExtraModel.DatoExtraID = datoExtraProyecto.DatoExtraID;
+ datoExtraModel.Obligatorio = datoExtraProyecto.Obligatorio;
+ datoExtraModel.Nombre = datoExtraProyecto.Titulo;
+ datoExtraModel.PredicadoRDF = datoExtraProyecto.PredicadoRDF;
+ datoExtraModel.Orden = datoExtraProyecto.Orden;
+ datoExtraModel.OrganizacionID = datoExtraProyecto.OrganizacionID;
+ datoExtraModel.ProyectoID = datoExtraProyecto.ProyectoID;
+ datoExtraModel.Tipo = TipoDatoExtra.Opcion;
+ datoExtraModel.Opciones = new List();
+
+ foreach (DatoExtraProyectoOpcion opcion in DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraProyectoOpcion.Where(x => x.DatoExtraID.Equals(datoExtraModel.DatoExtraID)).ToList())
+ {
+ DatoExtraOpcionModel opcionModel = new DatoExtraOpcionModel();
+
+ opcionModel.DatoExtraID = opcion.DatoExtraID;
+ opcionModel.OpcionID = opcion.OpcionID;
+ opcionModel.Orden = opcion.Orden;
+ opcionModel.Nombre = opcion.Opcion;
+ opcionModel.ProyectoID = opcion.ProyectoID;
+ opcionModel.OrganizacionID = opcion.OrganizacionID;
+
+ datoExtraModel.Opciones.Add(opcionModel);
+ }
+
+ mPaginaModel.ListaDatosExtraProyecto.Add(datoExtraModel);
+ }
+
+ // DatoExtraProyectoVirtuoso
+ foreach (DatoExtraProyectoVirtuoso datoExtraProyectoVirtuoso in DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraProyectoVirtuoso)
+ {
+ DatoExtraVirtuosoModel datoExtraModel = new DatoExtraVirtuosoModel();
+
+ datoExtraModel.DatoExtraID = datoExtraProyectoVirtuoso.DatoExtraID;
+ datoExtraModel.Obligatorio = datoExtraProyectoVirtuoso.Obligatorio;
+ datoExtraModel.Nombre = datoExtraProyectoVirtuoso.Titulo;
+ datoExtraModel.PredicadoRDF = datoExtraProyectoVirtuoso.PredicadoRDF;
+ datoExtraModel.Orden = datoExtraProyectoVirtuoso.Orden;
+ datoExtraModel.NombreInput = datoExtraProyectoVirtuoso.InputID;
+ datoExtraModel.QueryVirtuoso = datoExtraProyectoVirtuoso.QueryVirtuoso;
+ datoExtraModel.Tipo = TipoDatoExtra.TextoLibre;
+
+ mPaginaModel.ListaDatosExtraVirtuoso.Add(datoExtraModel);
+ }
+ }
+ }
+
+ return mPaginaModel;
+ }
+ }
+
+ public DataWrapperProyecto DatosExtraProyectoDataWrapperProyecto
+ {
+ get
+ {
+ if (mDatosExtraProyectoDataWrapperProyecto == null)
+ {
+ ProyectoCN proyectoCN = new ProyectoCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
+ mDatosExtraProyectoDataWrapperProyecto = proyectoCN.ObtenerDatosExtraProyectoPorID(ProyectoSeleccionado.Clave);
+ proyectoCN.Dispose();
+ }
+
+ return mDatosExtraProyectoDataWrapperProyecto;
+ }
+ }
+ }
+}
diff --git a/Gnoss.Web.Open/Controllers/Administracion/AdministrarDisenioController.cs b/Gnoss.Web.Open/Controllers/Administracion/AdministrarDisenioController.cs
index 641cb2a..1fa9df9 100644
--- a/Gnoss.Web.Open/Controllers/Administracion/AdministrarDisenioController.cs
+++ b/Gnoss.Web.Open/Controllers/Administracion/AdministrarDisenioController.cs
@@ -9,6 +9,7 @@
using Es.Riam.Gnoss.UtilServiciosWeb;
using Es.Riam.Gnoss.Web.Controles.Proyectos;
using Es.Riam.Gnoss.Web.MVC.Filters;
+using Es.Riam.Gnoss.Web.MVC.Models.Administracion;
using Es.Riam.Gnoss.Web.MVC.Models.ViewModels;
using Es.Riam.Interfaces.InterfacesOpen;
using Es.Riam.InterfacesOpen;
@@ -39,6 +40,17 @@ public AdministrarDisenioController(LoggingService loggingService, ConfigService
[TypeFilter(typeof(UsuarioLogueadoAttribute), Arguments = new object[] { RolesUsuario.AdministradorComunidad })]
public ActionResult Index()
{
+ // Añadir clase para el body del Layout
+ ViewBag.BodyClassPestanya = "configuracion administrar-disenio edicion no-max-width-container ";
+ ViewBag.ActiveSection = AdministracionSeccionesDevTools.SeccionesDevTools.Configuracion;
+ ViewBag.ActiveSubSection = AdministracionSeccionesDevTools.SubSeccionesDevTools.Configuracion_Cookies;
+ // Establecer el título para el header de DevTools
+ ViewBag.HeaderParentTitle = UtilIdiomas.GetText("DEVTOOLS", "CONFIGURACION");
+ ViewBag.HeaderTitle = UtilIdiomas.GetText("ADMINISTRACIONDESARROLLADORES", "COOKIES");
+
+ // Establecer en el ViewBag el idioma por defecto
+ ViewBag.IdiomaPorDefecto = IdiomaPorDefecto;
+
EliminarPersonalizacionVistas();
CargarPermisosAdministracionComunidadEnViewBag();
diff --git a/Gnoss.Web.Open/Controllers/Administracion/AdministrarVistasController.cs b/Gnoss.Web.Open/Controllers/Administracion/AdministrarVistasController.cs
index 4ee23f0..49b5db1 100644
--- a/Gnoss.Web.Open/Controllers/Administracion/AdministrarVistasController.cs
+++ b/Gnoss.Web.Open/Controllers/Administracion/AdministrarVistasController.cs
@@ -1206,11 +1206,11 @@ private void CargarVistaVirtual(DataWrapperVistaVirtual pVistaVirtualDW)
//Insertamos las vistas que no corresponden con componentes del CMS
foreach (string nombreVista in listaVistas)
{
- bool esVistaEdicionRecurso = nombreVista.StartsWith($"/{VIEWS_DIRECTORY}/EditarRecurso/_");
+ //bool esVistaEdicionRecurso = nombreVista.StartsWith($"/{VIEWS_DIRECTORY}/EditarRecurso/_");
bool esVistaAdministracion = nombreVista.StartsWith($"/{VIEWS_DIRECTORY}/Administracion");
bool esVistaCMS = nombreVista.StartsWith($"/{VIEWS_DIRECTORY}/CMSPagina") && nombreVista.LongCount(letra => letra.ToString() == "/") > 3;
- if (!esVistaEdicionRecurso && !esVistaAdministracion && !esVistaCMS && !nombreVista.StartsWith($"/Views/CargadorFacetas") && !nombreVista.StartsWith($"/Views/CargadorResultados") && !nombreVista.StartsWith($"/Views/Shared/_ResultadoMensaje.cshtml") && !nombreVista.StartsWith($"/Views/CargadorContextoMensajes/CargarContextoMensajes.cshtml"))
+ if (/*!esVistaEdicionRecurso && */ !esVistaAdministracion && !esVistaCMS && !nombreVista.StartsWith($"/Views/CargadorFacetas") && !nombreVista.StartsWith($"/Views/CargadorResultados") && !nombreVista.StartsWith($"/Views/Shared/_ResultadoMensaje.cshtml") && !nombreVista.StartsWith($"/Views/CargadorContextoMensajes/CargarContextoMensajes.cshtml"))
{
if (pVistaVirtualDW.ListaVistaVirtual.Any(item => item.TipoPagina.Equals(nombreVista)))
{
diff --git a/Gnoss.Web.Open/Controllers/Administracion/CMSAdminDisenioController.cs b/Gnoss.Web.Open/Controllers/Administracion/CMSAdminDisenioController.cs
index 6b0e58b..7a9796f 100644
--- a/Gnoss.Web.Open/Controllers/Administracion/CMSAdminDisenioController.cs
+++ b/Gnoss.Web.Open/Controllers/Administracion/CMSAdminDisenioController.cs
@@ -8,6 +8,7 @@
using Es.Riam.Gnoss.UtilServiciosWeb;
using Es.Riam.Gnoss.Web.Controles.Proyectos;
using Es.Riam.Gnoss.Web.MVC.Filters;
+using Es.Riam.Gnoss.Web.MVC.Models.Administracion;
using Es.Riam.Gnoss.Web.MVC.Models.ViewModels;
using Es.Riam.Interfaces.InterfacesOpen;
using Es.Riam.InterfacesOpen;
@@ -45,6 +46,14 @@ public CMSAdminDisenioController(LoggingService loggingService, ConfigService co
[TypeFilter(typeof(UsuarioLogueadoAttribute), Arguments = new object[] { RolesUsuario.AdministradorComunidad })]
public ActionResult Index()
{
+ // Añadir clase para el body del Layout
+ ViewBag.BodyClassPestanya = "configuracion administrar-disenio edicion no-max-width-container ";
+ ViewBag.ActiveSection = AdministracionSeccionesDevTools.SeccionesDevTools.Configuracion;
+ ViewBag.ActiveSubSection = AdministracionSeccionesDevTools.SubSeccionesDevTools.Configuracion_Cookies;
+ // Establecer el título para el header de DevTools
+ ViewBag.HeaderParentTitle = UtilIdiomas.GetText("DEVTOOLS", "CONFIGURACION");
+ ViewBag.HeaderTitle = UtilIdiomas.GetText("ADMINISTRACIONDESARROLLADORES", "COOKIES");
+
EliminarPersonalizacionVistas();
CargarPermisosAdministracionComunidadEnViewBag();
diff --git a/Gnoss.Web.Open/Controllers/AdministrarNewsletterController.cs b/Gnoss.Web.Open/Controllers/AdministrarNewsletterController.cs
index ca40a86..803da66 100644
--- a/Gnoss.Web.Open/Controllers/AdministrarNewsletterController.cs
+++ b/Gnoss.Web.Open/Controllers/AdministrarNewsletterController.cs
@@ -69,7 +69,7 @@ public ActionResult GuardarCambios(bool RecibirNewsletter)
identidadCN.Dispose();
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.PersonaID.Value, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
IdentidadActual = null;
diff --git a/Gnoss.Web.Open/Controllers/AdministrarSolicitudesUsuariosController.cs b/Gnoss.Web.Open/Controllers/AdministrarSolicitudesUsuariosController.cs
index 83babf1..b3b3e86 100644
--- a/Gnoss.Web.Open/Controllers/AdministrarSolicitudesUsuariosController.cs
+++ b/Gnoss.Web.Open/Controllers/AdministrarSolicitudesUsuariosController.cs
@@ -101,7 +101,9 @@ public IActionResult aceptar_solicitud(Guid solicitud_id)
{
solicitud.FechaProcesado = DateTime.Now;
solicitud.Estado = (short)EstadoSolicitud.Aceptada;
- DataWrapperIdentidad dataWrapperIdentidad = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication).ObtenerPerfilesDePersona(solicitudUsuario.PersonaID, false);
+ IdentidadCN identCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
+ Guid identidadIDProyecto = identCN.ObtenerIdentidadIDDePersonaEnProyecto(ProyectoSeleccionado.Clave, solicitudUsuario.PersonaID)[0];
+ DataWrapperIdentidad dataWrapperIdentidad = identCN.ObtenerPerfilesDePersona(solicitudUsuario.PersonaID, false, identidadIDProyecto);
GestionIdentidades gestorIdentidades = new GestionIdentidades(dataWrapperIdentidad, mLoggingService, mEntityContext, mConfigService, mServicesUtilVirtuosoAndReplication);
GestionUsuarios gestorUsuarios = new GestionUsuarios(dataWrapperUsuario, mLoggingService, mEntityContext, mConfigService);
PersonaCN personaCN = new PersonaCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
diff --git a/Gnoss.Web.Open/Controllers/BusquedaController.cs b/Gnoss.Web.Open/Controllers/BusquedaController.cs
index 658c9bd..2663595 100644
--- a/Gnoss.Web.Open/Controllers/BusquedaController.cs
+++ b/Gnoss.Web.Open/Controllers/BusquedaController.cs
@@ -531,8 +531,6 @@ public ActionResult Index()
Guid tokenAfinidad = Guid.NewGuid();
- string conexionAfinidadVirtuoso = mServicesUtilVirtuosoAndReplication.ConexionAfinidad;
-
paginaModel.TipoPagina = TipoPagina.ToString();
if (RequestParams("contribuciones") != null && RequestParams("contribuciones").Equals("true") && IdentidadPaginaContribuciones != null)
{
diff --git a/Gnoss.Web.Open/Controllers/ComAdminElemSemanticosController.cs b/Gnoss.Web.Open/Controllers/ComAdminElemSemanticosController.cs
index 27634d7..e1d02e4 100644
--- a/Gnoss.Web.Open/Controllers/ComAdminElemSemanticosController.cs
+++ b/Gnoss.Web.Open/Controllers/ComAdminElemSemanticosController.cs
@@ -386,6 +386,7 @@ public ActionResult EditarTesauro(EditSemanticThesaurusModel pModel)
{
// return PartialView("_AccionesTesSem", mModelAdmin);
// Carga de la Vista para su edición vía modal
+ mModelAdmin.IdiomaPorDefecto = IdiomaPorDefecto;
return PartialView("_modal-views/_tesauro-details", mModelAdmin);
}
else if (mEditTesModel.EditAction == EditSemanticThesaurusModel.Action.CreateCategory)
diff --git a/Gnoss.Web.Open/Controllers/ControllerBase/ControllerBaseWeb.cs b/Gnoss.Web.Open/Controllers/ControllerBase/ControllerBaseWeb.cs
index e083e23..c4315ad 100644
--- a/Gnoss.Web.Open/Controllers/ControllerBase/ControllerBaseWeb.cs
+++ b/Gnoss.Web.Open/Controllers/ControllerBase/ControllerBaseWeb.cs
@@ -94,6 +94,7 @@
using Es.Riam.InterfacesOpen;
using Es.Riam.Gnoss.Logica.ParametrosProyecto;
using Es.Riam.Gnoss.Web.Controles.ServicioImagenesWrapper;
+using Universal.Common.Extensions;
namespace Es.Riam.Gnoss.Web.MVC.Controllers
{
@@ -1131,35 +1132,62 @@ private void ComprobarRedireccionHomeProyecto(ActionExecutingContext pFilterCont
//El usuario no tiene acceso a este proyecto, le llevo a la home de la comunidad
string redirect = ObtenerUrlRedirect(ref url);
- //if (!MaximoRedireccionesExcedidas())
+ if (url.Equals("/") && !string.IsNullOrEmpty(RouteConfig.NombreProyectoSinNombreCorto))
{
- string urlComunidadLogin = BaseURLIdioma + "/" + UtilIdiomas.GetText("URLSEM", "LOGIN");
- if (ProyectoSeleccionado.Clave != ProyectoAD.MetaProyecto)
+ Dictionary listaIdiomas = mConfigService.ObtenerListaIdiomasDictionary();
+
+ string idioma = UtilIdiomas.LanguageCode;
+ bool emptyPath = string.IsNullOrEmpty(Request.Path) || Request.Path.Equals("/");
+
+ if (!EsBot && !Request.Headers.ContainsKey("Referer") && Request.Headers.ContainsKey("accept-language") && emptyPath)
{
- urlComunidadLogin = mControladorBase.UrlsSemanticas.ObtenerURLComunidad(UtilIdiomas, BaseURLIdioma, ProyectoSeleccionado.NombreCorto);
+ var languages = Request.Headers["accept-language"].ToString().Split(',')
+ .Select(System.Net.Http.Headers.StringWithQualityHeaderValue.Parse)
+ .OrderByDescending(s => s.Quality.GetValueOrDefault(1));
- if (mControladorBase.UsuarioActual.EsUsuarioInvitado || !ProyectoSeleccionado.EsPublico || !ParametrosGeneralesRow.HomeVisible)
+ foreach (var userLanguaje in languages)
{
- urlComunidadLogin += "/" + UtilIdiomas.GetText("URLSEM", "LOGIN");
- }
- else
- {
- redirect = "";
+ string idiomaNavegador = userLanguaje.Value.Split('-')[0];
+ if (listaIdiomas.ContainsKey(idiomaNavegador))
+ {
+ idioma = idiomaNavegador;
+ if (UtilIdiomas.LanguageCode != idioma)
+ {
+ UtilIdiomas = new UtilIdiomas(idioma, mLoggingService, mEntityContext, mConfigService);
+ }
+ break;
+ }
}
}
- //Si el redirect ya contiene esta cadena, significa que ya se le ha redireccionado a login (ya estamos en esa página, no hay que volver a redireccionar)
- if (!redirect.Contains(urlComunidadLogin) && (!redirect.Contains("/login/redirect")) && (!redirect.EndsWith("/login")))
+ }
+
+ string urlComunidadLogin = BaseURLIdioma + "/" + UtilIdiomas.GetText("URLSEM", "LOGIN");
+ if (ProyectoSeleccionado.Clave != ProyectoAD.MetaProyecto)
+ {
+ urlComunidadLogin = mControladorBase.UrlsSemanticas.ObtenerURLComunidad(UtilIdiomas, BaseURLIdioma, ProyectoSeleccionado.NombreCorto);
+
+ if (mControladorBase.UsuarioActual.EsUsuarioInvitado || !ProyectoSeleccionado.EsPublico || !ParametrosGeneralesRow.HomeVisible)
{
- if (this.GetType().Name.Equals("LogoutController") && this.GetType().Name.Equals("LoadingController"))
- {
- redirect = "";
- }
+ urlComunidadLogin += "/" + UtilIdiomas.GetText("URLSEM", "LOGIN");
+ }
+ else
+ {
+ redirect = "";
+ }
+ }
- //Realiza la redirección
- pFilterContext.Result = Redirect(urlComunidadLogin + redirect);
- return;
+ //Si el redirect ya contiene esta cadena, significa que ya se le ha redireccionado a login (ya estamos en esa página, no hay que volver a redireccionar)
+ if (!redirect.Contains(urlComunidadLogin) && (!redirect.Contains("/login/redirect")) && (!redirect.EndsWith("/login")))
+ {
+ if (this.GetType().Name.Equals("LogoutController") && this.GetType().Name.Equals("LoadingController"))
+ {
+ redirect = "";
}
+
+ //Realiza la redirección
+ pFilterContext.Result = Redirect(urlComunidadLogin + redirect);
+ return;
}
}
}
@@ -1501,7 +1529,7 @@ private UserProfileModel CargarDatosPerfil()
perfil.IsAdministrator = esAdministradorOrg;
ProyectoCN proyCN = new ProyectoCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
- AD.EncapsuladoDatos.DataWrapperProyecto dataSetComunidades = proyCN.ObtenerProyectosParticipaPerfil(IdentidadActual.PerfilID);
+ AD.EncapsuladoDatos.DataWrapperProyecto dataSetComunidades = proyCN.ObtenerProyectosParticipaPerfilLimite10(IdentidadActual.PerfilID);
List ListaProyectosSinRegistro = proyCN.ObtenerListaIDsProyectosSinRegistroObligatorio();
proyCN.Dispose();
@@ -3832,7 +3860,7 @@ public bool ComprobarPermisoEnOntologiaDeProyectoEIdentidad(Guid pDocumentoID)
if (!devolver && ParametroProyecto.ContainsKey(ParametroAD.ProyectoIDPatronOntologias))
{
proyectoOntologiasID = new Guid(ParametroProyecto[ParametroAD.ProyectoIDPatronOntologias]);
- devolver = mControladorBase.ComprobarPermisoEnOntologiaDeProyectoEIdentidad(proyectoOntologiasID, pDocumentoID, false);
+ devolver = mControladorBase.ComprobarPermisoEnOntologiaDeProyectoEIdentidad(proyectoOntologiasID, pDocumentoID, true, true);
}
return devolver;
}
@@ -4113,10 +4141,17 @@ public string UrlMultiIdiomaPaginaActual
{
if (ruta.Values.Contains(parteUrl))
{
- string claveDiccionario = "{" + ruta.Where(x => x.Value.Equals(parteUrl)).Select(x => x.Key).First() + "}";
+ string claveDiccionario = "{" + ruta.Where(x => x.Value != null && x.Value.Equals(parteUrl)).Select(x => x.Key).First() + "}";
if (!claveDiccionario.Equals("{lang}"))
{
- url = url.Replace("/" + parteUrl + "/", "/" + claveDiccionario + "/");
+ if (url.Contains("/" + parteUrl + "/"))
+ {
+ url = url.Replace("/" + parteUrl + "/", "/" + claveDiccionario + "/");
+ }
+ if (url.EndsWith("/" + parteUrl))
+ {
+ url = url.Replace("/" + parteUrl, "/" + claveDiccionario);
+ }
}
}
}
@@ -4125,6 +4160,10 @@ public string UrlMultiIdiomaPaginaActual
{
url = url.Remove(0, 1);
}
+ if (url.EndsWith("/"))
+ {
+ url = url.TrimEnd('/');
+ }
if (RouteConfig.ListaRutasURLName.ContainsKey(url))
{
@@ -4901,6 +4940,8 @@ private void IncluirAvisoCookies(ActionExecutingContext pFilterContext)
if (cookieAviso == null || !cookieAviso.ContainsKey("aceptada") || cookieAviso["aceptada"] == "false")
{
ViewBag.CookiesWarning = "Cookies no aceptadas";
+
+ AnadirTextoPoliticaCookiesViewBag();
}
if (actualizarCookie && pFilterContext.Result != null)
@@ -4910,6 +4951,28 @@ private void IncluirAvisoCookies(ActionExecutingContext pFilterContext)
}
}
+ private void AnadirTextoPoliticaCookiesViewBag()
+ {
+ UsuarioCN usuarioCN = new UsuarioCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
+ DataWrapperUsuario usuarioDW = usuarioCN.ObtenerPoliticaCookiesProyecto(ProyectoSeleccionado.Clave);
+ usuarioCN.Dispose();
+ List filasCabecera = usuarioDW.ListaClausulaRegistro.Where(c => c.ProyectoID.Equals(ProyectoSeleccionado.Clave) && c.Tipo.Equals((short)ManageRegisterClausesViewModel.ClauseType.PoliticaCookiesCabecera)).ToList();
+
+ if (filasCabecera.Count > 0)
+ {
+ ViewBag.TextoPoliticaCookies = UtilCadenas.ObtenerTextoDeIdioma(filasCabecera[0].Texto, UtilIdiomas.LanguageCode, null);
+ }
+ else
+ {
+ //si el proyecto no la tiene personalizada, buscamos la cláusula de cabecera asociada a la cláusula de PoliticaCookiesUrlPagina en el ecosistema
+ List filasCabeceraEcosistema = usuarioDW.ListaClausulaRegistro.Where(c => c.ProyectoID.Equals(ProyectoAD.MetaProyecto) && c.Tipo.Equals((short)ManageRegisterClausesViewModel.ClauseType.PoliticaCookiesCabecera)).ToList();
+ if (filasCabeceraEcosistema.Count > 0)
+ {
+ ViewBag.TextoPoliticaCookies = UtilCadenas.ObtenerTextoDeIdioma(filasCabeceraEcosistema[0].Texto, UtilIdiomas.LanguageCode, null);
+ }
+ }
+ }
+
protected void GuardarXmlCambiosAdministracion()
{
try
diff --git a/Gnoss.Web.Open/Controllers/ControllerBase/ControllerCabeceraBase.cs b/Gnoss.Web.Open/Controllers/ControllerBase/ControllerCabeceraBase.cs
index 2300212..49554f5 100644
--- a/Gnoss.Web.Open/Controllers/ControllerBase/ControllerCabeceraBase.cs
+++ b/Gnoss.Web.Open/Controllers/ControllerBase/ControllerCabeceraBase.cs
@@ -103,7 +103,7 @@ public void CargarDatosCabecera()
cabecera.SocialNetworkRegister = new Dictionary();
if (mControllerBase.ObtenerParametrosLoginExterno(TipoRedSocialLogin.Facebook, mControllerBase.ParametroProyecto, mControllerBase.ParametrosAplicacionDS).Count > 0)
{
- string urlServicioLoginFacebook = mControladorBase.UrlServicioLogin + "/loginfacebook.aspx?token=" + System.Net.WebUtility.UrlEncode(mControllerBase.TokenLoginUsuario) + "&proyectoID=" + ProyectoSeleccionado.Clave.ToString() + "&urlOrigen=" + System.Net.WebUtility.UrlEncode(mControllerBase.BaseURL + mHttpContextAccessor.HttpContext.Request.Path);
+ string urlServicioLoginFacebook = mControladorBase.UrlServicioLogin + "/loginfacebook?token=" + System.Net.WebUtility.UrlEncode(mControllerBase.TokenLoginUsuario) + "&proyectoID=" + ProyectoSeleccionado.Clave.ToString() + "&urlOrigen=" + System.Net.WebUtility.UrlEncode(mControllerBase.BaseURL + mHttpContextAccessor.HttpContext.Request.Path);
urlServicioLoginFacebook = AgregarEventoComunidad(urlServicioLoginFacebook);
diff --git a/Gnoss.Web.Open/Controllers/EditarBioComunidadController.cs b/Gnoss.Web.Open/Controllers/EditarBioComunidadController.cs
index 22d5adb..1b22504 100644
--- a/Gnoss.Web.Open/Controllers/EditarBioComunidadController.cs
+++ b/Gnoss.Web.Open/Controllers/EditarBioComunidadController.cs
@@ -43,7 +43,7 @@ public ActionResult Index(Guid CvSelected)
controladorPersonas.ActualizarModeloBaseSimple(IdentidadActual, ProyectoSeleccionado.Clave, UrlIntragnoss);
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidadActual(UsuarioActual.UsuarioID, UsuarioActual.PersonaID, UsuarioActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidadActual(UsuarioActual.UsuarioID, UsuarioActual.IdentidadID, UsuarioActual.PersonaID);
identidadCL.Dispose();
EditCvCommunityModel paginaModel = new EditCvCommunityModel();
diff --git a/Gnoss.Web.Open/Controllers/EditarPerfilComunidadController.cs b/Gnoss.Web.Open/Controllers/EditarPerfilComunidadController.cs
index 2bcfb9b..7b1ff2d 100644
--- a/Gnoss.Web.Open/Controllers/EditarPerfilComunidadController.cs
+++ b/Gnoss.Web.Open/Controllers/EditarPerfilComunidadController.cs
@@ -201,7 +201,7 @@ public ActionResult Index(EditProfileViewModel pPaginaModel)
{
UsarImagenPersonal(bool.Parse(RequestParams("UsarFotoPersonal")));
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.PersonaID.Value, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
return new EmptyResult();
}
@@ -281,7 +281,7 @@ public ActionResult GuardarBio(QuickCurriculum pCurriculum)
}
GuardarCVRapido(pCurriculum.Description, pCurriculum.Tags, true);
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.PersonaID.Value, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
return GnossResultOK(UtilIdiomas.GetText("COMADMINCMS", "COMPONENTEGUARDADOOK"));
@@ -364,7 +364,7 @@ public ActionResult GuardarPerfil(EditProfileViewModel pPaginaModel)
errores = GuardarPerfilProfesor(paginaModel.ProfileTeacher);
}
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.PersonaID.Value, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
if (errores.Count > 0)
@@ -457,7 +457,7 @@ public ActionResult GuardarDatosUsuarioFormulario(EditProfileViewModel.DataEditP
{
GuardarCVRapido(description, tags, true);
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.PersonaID.Value, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
}
@@ -529,7 +529,7 @@ public ActionResult GuardarEmail(string pEmail)
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.PersonaID.Value, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
ControladorIdentidades.NotificarEdicionPerfilEnProyectos(TipoAccionExterna.Edicion, IdentidadActual.Persona.Clave, "", "", ProyectoSeleccionado.Clave);
@@ -695,12 +695,12 @@ public ActionResult GuardarImagen(IFormFile FicheroImagen)
IdentidadActual.OrganizacionPerfil.FilaOrganizacion.VersionLogo = versionFoto;
IdentidadActual.OrganizacionPerfil.FilaOrganizacion.CoordenadasLogo = coordenadasFoto;
+ mEntityContext.SaveChanges();
+
IdentidadCN identidadCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
//identidadCN.ActualizarFotoIdentidadesPersona(IdentidadActual.PersonaID.Value, false);
identidadCN.ActualizarFotoIdentidadesOrganizacion(IdentidadActual.OrganizacionID.Value, false);
identidadCN.Dispose();
-
- mEntityContext.SaveChanges();
}
else if (IdentidadActual.TrabajaConOrganizacion)
{
@@ -713,13 +713,12 @@ public ActionResult GuardarImagen(IFormFile FicheroImagen)
filaPersona.CoordenadasFoto = coordenadasFoto;
filaPersona.FechaAnadidaFoto = DateTime.Now;
filaPersona.UsarFotoPersonal = false;
+ mEntityContext.SaveChanges();
IdentidadCN identidadCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
identidadCN.ActualizarFotoIdentidadesDePersonaDeOrganizacion(IdentidadActual.PersonaID.Value, filaPersona.OrganizacionID, false, false);
//identidadCN.ActualizarFotoIdentidadesPersona(IdentidadActual.PersonaID.Value, false);
identidadCN.Dispose();
-
- mEntityContext.SaveChanges();
}
else if (IdentidadActual.ModoPersonal)
{
@@ -730,12 +729,11 @@ public ActionResult GuardarImagen(IFormFile FicheroImagen)
IdentidadActual.Persona.FilaPersona.VersionFoto = versionFoto;
IdentidadActual.Persona.FilaPersona.CoordenadasFoto = coordenadasFoto;
IdentidadActual.Persona.FilaPersona.FechaAnadidaFoto = DateTime.Now;
+ mEntityContext.SaveChanges();
IdentidadCN identidadCN = new IdentidadCN(mEntityContext,mLoggingService,mConfigService, mServicesUtilVirtuosoAndReplication);
identidadCN.ActualizarFotoIdentidadesPersona(IdentidadActual.PersonaID.Value, false);
identidadCN.Dispose();
-
- mEntityContext.SaveChanges();
}
}
else
@@ -1092,6 +1090,10 @@ private Dictionary GuardarPerfilPersonalNulo(EditProfileViewMode
if (!existenErrores)
{
+ if (mEntityContext.Entry(IdentidadActual.Persona.FilaPersona).State == EntityState.Detached)
+ {
+ IdentidadActual.Persona.FilaPersona = personaCN.ObtenerFilaPersonaPorID(IdentidadActual.Persona.FilaPersona.PersonaID);
+ }
bool CambiadoNombre = false;
bool CambiadoApellidos = false;
if (!string.IsNullOrEmpty(pPerfilPersonal.Name))
@@ -1274,9 +1276,9 @@ private Dictionary GuardarPerfilPersonalNulo(EditProfileViewMode
}
else
{
+ mEntityContext.SaveChanges();
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
identidadCL.InvalidarFichasIdentidadesMVC(IdentidadActual.GestorIdentidades.DataWrapperIdentidad.ListaIdentidad.Select(item => item.IdentidadID).ToList());
- mEntityContext.SaveChanges();
}
ControladorIdentidades.NotificarEdicionPerfilEnProyectos(TipoAccionExterna.Edicion, IdentidadActual.Persona.Clave, "", antiguoEmail, ProyectoSeleccionado.Clave);
@@ -1786,9 +1788,9 @@ private void GuardarDatosExtra(EditProfileViewModel.ProfilePersonalViewModel pPe
datoExtraProyectoOpcionIdentidad.ProyectoID = ProyectoSeleccionado.Clave;
datoExtraProyectoOpcionIdentidad.DatoExtraID = datoExtra;
datoExtraProyectoOpcionIdentidad.OpcionID = dicDatosExtraProyecto[datoExtra];
-
- //dataWrapperIdentidad.ListaDatoExtraProyectoOpcionIdentidad.AddDatoExtraProyectoOpcionIdentidadRow(ProyectoSeleccionado.FilaProyecto.OrganizacionID, ProyectoSeleccionado.Clave, datoExtra, dicDatosExtraProyecto[datoExtra], IdentidadActual.FilaIdentidad);
- dataWrapperIdentidad.ListaDatoExtraProyectoOpcionIdentidad.Add(datoExtraProyectoOpcionIdentidad);
+ datoExtraProyectoOpcionIdentidad.IdentidadID = IdentidadActual.Clave;
+ //dataWrapperIdentidad.ListaDatoExtraProyectoOpcionIdentidad.AddDatoExtraProyectoOpcionIdentidadRow(ProyectoSeleccionado.FilaProyecto.OrganizacionID, ProyectoSeleccionado.Clave, datoExtra, dicDatosExtraProyecto[datoExtra], IdentidadActual.FilaIdentidad);
+ dataWrapperIdentidad.ListaDatoExtraProyectoOpcionIdentidad.Add(datoExtraProyectoOpcionIdentidad);
mEntityContext.DatoExtraProyectoOpcionIdentidad.Add(datoExtraProyectoOpcionIdentidad);
}
@@ -2243,7 +2245,7 @@ private void GuardarDatosCVRapido(Guid pCVSeleccionado)
#region Borramos caché
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidadActual(UsuarioActual.UsuarioID, UsuarioActual.PersonaID, UsuarioActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidadActual(UsuarioActual.UsuarioID, UsuarioActual.IdentidadID, UsuarioActual.PersonaID);
identidadCL.Dispose();
#endregion
@@ -2358,12 +2360,10 @@ private void BorrarImagenRegistro()
}
IdentidadActual.OrganizacionPerfil.FilaOrganizacion.Logotipo = null;
IdentidadActual.OrganizacionPerfil.FilaOrganizacion.CoordenadasLogo = null;
-
+ mEntityContext.SaveChanges();
IdentidadCN identidadCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
identidadCN.ActualizarFotoIdentidadesPersona(IdentidadActual.PersonaID.Value, true);
identidadCN.Dispose();
-
- mEntityContext.SaveChanges();
}
else if (IdentidadActual.TrabajaConOrganizacion)
{
@@ -2375,13 +2375,10 @@ private void BorrarImagenRegistro()
filaPersona.Foto = null;
filaPersona.CoordenadasFoto = null;
filaPersona.FechaAnadidaFoto = null;
-
+ mEntityContext.SaveChanges();
IdentidadCN identidadCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
identidadCN.ActualizarFotoIdentidadesPersona(IdentidadActual.PersonaID.Value, true);
identidadCN.Dispose();
-
-
- mEntityContext.SaveChanges();
}
else if (IdentidadActual.ModoPersonal)
{
@@ -2393,12 +2390,10 @@ private void BorrarImagenRegistro()
IdentidadActual.Persona.FilaPersona.CoordenadasFoto = null;
IdentidadActual.Persona.FilaPersona.FechaAnadidaFoto = null;
-
+ mEntityContext.SaveChanges();
IdentidadCN identidadCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
identidadCN.ActualizarFotoIdentidadesPersona(IdentidadActual.PersonaID.Value, true);
identidadCN.Dispose();
-
- mEntityContext.SaveChanges();
}
EliminarCaches();
@@ -2463,6 +2458,12 @@ private void CargarDatosProvincia(Guid pPaisID)
private void CargarDatosPerfilPersonal()
{
+ PersonaCN personaCN = new PersonaCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
+ if (mEntityContext.Entry(IdentidadActual.Persona.FilaPersona).State == EntityState.Detached)
+ {
+ IdentidadActual.Persona.FilaPersona = personaCN.ObtenerFilaPersonaPorID(IdentidadActual.Persona.FilaPersona.PersonaID);
+ }
+ personaCN.Dispose();
paginaModel.ProfilePersonal.Name = IdentidadActual.Persona.Nombre;
paginaModel.ProfilePersonal.LastName = IdentidadActual.Persona.Apellidos;
@@ -2662,7 +2663,7 @@ private void CargarCamposExtraRegistro()
DataWrapperIdentidad dataWrapperIdentidad = new DataWrapperIdentidad();
if (IdentidadActual.TrabajaConOrganizacion || IdentidadActual.TrabajaPersonaConOrganizacion || IdentidadActual.OrganizacionID.HasValue)
{
- DataWrapperIdentidad identidadesPersonas = identidadCN.ObtenerPerfilesDePersona(IdentidadActual.PersonaID.Value, true);
+ DataWrapperIdentidad identidadesPersonas = identidadCN.ObtenerPerfilesDePersona(IdentidadActual.PersonaID.Value, true, IdentidadActual.Clave);
if (identidadesPersonas.ListaIdentidad.Any(identidad => identidad.Tipo == 0))
{
dataWrapperIdentidad = identidadCN.ObtenerDatosExtraProyectoOpcionIdentidadPorIdentidadID(identidadesPersonas.ListaIdentidad.FirstOrDefault(Identidad => Identidad.Tipo == 0).IdentidadID);
@@ -2788,6 +2789,14 @@ private void CargarCamposExtraRegistro()
{
opcionSeleccionada = datoExtraEcosistemaVirtuosoPerfil.Opcion;
}
+ else
+ {
+ AD.EntityModel.Models.IdentidadDS.DatoExtraProyectoVirtuosoIdentidad datoExtraIdentidad = dataWrapperIdentidad.ListaDatoExtraProyectoVirtuosoIdentidad.FirstOrDefault(datoExtra => datoExtra.DatoExtraID.Equals(fila.DatoExtraID));
+ if (datoExtraIdentidad != null)
+ {
+ opcionSeleccionada = datoExtraIdentidad.Opcion;
+ }
+ }
AdditionalFieldAutentication campoExtra = new AdditionalFieldAutentication();
campoExtra.Title = UtilCadenas.ObtenerTextoDeIdioma(fila.Titulo, UtilIdiomas.LanguageCode, "es");
diff --git a/Gnoss.Web.Open/Controllers/FichaPerfilController.cs b/Gnoss.Web.Open/Controllers/FichaPerfilController.cs
index 0e8366e..7abc18f 100644
--- a/Gnoss.Web.Open/Controllers/FichaPerfilController.cs
+++ b/Gnoss.Web.Open/Controllers/FichaPerfilController.cs
@@ -710,49 +710,43 @@ public ActionResult Follow()
{
ControladorSuscripciones.SuscribirmePerfil(IdentidadActual, ProyectoSeleccionado, BaseURL, UrlIntragnoss, IdentidadPagina, true, null, null, UtilIdiomas.LanguageCode);
- //Comprobar si el me sigue a mi tambien
- List listaIdentidadesSuscritasPerfil = suscripcionCL.ObtenerListaIdentidadesSuscritasPerfil(IdentidadPagina.PerfilID);
- List identidadesSuscritas = listaIdentidadesSuscritasPerfil.Intersect(IdentidadActual.ListaTodosIdentidadesDeIdentidad).ToList();
+ AmigosCN amigosCN = new AmigosCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
+ FacetadoCN facetadoCN = new FacetadoCN(UrlIntragnoss, "contactos/", mEntityContext, mLoggingService, mConfigService, mVirtuosoAD, mServicesUtilVirtuosoAndReplication);
+ GestionAmigos gestAmigos = new GestionAmigos(new DataWrapperAmigos(), new GestionIdentidades(new DataWrapperIdentidad(), mLoggingService, mEntityContext, mConfigService, mServicesUtilVirtuosoAndReplication), mLoggingService, mEntityContext, mConfigService, mServicesUtilVirtuosoAndReplication);
+ bool guardarAmigos = false;
- if (identidadesSuscritas.Count > 0)
+ if (!amigosCN.EsAmigoDeIdentidad(IdentidadActual.IdentidadMyGNOSS.Clave, IdentidadPagina.IdentidadMyGNOSS.Clave))
{
- AmigosCN amigosCN = new AmigosCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
- FacetadoCN facetadoCN = new FacetadoCN(UrlIntragnoss, "contactos/", mEntityContext, mLoggingService, mConfigService, mVirtuosoAD, mServicesUtilVirtuosoAndReplication);
- GestionAmigos gestAmigos = new GestionAmigos(new DataWrapperAmigos(), new GestionIdentidades(new DataWrapperIdentidad(), mLoggingService, mEntityContext, mConfigService, mServicesUtilVirtuosoAndReplication), mLoggingService, mEntityContext, mConfigService, mServicesUtilVirtuosoAndReplication);
- bool guardarAmigos = false;
-
- if (!amigosCN.EsAmigoDeIdentidad(IdentidadActual.IdentidadMyGNOSS.Clave, IdentidadPagina.IdentidadMyGNOSS.Clave))
- {
- gestAmigos.CrearFilaAmigo(IdentidadActual.IdentidadMyGNOSS.Clave, IdentidadPagina.IdentidadMyGNOSS.Clave);
- facetadoCN.InsertarNuevoContacto(IdentidadActual.IdentidadMyGNOSS.Clave.ToString(), IdentidadPagina.IdentidadMyGNOSS.Clave.ToString());
- guardarAmigos = true;
- }
+ gestAmigos.CrearFilaAmigo(IdentidadActual.IdentidadMyGNOSS.Clave, IdentidadPagina.IdentidadMyGNOSS.Clave);
+ facetadoCN.InsertarNuevoContacto(IdentidadActual.IdentidadMyGNOSS.Clave.ToString(), IdentidadPagina.IdentidadMyGNOSS.Clave.ToString());
+ guardarAmigos = true;
+ }
- if (!amigosCN.EsAmigoDeIdentidad(IdentidadPagina.IdentidadMyGNOSS.Clave, IdentidadActual.IdentidadMyGNOSS.Clave))
- {
- gestAmigos.CrearFilaAmigo(IdentidadPagina.IdentidadMyGNOSS.Clave, IdentidadActual.IdentidadMyGNOSS.Clave);
- facetadoCN.InsertarNuevoContacto(IdentidadPagina.IdentidadMyGNOSS.Clave.ToString(), IdentidadActual.IdentidadMyGNOSS.Clave.ToString());
- guardarAmigos = true;
- }
+ if (!amigosCN.EsAmigoDeIdentidad(IdentidadPagina.IdentidadMyGNOSS.Clave, IdentidadActual.IdentidadMyGNOSS.Clave))
+ {
+ gestAmigos.CrearFilaAmigo(IdentidadPagina.IdentidadMyGNOSS.Clave, IdentidadActual.IdentidadMyGNOSS.Clave);
+ facetadoCN.InsertarNuevoContacto(IdentidadPagina.IdentidadMyGNOSS.Clave.ToString(), IdentidadActual.IdentidadMyGNOSS.Clave.ToString());
+ guardarAmigos = true;
+ }
- if (guardarAmigos)
- {
- mEntityContext.SaveChanges();
-
- //Agregamos una fila al BASE
- ControladorContactos contrContactos = new ControladorContactos(mLoggingService, mEntityContext, mConfigService, mEntityContextBASE, mRedisCacheWrapper, mVirtuosoAD, mServicesUtilVirtuosoAndReplication);
- contrContactos.ActualizarModeloBaseSimple(IdentidadActual.IdentidadMyGNOSS.Clave, IdentidadPagina.IdentidadMyGNOSS.Clave);
- contrContactos.ActualizarModeloBaseSimple(IdentidadPagina.IdentidadMyGNOSS.Clave, IdentidadActual.IdentidadMyGNOSS.Clave);
-
- //Limpiamos la cache de los contactos
- AmigosCL amigosCL = new AmigosCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- amigosCL.InvalidarAmigos(IdentidadActual.IdentidadMyGNOSS.Clave);
- amigosCL.InvalidarAmigos(IdentidadPagina.IdentidadMyGNOSS.Clave);
- amigosCL.Dispose();
- }
- amigosCN.Dispose();
- facetadoCN.Dispose();
+ if (guardarAmigos)
+ {
+ mEntityContext.SaveChanges();
+
+ //Agregamos una fila al BASE
+ ControladorContactos contrContactos = new ControladorContactos(mLoggingService, mEntityContext, mConfigService, mEntityContextBASE, mRedisCacheWrapper, mVirtuosoAD, mServicesUtilVirtuosoAndReplication);
+ contrContactos.ActualizarModeloBaseSimple(IdentidadActual.IdentidadMyGNOSS.Clave, IdentidadPagina.IdentidadMyGNOSS.Clave);
+ contrContactos.ActualizarModeloBaseSimple(IdentidadPagina.IdentidadMyGNOSS.Clave, IdentidadActual.IdentidadMyGNOSS.Clave);
+
+ //Limpiamos la cache de los contactos
+ AmigosCL amigosCL = new AmigosCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
+ amigosCL.InvalidarAmigos(IdentidadActual.IdentidadMyGNOSS.Clave);
+ amigosCL.InvalidarAmigos(IdentidadPagina.IdentidadMyGNOSS.Clave);
+ amigosCL.Dispose();
}
+ amigosCN.Dispose();
+ facetadoCN.Dispose();
+
}
else
{
@@ -1242,7 +1236,7 @@ private void EliminarPersona()
usuCN.Dispose();
IdentidadCN identCN = new IdentidadCN(mEntityContext, mLoggingService, mConfigService, mServicesUtilVirtuosoAndReplication);
- IdentidadPagina.GestorIdentidades.DataWrapperIdentidad.Merge(identCN.ObtenerPerfilesDePersona(IdentidadPagina.PersonaID.Value, false));
+ IdentidadPagina.GestorIdentidades.DataWrapperIdentidad.Merge(identCN.ObtenerPerfilesDePersona(IdentidadPagina.PersonaID.Value, false, IdentidadPagina.FilaIdentidad.IdentidadID));
identCN.Dispose();
//Boqueo Usuario:
diff --git a/Gnoss.Web.Open/Controllers/FichaRecursoController.cs b/Gnoss.Web.Open/Controllers/FichaRecursoController.cs
index 91d55f5..b6ee011 100644
--- a/Gnoss.Web.Open/Controllers/FichaRecursoController.cs
+++ b/Gnoss.Web.Open/Controllers/FichaRecursoController.cs
@@ -5194,7 +5194,7 @@ public void CargarBasesRecursosCompartir(out Dictionary dicDatosExtraProyecto = new Dictionary();
Dictionary dicDatosExtraEcosistema = new Dictionary();
-
+ Dictionary dicExtraIdentidad = new Dictionary();
Dictionary dicDatosExtraProyectoVirtuoso = new Dictionary();
Dictionary dicDatosExtraEcosistemaVirtuoso = new Dictionary();
if (!HaySolicitudPrevia)
@@ -1790,6 +1790,22 @@ private string RegistrarUsuario(string pEmail, TipoRedSocialLogin? pTipoRedSocia
}
}
}
+ else
+ {
+ DatoExtraEcosistema filaDatoExtraEcosistema = DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraEcosistema.FirstOrDefault(dato => dato.DatoExtraID.Equals(guidNombreCampo));
+ if (filaDatoExtraEcosistema != null)
+ {
+ dicExtraIdentidad.Add(filaDatoExtraEcosistema.DatoExtraID, valorCampo);
+ }
+ else
+ {
+ DatoExtraProyecto filaDatoExtraProyecto = DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraProyecto.FirstOrDefault(dato => dato.OrganizacionID.Equals(ProyectoSeleccionado.FilaProyecto.OrganizacionID) && dato.ProyectoID.Equals(ProyectoSeleccionado.Clave) && dato.DatoExtraID.Equals(guidNombreCampo));
+ if (filaDatoExtraProyecto != null)
+ {
+ dicExtraIdentidad.Add(filaDatoExtraProyecto.DatoExtraID, valorCampo);
+ }
+ }
+ }
}
else
{
@@ -1818,7 +1834,7 @@ private string RegistrarUsuario(string pEmail, TipoRedSocialLogin? pTipoRedSocia
SolicitudDW.ListaSolicitudNuevoUsuario.Add(filaNuevoUsuario);
mEntityContext.SolicitudNuevoUsuario.Add(filaNuevoUsuario);
//Recogemos y agregamos los campos extra
- GuardarDatosExtra(SolicitudDW, filaSolicitud, dicDatosExtraEcosistema, dicDatosExtraProyecto);
+ GuardarDatosExtra(SolicitudDW, filaSolicitud, dicDatosExtraEcosistema, dicDatosExtraProyecto, dicExtraIdentidad);
GuardarDatosExtraVirtuoso(SolicitudDW, filaSolicitud, dicDatosExtraEcosistemaVirtuoso, dicDatosExtraProyectoVirtuoso);
}
@@ -2383,7 +2399,7 @@ private void ActualizarGrupoBase(Guid pGrupoID, Guid pProyectoID)
///
/// Guarda los datos extra
///
- private void GuardarDatosExtra(DataWrapperSolicitud pSolicitudDW, Solicitud pSolicitud, Dictionary pDicDatosExtraEcosistema, Dictionary pDicDatosExtraProyecto)
+ private void GuardarDatosExtra(DataWrapperSolicitud pSolicitudDW, Solicitud pSolicitud, Dictionary pDicDatosExtraEcosistema, Dictionary pDicDatosExtraProyecto, Dictionary pDicDatosExtraIdentidad)
{
if (!HaySolicitudPrevia)
{
diff --git a/Gnoss.Web.Open/Controllers/RegistroDatosController.cs b/Gnoss.Web.Open/Controllers/RegistroDatosController.cs
index 91882f6..c3c96a7 100644
--- a/Gnoss.Web.Open/Controllers/RegistroDatosController.cs
+++ b/Gnoss.Web.Open/Controllers/RegistroDatosController.cs
@@ -334,7 +334,7 @@ private ActionResult GuardarImagenRegistro()
//Borramos Cache de la Identidad actual
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Persona.Clave, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
}
@@ -734,11 +734,11 @@ private bool GuardarDatosRegistro()
{
string nombreCampo = campoExtra.FieldName;
string valorCampo = RequestParams(nombreCampo);
-
Guid guidNombreCampo = Guid.Empty;
- if (Guid.TryParse(nombreCampo, out guidNombreCampo))
+ Guid guidValorCampo = Guid.Empty;
+
+ if (Guid.TryParse(nombreCampo, out guidNombreCampo) && Guid.TryParse(valorCampo, out guidValorCampo) && !guidValorCampo.Equals(Guid.Empty))
{
- Guid guidValorCampo = Guid.Empty;
if (Guid.TryParse(valorCampo, out guidValorCampo) && !guidValorCampo.Equals(Guid.Empty))
{
DatoExtraEcosistema filaDatoExtraEcosistema = DatosExtraProyectoDataWrapperProyecto.ListaDatoExtraEcosistema.FirstOrDefault(dato=>dato.DatoExtraID.Equals(guidNombreCampo));
@@ -754,7 +754,7 @@ private bool GuardarDatosRegistro()
dicDatosExtraProyecto.Add(filaDatoExtraProyecto.DatoExtraID, guidValorCampo);
}
}
- }
+ }
}
else
{
@@ -948,7 +948,7 @@ private bool GuardarDatosRegistro()
//Borramos Cache de la Identidad actual
IdentidadCL identidadCL = new IdentidadCL(mEntityContext, mLoggingService, mRedisCacheWrapper, mConfigService, mServicesUtilVirtuosoAndReplication);
- identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Persona.Clave, IdentidadActual.PerfilID);
+ identidadCL.EliminarCacheGestorIdentidad(IdentidadActual.Clave, IdentidadActual.PersonaID.Value);
identidadCL.Dispose();
Session.Set("tieneDatosRegistro", true);
@@ -1140,7 +1140,7 @@ private void CargarCamposExtraRegistro()
DataWrapperIdentidad identidadDW = new DataWrapperIdentidad();
if (IdentidadActual.TrabajaConOrganizacion || IdentidadActual.TrabajaPersonaConOrganizacion || IdentidadActual.OrganizacionID.HasValue)
{
- DataWrapperIdentidad identidadesPersonas = identidadCN.ObtenerPerfilesDePersona(IdentidadActual.PersonaID.Value, true);
+ DataWrapperIdentidad identidadesPersonas = identidadCN.ObtenerPerfilesDePersona(IdentidadActual.PersonaID.Value, true, IdentidadActual.Clave);
Identidad identidad = identidadesPersonas.ListaIdentidad.FirstOrDefault(ident => ident.Tipo == 0);
if (identidad != null)
{
@@ -1395,7 +1395,7 @@ private bool PestanyaDatos
DataWrapperIdentidad identidadDW = new DataWrapperIdentidad();
if (IdentidadActual.TrabajaConOrganizacion || IdentidadActual.TrabajaPersonaConOrganizacion || IdentidadActual.OrganizacionID.HasValue)
{
- DataWrapperIdentidad dataWrapperIdentidad = identidadCN.ObtenerPerfilesDePersona(IdentidadActual.PersonaID.Value, true);
+ DataWrapperIdentidad dataWrapperIdentidad = identidadCN.ObtenerPerfilesDePersona(IdentidadActual.PersonaID.Value, true, IdentidadActual.Clave);
if (dataWrapperIdentidad.ListaIdentidad.Any(ident => ident.Tipo==0))
{
identidadDW = identidadCN.ObtenerDatosExtraProyectoOpcionIdentidadPorIdentidadID(dataWrapperIdentidad.ListaIdentidad.FirstOrDefault(ident => ident.Tipo == 0).IdentidadID);
diff --git a/Gnoss.Web.Open/Services/RouteValueTransformer.cs b/Gnoss.Web.Open/Services/RouteValueTransformer.cs
index 272e1ce..a915c57 100644
--- a/Gnoss.Web.Open/Services/RouteValueTransformer.cs
+++ b/Gnoss.Web.Open/Services/RouteValueTransformer.cs
@@ -11,6 +11,7 @@
using Es.Riam.Gnoss.Util.General;
using Es.Riam.Gnoss.Web.MVC.Models.Administracion;
using Es.Riam.Gnoss.Web.MVC.Models.Routes;
+using Es.Riam.Util;
using Gnoss.Web.Open.Properties;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Routing;
@@ -71,8 +72,8 @@ public override async ValueTask TransformAsync(HttpContext
if (segmentos.Length > 2 && !string.IsNullOrEmpty(segmentos[2]))
{
- string comunidadSegmento = segmentos[1].ToLower();
- if (comunidadSegmento.Equals(comunidadTxt))
+ string comunidadSegmento = UtilCadenas.RemoveAccentsWithRegEx(segmentos[1].ToLower());
+ if (comunidadSegmento.Equals(UtilCadenas.RemoveAccentsWithRegEx(comunidadTxt)))
{
nombreCortoComunidad = segmentos[2];
urlCorta = false;
diff --git a/Gnoss.Web.Open/Views/Administracion/AdministrarAplicaciones/_partial-views/_home-community-section.cshtml b/Gnoss.Web.Open/Views/Administracion/AdministrarAplicaciones/_partial-views/_home-community-section.cshtml
index ba8ee92..09a2ad2 100644
--- a/Gnoss.Web.Open/Views/Administracion/AdministrarAplicaciones/_partial-views/_home-community-section.cshtml
+++ b/Gnoss.Web.Open/Views/Administracion/AdministrarAplicaciones/_partial-views/_home-community-section.cshtml
@@ -88,6 +88,14 @@ Variables
+ @* Administrar Descarga Configuraciones *@
+
+
@Html.GetText("DEVTOOLS","DESCARGACONFIG")
+
+ @Html.GetText("DEVTOOLS","DESCARGACONFIG")
+
+
+
@* Chequear Instalaciones (Comunidad) - Deshabilitado hasta asegurarse de qué añadir en la vista final. De momento funciona correctamente
@if (permisosPaginas.AdministracionVistasPermitido && permisosPaginas.VistasActivadas)
{
diff --git a/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/Index.cshtml b/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/Index.cshtml
new file mode 100644
index 0000000..65f68d2
--- /dev/null
+++ b/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/Index.cshtml
@@ -0,0 +1,186 @@
+@model AdministrarDatosExtraViewModel
+
+@{
+ CommunityModel Comunidad = Html.GetComunidad();
+ HeaderModel cabecera = Html.GetCabecera();
+ Layout = "~/Views/Shared/Layout/_Layout_Admin.cshtml";
+ // Carga de idiomas de la plataforma
+ string idiomas = "";
+ // Contador del nº de pestañas listadas
+ int contNumPestañasVisibles = 0;
+ // Nº de pestañas de idiomas a visualizar en la sección Tab
+ int numMaxPestañasIdiomasVisibles = 2;
+ bool isInEcosistemaPlatform = !string.IsNullOrEmpty(ViewBag.isInEcosistemaPlatform) ? (bool.Parse(ViewBag.isInEcosistemaPlatform)) : false;
+}
+
+@* Migas de Pan *@
+
+@*@Html.PartialView("_modal-views/_delete-extra-data", Model.DatoExtraID)*@
\ No newline at end of file
diff --git a/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_delete-extra-data.cshtml b/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_delete-extra-data.cshtml
new file mode 100644
index 0000000..be3a5bd
--- /dev/null
+++ b/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_delete-extra-data.cshtml
@@ -0,0 +1,45 @@
+@*
+Descripción
+-----------------------------------------------
+Vista modal para confirmar la eliminación de un dato extra
+
+
+Variables
+----------------------------------------------------------------
+*@
+@{
+
+}
+
+
+@* Modal de eliminación de una dato extra *@
+
+
+
+ @* Modal para controlar el borrado *@
+
+ @* Título del Modal *@
+
+ delete
+ @Html.GetText("COMMON","ELIMINAR")
+
+ @* Cierre del Modal *@
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_edit-extra-data.cshtml b/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_edit-extra-data.cshtml
new file mode 100644
index 0000000..42ad78b
--- /dev/null
+++ b/Gnoss.Web.Open/Views/Administracion/AdministrarDatosExtra/_modal-views/_edit-extra-data.cshtml
@@ -0,0 +1,120 @@
+@model DatoExtraEditModel
+@{
+ // Cabecera para obtención de idiomas de la Comunidad
+ HeaderModel cabecera = Html.GetCabecera();
+ string idModalUploadCrearPersonalizacion = "modal-edit-extra-data";
+ string modalTitle = @Html.GetText("DEVTOOLS", "EDITARDATOEXTRA");
+ string inputDisableClassName = "disabled";
+ Guid key = Guid.NewGuid();
+ string opciones = "";
+
+ foreach (DatoExtraOpcionModel opcion in Model.Opciones)
+ {
+ opciones += opcion.Nombre + ",";
+ }
+ string tagsAutoCompletarHtml = "";
+ foreach (string item in opciones.Split(","))
+ {
+ if (!string.IsNullOrEmpty(item))
+ {
+ string tagId = @Guid.NewGuid().ToString().Substring(0, 5);
+ tagsAutoCompletarHtml += "