From 64f05652a1088f3b1563b3066071d0171940c77f Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Fri, 14 Oct 2022 10:36:06 +0200 Subject: [PATCH] feat:Add push subscription admin link to messages [VIPSUTV-342] --- .../logic/messaging/MessageLocalVersion.java | 5 +- .../vips/logic/messaging/MessagingBean.java | 1 + .../logic/messaging/UniversalMessage.java | 47 +++++++++++++++++++ .../distribution/entity/MsgToSend.java | 35 +++++++++++++- .../send/MailMsgDeliveryHandler.java | 4 +- .../send/SmsMsgDeliveryHandler.java | 4 +- .../modules/barkbeetle/BarkbeetleBean.java | 4 +- .../no/nibio/vips/logic/util/Globals.java | 4 +- .../vips/logic/i18n/vipslogictexts.properties | 1 + .../logic/i18n/vipslogictexts_bs.properties | 1 + .../logic/i18n/vipslogictexts_hr.properties | 1 + .../logic/i18n/vipslogictexts_nb.properties | 1 + .../logic/i18n/vipslogictexts_sr.properties | 1 + .../i18n/vipslogictexts_zh_CN.properties | 1 + 14 files changed, 104 insertions(+), 6 deletions(-) diff --git a/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java b/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java index 563d7430..031b5ab2 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java +++ b/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java @@ -20,7 +20,10 @@ package no.nibio.vips.logic.messaging; /** - * @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a> + * Represents a localized message in the VIPS push notification system. Used by + * the UniversalMessage class + * + * @copyright 2016-2022 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ public class MessageLocalVersion { diff --git a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java index c18f42d8..4b249b51 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java +++ b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java @@ -79,6 +79,7 @@ public class MessagingBean { public void sendUniversalMessage(Message message) { + // TODO: Make URL relative String msgDownloadUrlTpl = "https://www.vips-landbruk.no/messages/" + message.getMessageId() + "/"; // Create a universal message from the message // TODO: When UniversalMessage has changed, pick diff --git a/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java b/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java index 8140c980..c4c4725c 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java +++ b/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java @@ -29,6 +29,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javax.persistence.Basic; @@ -44,6 +45,8 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.xml.bind.annotation.XmlRootElement; + +import com.ibm.icu.util.ULocale; import no.nibio.vips.logic.util.StringJsonUserType; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; @@ -84,6 +87,10 @@ public class UniversalMessage implements Serializable { @Transient private ObjectMapper objectMapper; + + // Include by default. If not needed, use constructor that makes it configurable + @Transient + private Boolean includeNotificationSettingsLink = Boolean.TRUE; public UniversalMessage() { @@ -99,6 +106,19 @@ public class UniversalMessage implements Serializable { { this.addMessageLocalVersion(locale, msgSubject, msgLeadParagraph, msgBody, msgDownloadUrl); } + + public UniversalMessage( + String locale, + String msgSubject, + String msgLeadParagraph, + String msgBody, + String msgDownloadUrl, + Boolean includeNotificationSettingsLink + ) + { + this(locale, msgSubject, msgLeadParagraph, msgBody, msgDownloadUrl); + this.setIncludeNotificationSettingsLink(includeNotificationSettingsLink); + } public final void addMessageLocalVersion( String locale, @@ -235,6 +255,18 @@ public class UniversalMessage implements Serializable { } } + /** + * @param locale two-letter language string + * @return The localized string **template** for generating a link to a user's page for + * managing notification subscription settings + */ + @Transient + public String getNotificationSettingsLinkTpl(String locale) + { + ULocale theLocale = new ULocale(locale); + ResourceBundle rb = ResourceBundle.getBundle("no.nibio.vips.logic.i18n.vipslogictexts",theLocale.toLocale()); + return rb.getString("universalMessageSettingsLink_tpl"); + } private ObjectMapper getObjectMapper() { @@ -244,4 +276,19 @@ public class UniversalMessage implements Serializable { } return this.objectMapper; } + + /** + * If true, the SMS and mail messages will have this type of link appended at the end: + * "To edit your notification subscriptions, please use this link: https://logic.vips.nibio.no/user/notificationsubscription?userId=1" + * The server name can be configured with the system properties no.nibio.vips.logic.VIPSLOGIC_PROTOCOL and no.nibio.vips.logic.SERVER_NAME + * @return + */ + @Transient + public Boolean getIncludeNotificationSettingsLink() { + return includeNotificationSettingsLink; + } + + public void setIncludeNotificationSettingsLink(Boolean includeNotificationSettingsLink) { + this.includeNotificationSettingsLink = includeNotificationSettingsLink; + } } diff --git a/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java b/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java index 4c2fe647..1e3abbee 100644 --- a/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java +++ b/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java @@ -18,7 +18,12 @@ */ package no.nibio.vips.logic.messaging.distribution.entity; +import com.ibm.icu.util.ULocale; +import no.nibio.vips.logic.util.Globals; + import java.net.URL; +import java.text.MessageFormat; +import java.util.ResourceBundle; /** @@ -46,6 +51,10 @@ public class MsgToSend { // The lead paragraph (AKA "Ingress") public String msgLeadParagraph; + // Include by default. If not needed, use constructor that makes it configurable + private Boolean includeNotificationSettingsLink = Boolean.TRUE; + + /* (non-Javadoc) * @see no.nibio.vips_msg_dist.dao.Test#getMsgSubject() */ @@ -116,5 +125,29 @@ public class MsgToSend { this.locale = locale; } - + /** + * @return The localized string **template** for generating a link to a user's page for + * managing notification subscription settings + */ + public String getNotificationSettingsLinkTpl() + { + ULocale theLocale = new ULocale(this.getLocale()); + ResourceBundle rb = ResourceBundle.getBundle("no.nibio.vips.logic.i18n.vipslogictexts",theLocale.toLocale()); + return MessageFormat.format(rb.getString("universalMessageSettingsLink_tpl"), Globals.PROTOCOL + "://" + Globals.SERVER_NAME + "/user/notificationsubscription?userId={0}"); + } + + + /** + * If true, the SMS and mail messages will have this type of link appended at the end: + * "To edit your notification subscriptions, please use this link: https://logic.vips.nibio.no/user/notificationsubscription?userId=1" + * The server name can be configured with the system properties no.nibio.vips.logic.VIPSLOGIC_PROTOCOL and no.nibio.vips.logic.SERVER_NAME + * @return + */ + public Boolean getIncludeNotificationSettingsLink() { + return includeNotificationSettingsLink; + } + + public void setIncludeNotificationSettingsLink(Boolean includeNotificationSettingsLink) { + this.includeNotificationSettingsLink = includeNotificationSettingsLink; + } } diff --git a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java index 19c2273b..d13d028b 100644 --- a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java +++ b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java @@ -19,6 +19,7 @@ package no.nibio.vips.logic.messaging.distribution.send; import java.io.UnsupportedEncodingException; +import java.text.MessageFormat; import java.util.Date; import java.util.Properties; @@ -148,7 +149,8 @@ public class MailMsgDeliveryHandler implements IDeliveryMsgHandler { + " using server " + mailserver); } else { sendMessage(msgToSend.getMsgSubject(), msgToSend.getMsgLeadParagraph(), new StringBuffer(msgToSend.getMsgBody()).append("\n\n") - .append(msgToSend.getMsgDownloadUrl() != null ? msgToSend.getMsgDownloadUrl():""), + .append(msgToSend.getMsgDownloadUrl() != null ? msgToSend.getMsgDownloadUrl():"") + .append(msgToSend.getIncludeNotificationSettingsLink() ? "\n\n" + MessageFormat.format(msgToSend.getNotificationSettingsLinkTpl(),msgReceiver.recipientId): "\n"), msgReceiver.msgDeliveryAddress); } return SingleMsgSentStateEnum.Ok; diff --git a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java index 4d9bb084..965ef4b3 100644 --- a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java +++ b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java @@ -26,6 +26,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; +import java.text.MessageFormat; import javax.mail.MessagingException; import no.nibio.vips.logic.messaging.distribution.entity.MsgReceiver; @@ -134,7 +135,8 @@ public class SmsMsgDeliveryHandler implements IDeliveryMsgHandler { String smsText = msgToSend.getMsgSubject() + "\n" + msgToSend.getMsgLeadParagraph() + "\n" + msgToSend.getMsgBody() - + (msgToSend.getMsgDownloadUrl() != null ? "\n" + msgToSend.getMsgDownloadUrl().toString(): ""); + + (msgToSend.getMsgDownloadUrl() != null ? "\n" + msgToSend.getMsgDownloadUrl().toString(): "\n") + + (msgToSend.getIncludeNotificationSettingsLink() ? "\n\n" + MessageFormat.format(msgToSend.getNotificationSettingsLinkTpl(), msgReceiver.recipientId): "\n"); LOGGER.debug(smsText); LOGGER.debug("Teksten er på " + smsText.length() + " tegn."); diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java index 8257d46d..64a6f555 100644 --- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java +++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java @@ -842,11 +842,13 @@ public class BarkbeetleBean { * @param users * @param heading * @param message - * @param url */ public void sendReminder(List<VipsLogicUser> users, String heading, String message) { UniversalMessage uMessage = new UniversalMessage(); + // The notificationSettingsLink is relevant to regular VIPS notifications, not + // these barkbeetle reminders, so omitting this here. + uMessage.setIncludeNotificationSettingsLink(false); Calendar cal = Calendar.getInstance(BarkbeetleBean.NORGE_MITT_NORGE); cal.setTime(new Date()); cal.add(Calendar.DATE, 2); diff --git a/src/main/java/no/nibio/vips/logic/util/Globals.java b/src/main/java/no/nibio/vips/logic/util/Globals.java index 407c77c7..82180bf0 100755 --- a/src/main/java/no/nibio/vips/logic/util/Globals.java +++ b/src/main/java/no/nibio/vips/logic/util/Globals.java @@ -70,6 +70,8 @@ public class Globals { public static int DEFAULT_UUID_VALIDITY_DURATION_DAYS = 30; - public static String PROTOCOL = System.getProperty("no.nibio.vips.logic.VIPSLOGIC_PROTOCOL"); + public static String PROTOCOL = System.getProperty("no.nibio.vips.logic.VIPSLOGIC_PROTOCOL") != null ? System.getProperty("no.nibio.vips.logic.VIPSLOGIC_PROTOCOL") : "http"; + + public static String SERVER_NAME = System.getProperty("no.nibio.vips.logic.SERVER_NAME") != null ? System.getProperty("no.nibio.vips.logic.SERVER_NAME") : "logic.vips.nibio.no"; } diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties index 9c6384c2..b97d6017 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties @@ -1041,3 +1041,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties index 10be4017..f2572880 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties @@ -1034,3 +1034,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your VIPS notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties index 97b0be0a..34aa7af5 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties @@ -1033,3 +1033,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties index 6fb3a590..dbb32157 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties @@ -1042,3 +1042,4 @@ addIllustration=Legg til illustrasjon allRoles=Alle roller allStatuses=Alle statuser LEAFBLOTCH=Bladflekksjukdomsmodell +universalMessageSettingsLink_tpl=For � endre dine abonnement p� push-varsler fra VIPS, bruk denne lenken: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties index 752a7e00..bc87ecca 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties @@ -1035,3 +1035,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties index ba7e355e..3bb3a5d8 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties @@ -1028,3 +1028,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} -- GitLab