diff --git a/java/com.sap.sailing.server/resources/stringmessages/StringMessages_de.properties b/java/com.sap.sailing.server/resources/stringmessages/StringMessages_de.properties index 2ce5ae96bc8..17c634fa2e8 100644 --- a/java/com.sap.sailing.server/resources/stringmessages/StringMessages_de.properties +++ b/java/com.sap.sailing.server/resources/stringmessages/StringMessages_de.properties @@ -3,32 +3,32 @@ raceInFleetInRegattaOfEvent=Wettfahrt {0} ({3}) der Regatta "{1}" bei Veranstalt leaderboardOfEvent=Rangliste "{0}" bei Veranstaltung "{1}" leaderboardShowResultsLinkTitle=Ergebnisse anzeigen -racesOverviewLinkTitle=Wettfahrtübersicht anzeigen +racesOverviewLinkTitle=Wettfahrtübersicht anzeigen raceboardShowRaceLinkTitle=Wettfahrt anzeigen raceboardRaceAnalysisLinkTitle=Wettfahrtanalyse anzeigen boatClassRaceFinishedSubject=Wettfahrt für Bootsklasse {0} beendet - Neue Ergebnisse verfügbar # 0: boatClassName, 1: raceDescription -boatClassRaceFinishedBody=Neue Ergebnisse für Bootsklasse {0} in {1} sind verfügbar. +boatClassRaceFinishedBody=Neue Ergebnisse für Bootsklasse {0} in {1} sind verfügbar. boatClassScoreCorrectionSubject=Neue Ergebnisse für Bootsklasse {0} verfügbar # 0: boatClassName, 1: leaderboardDescription -boatClassScoreCorrectionBody=Neue Ergebnisse für Bootsklasse {0} in {1} sind verfügbar. +boatClassScoreCorrectionBody=Neue Ergebnisse für Bootsklasse {0} in {1} sind verfügbar. competitorPassesFinishSubject=Teilnehmer {0} hat eine Wettfahrt beendet # 0: competitorName, 1: raceDescription -competitorPassesFinishBody=Teilnehmer {0} hat bei {1} die Ziellinie überquert. +competitorPassesFinishBody=Teilnehmer {0} hat bei {1} die Ziellinie überquert. competitorScoreCorrectionSubject=Neue Ergebnisse für Teilnehmer {0} # 0: competitorName, 1: leaderboardDescription -competitorScoreCorrectionBody=Für Teilnehmer {0} in {1} sind neue Ergebnisse verfügbar. +competitorScoreCorrectionBody=Für Teilnehmer {0} in {1} sind neue Ergebnisse verfügbar. boatClassUpcomingRaceSubject=Wettfahrt in Bootsklasse {0} startet bald # 0: boatClassName, 1: raceDescription, 2: time boatClassUpcomingRaceBody=In Bootsklasse {0} startet {1} um etwa {2}. -subscriptionInformation=Bei dieser Mail handelt es sich um eine automatisierte Benachrichtigung von SAP Sailing Analytics. Die Benachrichtigungen können im Benutzerprofil (s.u.) abgeschaltet werden. +subscriptionInformation=Bei dieser Mail handelt es sich um eine automatisierte Benachrichtigung von SAP Sailing Analytics. Die Benachrichtigungen können im Benutzerprofil (s.u.) abgeschaltet werden. userProfile=Benutzerprofil imprint=Impressum -privacy=Datenschutzerklärung +privacy=Datenschutzerklärung salutation=Hallo {0}, \ No newline at end of file diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/notification/impl/NotificationSetNotification.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/notification/impl/NotificationSetNotification.java index 696aab0aca7..cffac440ac8 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/notification/impl/NotificationSetNotification.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/notification/impl/NotificationSetNotification.java @@ -107,32 +107,45 @@ public abstract class NotificationSetNotification implements MailNotification private String getMailContent(NotificationMailTemplate notificationMailTemplate, User user, Locale locale) { StringBuilder bodyContent = new StringBuilder(); if (notificationMailTemplate.getTitle() != null) { - bodyContent.append("

").append(notificationMailTemplate.getTitle()).append("

"); + bodyContent.append("

") + .append(notificationMailTemplate.getTitle()) + .append("

"); } String name = user.getFullName() == null || user.getFullName().isEmpty() ? user.getName() : user.getFullName(); - bodyContent.append("

").append(messages.get(locale, "salutation", name)).append("

"); - bodyContent.append("

").append(notificationMailTemplate.getText()).append("

"); + bodyContent.append("

") + .append(htmlify(messages.get(locale, "salutation", name))) + .append("

"); + bodyContent.append("

") + .append(htmlify(notificationMailTemplate.getText())) + .append("

"); for (Pair link : notificationMailTemplate.getLabelsAndLinkUrls()) { - bodyContent.append("
").append("").append(link.getA()).append("").append("
"); + bodyContent.append(""); } String siteLink = "" + notificationMailTemplate.getServerBaseUrl() + ""; StringBuilder footerLinks = new StringBuilder(); - footerLinks // - .append("").append(messages.get(locale, "userProfile")).append("") + .append("/gwt/Home.html#/user/profile/:\">") + .append(htmlify(messages.get(locale, "userProfile"))) + .append("") .append(" | "); footerLinks.append("") - .append(messages.get(locale, "imprint")).append("") + .append(htmlify(messages.get(locale, "imprint"))) + .append("") .append(" | "); footerLinks.append("") - .append(messages.get(locale, "privacy")) + .append(htmlify(messages.get(locale, "privacy"))) .append(""); - String subscriptionInformation = messages.get(locale, "subscriptionInformation"); - return TEMPLATE // + String subscriptionInformation = htmlify(messages.get(locale, "subscriptionInformation")); + return TEMPLATE .replace("${title}", notificationMailTemplate.getSubject()) .replace("${content}", bodyContent.toString()) .replace("${subscription_information}", subscriptionInformation) @@ -141,6 +154,14 @@ public abstract class NotificationSetNotification implements MailNotification ; } + private String htmlify(String source) { + StringBuilder result = new StringBuilder(); + for (char c : source.toCharArray()) { + result.append(("\"<>&".indexOf(c) >= 0 || c > 127) ? ( "&#" + (int) c + ";") : Character.toString(c)); + } + return result.toString(); + } + protected abstract NotificationMailTemplate getMailTemplate(T objectToNotifyAbout, Locale locale); } \ No newline at end of file