diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java index 0bffa266bf96fd3182cf1f3510a58a9dd7889f16..2383771e1f31efab7f647a672232cc684f47af47 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java @@ -1343,7 +1343,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService { if (!businessGroupRelationDAO.hasRole(identity, currBusinessGroup, GroupRoles.participant.name()) ) { // Identity is not in participant-list => move identity from waiting-list to participant-list addParticipant(ureqIdentity, ureqRoles, identity, currBusinessGroup, mailing, events); - removeFromWaitingList(ureqIdentity, identity, currBusinessGroup, mailing, events); + removeFromWaitingList(ureqIdentity, identity, currBusinessGroup, null, events); response.getAddedIdentities().add(identity); // notification mail is handled in controller } else { diff --git a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java index 4562db84bd64a124dfb397fe430a62ed9906bc15..1114be6bd8c2cc0eeb6b6e85a4669e792b69bd92 100644 --- a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java +++ b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java @@ -49,6 +49,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellR import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableReduceEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer; @@ -131,12 +132,15 @@ public abstract class AbstractMemberListController extends FormBasicController i protected FlexiTableElement membersTable; protected MemberListTableModel memberListModel; protected final TooledStackedPanel toolbarPanel; - private FormLink editButton, mailButton, removeButton; + private FormLink editButton; + private FormLink mailButton; + private FormLink removeButton; private ToolsController toolsCtrl; protected CloseableModalController cmc; private ContactFormController contactCtrl; - private DialogBoxController confirmSendMailBox; + private DialogBoxController confirmSendMailChangesBox; + private DialogBoxController confirmSendMailGraduatesBox; private UserInfoMainController visitingCardCtrl; private EditMembershipController editMembersCtrl; private MemberLeaveConfirmationController leaveDialogBox; @@ -368,11 +372,11 @@ public abstract class AbstractMemberListController extends FormBasicController i } } else if(event instanceof FlexiTableSearchEvent) { String cmd = event.getCommand(); - if(FlexiTableSearchEvent.SEARCH.equals(event.getCommand()) || FlexiTableSearchEvent.QUICK_SEARCH.equals(event.getCommand())) { + if(FlexiTableReduceEvent.SEARCH.equals(event.getCommand()) || FlexiTableReduceEvent.QUICK_SEARCH.equals(event.getCommand())) { FlexiTableSearchEvent se = (FlexiTableSearchEvent)event; String search = se.getSearch(); doSearch(search); - } else if(FlexiTableSearchEvent.RESET.getCommand().equals(cmd)) { + } else if(FormEvent.RESET.getCommand().equals(cmd)) { doResetSearch(); } } @@ -441,15 +445,19 @@ public abstract class AbstractMemberListController extends FormBasicController i MemberPermissionChangeEvent e = (MemberPermissionChangeEvent)event; doConfirmChangePermission(ureq, e, null); } - } else if(confirmSendMailBox == source) { + } else if(confirmSendMailChangesBox == source) { boolean sendMail = DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event); - MailConfirmation confirmation = (MailConfirmation)confirmSendMailBox.getUserObject(); + MailConfirmation confirmation = (MailConfirmation)confirmSendMailChangesBox.getUserObject(); MemberPermissionChangeEvent e =confirmation.getE(); if(e.getMember() != null) { doChangePermission(ureq, e, sendMail); } else { doChangePermission(ureq, e, confirmation.getMembers(), sendMail); } + } else if(confirmSendMailGraduatesBox == source) { + boolean sendMail = DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event); + GraduationConfirmation confirmation = (GraduationConfirmation)confirmSendMailGraduatesBox.getUserObject(); + doGraduate(confirmation.getRows(), sendMail); } else if (source == contactCtrl) { if(cmc != null) { cmc.deactivate(); @@ -602,8 +610,8 @@ public abstract class AbstractMemberListController extends FormBasicController i doChangePermission(ureq, e, members, true); } } else { - confirmSendMailBox = activateYesNoDialog(ureq, null, translate("dialog.modal.bg.send.mail"), confirmSendMailBox); - confirmSendMailBox.setUserObject(new MailConfirmation(e, members)); + confirmSendMailChangesBox = activateYesNoDialog(ureq, null, translate("dialog.modal.bg.send.mail"), confirmSendMailChangesBox); + confirmSendMailChangesBox.setUserObject(new MailConfirmation(e, members)); } } @@ -680,12 +688,23 @@ public abstract class AbstractMemberListController extends FormBasicController i listenTo(cmc); } - protected void doGraduate(List<MemberRow> members) { + protected void doConfirmGraduate(UserRequest ureq, List<MemberRow> members) { + boolean mailMandatory = groupModule.isMandatoryEnrolmentEmail(ureq.getUserSession().getRoles()); + if(mailMandatory) { + doGraduate(members, true); + } else { + confirmSendMailGraduatesBox = activateYesNoDialog(ureq, null, translate("dialog.modal.bg.send.mail"), confirmSendMailGraduatesBox); + confirmSendMailGraduatesBox.setUserObject(new GraduationConfirmation(members)); + } + } + + protected void doGraduate(List<MemberRow> members, boolean sendEmail) { + MailPackage sendmailPackage = new MailPackage(sendEmail); if(businessGroup != null) { List<Long> identityKeys = getMemberKeys(members); List<Identity> identitiesToGraduate = securityManager.loadIdentityByKeys(identityKeys); businessGroupService.moveIdentityFromWaitingListToParticipant(getIdentity(), identitiesToGraduate, - businessGroup, null); + businessGroup, sendmailPackage); } else { Map<Long, BusinessGroup> groupsMap = new HashMap<>(); Map<BusinessGroup, List<Identity>> graduatesMap = new HashMap<>(); @@ -716,7 +735,7 @@ public abstract class AbstractMemberListController extends FormBasicController i BusinessGroup fullGroup = entry.getKey(); List<Identity> identitiesToGraduate = entry.getValue(); businessGroupService.moveIdentityFromWaitingListToParticipant(getIdentity(), identitiesToGraduate, - fullGroup, null); + fullGroup, sendmailPackage); } } reloadModel(); @@ -841,6 +860,18 @@ public abstract class AbstractMemberListController extends FormBasicController i row.setChatLink(chatLink); } + private class GraduationConfirmation { + private final List<MemberRow> rows; + + public GraduationConfirmation(List<MemberRow> rows) { + this.rows = new ArrayList<>(rows); + } + + public List<MemberRow> getRows() { + return rows; + } + } + private class MailConfirmation { private final List<Identity> members; private final MemberPermissionChangeEvent e; @@ -924,7 +955,7 @@ public abstract class AbstractMemberListController extends FormBasicController i Link link = (Link)source; String cmd = link.getCommand(); if(TABLE_ACTION_GRADUATE.equals(cmd)) { - doGraduate(Collections.singletonList(row)); + doConfirmGraduate(ureq, Collections.singletonList(row)); } else if(TABLE_ACTION_EDIT.equals(cmd)) { openEdit(ureq, row); } else if(TABLE_ACTION_REMOVE.equals(cmd)) {