Skip to content
Snippets Groups Projects
Commit 85d97ce0 authored by fkiefer's avatar fkiefer
Browse files

OO-2592 add info messages, count moved messages, recognize aliases

parent 9e41915c
No related branches found
No related tags found
No related merge requests found
......@@ -20,9 +20,11 @@
package org.olat.modules.fo.export;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.velocity.VelocityContext;
......@@ -77,6 +79,7 @@ public class SendMailStepForm extends StepFormBasicController {
private Message startMessage, parentMessage;
private List<Identity> threadMembers;
private Map<Identity, String> pseudonymes;
private String targetForum, targetCourseTitle, startMessageTitle;
......@@ -136,10 +139,21 @@ public class SendMailStepForm extends StepFormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
String members = displayThreadMembers();
FormLayoutContainer recipientsContainer = FormLayoutContainer.createDefaultFormLayout("recipients", getTranslator());
formLayout.add(recipientsContainer);
recipientsContainer.setRootForm(mainForm);
uifactory.addStaticTextElement("sendmail.recipients", members, recipientsContainer);
// summary
String summary = translate("thread.moving.info", new String[]{startMessageTitle, targetForum, targetCourseTitle});
Set<Long> messageKeys = new HashSet<>();
forumManager.countMessageChildrenRecursively(startMessage, messageKeys);
int childrenCount = messageKeys.size();
if (childrenCount > 0) {
summary += childrenCount > 1 ? translate("many.children.move", String.valueOf(childrenCount)) : translate("one.child.move") ;
}
FormLayoutContainer infoContainer = FormLayoutContainer.createDefaultFormLayout("summary", getTranslator());
formLayout.add(infoContainer);
infoContainer.setRootForm(mainForm);
uifactory.addStaticTextElement("thread.moved.summary", summary, infoContainer);
// members
uifactory.addStaticTextElement("sendmail.recipients", members, infoContainer);
// mail template
formLayout.add(templateForm.getInitialFormItem());
}
......@@ -177,27 +191,34 @@ public class SendMailStepForm extends StepFormBasicController {
} else {
addToRunContext(SENDMAIL, Boolean.FALSE);
}
showInfo("thread.moved.info", new String[]{startMessageTitle, targetForum, targetCourseTitle});
showInfo("thread.moved.success", new String[]{startMessageTitle, targetForum, targetCourseTitle});
fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
}
private List<Identity> collectCreators () {
pseudonymes = new HashMap<>();
Set<Identity> threadMemberSet = new HashSet<>();
// inform start message (thread top)
Identity creator = startMessage.getCreator();
if (creator != null) {
threadMemberSet.add(creator);
}
Identity modifier = startMessage.getModifier();
if (modifier != null) {
threadMemberSet.add(modifier);
if (!startMessage.isGuest()) {
Identity creator = startMessage.getCreator();
if (creator != null) {
threadMemberSet.add(creator);
String pseudonym = startMessage.getPseudonym();
if(pseudonym != null) {
pseudonymes.put(creator, pseudonym);
}
}
Identity modifier = startMessage.getModifier();
if (modifier != null) {
threadMemberSet.add(modifier);
}
}
// send copy of email to sender
if (templateForm != null && templateForm.isCCSenderSelected()) {
threadMemberSet.add(getIdentity());
}
// inform children
forumManager.collectThreadMembersRecursively(startMessage, threadMemberSet);
forumManager.collectThreadMembersRecursively(startMessage, threadMemberSet, pseudonymes);
return new ArrayList<Identity>(threadMemberSet);
}
......@@ -208,8 +229,12 @@ public class SendMailStepForm extends StepFormBasicController {
Iterator<Identity> listIterator = threadMembers.iterator();
while(listIterator.hasNext()) {
Identity identity = listIterator.next();
String displayName = userManager.getUserDisplayName(identity);
sb.append(displayName);
if (pseudonymes.containsKey(identity)) {
sb.append(pseudonymes.get(identity));
} else {
String displayName = userManager.getUserDisplayName(identity);
sb.append(displayName);
}
if (listIterator.hasNext()) {
sb.append("; ");
}
......
......@@ -7,8 +7,12 @@ forum.select=select
forum.forum=forum
forum.thread=Diskussionsfaden
forum.comment=Beitrag
thread.moved.info=Diskussionsfaden "{0}" wurde ins Forum "{1}" von Kurs "{2}" verschoben
sendmail.recipients=Empf\u00E4nger
many.children.move=\n{0} Antworten werden mitverschoben.
one.child.move=\nEine Antwort wird mitverschoben.
thread.moving.info=Diskussionsfaden "{0}" wird ins Forum "{1}" von Kurs "{2}" verschoben.
thread.moved.success=Diskussionsfaden "{0}" wurde erfolgreich ins Forum "{1}" von Kurs "{2}" verschoben
thread.moved.summary=Zusammenfassung
sendmail.recipients=Betroffene Benutzer
link.new.thread=Als neuen Diskussionsfaden anlegen
radio.foreign.course={0} in ein Forum eines anderen Kurses verschieben
radio.same.course={0} in ein Forum im gleichen Kurs verschieben
......
......@@ -7,8 +7,12 @@ forum.select=Select
forum.forum=Forum
forum.thread=Thread
forum.comment=Comment
thread.moved.info=Thread "{0}" was moved to Forum "{1}" in course "{2}"
sendmail.recipients=Recipients
many.children.move=\n{0} answers are moved along.
one.child.move=\nOne answer is moved along.
thread.moving.info=Thread "{0}" is moved to Forum "{1}" in course "{2}".
thread.moved.success=Thread "{0}" was moved to Forum "{1}" in course "{2}" successfully.
thread.moved.summary=Summary
sendmail.recipients=Affected users
link.new.thread=Add as new Thread
radio.foreign.course=Move {0} in forum of another course
radio.same.course=Move {0} in forum same course
......
......@@ -27,6 +27,7 @@ package org.olat.modules.fo.manager;
import java.io.File;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
......@@ -918,6 +919,16 @@ public class ForumManager {
.getResultList();
return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
}
public void countMessageChildrenRecursively(Message message, Set<Long> messageKeys) {
List<Message> children = getMessageChildren(message);
for (Message child : children) {
messageKeys.add(child.getKey());
if (hasChildren(child)){
countMessageChildrenRecursively(child, messageKeys);
}
}
}
/**
* deletes entry of one message
......@@ -1073,19 +1084,43 @@ public class ForumManager {
* @param oldParent
* @param setOfIdentity
*/
public void collectThreadMembersRecursively(Message oldParent, Set<Identity> setOfIdentity) {
public void collectThreadMembersRecursively(Message oldParent, Set<Identity> setOfIdentity, Map<Identity, String> pseudonymes) {
List<Message> children = getMessageChildren(oldParent);
for (Message child : children) {
Identity creator = child.getCreator();
if (creator != null) {
setOfIdentity.add(creator);
children.sort(new Comparator<Message>() {
@Override
public int compare(Message o1, Message o2) {
if (o1 == null) return 1;
if (o2 == null) return -1;
// move posts with pseudonyms toward low indices in list
if (o1.getPseudonym() == null && o2.getPseudonym() != null) {
return 1;
} else if (o1.getPseudonym() != null && o2.getPseudonym() == null) {
return -1;
} else {
return o1.getCreationDate().compareTo(o2.getCreationDate());
}
}
Identity modifier = child.getModifier();
if (modifier != null) {
setOfIdentity.add(modifier);
});
for (Message child : children) {
if (!child.isGuest()) {
Identity creator = child.getCreator();
if (creator != null) {
setOfIdentity.add(creator);
String pseudonym = child.getPseudonym();
if(pseudonym != null) {
pseudonymes.put(creator, pseudonym);
} else if (pseudonymes.containsKey(creator)) {
// remove entry if thread also contains same identity without pseudonym
pseudonymes.remove(creator);
}
}
Identity modifier = child.getModifier();
if (creator != null && modifier != null) {
setOfIdentity.add(modifier);
}
}
if (hasChildren(child)) {
collectThreadMembersRecursively(child, setOfIdentity);
collectThreadMembersRecursively(child, setOfIdentity, pseudonymes);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment