From 85d2f96b783630493d8d791be0980ce0557b7470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 19 Jun 2024 12:42:05 +0200 Subject: [PATCH] Fix user application feedback (#7769) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix user application feedback * Update setting help text and change in the footer the 'Contact' after the 'About' link * Conflict fix (#103) For https://github.com/geonetwork/core-geonetwork/pull/7769/files --------- Co-authored-by: François Prunayre --- .../img/application-feedback-link.png | Bin 0 -> 3172 bytes .../img/application-feedback.png | Bin 0 -> 16222 bytes .../system-configuration.md | 11 +- .../java/org/fao/geonet/api/site/SiteApi.java | 135 +++++++++++++----- .../contactus/ContactUsDirective.js | 83 +++++++++-- .../contactus/partials/contactusform.html | 73 ++++++++-- .../resources/catalog/js/CatController.js | 6 +- .../catalog/js/ContactUsController.js | 12 +- .../resources/catalog/locales/en-admin.json | 4 +- .../resources/catalog/locales/en-core.json | 1 + .../default/less/gn_contact_us_default.less | 15 ++ .../views/default/templates/footer.html | 5 + .../org/fao/geonet/api/Messages.properties | 9 +- .../fao/geonet/api/Messages_fre.properties | 7 + .../webapp/xslt/base-layout-cssjs-loader.xsl | 2 +- .../webapp/xslt/common/base-variables.xsl | 2 + 16 files changed, 287 insertions(+), 78 deletions(-) create mode 100644 docs/manual/docs/administrator-guide/configuring-the-catalog/img/application-feedback-link.png create mode 100644 docs/manual/docs/administrator-guide/configuring-the-catalog/img/application-feedback.png create mode 100644 web-ui/src/main/resources/catalog/views/default/less/gn_contact_us_default.less diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/application-feedback-link.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/application-feedback-link.png new file mode 100644 index 0000000000000000000000000000000000000000..a52132a35dd6ce4af2796dcd55406c71f3accf33 GIT binary patch literal 3172 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 literal 0 HcmV?d00001 diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md index 8f9f567d1e4..d56eb454ffa 100644 --- a/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md @@ -91,15 +91,18 @@ See [Configuring Shibboleth](../managing-users-and-groups/authentication-mode.md Enable the self registration form. See [User Self-Registration](../managing-users-and-groups/user-self-registration.md). -You can configure optionally re-Captcha, to protect you and your users from spam and abuse. And a list of email domains (separated by commas) +You can configure optionally re-Captcha, to protect you and your users from spam and abuse. And a list of email domains (separated by commas) that can request an account. If not configured any email address is allowed. -## system/userFeedback +## User application feedback -!!! warning "Deprecated" +Enabling the setting, displays in the application footer a link to a page that allows sending comments about the application. + +![](img/application-feedback-link.png) - 3.0.0 +![](img/application-feedback.png) +It requires an email server configured. ## Link in metadata records diff --git a/services/src/main/java/org/fao/geonet/api/site/SiteApi.java b/services/src/main/java/org/fao/geonet/api/site/SiteApi.java index d39d42f5134..a2bd724fa59 100644 --- a/services/src/main/java/org/fao/geonet/api/site/SiteApi.java +++ b/services/src/main/java/org/fao/geonet/api/site/SiteApi.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * Copyright (C) 2001-2024 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -36,17 +36,16 @@ import jeeves.server.context.ServiceContext; import jeeves.xlink.Processor; import org.apache.commons.lang3.StringUtils; -import org.fao.geonet.ApplicationContextHolder; -import org.fao.geonet.GeonetContext; -import org.fao.geonet.NodeInfo; -import org.fao.geonet.SystemInfo; +import org.fao.geonet.*; import org.fao.geonet.api.ApiParams; import org.fao.geonet.api.ApiUtils; import org.fao.geonet.api.OpenApiConfig; +import org.fao.geonet.api.exception.FeatureNotEnabledException; import org.fao.geonet.api.exception.NotAllowedException; import org.fao.geonet.api.site.model.SettingSet; import org.fao.geonet.api.site.model.SettingsListResponse; import org.fao.geonet.api.tools.i18n.LanguageUtils; +import org.fao.geonet.api.users.recaptcha.RecaptchaChecker; import org.fao.geonet.constants.Geonet; import org.fao.geonet.doi.client.DoiManager; import org.fao.geonet.domain.*; @@ -69,6 +68,7 @@ import org.fao.geonet.repository.*; import org.fao.geonet.repository.specification.MetadataSpecs; import org.fao.geonet.resources.Resources; +import org.fao.geonet.util.MailUtil; import org.fao.geonet.utils.FilePathChecker; import org.fao.geonet.utils.Log; import org.fao.geonet.utils.ProxyInfo; @@ -78,15 +78,10 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; @@ -100,19 +95,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Optional; -import java.util.TimeZone; +import java.util.*; import static org.apache.commons.fileupload.util.Streams.checkFileName; import static org.fao.geonet.api.ApiParams.API_CLASS_CATALOG_TAG; import static org.fao.geonet.constants.Geonet.Path.IMPORT_STYLESHEETS_SCHEMA_PREFIX; +import static org.fao.geonet.kernel.setting.Settings.SYSTEM_FEEDBACK_EMAIL; /** * @@ -201,7 +189,7 @@ public static void reloadServices(ServiceContext context) throws Exception { @ResponseBody public SettingsListResponse getSiteOrPortalDescription( @Parameter(hidden = true) - HttpServletRequest request + HttpServletRequest request ) throws Exception { SettingsListResponse response = new SettingsListResponse(); response.setSettings(settingManager.getSettings(new String[]{ @@ -267,7 +255,7 @@ public SettingsListResponse getSettingsSet( @RequestParam( required = false ) - SettingSet[] set, + SettingSet[] set, @Parameter( description = "Setting key", required = false @@ -275,11 +263,11 @@ public SettingsListResponse getSettingsSet( @RequestParam( required = false ) - String[] key, + String[] key, @Parameter( hidden = true ) - HttpSession httpSession + HttpSession httpSession ) throws Exception { ConfigurableApplicationContext appContext = ApplicationContextHolder.get(); UserSession session = ApiUtils.getUserSession(httpSession); @@ -353,7 +341,7 @@ public List getSettingsDetails( @RequestParam( required = false ) - SettingSet[] set, + SettingSet[] set, @Parameter( description = "Setting key", required = false @@ -361,9 +349,9 @@ public List getSettingsDetails( @RequestParam( required = false ) - String[] key, + String[] key, @Parameter(hidden = true) - HttpSession httpSession + HttpSession httpSession ) throws Exception { UserSession session = ApiUtils.getUserSession(httpSession); Profile profile = session == null ? null : session.getProfile(); @@ -415,7 +403,7 @@ public List getSettingsDetails( public void saveSettings( @Parameter(hidden = false) @RequestParam - Map allRequestParams, + Map allRequestParams, HttpServletRequest request ) throws Exception { ApplicationContext applicationContext = ApplicationContextHolder.get(); @@ -450,7 +438,7 @@ public void saveSettings( // Update the system default timezone. If the setting is blank use the timezone user.timezone property from command line or // TZ environment variable String zoneId = StringUtils.defaultIfBlank(settingManager.getValue(Settings.SYSTEM_SERVER_TIMEZONE, true), - SettingManager.DEFAULT_SERVER_TIMEZONE.getId()); + SettingManager.DEFAULT_SERVER_TIMEZONE.getId()); TimeZone.setDefault(TimeZone.getTimeZone(zoneId)); @@ -534,7 +522,7 @@ public boolean isCasEnabled( @PreAuthorize("hasAuthority('Administrator')") public void updateStagingProfile( @PathVariable - SystemInfo.Staging profile) { + SystemInfo.Staging profile) { this.info.setStagingProfile(profile.toString()); } @@ -582,22 +570,22 @@ public HttpEntity indexSite( @Parameter(description = "Drop and recreate index", required = false) @RequestParam(required = false, defaultValue = "true") - boolean reset, + boolean reset, @Parameter(description = "Asynchronous mode (only on all records. ie. no selection bucket)", required = false) @RequestParam(required = false, defaultValue = "false") - boolean asynchronous, + boolean asynchronous, @Parameter(description = "Index. By default only remove record index.", required = false) @RequestParam(required = false, defaultValue = "records") - String[] indices, + String[] indices, @Parameter( description = ApiParams.API_PARAM_BUCKET_NAME, required = false) @RequestParam( required = false ) - String bucket, + String bucket, HttpServletRequest request ) throws Exception { ServiceContext context = ApiUtils.createServiceContext(request); @@ -779,7 +767,7 @@ public ProxyConfiguration getProxyConfiguration( public void setLogo( @Parameter(description = "Logo to use for the catalog") @RequestParam("file") - String file, + String file, @Parameter( description = "Create favicon too", required = false @@ -788,7 +776,7 @@ public void setLogo( defaultValue = "false", required = false ) - boolean asFavicon, + boolean asFavicon, HttpServletRequest request ) throws Exception { @@ -901,4 +889,77 @@ public List getXslTransformations( return list; } } + + + @io.swagger.v3.oas.annotations.Operation( + summary = "Send an email to catalogue administrator with feedback about the application", + description = "") + @PostMapping( + value = "/userfeedback", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ResponseStatus(HttpStatus.CREATED) + @ResponseBody + public ResponseEntity sendApplicationUserFeedback( + @Parameter( + description = "Recaptcha validation key." + ) + @RequestParam(required = false, defaultValue = "") final String recaptcha, + @Parameter( + description = "User name.", + required = true + ) + @RequestParam final String name, + @Parameter( + description = "User organisation.", + required = true + ) + @RequestParam final String org, + @Parameter( + description = "User email address.", + required = true + ) + @RequestParam final String email, + @Parameter( + description = "A comment or question.", + required = true + ) + @RequestParam final String comments, + @Parameter(hidden = true) final HttpServletRequest request + ) throws Exception { + Locale locale = languageUtils.parseAcceptLanguage(request.getLocales()); + ResourceBundle messages = ResourceBundle.getBundle("org.fao.geonet.api.Messages", locale); + + boolean feedbackEnabled = settingManager.getValueAsBool(Settings.SYSTEM_USERFEEDBACK_ENABLE, false); + if (!feedbackEnabled) { + throw new FeatureNotEnabledException( + "Application feedback is not enabled.") + .withMessageKey("exception.resourceNotEnabled.applicationFeedback") + .withDescriptionKey("exception.resourceNotEnabled.applicationFeedback.description"); + } + + boolean recaptchaEnabled = settingManager.getValueAsBool(Settings.SYSTEM_USERSELFREGISTRATION_RECAPTCHA_ENABLE); + + if (recaptchaEnabled) { + boolean validRecaptcha = RecaptchaChecker.verify(recaptcha, + settingManager.getValue(Settings.SYSTEM_USERSELFREGISTRATION_RECAPTCHA_SECRETKEY)); + if (!validRecaptcha) { + return new ResponseEntity<>( + messages.getString("recaptcha_not_valid"), HttpStatus.PRECONDITION_FAILED); + } + } + + String to = settingManager.getValue(SYSTEM_FEEDBACK_EMAIL); + + Set toAddress = new HashSet<>(); + toAddress.add(to); + + MailUtil.sendMail(new ArrayList<>(toAddress), + messages.getString("site_user_feedback_title"), + String.format( + messages.getString("site_user_feedback_text"), + name, email, org, comments), + settingManager); + return new ResponseEntity<>(HttpStatus.CREATED); + } } diff --git a/web-ui/src/main/resources/catalog/components/contactus/ContactUsDirective.js b/web-ui/src/main/resources/catalog/components/contactus/ContactUsDirective.js index 1eed76abf55..10df5d42a19 100644 --- a/web-ui/src/main/resources/catalog/components/contactus/ContactUsDirective.js +++ b/web-ui/src/main/resources/catalog/components/contactus/ContactUsDirective.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2024 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -31,28 +31,81 @@ */ module.directive("gnContactUsForm", [ "$http", - function ($http) { + "$translate", + "vcRecaptchaService", + "gnConfigService", + "gnConfig", + function ($http, $translate, vcRecaptchaService, gnConfigService, gnConfig) { return { restrict: "A", replace: true, scope: { user: "=" }, - templateUrl: "../../catalog/components/share/" + "partials/contactusform.html", + templateUrl: + "../../catalog/components/contactus/" + "partials/contactusform.html", link: function (scope, element, attrs) { - scope.send = function (formId) { - $http({ - url: "contact.send@json", - method: "POST", - data: $(formId).serialize(), - headers: { "Content-Type": "application/x-www-form-urlencoded" } - }).then(function (response) { - // TODO: report no email sent - if (response.status === 200) { - scope.success = true; - } else { + gnConfigService.load().then(function (c) { + scope.recaptchaEnabled = + gnConfig["system.userSelfRegistration.recaptcha.enable"]; + scope.recaptchaKey = + gnConfig["system.userSelfRegistration.recaptcha.publickey"]; + }); + + scope.resolveRecaptcha = false; + + function initModel() { + scope.feedbackModel = { + name: scope.user.name, + email: scope.user.email, + org: "", + comments: "" + }; + } + + initModel(); + + scope.send = function (form, formId) { + if (scope.recaptchaEnabled) { + if (vcRecaptchaService.getResponse() === "") { + scope.resolveRecaptcha = true; + + var deferred = $q.defer(); + deferred.resolve(""); + return deferred.promise; } - }); + scope.resolveRecaptcha = false; + scope.captcha = vcRecaptchaService.getResponse(); + $("#recaptcha").val(scope.captcha); + } + + if (form.$valid) { + $http({ + url: "../api/site/userfeedback", + method: "POST", + data: $(formId).serialize(), + headers: { + "Content-Type": "application/x-www-form-urlencoded" + } + }).then( + function (response) { + scope.$emit("StatusUpdated", { + msg: $translate.instant("feebackSent"), + timeout: 2, + type: "info" + }); + initModel(); + }, + function (response) { + scope.success = false; + scope.$emit("StatusUpdated", { + msg: $translate.instant("feebackSentError"), + timeout: 0, + type: "danger" + }); + } + ); + } }; } }; diff --git a/web-ui/src/main/resources/catalog/components/contactus/partials/contactusform.html b/web-ui/src/main/resources/catalog/components/contactus/partials/contactusform.html index 716d5e9dc26..059b1bcd449 100644 --- a/web-ui/src/main/resources/catalog/components/contactus/partials/contactusform.html +++ b/web-ui/src/main/resources/catalog/components/contactus/partials/contactusform.html @@ -1,31 +1,74 @@ -
+ -
- +
+
- +
-
- +
+
- +
-
- +
+
- +
-
- +
+
-
- -

feebackSent

diff --git a/web-ui/src/main/resources/catalog/js/CatController.js b/web-ui/src/main/resources/catalog/js/CatController.js index 4d3e704d994..79b66951b47 100644 --- a/web-ui/src/main/resources/catalog/js/CatController.js +++ b/web-ui/src/main/resources/catalog/js/CatController.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2024 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -1655,6 +1655,10 @@ return gnGlobalSettings.gnCfg.mods.footer.showApplicationInfoAndLinksInFooter; }; + $scope.getContactusVisible = function () { + return gnConfig[gnConfig.key.isFeedbackEnabled]; + }; + function detectNode(detector) { if (detector.regexp) { var res = new RegExp(detector.regexp).exec(location.pathname); diff --git a/web-ui/src/main/resources/catalog/js/ContactUsController.js b/web-ui/src/main/resources/catalog/js/ContactUsController.js index 18876c80ca7..f510439db18 100644 --- a/web-ui/src/main/resources/catalog/js/ContactUsController.js +++ b/web-ui/src/main/resources/catalog/js/ContactUsController.js @@ -26,9 +26,17 @@ goog.require("gn_contactus_directive"); - var module = angular.module("gn_contact_us_controller", ["gn_contactus_directive"]); + var module = angular.module("gn_contact_us_controller", [ + "gn_contactus_directive", + "vcRecaptcha" + ]); - module.constant("$LOCALES", ["core"]); + module.config([ + "$LOCALES", + function ($LOCALES) { + $LOCALES.push("/../api/i18n/packages/search"); + } + ]); /** * diff --git a/web-ui/src/main/resources/catalog/locales/en-admin.json b/web-ui/src/main/resources/catalog/locales/en-admin.json index ec570ee7c95..30282dec251 100644 --- a/web-ui/src/main/resources/catalog/locales/en-admin.json +++ b/web-ui/src/main/resources/catalog/locales/en-admin.json @@ -852,9 +852,9 @@ "userFeedbackList": "Last user feedbacks", "system/userFeedback": "User feedback", "system/userFeedback/enable": "Enable application feedback", - "system/userFeedback/enable-help": "Enabling this option allows to send feedback about the application to the system administrator. It requires the mail server is also configured.", + "system/userFeedback/enable-help": "Enabling this option allows to send feedback about the application to the system administrator. It requires the mail server to be configured.", "system/userFeedback/metadata/enable": "Enable metadata feedback", - "system/userFeedback/metadata/enable-help": "Enabling this option allows to feedback to the metadata owner and system administrator about metadata record. It requires the mail server is also configured.", + "system/userFeedback/metadata/enable-help": "Enabling this option allows to feedback to the metadata owner and system administrator about metadata record. It requires the mail server to be configured.", "system/xlinkResolver": "Metadata XLink", "system/xlinkResolver/enable": "Enable XLink resolution", "system/xlinkResolver/enable-help": "If set, XLinks to metadata fragments in records will be resolved.", diff --git a/web-ui/src/main/resources/catalog/locales/en-core.json b/web-ui/src/main/resources/catalog/locales/en-core.json index e18cb2c1325..cd03dca04eb 100644 --- a/web-ui/src/main/resources/catalog/locales/en-core.json +++ b/web-ui/src/main/resources/catalog/locales/en-core.json @@ -126,6 +126,7 @@ "featureCatalog": "Feature catalog", "frequency": "Frequency", "feebackSent": "Your message has been sent to the catalog manager.", + "feebackSentError": "An error occurred sending your to the catalog manager. Please try again later, contact the service provider, or report this issue.", "feedbackNotEnable": "Feedback is not enabled.", "filter": "Filter", "filterSearch": "Display search options", diff --git a/web-ui/src/main/resources/catalog/views/default/less/gn_contact_us_default.less b/web-ui/src/main/resources/catalog/views/default/less/gn_contact_us_default.less new file mode 100644 index 00000000000..d5c88c43aed --- /dev/null +++ b/web-ui/src/main/resources/catalog/views/default/less/gn_contact_us_default.less @@ -0,0 +1,15 @@ +@import "../../../style/gn_contact_us.less"; + +// nojs styles +.gn-nojs { + .gn-top-search { + padding: 30px 0; + margin-bottom: 30px; + .gn-form-any input.input-lg { + height: 46px; + } + .btn-lg { + padding: 13px 16px; + } + } +} diff --git a/web-ui/src/main/resources/catalog/views/default/templates/footer.html b/web-ui/src/main/resources/catalog/views/default/templates/footer.html index 018b6eedb41..eb006285b99 100644 --- a/web-ui/src/main/resources/catalog/views/default/templates/footer.html +++ b/web-ui/src/main/resources/catalog/views/default/templates/footer.html @@ -12,6 +12,11 @@ about +
  • + + contact + +