diff --git a/geonode_mapstore_client/client/js/utils/ResourceUtils.js b/geonode_mapstore_client/client/js/utils/ResourceUtils.js index 75e4541523..13af8b33d1 100644 --- a/geonode_mapstore_client/client/js/utils/ResourceUtils.js +++ b/geonode_mapstore_client/client/js/utils/ResourceUtils.js @@ -52,7 +52,7 @@ export const GXP_PTYPES = { 'GN_WMS': 'gxp_geonodecataloguesource' }; -export const RESOURCE_PUBLISHING_PROPERTIES = { +const RESOURCE_PUBLISHING_PROPERTIES_BASE = { 'is_published': { labelId: 'gnviewer.publishResource', tooltipId: 'gnviewer.publishResourceTooltip', @@ -70,7 +70,7 @@ export const RESOURCE_PUBLISHING_PROPERTIES = { } }; -export const RESOURCE_OPTIONS_PROPERTIES = { +const RESOURCE_OPTIONS_PROPERTIES_BASE = { 'metadata_uploaded_preserve': { labelId: 'gnviewer.preserveUploadedMetadata', tooltipId: 'gnviewer.preserveUploadedMetadataTooltip', @@ -82,6 +82,31 @@ export const RESOURCE_OPTIONS_PROPERTIES = { disabled: (perms = []) => !perms.includes('approve_resourcebase') } }; + +export const filterResourcePublishingProperties = () => { + const { isPublishedOptionEnabled = false } = getConfigProp('geoNodeSettings') || {}; + + // Remove is_published if RESOURCE_PUBLISHING is disabled + if (!isPublishedOptionEnabled) { + return omit(RESOURCE_PUBLISHING_PROPERTIES_BASE, 'is_published'); + } + + return RESOURCE_PUBLISHING_PROPERTIES_BASE; +}; + +export const filterResourceOptionsProperties = () => { + const { isApprovedOptionEnabled = false } = getConfigProp('geoNodeSettings') || {}; + + // Remove is_approved if ADMIN_MODERATE_UPLOADS is disabled + if (!isApprovedOptionEnabled) { + return omit(RESOURCE_OPTIONS_PROPERTIES_BASE, 'is_approved'); + } + + return RESOURCE_OPTIONS_PROPERTIES_BASE; +}; + +export const RESOURCE_PUBLISHING_PROPERTIES = filterResourcePublishingProperties(); +export const RESOURCE_OPTIONS_PROPERTIES = filterResourceOptionsProperties(); export const TIME_SERIES_PROPERTIES = ['attribute', 'end_attribute', 'presentation', 'precision_value', 'precision_step']; export const TIME_ATTRIBUTE_TYPES = ['xsd:date', 'xsd:dateTime', 'xsd:date-time', 'xsd:time']; @@ -482,7 +507,7 @@ export const canManageAnonymousPermissions = (resource) => { export const canManageRegisteredMemberPermissions = (resource) => { return resourceHasPermission(resource, 'can_manage_registered_member_permissions'); -} +}; /** * Filters permission options for a group if management is disabled. @@ -495,15 +520,15 @@ export const canManageRegisteredMemberPermissions = (resource) => { const filterGroupPermissions = (options, groups, groupNames) => { return groupNames.length ? Object.fromEntries(Object.keys(options) - .map((key) => { - if (groupNames.some(name => name === key)) { - const group = groups?.find(g => g.name === key); - const permissionValue = group?.permissions; - const currentPermission = options[key].find(p => p.name === permissionValue); - return currentPermission ? [key, [currentPermission]] : [key, options[key]]; - } - return [key, options[key]]; - })) + .map((key) => { + if (groupNames.some(name => name === key)) { + const group = groups?.find(g => g.name === key); + const permissionValue = group?.permissions; + const currentPermission = options[key].find(p => p.name === permissionValue); + return currentPermission ? [key, [currentPermission]] : [key, options[key]]; + } + return [key, options[key]]; + })) : options; }; @@ -512,10 +537,10 @@ const filterGroupPermissions = (options, groups, groupNames) => { * @param {Object} options Permission Object to extract permissions from * @returns An object containing permissions for each type of user/group */ -export const getResourcePermissions = (_options , groups, manageAnonymousPermissions=false, manageRegisteredMemberPermissions=false) => { +export const getResourcePermissions = (_options, groups, manageAnonymousPermissions = false, manageRegisteredMemberPermissions = false) => { const options = filterGroupPermissions(_options, groups, [ ...(manageAnonymousPermissions ? [] : ['anonymous']), - ...(manageRegisteredMemberPermissions? [] : ['registered-members']), + ...(manageRegisteredMemberPermissions ? [] : ['registered-members']) ]); let permissionsOptions = {}; Object.keys(options).forEach((key) => { @@ -932,4 +957,4 @@ export const canManageResourceSettings = (resource) => { export const canAccessPermissions = (resource) => { const { perms } = resource || {}; return perms?.includes('change_resourcebase_permissions'); -}; \ No newline at end of file +}; diff --git a/geonode_mapstore_client/context_processors.py b/geonode_mapstore_client/context_processors.py index f84dac121a..3202b5768a 100644 --- a/geonode_mapstore_client/context_processors.py +++ b/geonode_mapstore_client/context_processors.py @@ -66,5 +66,7 @@ def resource_urls(request): .get("OPTIONS", dict()) .get("MOSAIC_ENABLED", False), "SUPPORTED_DATASET_FILE_TYPES": get_supported_datasets_file_types(), + "RESOURCE_PUBLISHING": getattr(settings, "RESOURCE_PUBLISHING", False), + "ADMIN_MODERATE_UPLOADS": getattr(settings, "ADMIN_MODERATE_UPLOADS", False), } return defaults diff --git a/geonode_mapstore_client/templates/geonode-mapstore-client/_geonode_config.html b/geonode_mapstore_client/templates/geonode-mapstore-client/_geonode_config.html index 2469a0edb9..82430acf1d 100644 --- a/geonode_mapstore_client/templates/geonode-mapstore-client/_geonode_config.html +++ b/geonode_mapstore_client/templates/geonode-mapstore-client/_geonode_config.html @@ -70,6 +70,8 @@ let supportedDatasetFileTypes = geoNodeSettings.SUPPORTED_DATASET_FILE_TYPES; let catalogHomeRedirectsTo = geoNodeSettings.CATALOG_HOME_REDIRECTS_TO; let catalogPagePath = geoNodeSettings.CATALOG_PAGE_PATH; + let isPublishedOptionEnabled = geoNodeSettings.RESOURCE_PUBLISHING || false; + let isApprovedOptionEnabled = geoNodeSettings.ADMIN_MODERATE_UPLOADS || false; let customFilters = geoNodeSettings.CUSTOM_FILTERS || { "my-resources": { "filter{owner.pk}": "{state('user') && state('user').pk}" @@ -210,7 +212,9 @@ }, staticPath: "{% static '' %}", catalogHomeRedirectsTo: catalogHomeRedirectsTo, - catalogPagePath: catalogPagePath + catalogPagePath: catalogPagePath, + isPublishedOptionEnabled: isPublishedOptionEnabled, + isApprovedOptionEnabled: isApprovedOptionEnabled } }, };