diff --git a/db/package-lock.json b/db/package-lock.json index 2762d5ef197..936f9d45667 100644 --- a/db/package-lock.json +++ b/db/package-lock.json @@ -266,7 +266,7 @@ } }, "node_modules/to-regex-range": { - "version": "5.0.1", + "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/FavoritesResult.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/FavoritesResult.java index 81e84f99d55..7595d61ba6b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/FavoritesResult.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/FavoritesResult.java @@ -6,10 +6,11 @@ public class FavoritesResult implements Result { private FavoriteBoatClassesDTO favoriteBoatClasses; private FavoriteCompetitorsDTO favoriteCompetitors; + private boolean isSubscribedToFeatureAndCommunityUpdates; protected FavoritesResult() {} - public FavoritesResult(FavoriteBoatClassesDTO favoriteBoatClasses, FavoriteCompetitorsDTO favoriteCompetitors) { + public FavoritesResult(FavoriteBoatClassesDTO favoriteBoatClasses, FavoriteCompetitorsDTO favoriteCompetitors, boolean isSubscribedToFeatureAndCommunityUpdates) { this.favoriteBoatClasses = favoriteBoatClasses; this.favoriteCompetitors = favoriteCompetitors; } @@ -22,4 +23,8 @@ public FavoriteCompetitorsDTO getFavoriteCompetitors() { return favoriteCompetitors; } + public boolean getIsSubscribedToFeatureAndCommunityUpdates() { + return isSubscribedToFeatureAndCommunityUpdates; + } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/GetFavoritesAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/GetFavoritesAction.java index e6e0a3db652..39acce56188 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/GetFavoritesAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/GetFavoritesAction.java @@ -25,7 +25,12 @@ public class GetFavoritesAction implements SailingAction { @Override @GwtIncompatible public FavoritesResult execute(SailingDispatchContext ctx) throws DispatchException { - return new FavoritesResult(getFavoriteBoatClasses(ctx), getFavoriteCompetitors(ctx)); + return new FavoritesResult(getFavoriteBoatClasses(ctx), getFavoriteCompetitors(ctx), + getDidOptOutOfFeatureAndCommunityEmails(ctx)); + } + + private boolean getDidOptOutOfFeatureAndCommunityEmails(SailingDispatchContext ctx) { + return ctx.getSecurityService().getCurrentUser().getDidOptOutOfFeatureAndCommunityEmails(); } @GwtIncompatible diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/SaveMiscEmailPreferences.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/SaveMiscEmailPreferences.java new file mode 100644 index 00000000000..11008ce0e0c --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/user/profile/SaveMiscEmailPreferences.java @@ -0,0 +1,33 @@ +package com.sap.sailing.gwt.home.communication.user.profile; + +import com.google.gwt.core.shared.GwtIncompatible; +import com.sap.sailing.gwt.home.communication.SailingAction; +import com.sap.sailing.gwt.home.communication.SailingDispatchContext; +import com.sap.sse.gwt.dispatch.shared.commands.HasWriteAction; +import com.sap.sse.gwt.dispatch.shared.commands.VoidResult; +import com.sap.sse.gwt.dispatch.shared.exceptions.DispatchException; +import com.sap.sse.security.shared.UserManagementException; + +public class SaveMiscEmailPreferences implements SailingAction, HasWriteAction { + private Boolean subscribeToFeatureAndCommunityUpdates; + + protected SaveMiscEmailPreferences() { + } + + public SaveMiscEmailPreferences(final Boolean subscribeToFeatureAndCommunityUpdates) { + this.subscribeToFeatureAndCommunityUpdates = subscribeToFeatureAndCommunityUpdates; + } + + @Override + @GwtIncompatible + public VoidResult execute(SailingDispatchContext ctx) throws DispatchException { + try { + final String username = ctx.getSecurityService().getCurrentUser().getName(); + ctx.getSecurityService().updateUserProperties(username, null, null, null, + !subscribeToFeatureAndCommunityUpdates); + } catch (UserManagementException e) { + throw new DispatchException(e.getMessage()); + } + return new VoidResult(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html index 4807003accf..c54a88d2227 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html @@ -12,6 +12,9 @@
April 2026
This comes with general improvements in table selection/de-selection handling.
  • Adding the "Race Rank" column to the leaderboard now consistently adds it after the selection checkbox column and displays it immediately when the settings dialog is confirmed.
  • +
  • Users can now opt out of e-mail communication regarding features and community + information. This will be honored when sending out such general information about + the Sailing Analytics solution.
  • March 2026