From f3db626a9ad37b89eea67caeb3aab87b4753415c Mon Sep 17 00:00:00 2001
From: gnaegi <none@none>
Date: Fri, 25 Jul 2014 15:00:17 +0200
Subject: [PATCH] OO-988 make personal toolconfig behave like other forms with
 explicit button

---
 .../org/olat/user/ToolsPrefsController.java   | 64 +++++++++++++------
 .../user/_i18n/LocalStrings_de.properties     |  2 +-
 .../user/_i18n/LocalStrings_en.properties     |  2 +-
 3 files changed, 45 insertions(+), 23 deletions(-)

diff --git a/src/main/java/org/olat/user/ToolsPrefsController.java b/src/main/java/org/olat/user/ToolsPrefsController.java
index 07958a80f09..3b2dbabb2a7 100644
--- a/src/main/java/org/olat/user/ToolsPrefsController.java
+++ b/src/main/java/org/olat/user/ToolsPrefsController.java
@@ -34,7 +34,9 @@ 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.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.control.Controller;
+import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
@@ -112,42 +114,62 @@ public class ToolsPrefsController extends FormBasicController {
 		}
 		presetEl = uifactory.addCheckboxesVertical("usertools.set", "usertools.set", formLayout, toolKeys, toolValues, 1);
 		presetEl.addActionListener(FormEvent.ONCHANGE);
-		presetEl.setEnabled(enabled);
+		presetEl.setEnabled(enabled);		
+		initPresetElementUserData();
 		
-		String selectedTools = (String)prefs.get(WindowManager.class, "user-tools");
-		if(!StringHelper.containsNonWhitespace(selectedTools)) {
-			selectedTools = userToolsModule.getDefaultPresetOfUserTools();
-		}
-		if(StringHelper.containsNonWhitespace(selectedTools)) {
-			String[] selectedToolArr = selectedTools.split(",");
-			for(String toolKey:toolKeys) {
-				for(String selectedTool:selectedToolArr) {
-					if(toolKey.equals(selectedTool)) {
-						presetEl.select(toolKey, true);
-					}
-				}
-			}
-		}
+		// Create submit and cancel buttons
+		FormLayoutContainer buttonLayoutWrappper = FormLayoutContainer.createButtonLayout("buttonLayoutWrappper", getTranslator());
+		formLayout.add(buttonLayoutWrappper);
+		FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttonLayoutInner", getTranslator());
+		buttonLayoutWrappper.add(buttonLayout);
+		uifactory.addFormSubmitButton("save", buttonLayout);
+		uifactory.addFormCancelButton("cancel", buttonLayout, ureq, getWindowControl());
+
 	}
 	
 	@Override
 	protected void doDispose() {
 		//
 	}
-	
-	
 
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if(presetEl == source) {
-			doSave();
-		}
 		super.formInnerEvent(ureq, source, event);
 	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
-		//
+		doSave();
+		showInfo("preferences.successful");
+		fireEvent(ureq, Event.DONE_EVENT);
+	}
+	
+	@Override
+	protected void formCancelled(UserRequest ureq) {
+		// reset to last saved state: re-initialize form
+		initPresetElementUserData();
+		fireEvent(ureq, Event.CANCELLED_EVENT);
+	}
+
+	private void initPresetElementUserData() {
+		String selectedTools = (String)prefs.get(WindowManager.class, "user-tools");
+		if(!StringHelper.containsNonWhitespace(selectedTools)) {
+			// use presets when user has not yet any values
+			selectedTools = userToolsModule.getDefaultPresetOfUserTools();
+		}
+		if(StringHelper.containsNonWhitespace(selectedTools)) {
+			String[] selectedToolArr = selectedTools.split(",");
+			keyloop: for (String toolKey:presetEl.getKeys()) {
+				for(String selectedTool:selectedToolArr) {
+					if(toolKey.equals(selectedTool)) {
+						presetEl.select(toolKey, true);
+						continue keyloop;
+					}
+				}
+				// not found: disable
+				presetEl.select(toolKey, false);
+			}
+		}
 	}
 	
 	private void doSave() {
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
index 68ceb8979c2..1e5a4d9b9bf 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
@@ -145,7 +145,7 @@ landing.pages=Startseite
 notallowedtochangepwd=Sie d\u00FCrfen das Passwort nicht selbst setzen. Bei Fragen wenden Sie sich bitte an {0}.
 password.failed=Ihr neues Passwort wurde nicht gespeichert. Ein unerwarteter Fehler ist aufgetreten. 
 password.successful=Ihr neues Passwort wurde erfolgreich gespeichert. Es ist ab sofort aktiv.
-preferences.successful=Ihre Systemeinstellungen wurden gespeichert. \u00C4nderungen von Spracheinstellungen und AJAX-Modus werden erst bei Ihrem n\u00E4chsten Login aktiviert.
+preferences.successful=Ihre Systemeinstellungen wurden gespeichert. \u00C4nderungen von Werkzeugen, Spracheinstellungen und AJAX-Modus werden erst bei Ihrem n\u00E4chsten Login aktiviert.
 preferences.unsuccessful=Ihre Systemeinstellungen konnten nicht gespeichert werden. Bitte versuchen Sie es noch einmal.
 user.preferences.successful=Die Systemeinstellungen des Benutzers ({0}) wurden gespeichert. \u00C4nderungen von Spracheinstellungen und AJAX-Modus sind beim n\u00E4chsten Login aktiv.
 user.preferences.unsuccessful=Die Systemeinstellungen des Benutzers ({0}) konnten nicht gespeichert werden. Bitte versuchen Sie es noch einmal.
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties
index 8147e8ad06a..233cba93233 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties
@@ -162,7 +162,7 @@ menu.portfolio.alt=Portfolio
 notallowedtochangepwd=You are not allowed to change your password on your own. Please contact {0} if you have any questions.
 password.failed=Your new password could not be saved. An unexpected server error occurred.
 password.successful=Your new password has been saved successfully. It is valid from now on. 
-preferences.successful=Your system settings have been saved. Modifications regarding your language settings and the AJAX mode will be activated after your next login.
+preferences.successful=Your system settings have been saved. Modifications regarding your tools, language settings and the AJAX mode will be activated after your next login.
 preferences.unsuccessful=Your system settings could not be saved. Please try again.
 profile.unsuccessful=Your profile could not be saved. Please try again.
 propdelete.yesno.text=Do you really want to delete the property '{0}' of user '{1}'?
-- 
GitLab