diff --git a/src/main/java/org/olat/course/member/MembersOverviewController.java b/src/main/java/org/olat/course/member/MembersOverviewController.java index d8529a0547f02c9b361e1f93f49b82ce0af286be..a541e6c79abacb33c8f051b036dc12d7ccab68b9 100644 --- a/src/main/java/org/olat/course/member/MembersOverviewController.java +++ b/src/main/java/org/olat/course/member/MembersOverviewController.java @@ -55,6 +55,7 @@ import org.olat.core.util.mail.MailPackage; import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailerResult; import org.olat.core.util.resource.OresHelper; +import org.olat.course.member.wizard.ImportMembersContext; import org.olat.course.member.wizard.ImportMember_1a_LoginListStep; import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep; import org.olat.course.run.userview.UserCourseEnvironment; @@ -90,8 +91,17 @@ public class MembersOverviewController extends BasicController implements Activa private static final String SEG_WAITING_MEMBERS = "Waiting"; private static final String SEG_SEARCH_MEMBERS = "Search"; - private Link overrideLink, unOverrideLink; - private final Link allMembersLink, ownersLink, tutorsLink, participantsLink, waitingListLink, searchLink; + private Link overrideLink; + private Link unOverrideLink; + private final Link dedupLink; + private final Link addMemberLink; + private final Link importMemberLink; + private final Link ownersLink; + private final Link tutorsLink; + private final Link searchLink; + private final Link allMembersLink; + private final Link waitingListLink; + private final Link participantsLink; private final SegmentViewComponent segmentView; private final VelocityContainer mainVC; private final TooledStackedPanel toolbarPanel; @@ -103,7 +113,6 @@ public class MembersOverviewController extends BasicController implements Activa private AbstractMemberListController waitingCtrl; private AbstractMemberListController selectedCtrl; private AbstractMemberListController searchCtrl; - private final Link importMemberLink, addMemberLink, dedupLink; private CloseableModalController cmc; private StepsMainRunController importMembersWizard; @@ -354,7 +363,8 @@ public class MembersOverviewController extends BasicController implements Activa private void doChooseMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1b_ChooseMemberStep(ureq, repoEntry, null, null, overrideManaged); + ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, overrideManaged); + Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(uureq, runContext); return StepsMainRunController.DONE_MODIFIED; @@ -369,7 +379,8 @@ public class MembersOverviewController extends BasicController implements Activa private void doImportMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1a_LoginListStep(ureq, repoEntry, null, null, overrideManaged); + ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, overrideManaged); + Step start = new ImportMember_1a_LoginListStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(uureq, runContext); if(runContext.containsKey("notFounds")) { diff --git a/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java b/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java index 6b6d4678d3d8b30281b3646d5525332a810ddaed..8b7e6b391e482cb3bf748274dd221a4789795d3d 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java @@ -27,11 +27,8 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.wizard.StepFormBasicController; import org.olat.core.gui.control.generic.wizard.StepsEvent; import org.olat.core.gui.control.generic.wizard.StepsRunContext; -import org.olat.group.BusinessGroup; import org.olat.group.ui.main.EditMembershipController; import org.olat.group.ui.main.MemberPermissionChangeEvent; -import org.olat.modules.curriculum.Curriculum; -import org.olat.repository.RepositoryEntry; /** * @@ -41,11 +38,10 @@ public class ImportMemberPermissionChoiceController extends StepFormBasicControl private EditMembershipController permissionCtrl; public ImportMemberPermissionChoiceController(UserRequest ureq, WindowControl wControl, - RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, boolean overrideManaged, - Form rootForm, StepsRunContext runContext) { + ImportMembersContext membersContext, Form rootForm, StepsRunContext runContext) { super(ureq, wControl, rootForm, runContext, LAYOUT_BAREBONE, null); - permissionCtrl = new EditMembershipController(ureq, getWindowControl(), null, repoEntry, group, curriculum, overrideManaged, rootForm); + permissionCtrl = new EditMembershipController(ureq, getWindowControl(), null, membersContext, rootForm); listenTo(permissionCtrl); initForm (ureq); @@ -65,10 +61,9 @@ public class ImportMemberPermissionChoiceController extends StepFormBasicControl fireEvent (ureq, StepsEvent.ACTIVATE_NEXT); } - @Override protected boolean validateFormLogic(UserRequest ureq) { - boolean allOk = true; + boolean allOk = super.validateFormLogic(ureq); MemberPermissionChangeEvent e = new MemberPermissionChangeEvent(null); permissionCtrl.collectRepoChanges(e); @@ -82,7 +77,7 @@ public class ImportMemberPermissionChoiceController extends StepFormBasicControl allOk &= false; } - return allOk & super.validateFormLogic(ureq); + return allOk; } @Override diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java index fa3312fe47fa31b68fb6ea93c7d5d8c269322e8b..0bab04951ee700d550174ad2203af754f3e10f8a 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java @@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep; import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig; import org.olat.core.gui.control.generic.wizard.StepFormController; import org.olat.core.gui.control.generic.wizard.StepsRunContext; -import org.olat.group.BusinessGroup; -import org.olat.modules.curriculum.Curriculum; -import org.olat.repository.RepositoryEntry; /** * @@ -36,9 +33,9 @@ import org.olat.repository.RepositoryEntry; */ public class ImportMember_1a_LoginListStep extends BasicStep { - public ImportMember_1a_LoginListStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, boolean overrideManaged) { + public ImportMember_1a_LoginListStep(UserRequest ureq, ImportMembersContext membersContext) { super(ureq); - setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, repoEntry, group, curriculum, overrideManaged)); + setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, membersContext)); setI18nTitleAndDescr("import.import.title", "import.import.title"); } diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java index 7778c52a7bbd103814c95c8222c8bb17b030cb0c..2d75e589e4913ec1e66ab42179cb2a5183eb6076 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java @@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep; import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig; import org.olat.core.gui.control.generic.wizard.StepFormController; import org.olat.core.gui.control.generic.wizard.StepsRunContext; -import org.olat.group.BusinessGroup; -import org.olat.modules.curriculum.Curriculum; -import org.olat.repository.RepositoryEntry; /** * @@ -36,9 +33,9 @@ import org.olat.repository.RepositoryEntry; */ public class ImportMember_1b_ChooseMemberStep extends BasicStep { - public ImportMember_1b_ChooseMemberStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, boolean overrideManaged) { + public ImportMember_1b_ChooseMemberStep(UserRequest ureq, ImportMembersContext membersContext) { super(ureq); - setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, repoEntry, group, curriculum, overrideManaged)); + setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, membersContext)); setI18nTitleAndDescr("import.choose.title", "import.choose.title"); } diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java index 571d33f1121fbc8b5114d0c2fce9726b230588ef..988a3cd07a7a8945c1b0ff3ec40d3dc881409b47 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java @@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep; import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig; import org.olat.core.gui.control.generic.wizard.StepFormController; import org.olat.core.gui.control.generic.wizard.StepsRunContext; -import org.olat.group.BusinessGroup; -import org.olat.modules.curriculum.Curriculum; -import org.olat.repository.RepositoryEntry; /** * @@ -36,10 +33,9 @@ import org.olat.repository.RepositoryEntry; */ public class ImportMember_2_ConfirmMemberChoiceStep extends BasicStep { - public ImportMember_2_ConfirmMemberChoiceStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group, - Curriculum curriculum, boolean overrideManaged) { + public ImportMember_2_ConfirmMemberChoiceStep(UserRequest ureq, ImportMembersContext membersContext) { super(ureq); - setNextStep(new ImportMember_3_ChoosePermissionStep(ureq, repoEntry, group, curriculum, overrideManaged)); + setNextStep(new ImportMember_3_ChoosePermissionStep(ureq, membersContext)); setI18nTitleAndDescr("import.confirm.title", "import.confirm.title"); } diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java index 2f9729af7c8da4337e0d12d579516bb542d53086..6ee64ef025a7791c4d5c57d65922aced8d5bfa39 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java @@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep; import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig; import org.olat.core.gui.control.generic.wizard.StepFormController; import org.olat.core.gui.control.generic.wizard.StepsRunContext; -import org.olat.group.BusinessGroup; -import org.olat.modules.curriculum.Curriculum; -import org.olat.repository.RepositoryEntry; /** @@ -37,19 +34,12 @@ import org.olat.repository.RepositoryEntry; */ public class ImportMember_3_ChoosePermissionStep extends BasicStep { - private final BusinessGroup group; - private final RepositoryEntry repoEntry; - private final Curriculum curriculum; - private final boolean overrideManaged; + private final ImportMembersContext membersContext; - public ImportMember_3_ChoosePermissionStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group, - Curriculum curriculum, boolean overrideManaged) { + public ImportMember_3_ChoosePermissionStep(UserRequest ureq, ImportMembersContext membersContext) { super(ureq); - this.group = group; - this.repoEntry = repoEntry; - this.curriculum = curriculum; - this.overrideManaged = overrideManaged; - setNextStep(new ImportMember_4_MailStep(ureq, repoEntry)); + this.membersContext = membersContext; + setNextStep(new ImportMember_4_MailStep(ureq, membersContext.getRepoEntry())); setI18nTitleAndDescr("import.permission.title", "import.permission.title"); } @@ -60,6 +50,6 @@ public class ImportMember_3_ChoosePermissionStep extends BasicStep { @Override public StepFormController getStepController(UserRequest ureq, WindowControl wControl, StepsRunContext runContext, Form form) { - return new ImportMemberPermissionChoiceController(ureq, wControl, repoEntry, group, curriculum, overrideManaged, form, runContext); + return new ImportMemberPermissionChoiceController(ureq, wControl, membersContext, form, runContext); } } diff --git a/src/main/java/org/olat/course/member/wizard/ImportMembersContext.java b/src/main/java/org/olat/course/member/wizard/ImportMembersContext.java new file mode 100644 index 0000000000000000000000000000000000000000..6269123e758313ab75821f60d687f06e22bcac39 --- /dev/null +++ b/src/main/java/org/olat/course/member/wizard/ImportMembersContext.java @@ -0,0 +1,81 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.course.member.wizard; + +import org.olat.group.BusinessGroup; +import org.olat.modules.curriculum.Curriculum; +import org.olat.modules.curriculum.CurriculumElement; +import org.olat.repository.RepositoryEntry; + +/** + * + * Initial date: 1 avr. 2020<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class ImportMembersContext { + + private final BusinessGroup group; + private final Curriculum curriculum; + private final boolean overrideManaged; + private final RepositoryEntry repoEntry; + private final CurriculumElement rootCurriculumElement; + + private ImportMembersContext(RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, + CurriculumElement rootCurriculumElement, boolean overrideManaged) { + this.repoEntry = repoEntry; + this.group = group; + this.curriculum = curriculum; + this.overrideManaged = overrideManaged; + this.rootCurriculumElement = rootCurriculumElement; + } + + public static ImportMembersContext valueOf(BusinessGroup businessGroup) { + return new ImportMembersContext(null, businessGroup, null, null, false); + } + + public static ImportMembersContext valueOf(RepositoryEntry repoEntry, boolean overrideManaged) { + return new ImportMembersContext(repoEntry, null, null, null, overrideManaged); + } + + public static ImportMembersContext valueOf(Curriculum curriculum, CurriculumElement rootCurriculumElement, boolean overrideManaged) { + return new ImportMembersContext(null, null, curriculum, rootCurriculumElement, overrideManaged); + } + + public BusinessGroup getGroup() { + return group; + } + + public Curriculum getCurriculum() { + return curriculum; + } + + public CurriculumElement getRootCurriculumElement() { + return rootCurriculumElement; + } + + public boolean isOverrideManaged() { + return overrideManaged; + } + + public RepositoryEntry getRepoEntry() { + return repoEntry; + } +} diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java index 65ff3c11527e1896b016abbf5225accfbc8d520a..2c392fff77a120dd3bc48ebbd030324ccf6ed085 100644 --- a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java +++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java @@ -41,6 +41,7 @@ import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.mail.MailHelper; import org.olat.core.util.mail.MailPackage; import org.olat.core.util.mail.MailTemplate; +import org.olat.course.member.wizard.ImportMembersContext; import org.olat.course.member.wizard.ImportMember_1a_LoginListStep; import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep; import org.olat.group.BusinessGroup; @@ -58,12 +59,13 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class BusinessGroupMembersController extends BasicController { + private final Link addMemberLink; + private final Link importMemberLink; private final VelocityContainer mainVC; private final DisplayMemberSwitchForm dmsForm; private final MembershipConfigurationForm configForm; private MemberListController membersController; - private final Link importMemberLink, addMemberLink; private StepsMainRunController importMembersWizard; private BusinessGroup businessGroup; @@ -142,7 +144,7 @@ public class BusinessGroupMembersController extends BasicController { boolean hasWaitingList = businessGroup.getWaitingListEnabled().booleanValue(); Boolean waitingFlag = (Boolean)mainVC.getContext().get("hasWaitingGrp"); if(waitingFlag == null || waitingFlag.booleanValue() != hasWaitingList) { - mainVC.contextPut("hasWaitingGrp", new Boolean(hasWaitingList)); + mainVC.contextPut("hasWaitingGrp", Boolean.valueOf(hasWaitingList)); dmsForm.setWaitingListVisible(hasWaitingList); } @@ -200,7 +202,8 @@ public class BusinessGroupMembersController extends BasicController { private void doChooseMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1b_ChooseMemberStep(ureq, null, businessGroup, null, false); + ImportMembersContext membersContext = ImportMembersContext.valueOf(businessGroup); + Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(runContext); return StepsMainRunController.DONE_MODIFIED; @@ -215,16 +218,14 @@ public class BusinessGroupMembersController extends BasicController { private void doImportMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1a_LoginListStep(ureq, null, businessGroup, null, false); - StepRunnerCallback finish = new StepRunnerCallback() { - @Override - public Step execute(UserRequest uureq, WindowControl wControl, StepsRunContext runContext) { - addMembers(runContext); - if(runContext.containsKey("notFounds")) { - showWarning("user.notfound", runContext.get("notFounds").toString()); - } - return StepsMainRunController.DONE_MODIFIED; + ImportMembersContext membersContext = ImportMembersContext.valueOf(businessGroup); + Step start = new ImportMember_1a_LoginListStep(ureq, membersContext); + StepRunnerCallback finish = (uureq, wControl, runContext) -> { + addMembers(runContext); + if(runContext.containsKey("notFounds")) { + showWarning("user.notfound", runContext.get("notFounds").toString()); } + return StepsMainRunController.DONE_MODIFIED; }; importMembersWizard = new StepsMainRunController(ureq, getWindowControl(), start, finish, null, diff --git a/src/main/java/org/olat/group/ui/main/EditMembershipController.java b/src/main/java/org/olat/group/ui/main/EditMembershipController.java index 363f38a0f478cfe098ee0b697984bc05294657de..0315c67d4febdf51856d45a15715ed12096e85e2 100644 --- a/src/main/java/org/olat/group/ui/main/EditMembershipController.java +++ b/src/main/java/org/olat/group/ui/main/EditMembershipController.java @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; import org.olat.basesecurity.GroupRoles; import org.olat.core.gui.UserRequest; @@ -66,6 +67,7 @@ import org.olat.core.util.StringHelper; import org.olat.course.member.PermissionHelper; import org.olat.course.member.PermissionHelper.BGPermission; import org.olat.course.member.PermissionHelper.RepoPermission; +import org.olat.course.member.wizard.ImportMembersContext; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupManagedFlag; import org.olat.group.BusinessGroupMembership; @@ -105,7 +107,7 @@ public class EditMembershipController extends FormBasicController { private EditGroupMembershipTableDataModel groupTableDataModel; private EditCurriculumMembershipTableDataModel curriculumTableDataModel; - private static final String[] repoRightsKeys = {"owner", "tutor", "participant"}; + private static final String[] repoRightsKeys = { "owner", "tutor", "participant" }; private final Identity member; private final List<Identity> members; @@ -118,6 +120,7 @@ public class EditMembershipController extends FormBasicController { private final BusinessGroup businessGroup; private final RepositoryEntry repoEntry; private final Curriculum curriculum; + private final CurriculumElement rootCurriculumElement; @Autowired private RepositoryManager repositoryManager; @@ -136,7 +139,8 @@ public class EditMembershipController extends FormBasicController { this.members = null; this.repoEntry = repoEntry; this.businessGroup = businessGroup; - this.curriculum = null; + curriculum = null; + rootCurriculumElement = null; this.withButtons = true; this.overrideManaged = overrideManaged; @@ -172,7 +176,8 @@ public class EditMembershipController extends FormBasicController { this.members = (members == null ? null : new ArrayList<>(members)); this.repoEntry = repoEntry; this.businessGroup = businessGroup; - this.curriculum = null; + curriculum = null; + rootCurriculumElement = null; this.withButtons = true; this.overrideManaged = overrideManaged; @@ -183,16 +188,17 @@ public class EditMembershipController extends FormBasicController { } public EditMembershipController(UserRequest ureq, WindowControl wControl, List<Identity> members, - RepositoryEntry repoEntry, BusinessGroup businessGroup, Curriculum curriculum, boolean overrideManaged, Form rootForm) { + ImportMembersContext membersContext, Form rootForm) { super(ureq, wControl, LAYOUT_CUSTOM, "edit_member", rootForm); - this.member = null; + member = null; this.members = (members == null ? null : new ArrayList<>(members)); - this.repoEntry = repoEntry; - this.businessGroup = businessGroup; - this.curriculum = curriculum; + repoEntry = membersContext.getRepoEntry(); + businessGroup = membersContext.getGroup(); + curriculum = membersContext.getCurriculum(); + rootCurriculumElement = membersContext.getRootCurriculumElement(); this.withButtons = false; - this.overrideManaged = overrideManaged; + overrideManaged = membersContext.isOverrideManaged(); memberships = Collections.emptyList(); @@ -257,16 +263,7 @@ public class EditMembershipController extends FormBasicController { groupTableDataModel.setObjects(options); groupTableEl.setVisible(!options.isEmpty()); - List<CurriculumElement> curriculumElements; - if(curriculum != null) { - curriculumElements = curriculumService.getCurriculumElements(curriculum, CurriculumElementStatus.notDeleted()); - curriculumElements = orderCurriculumElements(curriculumElements); - } else if (repoEntry != null) { - curriculumElements = curriculumService.getCurriculumElements(repoEntry); - } else { - curriculumElements = Collections.emptyList(); - } - + List<CurriculumElement> curriculumElements = loadCurriculumElements(); List<CurriculumElement> editableElements = curriculumService.filterElementsWithoutManagerRole(curriculumElements, roles); curriculumElementMemberships = memberToLoad == null ? Collections.emptyList() : curriculumService.getCurriculumElementMemberships(curriculumElements, memberToLoad); @@ -289,6 +286,21 @@ public class EditMembershipController extends FormBasicController { curriculumTableEl.setVisible(!curriculumOptions.isEmpty()); } + private List<CurriculumElement> loadCurriculumElements() { + List<CurriculumElement> curriculumElements; + if(curriculum != null) { + curriculumElements = curriculumService.getCurriculumElements(curriculum, CurriculumElementStatus.notDeleted()); + curriculumElements = orderCurriculumElements(curriculumElements); + } else if (repoEntry != null) { + curriculumElements = curriculumService.getCurriculumElements(repoEntry); + } else { + curriculumElements = Collections.emptyList(); + } + return curriculumElements; + } + + + private List<CurriculumElement> orderCurriculumElements(List<CurriculumElement> curriculumElements) { try { List<CurriculumElementRow> rows = new ArrayList<>(curriculumElements.size()); @@ -305,6 +317,9 @@ public class EditMembershipController extends FormBasicController { } } + if(rootCurriculumElement != null) { + rows = filterCurriculumElements(rows); + } Collections.sort(rows, new CurriculumElementTreeRowComparator(getLocale())); List<CurriculumElement> orderedElements = new ArrayList<>(rows.size()); @@ -318,6 +333,36 @@ public class EditMembershipController extends FormBasicController { } } + private List<CurriculumElementRow> filterCurriculumElements(List<CurriculumElementRow> rows) { + for(CurriculumElementRow row:rows) { + if(row != null) { + boolean hasRoot = hasRootCurriculumElementInParentLine(row); + row.setAcceptedByFilter(hasRoot); + } + } + + for(CurriculumElementRow row:rows) { + if(row.isAcceptedByFilter()) { + for(CurriculumElementRow parent=row.getParent(); parent != null; parent=parent.getParent()) { + parent.setAcceptedByFilter(true); + } + } + } + + return rows.stream() + .filter(CurriculumElementRow::isAcceptedByFilter) + .collect(Collectors.toList()); + } + + private boolean hasRootCurriculumElementInParentLine(CurriculumElementRow curriculumElement) { + for(CurriculumElementRow parentElement=curriculumElement; parentElement != null; parentElement = parentElement.getParent()) { + if(parentElement.getCurriculumElement().equals(rootCurriculumElement)) { + return true; + } + } + return false; + } + private MultipleSelectionElement createSelection(boolean selected, boolean enabled, String role) { String name = "cb" + UUID.randomUUID().toString().replace("-", ""); MultipleSelectionElement selection = new MultipleSelectionElementImpl(name, Layout.horizontal); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java index 30c20612ce27d482f6cf0dc7d7813099d32671f9..7417a532809ffe0030d935bf3bcd8b1b600af42e 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java @@ -72,6 +72,7 @@ import org.olat.core.id.context.StateEntry; import org.olat.core.util.StringHelper; import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.resource.OresHelper; +import org.olat.course.member.wizard.ImportMembersContext; import org.olat.course.member.wizard.ImportMember_1a_LoginListStep; import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep; import org.olat.group.ui.main.MemberPermissionChangeEvent; @@ -565,7 +566,10 @@ public class CurriculumComposerController extends FormBasicController implements private void doChooseMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1b_ChooseMemberStep(ureq, null, null, curriculum, overrideManaged); + CurriculumElementRow focusedRow = tableModel.getFocusedCurriculumElementRow(); + CurriculumElement focusedElement = focusedRow == null ? null : focusedRow.getCurriculumElement(); + ImportMembersContext membersContext= ImportMembersContext.valueOf(curriculum, focusedElement, overrideManaged); + Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(uureq, runContext); return StepsMainRunController.DONE_MODIFIED; @@ -580,7 +584,10 @@ public class CurriculumComposerController extends FormBasicController implements private void doImportMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1a_LoginListStep(ureq, null, null, curriculum, overrideManaged); + CurriculumElementRow focusedRow = tableModel.getFocusedCurriculumElementRow(); + CurriculumElement focusedElement = focusedRow == null ? null : focusedRow.getCurriculumElement(); + ImportMembersContext membersContext= ImportMembersContext.valueOf(curriculum, focusedElement, overrideManaged); + Step start = new ImportMember_1a_LoginListStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(uureq, runContext); if(runContext.containsKey("notFounds")) { diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java index 8b0979c4139b7679f9bf27909fec1f670e50c52b..81e266c3e0f0a57cdd3c2b0fee785837b9be7abc 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java @@ -152,6 +152,10 @@ public class CurriculumComposerTableModel extends DefaultFlexiTreeTableDataModel return accept; } + public CurriculumElementRow getFocusedCurriculumElementRow() { + return focusedNode; + } + public CurriculumElementRow getCurriculumElementRowByKey(Long elementKey) { List<CurriculumElementRow> rows = new ArrayList<>(backupRows); for(CurriculumElementRow row:rows) { diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java b/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java index dc0ef06569d9106a9bb35193cbe0ee53f4366082..53f8c4dd1bea96d4413bbe95a94f2e37a077378c 100644 --- a/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java +++ b/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java @@ -43,6 +43,7 @@ import org.olat.core.util.mail.MailHelper; import org.olat.core.util.mail.MailPackage; import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailerResult; +import org.olat.course.member.wizard.ImportMembersContext; import org.olat.course.member.wizard.ImportMember_1a_LoginListStep; import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep; import org.olat.group.BusinessGroupService; @@ -144,7 +145,8 @@ public class RepositoryMembersController extends AbstractMemberListController { private void doChooseMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1b_ChooseMemberStep(ureq, repoEntry, null, null, false); + ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, false); + Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(uureq, runContext); return StepsMainRunController.DONE_MODIFIED; @@ -159,7 +161,8 @@ public class RepositoryMembersController extends AbstractMemberListController { private void doImportMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); - Step start = new ImportMember_1a_LoginListStep(ureq, repoEntry, null, null, false); + ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, false); + Step start = new ImportMember_1a_LoginListStep(ureq, membersContext); StepRunnerCallback finish = (uureq, wControl, runContext) -> { addMembers(uureq, runContext); if(runContext.containsKey("notFounds")) {