Skip to content
Snippets Groups Projects
Commit b9d993c7 authored by srosse's avatar srosse
Browse files

OO-2720: add group name, group description and course list for every invitation E-mail

parent 48ad62f1
No related branches found
No related tags found
No related merge requests found
...@@ -169,6 +169,17 @@ public class BusinessGroupDAO { ...@@ -169,6 +169,17 @@ public class BusinessGroupDAO {
return groups == null || groups.isEmpty() ? null : groups.get(0); return groups == null || groups.isEmpty() ? null : groups.get(0);
} }
public String loadDescription(Long key) {
StringBuilder sb = new StringBuilder();
sb.append("select bgi.description from businessgroup bgi where bgi.key=:key");
List<String> descriptions = dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), String.class)
.setParameter("key", key)
.setHint("org.hibernate.cacheable", Boolean.TRUE)
.getResultList();
return descriptions == null || descriptions.isEmpty() ? null : descriptions.get(0);
}
public List<BusinessGroupShort> loadShort(Collection<Long> ids) { public List<BusinessGroupShort> loadShort(Collection<Long> ids) {
if(ids == null || ids.isEmpty()) { if(ids == null || ids.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
......
...@@ -19,25 +19,34 @@ ...@@ -19,25 +19,34 @@
*/ */
package org.olat.group.manager; package org.olat.group.manager;
import java.io.File;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.apache.velocity.VelocityContext;
import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurity;
import org.olat.core.CoreSpringFactory; import org.olat.core.CoreSpringFactory;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.id.Roles; import org.olat.core.id.Roles;
import org.olat.core.id.context.BusinessControlFactory;
import org.olat.core.util.StringHelper;
import org.olat.core.util.filter.FilterFactory;
import org.olat.core.util.mail.MailBundle; import org.olat.core.util.mail.MailBundle;
import org.olat.core.util.mail.MailContext; import org.olat.core.util.mail.MailContext;
import org.olat.core.util.mail.MailContextImpl; import org.olat.core.util.mail.MailContextImpl;
import org.olat.core.util.mail.MailPackage;
import org.olat.core.util.mail.MailManager; import org.olat.core.util.mail.MailManager;
import org.olat.core.util.mail.MailPackage;
import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailTemplate;
import org.olat.core.util.mail.MailerResult; import org.olat.core.util.mail.MailerResult;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupModule; import org.olat.group.BusinessGroupModule;
import org.olat.group.BusinessGroupService;
import org.olat.group.BusinessGroupShort; import org.olat.group.BusinessGroupShort;
import org.olat.group.model.BusinessGroupMembershipChange; import org.olat.group.model.BusinessGroupMembershipChange;
import org.olat.group.model.MembershipModification; import org.olat.group.model.MembershipModification;
import org.olat.group.ui.BGMailHelper; import org.olat.group.ui.BGMailHelper;
import org.olat.group.ui.main.MemberPermissionChangeEvent; import org.olat.group.ui.main.MemberPermissionChangeEvent;
import org.olat.repository.RepositoryEntryShort;
/** /**
* *
...@@ -120,6 +129,10 @@ public class BusinessGroupMailing { ...@@ -120,6 +129,10 @@ public class BusinessGroupMailing {
MailTemplate template = mailing == null ? null : mailing.getTemplate(); MailTemplate template = mailing == null ? null : mailing.getTemplate();
if(mailing == null || mailing.getTemplate() == null) { if(mailing == null || mailing.getTemplate() == null) {
template = getDefaultTemplate(type, group, ureqIdentity); template = getDefaultTemplate(type, group, ureqIdentity);
} else if(group != null && template.getContext() != null && needTemplateEnhancement(template)) {
BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
List<RepositoryEntryShort> repoEntries = businessGroupService.findShortRepositoryEntries(Collections.singletonList(group), 0, -1);
template = new MailTemplateDelegate(template, group, repoEntries);
} }
MailContext context = mailing == null ? null : mailing.getContext(); MailContext context = mailing == null ? null : mailing.getContext();
...@@ -138,6 +151,16 @@ public class BusinessGroupMailing { ...@@ -138,6 +151,16 @@ public class BusinessGroupMailing {
mailing.appendResult(result); mailing.appendResult(result);
} }
} }
private static boolean needTemplateEnhancement(MailTemplate template) {
String body = template.getBodyTemplate();
if(body.contains("groupname") || body.contains("groupdescription") || body.contains("courselist")) {
if(!StringHelper.containsNonWhitespace((String)template.getContext().get("groupname"))) {
return true;
}
}
return false;
}
public enum MailType { public enum MailType {
addParticipant, addParticipant,
...@@ -148,4 +171,99 @@ public class BusinessGroupMailing { ...@@ -148,4 +171,99 @@ public class BusinessGroupMailing {
removeToWaitingList, removeToWaitingList,
graduateFromWaitingListToParticpant, graduateFromWaitingListToParticpant,
} }
}
public static class MailTemplateDelegate extends MailTemplate {
private final MailTemplate delegate;
private final BusinessGroupShort group;
private final List<RepositoryEntryShort> entries;
public MailTemplateDelegate(MailTemplate delegate, BusinessGroupShort group, List<RepositoryEntryShort> entries) {
super(null, null, null);
this.delegate = delegate;
this.group = group;
this.entries = entries;
}
@Override
public void putVariablesInMailContext(VelocityContext vContext, Identity recipient) {
delegate.putVariablesInMailContext(vContext, recipient);
StringBuilder learningResources = new StringBuilder();
if(entries != null && entries.size() > 0) {
for (RepositoryEntryShort entry: entries) {
String title = entry.getDisplayname();
String url = BusinessControlFactory.getInstance().getURLFromBusinessPathString("[RepositoryEntry:" + entry.getKey() + "]");
learningResources.append(title);
learningResources.append(" (");
learningResources.append(url);
learningResources.append(")\n");
}
}
vContext.put("courselist", learningResources.toString());
if(group != null) {
vContext.put("groupname", group.getName());
String description;
if(group instanceof BusinessGroup) {
description = ((BusinessGroup)group).getDescription();
} else {
description = CoreSpringFactory.getImpl(BusinessGroupDAO.class).loadDescription(group.getKey());
}
description = FilterFactory.getHtmlTagAndDescapingFilter().filter(description);
vContext.put("groupdescription", description);
}
}
@Override
public Boolean getCpfrom() {
return delegate.getCpfrom();
}
@Override
public void setCpfrom(Boolean cpfrom) {
delegate.setCpfrom(cpfrom);
}
@Override
public String getSubjectTemplate() {
return delegate.getSubjectTemplate();
}
@Override
public void setSubjectTemplate(String subjectTemplate) {
delegate.setSubjectTemplate(subjectTemplate);
}
@Override
public String getBodyTemplate() {
return delegate.getBodyTemplate();
}
@Override
public void setBodyTemplate(String bodyTemplate) {
delegate.setBodyTemplate(bodyTemplate);
}
@Override
public File[] getAttachments() {
return delegate.getAttachments();
}
@Override
public void setAttachments(File[] attachments) {
delegate.setAttachments(attachments);
}
@Override
public void addToContext(String name, String value) {
delegate.addToContext(name, value);
}
@Override
public VelocityContext getContext() {
return delegate.getContext();
}
}
}
\ No newline at end of file
...@@ -46,7 +46,7 @@ import org.olat.group.BusinessGroupShort; ...@@ -46,7 +46,7 @@ import org.olat.group.BusinessGroupShort;
@Entity(name="businessgroupshort") @Entity(name="businessgroupshort")
@Table(name="o_gp_business") @Table(name="o_gp_business")
@NamedQueries({ @NamedQueries({
@NamedQuery(name="loadBusinessGroupShortByIds",query="select bgi from businessgroupshort bgi where bgi.key in (:ids)") @NamedQuery(name="loadBusinessGroupShortByIds",query="select bgi from businessgroupshort bgi where bgi.key in (:ids)")
}) })
public class BusinessGroupShortImpl implements Persistable, BusinessGroupShort { public class BusinessGroupShortImpl implements Persistable, BusinessGroupShort {
......
...@@ -52,6 +52,7 @@ import org.olat.core.util.mail.MailTemplate; ...@@ -52,6 +52,7 @@ import org.olat.core.util.mail.MailTemplate;
import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService; import org.olat.group.BusinessGroupService;
import org.olat.group.BusinessGroupShort; import org.olat.group.BusinessGroupShort;
import org.olat.group.manager.BusinessGroupDAO;
import org.olat.group.ui.main.BusinessGroupListController; import org.olat.group.ui.main.BusinessGroupListController;
import org.olat.repository.RepositoryEntryShort; import org.olat.repository.RepositoryEntryShort;
...@@ -207,8 +208,8 @@ public class BGMailHelper { ...@@ -207,8 +208,8 @@ public class BGMailHelper {
final String courselist; final String courselist;
final String groupname; final String groupname;
final String groupdescription; final String groupdescription;
StringBuilder learningResources = new StringBuilder();
if(group != null) { if(group != null) {
StringBuilder learningResources = new StringBuilder();
BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
List<RepositoryEntryShort> repoEntries = businessGroupService.findShortRepositoryEntries(Collections.singletonList(group), 0, -1); List<RepositoryEntryShort> repoEntries = businessGroupService.findShortRepositoryEntries(Collections.singletonList(group), 0, -1);
for (RepositoryEntryShort entry: repoEntries) { for (RepositoryEntryShort entry: repoEntries) {
...@@ -223,8 +224,14 @@ public class BGMailHelper { ...@@ -223,8 +224,14 @@ public class BGMailHelper {
courselist = learningResources.toString(); courselist = learningResources.toString();
// get group name and description // get group name and description
groupname = group.getName(); groupname = group.getName();
groupdescription = (group instanceof BusinessGroup ?
FilterFactory.getHtmlTagAndDescapingFilter().filter(((BusinessGroup)group).getDescription()) : ""); String description;
if(group instanceof BusinessGroup) {
description = ((BusinessGroup)group).getDescription();
} else {
description = CoreSpringFactory.getImpl(BusinessGroupDAO.class).loadDescription(group.getKey());
}
groupdescription = FilterFactory.getHtmlTagAndDescapingFilter().filter(description);
subject = subject.replace("$groupname", groupname == null ? "" : groupname); subject = subject.replace("$groupname", groupname == null ? "" : groupname);
body = body.replace("$groupname", groupname == null ? "" : groupname); body = body.replace("$groupname", groupname == null ? "" : groupname);
......
...@@ -262,6 +262,17 @@ public class BusinessGroupDAOTest extends OlatTestCase { ...@@ -262,6 +262,17 @@ public class BusinessGroupDAOTest extends OlatTestCase {
Assert.assertTrue(groupShortKeys3.contains(group1.getKey())); Assert.assertTrue(groupShortKeys3.contains(group1.getKey()));
Assert.assertTrue(groupShortKeys3.contains(group2.getKey())); Assert.assertTrue(groupShortKeys3.contains(group2.getKey()));
} }
@Test
public void loadDescription() {
String description = "My desc " + UUID.randomUUID();
BusinessGroup group = businessGroupDao.createAndPersist(null, "load descr", description, 0, 10, true, true, false, false, false);
dbInstance.commitAndCloseSession();
String loadDescription = businessGroupDao.loadDescription(group.getKey());
Assert.assertNotNull(loadDescription);
Assert.assertEquals(description, loadDescription);
}
@Test @Test
public void loadAllBusinessGroups() { public void loadAllBusinessGroups() {
......
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