diff --git a/zanata-war/src/main/java/org/zanata/email/LanguageTeamPermissionChangeEmailStrategy.java b/zanata-war/src/main/java/org/zanata/email/LanguageTeamPermissionChangeEmailStrategy.java index 99fb32627d..7694aa0b86 100644 --- a/zanata-war/src/main/java/org/zanata/email/LanguageTeamPermissionChangeEmailStrategy.java +++ b/zanata-war/src/main/java/org/zanata/email/LanguageTeamPermissionChangeEmailStrategy.java @@ -5,7 +5,6 @@ import org.zanata.events.LanguageTeamPermissionChangedEvent; import org.zanata.i18n.Messages; -import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.googlecode.totallylazy.collections.PersistentMap; import lombok.RequiredArgsConstructor; @@ -18,6 +17,7 @@ public class LanguageTeamPermissionChangeEmailStrategy extends EmailStrategy { private final LanguageTeamPermissionChangedEvent changedEvent; private final Messages msgs; + private final String contactCoordinatorLink; @Override public String getSubject(Messages msgs) { @@ -30,13 +30,6 @@ public String getBodyResourceName() { return "org/zanata/email/templates/language_team_permission_changed.vm"; } - @Override - public Optional getReplyToAddress() { - return Optional.of(Addresses.getReplyTo( - changedEvent.getChangedByEmail(), - changedEvent.getChangedByName())); - } - @Override public PersistentMap makeContext( PersistentMap genericContext, @@ -44,7 +37,7 @@ public PersistentMap makeContext( PersistentMap context = super.makeContext( genericContext, toAddresses); List oldPermissions = Lists.newArrayList(); - if (changedEvent.numOfGrantedOldPermissions() == 0) { + if (changedEvent.hasNoOldPermissions()) { oldPermissions .add( msgs.get("jsf.email.languageteam.permission.old.notInTeam")); @@ -54,7 +47,7 @@ public PersistentMap makeContext( } List newPermissions = Lists.newArrayList(); - if (changedEvent.numOfGrantedNewPermissions() == 0) { + if (changedEvent.hasNoNewPermissions()) { newPermissions.add(msgs .get("jsf.email.languageteam.permission.new.notInTeam")); } else { @@ -65,9 +58,9 @@ public PersistentMap makeContext( return context .insert("language", changedEvent.getLanguage()) .insert("changedByName", changedEvent.getChangedByName()) - .insert("changedByEmail", changedEvent.getChangedByEmail()) .insert("oldPermissions", oldPermissions) .insert("newPermissions", newPermissions) + .insert("contactCoordinatorLink", contactCoordinatorLink) .insert("toName", toAddresses[0].getPersonal()); } @@ -91,3 +84,6 @@ private void transformPermissionToDescription( } } } + + + diff --git a/zanata-war/src/main/java/org/zanata/events/LanguageTeamPermissionChangedEvent.java b/zanata-war/src/main/java/org/zanata/events/LanguageTeamPermissionChangedEvent.java index 20297fed59..1f01599bed 100644 --- a/zanata-war/src/main/java/org/zanata/events/LanguageTeamPermissionChangedEvent.java +++ b/zanata-war/src/main/java/org/zanata/events/LanguageTeamPermissionChangedEvent.java @@ -29,7 +29,6 @@ public class LanguageTeamPermissionChangedEvent implements Serializable { private final String name; private final String email; private final String changedByName; - private final String changedByEmail; private List oldPermission = ImmutableList.of(false, false, false); private List newPermission = ImmutableList.of(false, false, false); @@ -39,7 +38,6 @@ public LanguageTeamPermissionChangedEvent(HPerson person, LocaleId language, email = person.getEmail(); this.language = language; changedByName = doneByPerson.getName(); - changedByEmail = doneByPerson.getEmail(); } public LanguageTeamPermissionChangedEvent joiningTheTeam( @@ -100,12 +98,18 @@ private LanguageTeamPermissionChangedEvent newPermission( return this; } - public int numOfGrantedOldPermissions() { - return Iterables.frequency(oldPermission, Boolean.TRUE); + // when user has no roles assigned or was not part of the team + public boolean hasNoOldPermissions() { + return Iterables.frequency(oldPermission, Boolean.TRUE) == 0; } - public int numOfGrantedNewPermissions() { - return Iterables.frequency(newPermission, Boolean.TRUE); + // when user has no roles assigned or is removed from the team + public boolean hasNoNewPermissions() { + return Iterables.frequency(newPermission, Boolean.TRUE) == 0; + } + + public boolean hasPermissionsChanged() { + return !oldPermission.equals(newPermission); } public boolean translatorPermissionOf(List permissionList) { @@ -125,11 +129,9 @@ private static Boolean getPermission(List permissionList, return permissionList.get(permission.ordinal()); } - public boolean isPermissionChanged() { - return !oldPermission.equals(newPermission); - } - private static enum Permission { translator, reviewer, coordinator } } + + diff --git a/zanata-war/src/main/java/org/zanata/notification/LanguageTeamPermissionChangeJmsMessagePayloadHandler.java b/zanata-war/src/main/java/org/zanata/notification/LanguageTeamPermissionChangeJmsMessagePayloadHandler.java index bcbb744f5f..323d6b0115 100644 --- a/zanata-war/src/main/java/org/zanata/notification/LanguageTeamPermissionChangeJmsMessagePayloadHandler.java +++ b/zanata-war/src/main/java/org/zanata/notification/LanguageTeamPermissionChangeJmsMessagePayloadHandler.java @@ -29,6 +29,7 @@ import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; +import org.zanata.ApplicationConfiguration; import org.zanata.email.Addresses; import org.zanata.email.EmailBuilder; import org.zanata.email.LanguageTeamPermissionChangeEmailStrategy; @@ -58,6 +59,9 @@ public class LanguageTeamPermissionChangeJmsMessagePayloadHandler implements @In private Messages msgs; + @In + private ApplicationConfiguration applicationConfiguration; + @Override public void handle(Serializable data) { if (!(data instanceof LanguageTeamPermissionChangedEvent)) { @@ -69,12 +73,20 @@ public void handle(Serializable data) { LanguageTeamPermissionChangedEvent.class.cast(data); log.debug("language team permission change data:{}", changedEvent); + if (!changedEvent.hasPermissionsChanged()) { + // permission didn't really changed + return; + } + String receivedReason = msgs.format("jsf.email.languageteam.permission.ReceivedReason", changedEvent.getLanguage()); + String contactTeamCoordinatorLink = + applicationConfiguration.getServerPath() + + "/language/contact/" + changedEvent.getLanguage(); LanguageTeamPermissionChangeEmailStrategy emailStrategy = new LanguageTeamPermissionChangeEmailStrategy( - changedEvent, msgs); + changedEvent, msgs, contactTeamCoordinatorLink); InternetAddress to = Addresses.getAddress(changedEvent.getEmail(), changedEvent.getName()); @@ -84,3 +96,5 @@ public void handle(Serializable data) { } + + diff --git a/zanata-war/src/main/java/org/zanata/service/impl/LanguageTeamServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/LanguageTeamServiceImpl.java index 109537b368..f5f9c59eac 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/LanguageTeamServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/LanguageTeamServiceImpl.java @@ -100,7 +100,7 @@ public void joinOrUpdateRoleInLanguageTeam(String locale, Long personId, } localeMemberDAO.makePersistent(localeMember); localeMemberDAO.flush(); - if (Events.exists() && permissionChangedEvent.isPermissionChanged()) { + if (Events.exists()) { Events.instance().raiseTransactionSuccessEvent( LanguageTeamPermissionChangedEvent.LANGUAGE_TEAM_PERMISSION_CHANGED, permissionChangedEvent); @@ -141,3 +141,5 @@ public boolean isUserReviewer(Long personId) { .isEmpty(); } } + + diff --git a/zanata-war/src/main/resources/messages.properties b/zanata-war/src/main/resources/messages.properties index a895c143b1..82a6effabc 100644 --- a/zanata-war/src/main/resources/messages.properties +++ b/zanata-war/src/main/resources/messages.properties @@ -1183,7 +1183,8 @@ jsf.email.group.maintainer.ReceivedReason=You are maintainer in group "{0}" jsf.email.languageteam.permission.Subject=Your permissions in language team "{0}" have changed jsf.email.languageteam.permission.ReceivedReason=You are a team member in the "{0}" language team jsf.email.languageteam.permission.DearName=Dear {0}, -jsf.email.languageteam.permission.Changed={0}({1}) has changed your permissions in language team "{2}". +jsf.email.languageteam.permission.howToReply=Please do not reply to this system generated email. For any questions, please contact your team coordinator. +jsf.email.languageteam.permission.Changed={0} has changed your permissions in language team "{1}". jsf.email.languageteam.permission.old.prefix=You were: jsf.email.languageteam.permission.old.notInTeam=not a team member. jsf.email.languageteam.permission.new.prefix=You are now: @@ -1277,3 +1278,5 @@ javax.faces.validator.LongRangeValidator.TYPE=value is not of the correct type javax.faces.validator.NOT_IN_RANGE=value must be between {0} and {1} javax.faces.converter.STRING=value could not be converted to a string + + diff --git a/zanata-war/src/main/resources/org/zanata/email/templates/language_team_permission_changed.vm b/zanata-war/src/main/resources/org/zanata/email/templates/language_team_permission_changed.vm index 3928be02a4..3608662027 100644 --- a/zanata-war/src/main/resources/org/zanata/email/templates/language_team_permission_changed.vm +++ b/zanata-war/src/main/resources/org/zanata/email/templates/language_team_permission_changed.vm @@ -1,6 +1,6 @@

$msgs.format("jsf.email.languageteam.permission.DearName", $toName)

-

$msgs.format("jsf.email.languageteam.permission.Changed", $changedByName, $changedByEmail, $language)

+

$msgs.format("jsf.email.languageteam.permission.Changed", $changedByName, $language)

$msgs.get("jsf.email.languageteam.permission.old.prefix")

    @@ -15,3 +15,5 @@
  • $permission
  • #end
+ +

$msgs.format("jsf.email.languageteam.permission.howToReply", $contactCoordinatorLink)