[kune-commits] r1649 - in trunk/src/main: java/cc/kune/core/server/mail java/cc/kune/core/server/manager/impl java/cc/kune/core/server/notifier java/cc/kune/core/server/properties java/cc/kune/core/shared/dto java/cc/kune/gspace/client/options/general java/cc/kune/wave/server resources
Vicente J. Ruiz Jurado
vjrj_ at ourproject.org
Tue Dec 27 19:32:10 CET 2011
Author: vjrj_
Date: 2011-12-27 19:32:08 +0100 (Tue, 27 Dec 2011)
New Revision: 1649
Added:
trunk/src/main/resources/mail-notif-template.html
Modified:
trunk/src/main/java/cc/kune/core/server/mail/MailService.java
trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java
trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java
trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java
trunk/src/main/resources/kune.properties
Log:
NEW - # 164: NotificationManager in server side
http://kune.ourproject.org/issues/ticket/164
Modified: trunk/src/main/java/cc/kune/core/server/mail/MailService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/mail/MailService.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/mail/MailService.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -24,6 +24,34 @@
public interface MailService {
/**
+ * Sends email
+ *
+ * @param subject
+ * the email subject
+ * @param body
+ * the body of the email in text or html format
+ * @param from
+ * the sender
+ * @param tos
+ * the recipients
+ */
+ void send(FormatedString subject, FormatedString body, boolean isHtml, String... tos);
+
+ /**
+ * Sends email
+ *
+ * @param subject
+ * the email subject
+ * @param body
+ * the body of the email in text or html format
+ * @param from
+ * the sender
+ * @param tos
+ * the recipients
+ */
+ void send(String from, FormatedString subject, FormatedString body, boolean isHtml, String... tos);
+
+ /**
* Sends html email with default site "from"
*
* @param subject
Modified: trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/mail/MailServiceDefault.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -97,7 +97,14 @@
props.put("mail.smtp.host", smtpServer);
}
- private void send(final String from, final FormatedString subject, final FormatedString body,
+ @Override
+ public void send(final FormatedString subject, final FormatedString body, final boolean isHtml,
+ final String... tos) {
+ send(smtpDefaultFrom, subject, body, isHtml, tos);
+ }
+
+ @Override
+ public void send(final String from, final FormatedString subject, final FormatedString body,
final boolean isHtml, final String... tos) {
if (smtpSkip) {
return;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -371,6 +371,7 @@
final String longName = userDTO.getName();
final String email = userDTO.getEmail();
final Group userGroup = user.getUserGroup();
+ user.setEmailNotifFreq(userDTO.getEmailNotifFreq());
// We don't allow to change shortName because we cannot change shotNames in
// wave accounts
// if (!shortName.equals(user.getShortName())) {
Modified: trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotifyServiceDefault.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -1,24 +1,33 @@
package cc.kune.core.server.notifier;
+import java.io.File;
+import java.io.IOException;
+
import javax.persistence.NoResultException;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import cc.kune.common.client.utils.TextUtils;
import cc.kune.core.server.mail.MailService;
import cc.kune.core.server.mail.MailServiceDefault.FormatedString;
import cc.kune.core.server.manager.I18nTranslationManager;
import cc.kune.core.server.manager.UserManager;
+import cc.kune.core.server.properties.KuneProperties;
import cc.kune.core.server.xmpp.XmppManager;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.domain.User;
import cc.kune.wave.server.KuneWaveService;
+import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class NotifyServiceDefault implements NotifyService {
public static final Log LOG = LogFactory.getLog(NotifyServiceDefault.class);
+ private final String emailTemplate;
private final I18nTranslationManager i18n;
private final MailService mailService;
private final UserManager userManager;
@@ -27,12 +36,17 @@
@Inject
public NotifyServiceDefault(final MailService mailService, final KuneWaveService waveService,
- final XmppManager xmppManager, final UserManager userManager, final I18nTranslationManager i18n) {
+ final XmppManager xmppManager, final UserManager userManager, final I18nTranslationManager i18n,
+ final KuneProperties kuneProperties) throws IOException {
this.mailService = mailService;
this.waveService = waveService;
this.xmppManager = xmppManager;
this.userManager = userManager;
this.i18n = i18n;
+ emailTemplate = FileUtils.readFileToString(new File(
+ kuneProperties.get(KuneProperties.SITE_EMAIL_TEMPLATE)));
+ Preconditions.checkNotNull(emailTemplate);
+ Preconditions.checkArgument(TextUtils.notEmpty(emailTemplate));
}
@Override
@@ -50,12 +64,14 @@
final String subjectTranslation = i18n.getTranslation(user.getLanguage().getCode(),
subject.getTemplate(), "");
if (subjectTranslation != null) {
- subject.setTemplate(subjectTranslation);
+ // Right now commented because we are only testing
+ // subject.setTemplate(subjectTranslation);
}
final String bodyTranslation = i18n.getTranslation(user.getLanguage().getCode(),
body.getTemplate(), "");
if (bodyTranslation != null) {
- body.setTemplate(bodyTranslation);
+ // Right now commented because we are only testing
+ // body.setTemplate(bodyTranslation);
}
switch (notifyType) {
case chat:
@@ -63,11 +79,11 @@
String.format("<b>%s</b>%s", subject.getString(), body.getString()));
break;
case email:
- final String email = user.getEmail();
- if (isHtml) {
- mailService.sendHtml(subject, body, email);
+ if (user.getEmailNotifFreq().equals(EmailNotificationFrequency.immediately)) {
+ mailService.send(subject, FormatedString.build(emailTemplate.replace("%s", body.getString())),
+ isHtml, user.getEmail());
} else {
- mailService.sendPlain(subject, body, email);
+ // TODO: handle other types of notifications frequencies
}
break;
case wave:
Modified: trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/server/properties/KuneProperties.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -49,6 +49,7 @@
String SITE_DB_USER = "kune.db.user";
String SITE_DEF_LICENSE = "kune.default.license";
String SITE_DOMAIN = "kune.site.domain";
+ String SITE_EMAIL_TEMPLATE = "kune.site.email.template";
String SITE_GROUP_AVAILABLE_TOOLS = "kune.tools.groupSiteAvailableTools";
String SITE_GROUP_REGIST_ENABLED_TOOLS = "kune.tools.groupRegisEnabledTools";
String SITE_LOGO_URL = "kune.sitelogourl";
Modified: trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -19,6 +19,7 @@
*/
package cc.kune.core.shared.dto;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.core.shared.domain.utils.StateToken;
import com.google.gwt.user.client.rpc.IsSerializable;
@@ -32,6 +33,7 @@
private String shortName;
private StateToken stateToken;
private TimeZoneDTO timezone;
+ private EmailNotificationFrequency emailNotifFreq;
public UserSimpleDTO() {
this(null, null, null, null, null);
@@ -157,4 +159,12 @@
return "UserSimpleDTO(" + shortName + ")";
}
+ public EmailNotificationFrequency getEmailNotifFreq() {
+ return emailNotifFreq;
+ }
+
+ public void setEmailNotifFreq(EmailNotificationFrequency emailNotifFreq) {
+ this.emailNotifFreq = emailNotifFreq;
+ }
+
}
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -26,6 +26,7 @@
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
import cc.kune.gspace.client.i18n.LanguageSelectorPanel;
+import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.google.inject.Inject;
@@ -33,6 +34,7 @@
public class UserOptGeneralPanel extends EntityOptGeneralPanel implements UserOptGeneralView {
private static final String LONG_NAME_FIELD = "k-uogp-lname";
+ private final CheckBox emailNotifField;
private final LanguageSelectorPanel langSelector;
private final TextField<String> longName;
@@ -48,6 +50,9 @@
langSelector.setLabelAlign(LabelAlign.LEFT);
langSelector.setLangSeparator(":");
add(langSelector);
+ emailNotifField = new CheckBox();
+ emailNotifField.setFieldLabel(i18n.t("Email notifications"));
+ add(emailNotifField);
}
@Override
@@ -60,6 +65,14 @@
return longName.getValue();
}
+ public boolean isEmailNofifField() {
+ return emailNotifField.getValue();
+ }
+
+ public void setEmailNofifField(final boolean value) {
+ emailNotifField.setValue(value);
+ }
+
@Override
public void setLanguage(final I18nLanguageSimpleDTO language) {
langSelector.setLanguage(language);
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -28,6 +28,7 @@
import cc.kune.core.client.state.StateManager;
import cc.kune.core.client.state.UserSignInEvent;
import cc.kune.core.client.state.UserSignInEvent.UserSignInHandler;
+import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
import cc.kune.core.shared.dto.StateAbstractDTO;
import cc.kune.core.shared.dto.UserDTO;
@@ -74,6 +75,8 @@
final UserSimpleDTO currentUser = session.getCurrentUser();
userView.setLongName(currentUser.getName());
userView.setLanguage(I18nLanguageSimpleDTO.create(currentUser.getLanguage()));
+ userView.setEmailNofifField(currentUser.getEmailNotifFreq().equals(
+ EmailNotificationFrequency.immediately));
}
@Override
@@ -86,6 +89,8 @@
final String longName = userView.getLongName();
user.setName(longName);
final I18nLanguageSimpleDTO lang = userView.getLanguage();
+ user.setEmailNotifFreq(userView.isEmailNofifField() ? EmailNotificationFrequency.immediately
+ : EmailNotificationFrequency.no);
userService.get().updateUser(session.getUserHash(), user, userView.getLanguage(),
new AsyncCallbackSimple<StateAbstractDTO>() {
@Override
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -27,6 +27,10 @@
String getLongName();
+ boolean isEmailNofifField();
+
+ void setEmailNofifField(boolean value);
+
void setLanguage(I18nLanguageSimpleDTO language);
void setLongName(String longName);
Modified: trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/java/cc/kune/wave/server/WaveEmailNotifier.java 2011-12-27 18:32:08 UTC (rev 1649)
@@ -57,7 +57,7 @@
final String address = user.getAddress();
if (partUtils.isLocal(address)) {
final String userName = partUtils.getAddressName(address);
- if (!usersOnline.isLogged(userName)) {
+ if (true || !usersOnline.isLogged(userName)) {
notifyService.send(NotifyType.email, FormatedString.build("You have a new message"),
body, true, userName);
notifyService.send(NotifyType.chat, FormatedString.build("New message"), body, true,
Modified: trunk/src/main/resources/kune.properties
===================================================================
--- trunk/src/main/resources/kune.properties 2011-12-27 01:32:05 UTC (rev 1648)
+++ trunk/src/main/resources/kune.properties 2011-12-27 18:32:08 UTC (rev 1649)
@@ -28,7 +28,12 @@
kune.site.smtp.defaultfrom = noreply at localhost
# If we should avoid the use of smtp (use only for avoid emails during development)
kune.site.smtp.skip = false
+# This file will we the html used to send emails to users.
+# We'll substitute the first %s by the body of the notification.
+# You can put this file in /etc/kune
+kune.site.email.template = src/main/resources/mail-notif-template.html
+
### Database
# Persistence name, choose between:
Added: trunk/src/main/resources/mail-notif-template.html
===================================================================
--- trunk/src/main/resources/mail-notif-template.html (rev 0)
+++ trunk/src/main/resources/mail-notif-template.html 2011-12-27 18:32:08 UTC (rev 1649)
@@ -0,0 +1,121 @@
+<table bgcolor="#f1f1f1" border="0" cellpadding="0" cellspacing="0"
+ height="100%" width="100%">
+ <tbody>
+ <tr>
+ <td align="center" valign="top">
+ <div style="text-align: justify;"> </div>
+ <table border="0" cellpadding="0" cellspacing="0"
+ width="751">
+ <tbody>
+ <tr>
+ <td style="padding: 10px 0pt 10px 10px; font-family:
+ Arial,Helvetica,sans-serif; font-size: 11px; color:
+ rgb(136, 136, 136);" align="left">
+ <div style="text-align: center;"> Images not
+ displaying
+ properly? Add <a
+ href="mailto:noreply-FIXME at example.org"
+ style="color: rgb(64, 137, 187);">noreply-FIXME at example.org</a>
+ to your
+ address book. </div>
+ </td>
+ </tr>
+ <tr>
+ <td style="border: 1px solid rgb(156, 156, 156);
+ padding: 5px; -moz-border-radius-topleft: 5px !
+ important; -moz-border-radius-topright: 5px !
+ important; -moz-border-radius-bottomright: 5px !
+ important; -moz-border-radius-bottomleft: 5px !
+ important;" align="left" bgcolor="#ffffff">
+ <div style="border: 7px solid rgb(198, 168, 141);
+ -moz-border-radius-topleft: 5px ! important;
+ -moz-border-radius-topright: 5px ! important;
+ -moz-border-radius-bottomright: 5px ! important;
+ -moz-border-radius-bottomleft: 5px ! important;">
+ <table style="border-radius: 3px 3px 3px 3px !
+ important;" border="0" cellpadding="0"
+ cellspacing="0" width="725">
+ <tbody>
+ <tr>
+ <td style="padding: 0pt 0pt 20px;">
+ <div style="text-align: justify;"> </div>
+ <table border="0" cellpadding="0"
+ cellspacing="0" height="50" width="725">
+ <tbody>
+ <tr>
+ <td style="font-family:
+ Arial,Helvetica,sans-serif;
+ font-size: 14px; color: rgb(51,
+ 51, 51); padding: 0px 0px 20px
+ 20px;" align="left" valign="top"
+ width="297"><br>
+ <a
+ href="http://FIXME-yoursite-url/"
+ target="_blank"><img
+ style="border-top: 0px solid;
+ border-bottom: 0px solid;
+ -moz-border-top-colors: none;
+ -moz-border-right-colors:
+ none;
+ -moz-border-bottom-colors:
+ none; -moz-border-left-colors:
+ none; -moz-border-image:
+ none;" moz-do-not-send="true"
+ src="ws/logo-big-home.png#FIXME-logo" alt="your
+ site name FIXME" align="top"
+ border="0" height="41"
+ width="287"></a></td>
+ <td
+ style="border-bottom-left-radius: 10px; font-family:
+ Arial,Helvetica,sans-serif; background-color: rgb(244, 214, 188);
+ font-size: 12px; color: rgb(102,
+ 102, 102); line-height: 17px;
+ padding: 20px;" align="left"
+ valign="top"
+ width="143">
+ <p style="margin: 0pt 0pt 8px;
+ font-size: 15px; color: rgb(85,
+ 85, 85);"> <b>Some Info FIXME:</b></p>
+ <br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="padding: 20px; font-family: Arial,Helvetica,sans-serif;" valign="top"><br>
+ <br>
+ %s<br>
+ <br>
+ <br>
+ </td>
+ </tr>
+ <tr>
+ <td style="border-top-width: 1px;
+ border-top-style: solid; border-top-color:
+ rgb(214, 214, 214); background-color:
+ rgb(255, 245, 237); font-family:
+ Arial,Helvetica,sans-serif; font-size:
+ 11px; color: rgb(102, 102, 102);
+ line-height: 17px; padding: 5px 10px;"
+ bgcolor="#ffb380"> To ensure this email
+ always reaches your inbox, please add <a
+ href="mailto:noreply at example.org">noreply at example.orgFIXME</a>
+ to your address book. If you prefer not to
+ receive this emails in the future, please
+ update your
+ preferences in <a href="http://FIXME">this
+ link</a>.</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
\ No newline at end of file
More information about the kune-commits
mailing list