From ff4ed73342acc2b4d2ea33017c7d27691487dbde Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 30 Jan 2013 14:06:32 +0100
Subject: [PATCH] OO-524: split and wrap the panel to make 2 different and
 independent forms, the OK button isn't highlighted anymore after selecting
 "home" or "contact"

---
 .../ui/main/AbstractMemberListController.java | 35 +++++----
 .../ui/main/EditMembershipController.java     | 22 ------
 .../main/EditSingleMembershipController.java  | 74 +++++++++++++++++++
 .../group/ui/main/MemberInfoController.java   |  5 +-
 .../group/ui/main/_content/edit_member.html   |  3 -
 .../ui/main/_content/edit_single_member.html  |  2 +
 6 files changed, 98 insertions(+), 43 deletions(-)
 create mode 100644 src/main/java/org/olat/group/ui/main/EditSingleMembershipController.java
 create mode 100644 src/main/java/org/olat/group/ui/main/_content/edit_single_member.html

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 350101efbd2..9b67c798606 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
@@ -105,7 +105,8 @@ public abstract class AbstractMemberListController extends BasicController imple
 	protected final VelocityContainer mainVC;
 	
 	protected CloseableModalController cmc;
-	private EditMembershipController editMemberCtrl;
+	private EditMembershipController editMembersCtrl;
+	private EditSingleMembershipController editSingleMemberCtrl;
 	private ContactFormController contactCtrl;
 	private MemberLeaveConfirmationController leaveDialogBox;
 	private DialogBoxController confirmSendMailBox;
@@ -263,15 +264,17 @@ public abstract class AbstractMemberListController extends BasicController imple
 			}
 			cmc.deactivate();
 			cleanUpPopups();
-		} else if(source == editMemberCtrl) {
+		} else if(source == editMembersCtrl) {
 			cmc.deactivate();
 			if(event instanceof MemberPermissionChangeEvent) {
 				MemberPermissionChangeEvent e = (MemberPermissionChangeEvent)event;
-				if(e.getMember() != null) {
-					doConfirmChangePermission(ureq, e, null);
-				} else {
-					doConfirmChangePermission(ureq, e, editMemberCtrl.getMembers());
-				}
+				doConfirmChangePermission(ureq, e, editMembersCtrl.getMembers());
+			}
+		} else if(source == editSingleMemberCtrl) {
+			cmc.deactivate();
+			if(event instanceof MemberPermissionChangeEvent) {
+				MemberPermissionChangeEvent e = (MemberPermissionChangeEvent)event;
+				doConfirmChangePermission(ureq, e, null);
 			}
 		} else if(confirmSendMailBox == source) {
 			boolean sendMail = DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event);
@@ -295,13 +298,15 @@ public abstract class AbstractMemberListController extends BasicController imple
 	 */
 	protected void cleanUpPopups() {
 		removeAsListenerAndDispose(cmc);
-		removeAsListenerAndDispose(editMemberCtrl);
+		removeAsListenerAndDispose(editMembersCtrl);
+		removeAsListenerAndDispose(editSingleMemberCtrl);
 		removeAsListenerAndDispose(leaveDialogBox);
 		removeAsListenerAndDispose(contactCtrl);
 		cmc = null;
 		contactCtrl = null;
 		leaveDialogBox = null;
-		editMemberCtrl = null;
+		editMembersCtrl = null;
+		editSingleMemberCtrl = null;
 	}
 	
 	protected void confirmDelete(UserRequest ureq, List<MemberView> members) {
@@ -333,9 +338,9 @@ public abstract class AbstractMemberListController extends BasicController imple
 	
 	protected void openEdit(UserRequest ureq, MemberView member) {
 		Identity identity = securityManager.loadIdentityByKey(member.getIdentityKey());
-		editMemberCtrl = new EditMembershipController(ureq, getWindowControl(), identity, repoEntry, businessGroup);
-		listenTo(editMemberCtrl);
-		cmc = new CloseableModalController(getWindowControl(), translate("close"), editMemberCtrl.getInitialComponent(),
+		editSingleMemberCtrl = new EditSingleMembershipController(ureq, getWindowControl(), identity, repoEntry, businessGroup);
+		listenTo(editSingleMemberCtrl);
+		cmc = new CloseableModalController(getWindowControl(), translate("close"), editSingleMemberCtrl.getInitialComponent(),
 				true, translate("edit.member"));
 		cmc.activate();
 		listenTo(cmc);
@@ -344,9 +349,9 @@ public abstract class AbstractMemberListController extends BasicController imple
 	protected void openEdit(UserRequest ureq, List<MemberView> members) {
 		List<Long> identityKeys = getMemberKeys(members);
 		List<Identity> identities = securityManager.loadIdentityByKeys(identityKeys);
-		editMemberCtrl = new EditMembershipController(ureq, getWindowControl(), identities, repoEntry, businessGroup);
-		listenTo(editMemberCtrl);
-		cmc = new CloseableModalController(getWindowControl(), translate("close"), editMemberCtrl.getInitialComponent(),
+		editMembersCtrl = new EditMembershipController(ureq, getWindowControl(), identities, repoEntry, businessGroup);
+		listenTo(editMembersCtrl);
+		cmc = new CloseableModalController(getWindowControl(), translate("close"), editMembersCtrl.getInitialComponent(),
 				true, translate("edit.member"));
 		cmc.activate();
 		listenTo(cmc);
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 757bbaf7128..77648487ac9 100644
--- a/src/main/java/org/olat/group/ui/main/EditMembershipController.java
+++ b/src/main/java/org/olat/group/ui/main/EditMembershipController.java
@@ -29,12 +29,10 @@ import java.util.UUID;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
 import org.olat.core.gui.components.form.flexible.impl.Form;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.components.form.flexible.impl.elements.MultipleSelectionElementImpl;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
@@ -68,8 +66,6 @@ public class EditMembershipController extends FormBasicController {
 	
 	private EditMemberTableDataModel tableDataModel;
 	private MultipleSelectionElement repoRightsEl;
-	private MemberInfoController infoController;
-	private boolean needMemberInfoController = false;
 	private boolean withButtons;
 	
 	private static final String[] repoRightsKeys = {"owner", "tutor", "participant"};
@@ -99,7 +95,6 @@ public class EditMembershipController extends FormBasicController {
 		businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		
 		memberships = repositoryManager.getRepositoryEntryMembership(repoEntry, member);
-		needMemberInfoController = true;
 		initForm(ureq);
 		loadModel(member);
 		
@@ -121,7 +116,6 @@ public class EditMembershipController extends FormBasicController {
 				}
 			}
 		}
-		infoController.setMembershipCreation(membershipCreation);
 	}
 	
 	public EditMembershipController(UserRequest ureq, WindowControl wControl, List<Identity> members,
@@ -202,13 +196,6 @@ public class EditMembershipController extends FormBasicController {
 		
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
-			if(needMemberInfoController) {
-				infoController = new MemberInfoController(ureq, getWindowControl(), member, repoEntry, mainForm);
-				listenTo(infoController);
-				layoutCont.add(infoController.getInitialFormItem());
-				layoutCont.add("infos", infoController.getInitialFormItem());
-			}
-			
 			String name = repoEntry == null ? businessGroup.getName() : repoEntry.getDisplayname();
 			String title = translate("edit.member.title", new String[]{ name });
 			layoutCont.contextPut("editTitle", title);
@@ -274,15 +261,6 @@ public class EditMembershipController extends FormBasicController {
 	protected void formCancelled(UserRequest ureq) {
 		fireEvent(ureq, Event.CANCELLED_EVENT);
 	}
-	
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		super.formInnerEvent(ureq, source, event);
-		if(infoController != null) {
-			//the inner event are not naturally propagated to the sub controller
-			infoController.formInnerEvent(ureq, source, event);
-		}
-	}
 
 	public void collectRepoChanges(MemberPermissionChangeEvent e) {
 		if(repoEntry == null) return;
diff --git a/src/main/java/org/olat/group/ui/main/EditSingleMembershipController.java b/src/main/java/org/olat/group/ui/main/EditSingleMembershipController.java
new file mode 100644
index 00000000000..bffaa3c5f76
--- /dev/null
+++ b/src/main/java/org/olat/group/ui/main/EditSingleMembershipController.java
@@ -0,0 +1,74 @@
+/**
+ * <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.group.ui.main;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.id.Identity;
+import org.olat.group.BusinessGroup;
+import org.olat.repository.RepositoryEntry;
+
+/**
+ * 
+ * Initial date: 30.01.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class EditSingleMembershipController extends BasicController {
+	
+	private final MemberInfoController infoCtrl;
+	private final EditMembershipController membershipCtrl;
+
+	public EditSingleMembershipController(UserRequest ureq, WindowControl wControl,  Identity identity,
+			RepositoryEntry repoEntry, BusinessGroup group) {
+		super(ureq, wControl);
+		
+		VelocityContainer mainVC = createVelocityContainer("edit_single_member");
+		infoCtrl = new MemberInfoController(ureq, wControl, identity, repoEntry);
+		listenTo(infoCtrl);
+		mainVC.put("infos", infoCtrl.getInitialComponent());
+		
+		membershipCtrl = new EditMembershipController(ureq, wControl, identity, repoEntry, group);
+		listenTo(membershipCtrl);
+		mainVC.put("edit", membershipCtrl.getInitialComponent());
+		
+		putInitialPanel(mainVC);
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		fireEvent(ureq, event);
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		fireEvent(ureq, event);
+	}
+}
diff --git a/src/main/java/org/olat/group/ui/main/MemberInfoController.java b/src/main/java/org/olat/group/ui/main/MemberInfoController.java
index 5d94bf68a87..93dd982b6d8 100644
--- a/src/main/java/org/olat/group/ui/main/MemberInfoController.java
+++ b/src/main/java/org/olat/group/ui/main/MemberInfoController.java
@@ -29,7 +29,6 @@ import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
-import org.olat.core.gui.components.form.flexible.impl.Form;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
@@ -62,8 +61,8 @@ public class MemberInfoController extends FormBasicController {
 	private final UserCourseInformationsManager efficiencyStatementManager;
 	
 	public MemberInfoController(UserRequest ureq, WindowControl wControl, Identity identity,
-			RepositoryEntry repoEntry, Form rootForm) {
-		super(ureq, wControl, LAYOUT_CUSTOM, "info_member", rootForm);
+			RepositoryEntry repoEntry) {
+		super(ureq, wControl, "info_member");
 		setTranslator(Util.createPackageTranslator(UserPropertyHandler.class, ureq.getLocale(), getTranslator()));
 
 		userManager = CoreSpringFactory.getImpl(UserManager.class);
diff --git a/src/main/java/org/olat/group/ui/main/_content/edit_member.html b/src/main/java/org/olat/group/ui/main/_content/edit_member.html
index a9d9b08270e..2bde8eae942 100644
--- a/src/main/java/org/olat/group/ui/main/_content/edit_member.html
+++ b/src/main/java/org/olat/group/ui/main/_content/edit_member.html
@@ -1,6 +1,3 @@
-#if($r.available("infos"))
-	$r.render("infos")<br/>
-#end
 #if($r.available("repoRights"))
 	<fieldset>
 		<legend>$editTitle</legend>
diff --git a/src/main/java/org/olat/group/ui/main/_content/edit_single_member.html b/src/main/java/org/olat/group/ui/main/_content/edit_single_member.html
new file mode 100644
index 00000000000..1941711c936
--- /dev/null
+++ b/src/main/java/org/olat/group/ui/main/_content/edit_single_member.html
@@ -0,0 +1,2 @@
+$r.render("infos")<br/>
+$r.render("edit")
\ No newline at end of file
-- 
GitLab