From f6ead6c91a76017cd53dde1137537f7f506ad487 Mon Sep 17 00:00:00 2001 From: fkiefer <none@none> Date: Tue, 4 Apr 2017 15:01:08 +0200 Subject: [PATCH] OO-2621 enable nullable info message author --- .../info/manager/InfoMessageFrontendManager.java | 2 +- .../manager/InfoMessageFrontendManagerImpl.java | 14 +++++++++++--- .../info/manager/InfoMessageManagerImpl.java | 15 ++++++++------- .../olat/commons/info/model/InfoMessageImpl.java | 4 ++-- .../commons/info/ui/InfoDisplayController.java | 7 ++++++- .../info/ui/_i18n/LocalStrings_de.properties | 1 + .../info/ui/_i18n/LocalStrings_en.properties | 1 + .../group/manager/BusinessGroupServiceImpl.java | 2 +- 8 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java index 99fda9dbdff..c59d8869e22 100644 --- a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java +++ b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java @@ -62,7 +62,7 @@ public interface InfoMessageFrontendManager { public void deleteInfoMessage(InfoMessage infoMessage); - public void deleteInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity); + public void updateInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity); public void removeInfoMessagesAndSubscriptionContext(BusinessGroup group); diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java index 57aab19ea57..c1413b8c378 100644 --- a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java +++ b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java @@ -27,6 +27,7 @@ import java.util.Locale; import java.util.Set; import org.olat.commons.info.model.InfoMessage; +import org.olat.commons.info.model.InfoMessageImpl; import org.olat.commons.info.notification.InfoSubscriptionManager; import org.olat.core.commons.services.notifications.SubscriptionContext; import org.olat.core.id.Identity; @@ -163,11 +164,18 @@ public class InfoMessageFrontendManagerImpl implements InfoMessageFrontendManage } @Override - public void deleteInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity) { + public void updateInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity) { List<InfoMessage> infoMessages = infoMessageManager.loadInfoMessagesOfIdentity(businessGroup, identity); for (InfoMessage infoMessage : infoMessages) { - infoMessageManager.deleteInfoMessage(infoMessage); - infoSubscriptionManager.markPublisherNews(infoMessage.getOLATResourceable(), infoMessage.getResSubPath()); + Identity author = infoMessage.getAuthor(); + Identity modifier = infoMessage.getModifier(); + if (author != null && author.equals(identity)) { + ((InfoMessageImpl)infoMessage).setAuthor(null); + infoSubscriptionManager.markPublisherNews(infoMessage.getOLATResourceable(), infoMessage.getResSubPath()); + } + if (modifier != null && modifier.equals(identity)) { + infoMessage.setModifier(null); + } } } diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java b/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java index eeccc4f8cfe..8e4668e3cec 100644 --- a/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java +++ b/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java @@ -103,11 +103,12 @@ public class InfoMessageManagerImpl extends InfoMessageManager { public List<InfoMessage> loadInfoMessagesOfIdentity(BusinessGroupRef businessGroup, IdentityRef identity) { StringBuilder sb = new StringBuilder(); sb.append("select msg from ").append(InfoMessageImpl.class.getName()).append(" msg") - .append(" inner join fetch msg.author author") - .append(" inner join fetch author.user") + .append(" left join fetch msg.author author") + .append(" left join fetch author.user") .append(" left join fetch msg.modifier modifier") .append(" left join fetch modifier.user") - .append(" where author.key=:authorKey") + .append(" where (author.key=:authorKey") + .append(" or modifier.key=:authorKey)") .append(" and msg.resId=:groupKey"); return dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), InfoMessage.class) @@ -120,8 +121,8 @@ public class InfoMessageManagerImpl extends InfoMessageManager { public InfoMessage loadInfoMessageByKey(Long key) { StringBuilder sb = new StringBuilder(); sb.append("select msg from ").append(InfoMessageImpl.class.getName()).append(" msg") - .append(" inner join fetch msg.author author") - .append(" inner join fetch author.user") + .append(" left join fetch msg.author author") + .append(" left join fetch author.user") .append(" left join fetch msg.modifier modifier") .append(" left join fetch modifier.user") .append(" where msg.key=:key"); @@ -175,8 +176,8 @@ public class InfoMessageManagerImpl extends InfoMessageManager { sb.append(" from ").append(InfoMessageImpl.class.getName()).append(" msg"); if (!count) { - sb.append(" inner join fetch msg.author author") - .append(" inner join fetch author.user") + sb.append(" left join fetch msg.author author") + .append(" left join fetch author.user") .append(" left join fetch msg.modifier modifier") .append(" left join fetch modifier.user"); } diff --git a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java index 5e976126033..8cf468566d4 100644 --- a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java +++ b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java @@ -87,8 +87,8 @@ public class InfoMessageImpl implements InfoMessage, CreateInfo, Persistable { @Column(name="businesspath", nullable=true, insertable=true, updatable=false) private String businessPath; - @ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=false) - @JoinColumn(name="fk_author_id", nullable=false, insertable=true, updatable=false) + @ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=true) + @JoinColumn(name="fk_author_id", nullable=true, insertable=true, updatable=true) private Identity author; @ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=true) @JoinColumn(name="fk_modifier_id", nullable=true, insertable=true, updatable=true) diff --git a/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java b/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java index 16d73dc4c2c..244835969f4 100644 --- a/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java +++ b/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java @@ -270,7 +270,12 @@ public class InfoDisplayController extends FormBasicController { String authorName = userManager.getUserDisplayName(info.getAuthor()); String creationDate = formatter.formatDateAndTime(info.getCreationDate()); - String infos = translate("display.info", new String[]{StringHelper.escapeHtml(authorName), creationDate}); + String infos; + if (authorName.isEmpty()) { + infos = translate("display.info.noauthor", new String[]{creationDate}); + } else { + infos = translate("display.info", new String[]{StringHelper.escapeHtml(authorName), creationDate}); + } return new InfoMessageForDisplay(info.getKey(), info.getTitle(), message, infos, modifier); } diff --git a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties index 4a566161276..e2bdfad10a7 100644 --- a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties @@ -5,6 +5,7 @@ new_message=Neue Mitteilung erstellen create_message=Mitteilung erstellen input.toolong=Leider ist Ihr gerade eingegebener Text mit {1} Zeichen zu lang. Bitte beschr\u00E4nken Sie sich auf maximal {0} Zeichen. display.info=Publiziert von {0} am {1} +display.info.noauthor=Publiziert am {0} display.modifier=ge\u00E4ndert von {0} am {1} display.new_messages=Aktuelle Mitteilungen anzeigen display.old_messages=\u00C4ltere Mitteilungen anzeigen diff --git a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties index 9a78b7e5f7f..59c8bee1e71 100644 --- a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties @@ -3,6 +3,7 @@ already.deleted=This message has been deleted in the meantime by another user. already.edited=This message is being edited by user {0}. Please try again later. create_message=Create message display.info=Published by {0} on {1} +display.info.noauthor=Published on {0} display.modifier=modified by {0} on {1} display.new_messages=Show new messages display.no_messages=There are no new messages diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java index e177c724e0f..db310cfa666 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java @@ -1035,7 +1035,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD private void removeParticipant(Identity ureqIdentity, Identity identity, BusinessGroup group, MailPackage mailing, List<BusinessGroupModifiedEvent.Deferred> events) { - infoMessageManager.deleteInfoMessagesOfIdentity(group, identity); + infoMessageManager.updateInfoMessagesOfIdentity(group, identity); boolean removed = businessGroupRelationDAO.removeRole(identity, group, GroupRoles.participant.name()); if(removed) { // notify currently active users of this business group -- GitLab