diff --git a/mica-core/src/main/java/org/obiba/mica/dataset/service/CollectedDatasetService.java b/mica-core/src/main/java/org/obiba/mica/dataset/service/CollectedDatasetService.java index c54b6671f..0a2c4855e 100644 --- a/mica-core/src/main/java/org/obiba/mica/dataset/service/CollectedDatasetService.java +++ b/mica-core/src/main/java/org/obiba/mica/dataset/service/CollectedDatasetService.java @@ -15,6 +15,7 @@ import com.google.common.collect.Sets; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; +import org.apache.shiro.SecurityUtils; import org.obiba.magma.NoSuchValueTableException; import org.obiba.magma.NoSuchVariableException; import org.obiba.magma.ValueTable; @@ -40,6 +41,8 @@ import org.obiba.mica.dataset.event.DatasetUpdatedEvent; import org.obiba.mica.file.FileUtils; import org.obiba.mica.file.service.FileSystemService; +import org.obiba.mica.micaConfig.domain.MicaConfig; +import org.obiba.mica.micaConfig.domain.SummaryStatisticsAccessPolicy; import org.obiba.mica.micaConfig.service.MicaConfigService; import org.obiba.mica.micaConfig.service.OpalService; import org.obiba.mica.network.service.NetworkService; @@ -518,6 +521,11 @@ protected EventBus getEventBus() { return eventBus; } + @Override + protected MicaConfig getMicaConfig() { + return micaConfigService.getConfig(); + } + // // Private methods // diff --git a/mica-core/src/main/java/org/obiba/mica/dataset/service/DatasetService.java b/mica-core/src/main/java/org/obiba/mica/dataset/service/DatasetService.java index ba99626fa..36b8c5ee8 100644 --- a/mica-core/src/main/java/org/obiba/mica/dataset/service/DatasetService.java +++ b/mica-core/src/main/java/org/obiba/mica/dataset/service/DatasetService.java @@ -12,6 +12,7 @@ import com.google.common.base.Strings; import com.google.common.eventbus.EventBus; +import org.apache.shiro.SecurityUtils; import org.obiba.magma.MagmaRuntimeException; import org.obiba.magma.NoSuchValueTableException; import org.obiba.magma.NoSuchVariableException; @@ -26,10 +27,13 @@ import org.obiba.mica.dataset.NoSuchDatasetException; import org.obiba.mica.dataset.domain.Dataset; import org.obiba.mica.dataset.domain.DatasetVariable; +import org.obiba.mica.micaConfig.domain.MicaConfig; +import org.obiba.mica.micaConfig.domain.SummaryStatisticsAccessPolicy; import org.obiba.mica.micaConfig.service.OpalService; import org.obiba.mica.network.service.NetworkService; import org.obiba.mica.spi.tables.StudyTableSource; import org.obiba.mica.study.service.StudyService; +import org.obiba.mica.web.model.Mica; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,6 +81,44 @@ public abstract DatasetVariable getDatasetVariable(T dataset, String name) protected abstract EventBus getEventBus(); + protected abstract MicaConfig getMicaConfig(); + + /** + * Apply summary statistics visibility policy. + * + * @param summary + * @return + */ + public Mica.DatasetVariableAggregationDto getFilteredVariableSummary(Mica.DatasetVariableAggregationDto summary) { + SummaryStatisticsAccessPolicy policy = getMicaConfig().getSummaryStatisticsAccessPolicy(); + if (summary == null || policy.equals(SummaryStatisticsAccessPolicy.OPEN_ALL)) return summary; + if (!SecurityUtils.getSubject().isAuthenticated()) { + if (policy.equals(SummaryStatisticsAccessPolicy.OPEN_STATS)) return summary; + // strip out detailed stats because user is not authenticated + summary = summary.toBuilder().clearFrequencies().build(); + summary = summary.toBuilder().clearStatistics().build(); + } + return summary; + } + + /** + * Apply summary statistics visibility policy. + * + * @param summary + * @return + */ + public Mica.DatasetVariableAggregationsDto getFilteredVariableSummary(Mica.DatasetVariableAggregationsDto summary) { + SummaryStatisticsAccessPolicy policy = getMicaConfig().getSummaryStatisticsAccessPolicy(); + if (summary == null || policy.equals(SummaryStatisticsAccessPolicy.OPEN_ALL)) return summary; + if (!SecurityUtils.getSubject().isAuthenticated()) { + if (policy.equals(SummaryStatisticsAccessPolicy.OPEN_STATS)) return summary; + // strip out detailed stats because user is not authenticated + summary = summary.toBuilder().clearFrequencies().build(); + summary = summary.toBuilder().clearStatistics().build(); + } + return summary; + } + /** * Find all dataset identifiers. * diff --git a/mica-core/src/main/java/org/obiba/mica/dataset/service/HarmonizedDatasetService.java b/mica-core/src/main/java/org/obiba/mica/dataset/service/HarmonizedDatasetService.java index b4791308a..839ff7d12 100644 --- a/mica-core/src/main/java/org/obiba/mica/dataset/service/HarmonizedDatasetService.java +++ b/mica-core/src/main/java/org/obiba/mica/dataset/service/HarmonizedDatasetService.java @@ -15,6 +15,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.eventbus.EventBus; +import org.apache.shiro.SecurityUtils; import org.obiba.magma.*; import org.obiba.magma.support.Disposables; import org.obiba.mica.NoSuchEntityException; @@ -35,6 +36,8 @@ import org.obiba.mica.dataset.event.DatasetUpdatedEvent; import org.obiba.mica.file.FileUtils; import org.obiba.mica.file.service.FileSystemService; +import org.obiba.mica.micaConfig.domain.MicaConfig; +import org.obiba.mica.micaConfig.domain.SummaryStatisticsAccessPolicy; import org.obiba.mica.micaConfig.service.MicaConfigService; import org.obiba.mica.micaConfig.service.OpalService; import org.obiba.mica.network.service.NetworkService; @@ -438,6 +441,11 @@ protected EventBus getEventBus() { return eventBus; } + @Override + protected MicaConfig getMicaConfig() { + return micaConfigService.getConfig(); + } + // // Private methods // diff --git a/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/MicaConfig.java b/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/MicaConfig.java index 5b25e7545..8fc79f8ed 100644 --- a/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/MicaConfig.java +++ b/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/MicaConfig.java @@ -131,6 +131,8 @@ public class MicaConfig extends AbstractAuditableDocument implements Serializabl private boolean variableSummaryRequiresAuthentication = false; + private SummaryStatisticsAccessPolicy summaryStatisticsAccessPolicy; + private boolean usePublicUrlForSharedLink = true; private String style; @@ -543,6 +545,21 @@ public boolean isVariableSummaryRequiresAuthentication() { public void setVariableSummaryRequiresAuthentication(boolean variableSummaryRequiresAuthentication) { this.variableSummaryRequiresAuthentication = variableSummaryRequiresAuthentication; + if (summaryStatisticsAccessPolicy == null) { + summaryStatisticsAccessPolicy = variableSummaryRequiresAuthentication ? SummaryStatisticsAccessPolicy.RESTRICTED_ALL : SummaryStatisticsAccessPolicy.OPEN_ALL; + } + } + + public SummaryStatisticsAccessPolicy getSummaryStatisticsAccessPolicy() { + if (summaryStatisticsAccessPolicy == null) { + summaryStatisticsAccessPolicy = variableSummaryRequiresAuthentication ? SummaryStatisticsAccessPolicy.RESTRICTED_ALL : SummaryStatisticsAccessPolicy.OPEN_ALL; + } + return summaryStatisticsAccessPolicy; + } + + public void setSummaryStatisticsAccessPolicy(SummaryStatisticsAccessPolicy summaryStatisticsAccessPolicy) { + this.summaryStatisticsAccessPolicy = summaryStatisticsAccessPolicy; + this.variableSummaryRequiresAuthentication = !SummaryStatisticsAccessPolicy.OPEN_ALL.equals(summaryStatisticsAccessPolicy); } public boolean hasStyle() { diff --git a/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/SummaryStatisticsAccessPolicy.java b/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/SummaryStatisticsAccessPolicy.java new file mode 100644 index 000000000..41e557f19 --- /dev/null +++ b/mica-core/src/main/java/org/obiba/mica/micaConfig/domain/SummaryStatisticsAccessPolicy.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 OBiBa. All rights reserved. + * + * This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.obiba.mica.micaConfig.domain; + +/** + * Specify the access policy to the variable stats. + */ +public enum SummaryStatisticsAccessPolicy { + + OPEN_ALL, // open basic counts, detailed stats and contingency + + OPEN_STATS, // open basic counts and detailed stats, restricted contingency + + OPEN_BASICS, // open basic counts, restricted detailed stats and contingency + + RESTRICTED_ALL, // restricted basic counts, detailed stats and contingency + +} diff --git a/mica-core/src/main/java/org/obiba/mica/web/model/MicaConfigDtos.java b/mica-core/src/main/java/org/obiba/mica/web/model/MicaConfigDtos.java index bfb630e70..c012e4970 100644 --- a/mica-core/src/main/java/org/obiba/mica/web/model/MicaConfigDtos.java +++ b/mica-core/src/main/java/org/obiba/mica/web/model/MicaConfigDtos.java @@ -149,6 +149,7 @@ Mica.MicaConfigDto asDto(@NotNull MicaConfig config, String language) { builder.setIsCollectedDatasetEnabled(config.isStudyDatasetEnabled()); builder.setIsHarmonizedDatasetEnabled(config.isHarmonizationDatasetEnabled()); builder.setVariableSummaryRequiresAuthentication(config.isVariableSummaryRequiresAuthentication()); + builder.setSummaryStatisticsAccessPolicy(config.getSummaryStatisticsAccessPolicy().name()); builder.setIsImportStudiesFeatureEnabled(config.isImportStudiesFeatureEnabled()); if(config.hasStyle()) builder.setStyle(config.getStyle()); @@ -249,6 +250,7 @@ MicaConfig fromDto(@NotNull Mica.MicaConfigDtoOrBuilder dto) { config.setHarmonizationDatasetEnabled(dto.getIsHarmonizedDatasetEnabled()); config.setImportStudiesFeatureEnabled(dto.getIsImportStudiesFeatureEnabled()); if (dto.hasVariableSummaryRequiresAuthentication()) config.setVariableSummaryRequiresAuthentication(dto.getVariableSummaryRequiresAuthentication()); + config.setSummaryStatisticsAccessPolicy(SummaryStatisticsAccessPolicy.valueOf(dto.getSummaryStatisticsAccessPolicy())); if (dto.hasSignupEnabled()) config.setSignupEnabled(dto.getSignupEnabled()); config.setSignupWithPassword(dto.getSignupWithPassword()); diff --git a/mica-rest/src/main/java/org/obiba/mica/dataset/rest/PublishedDatasetResource.java b/mica-rest/src/main/java/org/obiba/mica/dataset/rest/PublishedDatasetResource.java index fe1e673e6..5f8746ae5 100644 --- a/mica-rest/src/main/java/org/obiba/mica/dataset/rest/PublishedDatasetResource.java +++ b/mica-rest/src/main/java/org/obiba/mica/dataset/rest/PublishedDatasetResource.java @@ -74,7 +74,8 @@ public DatasetVariable getVariable(@PathParam("id") String id, @PathParam("proje @Path("/collected/{project}/{table}/{variableName}/_summary") public Mica.DatasetVariableAggregationDto getVariableSummary(@PathParam("id") String id, @PathParam("project") String project, @PathParam("table") String table, @PathParam("variableName") String variableName) { checkVariableSummaryAccess(); - return collectedDatasetService.getVariableSummary(alternativeStudyDataset(id, project, table), variableName); + Mica.DatasetVariableAggregationDto summary = collectedDatasetService.getVariableSummary(alternativeStudyDataset(id, project, table), variableName); + return collectedDatasetService.getFilteredVariableSummary(summary); } private Dataset getDataset(String id) { diff --git a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/AbstractPublishedDatasetResource.java b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/AbstractPublishedDatasetResource.java index 78a0b409c..6403bf378 100644 --- a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/AbstractPublishedDatasetResource.java +++ b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/AbstractPublishedDatasetResource.java @@ -20,6 +20,7 @@ import org.obiba.mica.dataset.domain.Dataset; import org.obiba.mica.dataset.domain.DatasetVariable; import org.obiba.mica.dataset.domain.HarmonizationDataset; +import org.obiba.mica.micaConfig.domain.SummaryStatisticsAccessPolicy; import org.obiba.mica.micaConfig.service.MicaConfigService; import org.obiba.mica.micaConfig.service.TaxonomiesService; import org.obiba.mica.security.service.SubjectAclService; @@ -308,10 +309,18 @@ protected List getTaxonomies() { protected void checkContingencyAccess() { if (!micaConfigService.getConfig().isContingencyEnabled()) throw new ForbiddenException(); + if (micaConfigService.getConfig().getSummaryStatisticsAccessPolicy().equals(SummaryStatisticsAccessPolicy.OPEN_ALL)) + return; + // other require authentication + if (!SecurityUtils.getSubject().isAuthenticated()) + throw new ForbiddenException(); } protected void checkVariableSummaryAccess() { - if (!SecurityUtils.getSubject().isAuthenticated() && micaConfigService.getConfig().isVariableSummaryRequiresAuthentication()) + if (micaConfigService.getConfig().getSummaryStatisticsAccessPolicy().name().startsWith("OPEN_")) + return; + // other require authentication + if (!SecurityUtils.getSubject().isAuthenticated()) throw new ForbiddenException(); } diff --git a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/collection/PublishedCollectedDatasetVariableResource.java b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/collection/PublishedCollectedDatasetVariableResource.java index 07ec49139..5d799875a 100644 --- a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/collection/PublishedCollectedDatasetVariableResource.java +++ b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/collection/PublishedCollectedDatasetVariableResource.java @@ -67,7 +67,8 @@ public Mica.DatasetVariableAggregationDto getVariableAggregations(@QueryParam("s StudyDataset dataset = getDataset(StudyDataset.class, datasetId); StudyTable studyTable = dataset.getSafeStudyTable(); try { - return dtos.asDto(studyTable, datasetService.getVariableSummary(dataset, variableName), withStudySummary).build(); + Mica.DatasetVariableAggregationDto summary = datasetService.getVariableSummary(dataset, variableName); + return dtos.asDto(studyTable, datasetService.getFilteredVariableSummary(summary), withStudySummary).build(); } catch (Exception e) { if (log.isDebugEnabled()) log.warn("Unable to retrieve statistics: {}", e.getMessage(), e); diff --git a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedDataschemaDatasetVariableResource.java b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedDataschemaDatasetVariableResource.java index f2b71f5b5..3b5b6218f 100644 --- a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedDataschemaDatasetVariableResource.java +++ b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedDataschemaDatasetVariableResource.java @@ -16,12 +16,7 @@ import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; -import jakarta.ws.rs.BadRequestException; -import jakarta.ws.rs.DefaultValue; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.*; import jakarta.ws.rs.core.Response; import org.apache.commons.math3.util.Pair; import org.obiba.mica.core.domain.BaseStudyTable; @@ -36,13 +31,13 @@ import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; import org.springframework.scheduling.annotation.Async; -import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Component; import javax.inject.Inject; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.stream.Collectors; @@ -91,7 +86,8 @@ public Mica.DatasetVariableAggregationsDto getVariableAggregations(@QueryParam(" BaseStudyTable opalTable = studyTables.get(i); Future futureResult = results.get(i); try { - builder.add(dtos.asDto(opalTable, futureResult.get(), withStudySummary).build()); + Mica.DatasetVariableAggregationDto summary = futureResult.get(); + builder.add(dtos.asDto(opalTable, summary, withStudySummary).build()); } catch (Exception e) { if (log.isDebugEnabled()) log.warn("Unable to retrieve statistics: {}", e.getMessage(), e); @@ -108,9 +104,9 @@ public Mica.DatasetVariableAggregationsDto getVariableAggregations(@QueryParam(" if (allAggDto.hasStatistics()) aggDto.setStatistics(allAggDto.getStatistics()); aggDto.addAllFrequencies(allAggDto.getFrequenciesList()); - aggDto.addAllAggregations(aggsDto); + aggDto.addAllAggregations(aggsDto.stream().map((summary) -> datasetService.getFilteredVariableSummary(summary)).toList()); - return aggDto.build(); + return datasetService.getFilteredVariableSummary(aggDto.build()); } @GET @@ -259,13 +255,14 @@ protected Future getVariableFacet(Harmonizat BaseStudyTable table) { try { String studyId = table.getStudyId(); - return new AsyncResult<>(datasetService.getVariableSummary(dataset, variableName, studyId, table.getSource())); + Mica.DatasetVariableAggregationDto summary = datasetService.getVariableSummary(dataset, variableName, studyId, table.getSource()); + return CompletableFuture.supplyAsync(() -> summary); } catch (Exception e) { if (log.isDebugEnabled()) log.warn("Unable to retrieve statistics: {}", e.getMessage(), e); else log.warn("Unable to retrieve statistics: {}", e.getMessage()); - return new AsyncResult<>(null); + return CompletableFuture.supplyAsync(() -> null); } } @@ -273,10 +270,10 @@ protected Future getVariableFacet(Harmonizat protected Future getContingencyTable(HarmonizationDataset dataset, DatasetVariable var, DatasetVariable crossVar, BaseStudyTable studyTable) { try { - return new AsyncResult<>(datasetService.getContingencyTable(dataset, studyTable, var, crossVar)); + return CompletableFuture.supplyAsync(() -> datasetService.getContingencyTable(dataset, studyTable, var, crossVar)); } catch (Exception e) { log.warn("Unable to retrieve contingency statistics: " + e.getMessage(), e); - return new AsyncResult<>(null); + return CompletableFuture.supplyAsync(() -> null); } } } diff --git a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedHarmonizedDatasetVariableResource.java b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedHarmonizedDatasetVariableResource.java index 875d8cb03..d70115b31 100644 --- a/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedHarmonizedDatasetVariableResource.java +++ b/mica-search/src/main/java/org/obiba/mica/dataset/search/rest/harmonization/PublishedHarmonizedDatasetVariableResource.java @@ -80,8 +80,8 @@ public Mica.DatasetVariableAggregationDto getVariableAggregations(@QueryParam("s for (BaseStudyTable baseTable : getBaseStudyTables(dataset)) { if (baseTable.isFor(studyId, source)) { try { - return dtos.asDto(baseTable, - datasetService.getVariableSummary(dataset, variableName, studyId, source), withStudySummary).build(); + Mica.DatasetVariableAggregationDto summary = datasetService.getVariableSummary(dataset, variableName, studyId, source); + return dtos.asDto(baseTable, datasetService.getFilteredVariableSummary(summary), withStudySummary).build(); } catch (Exception e) { if (log.isDebugEnabled()) log.warn("Unable to retrieve statistics: {}", e.getMessage(), e); diff --git a/mica-web-model/src/main/protobuf/Mica.proto b/mica-web-model/src/main/protobuf/Mica.proto index 866d252af..9226c351e 100644 --- a/mica-web-model/src/main/protobuf/Mica.proto +++ b/mica-web-model/src/main/protobuf/Mica.proto @@ -452,6 +452,7 @@ message MicaConfigDto { required bool isStudiesExportEnabled = 68; required bool isNetworksExportEnabled = 69; repeated string usableVariableTaxonomiesForConceptTagging = 70; + required string summaryStatisticsAccessPolicy = 71; } message PublicMicaConfigDto { diff --git a/mica-webapp/src/main/resources/_templates/libs/variable-scripts.ftl b/mica-webapp/src/main/resources/_templates/libs/variable-scripts.ftl index 54532e836..93040ceaa 100644 --- a/mica-webapp/src/main/resources/_templates/libs/variable-scripts.ftl +++ b/mica-webapp/src/main/resources/_templates/libs/variable-scripts.ftl @@ -119,9 +119,6 @@ }); - <#if showVariableStatistics && (user?? || !config.variableSummaryRequiresAuthentication)> - makeSummary(${showHarmonizedVariableSummarySelector?c}); - - + makeSummary('${config.summaryStatisticsAccessPolicy}', ${showHarmonizedVariableSummarySelector?c}); }); diff --git a/mica-webapp/src/main/resources/_templates/variable.ftl b/mica-webapp/src/main/resources/_templates/variable.ftl index b39314e24..d299e6574 100644 --- a/mica-webapp/src/main/resources/_templates/variable.ftl +++ b/mica-webapp/src/main/resources/_templates/variable.ftl @@ -308,9 +308,10 @@
- <#if user?? || !config.variableSummaryRequiresAuthentication> + <#if config.summaryStatisticsAccessPolicy?starts_with("OPEN_") || user??> <@variableSummary variable=variable/> - <#else> + + <#if config.summaryStatisticsAccessPolicy.name() != "OPEN_ALL" && config.summaryStatisticsAccessPolicy.name() != "OPEN_STATS" && user?? == false> <@message "sign-in-for-variable-statistics"/> <@message "sign-in"/> diff --git a/mica-webapp/src/main/resources/i18n/en.json b/mica-webapp/src/main/resources/i18n/en.json index 52712c561..fd2f2026b 100644 --- a/mica-webapp/src/main/resources/i18n/en.json +++ b/mica-webapp/src/main/resources/i18n/en.json @@ -432,8 +432,14 @@ }, "openAccess": "Open access", "openAccess-help": "Access to published documents is opened to everyone.", - "variableSummaryRequiresAuthentication": "Restricted access to variable summary statistics", - "variableSummaryRequiresAuthentication-help": "The user needs to be identified when accessing to the variable summary statistics (and related operations like contingency table).", + "variableSummaryRequiresAuthentication": "Access to variable summary statistics", + "variableSummaryRequiresAuthentication-help": "The user may need to be identified when accessing to the variable summary statistics (and related operations like contingency table).", + "summaryStatisticsAccessPolicy-label": { + "OPEN_ALL": "Open", + "OPEN_STATS": "Open basic counts open and detailed statistics and restricted contingency table", + "OPEN_BASICS": "Open basic counts open, restricted detailed statistics and contingency table", + "RESTRICTED_ALL": "Restricted statistics and contingency table" + }, "sections": "Sections", "repository-enabled": "Repository enabled", "repository-enabled-help": "Show network, initiative, study, protocol, dataset, variable pages with the search interface.", diff --git a/mica-webapp/src/main/resources/i18n/fr.json b/mica-webapp/src/main/resources/i18n/fr.json index 646e46563..a4e505e4e 100644 --- a/mica-webapp/src/main/resources/i18n/fr.json +++ b/mica-webapp/src/main/resources/i18n/fr.json @@ -432,8 +432,14 @@ }, "openAccess": "Accès libre", "openAccess-help": "L'accès aux documents publiés est ouvert à tout le monde.", - "variableSummaryRequiresAuthentication": "Accès restreint aux statistiques des variables", - "variableSummaryRequiresAuthentication-help": "L'utilisateur doit être identifié afin d'avoir accès aux statistiques de variables (sommaire, table de contingence etc.).", + "variableSummaryRequiresAuthentication": "Accès aux statistiques des variables", + "variableSummaryRequiresAuthentication-help": "L'identification de l'utilisateur peut être requise afin d'avoir accès aux statistiques de variables (sommaire, table de contingence).", + "summaryStatisticsAccessPolicy-label": { + "OPEN_ALL": "Ouvert", + "OPEN_STATS": "Ouvert: décomptes de base et statistiques détaillées, Restreint: table de contingence", + "OPEN_BASICS": "Ouvert: décomptes de base, Restreint: statistiques détaillées et table de contingence", + "RESTRICTED_ALL": "Restreint" + }, "sections": "Sections", "repository-enabled": "Catalogue activé", "repository-enabled-help": "Montrer les pages du catalogue de réseaux, initiatives, études etc. ainsi que la page de recherche.", diff --git a/mica-webapp/src/main/webapp/app/config/config-controller.js b/mica-webapp/src/main/webapp/app/config/config-controller.js index 044388cbe..0aa5b1764 100644 --- a/mica-webapp/src/main/webapp/app/config/config-controller.js +++ b/mica-webapp/src/main/webapp/app/config/config-controller.js @@ -514,6 +514,13 @@ mica.config 'ENTITY_TYPE' ]; + $scope.summaryStatisticsAccessPolicyOptions = [ + 'OPEN_ALL', + 'OPEN_STATS', + 'OPEN_BASICS', + 'RESTRICTED_ALL' + ]; + $scope.projectEnabledChanged = function() { if (!$scope.micaConfig.isProjectEnabled) { $scope.micaConfig.isProjectsCountEnabled = false; diff --git a/mica-webapp/src/main/webapp/app/config/views/config-form.html b/mica-webapp/src/main/webapp/app/config/views/config-form.html index b3871fe73..0ac5d43cf 100644 --- a/mica-webapp/src/main/webapp/app/config/views/config-form.html +++ b/mica-webapp/src/main/webapp/app/config/views/config-form.html @@ -74,9 +74,16 @@

config.content-edition

config.content-access

-
- +
+ + +

{{'config.variableSummaryRequiresAuthentication-help' | translate}}

+
config.content-access config.variableSummaryRequiresAuthentication-help - - +
{{'config.summaryStatisticsAccessPolicy-label.' + micaConfig.summaryStatisticsAccessPolicy}}
diff --git a/mica-webapp/src/main/webapp/assets/js/mica-variable.js b/mica-webapp/src/main/webapp/assets/js/mica-variable.js index ac0ba4983..3dbfea642 100644 --- a/mica-webapp/src/main/webapp/assets/js/mica-variable.js +++ b/mica-webapp/src/main/webapp/assets/js/mica-variable.js @@ -1,5 +1,5 @@ -const makeSummary = function(showHarmonizedVariableSummarySelector) { +const makeSummary = function(summaryStatisticsAccessPolicy, showHarmonizedVariableSummarySelector) { const initStudySelector = function(data) { let selectStudy = $('#select-study'); @@ -48,7 +48,7 @@ const makeSummary = function(showHarmonizedVariableSummarySelector) { renderFrequencies(data); renderStatistics(data); - if (!data.frequencies && !data.statistics) { + if (data.total === 0) { $('#noSummary').show(); } }; @@ -163,7 +163,7 @@ const makeSummary = function(showHarmonizedVariableSummarySelector) { $('#loadingSummary').hide(); - if (showHarmonizedVariableSummarySelector && (data.frequencies || data.statistics)) { + if (showHarmonizedVariableSummarySelector && data.total) { // study tables selector initStudySelector(data); }