From eee89ee9c14da89078d7df189a2ad00a51f004be Mon Sep 17 00:00:00 2001
From: hg <none@none>
Date: Wed, 23 Jul 2014 15:24:19 +0200
Subject: [PATCH] OO-1146 make notification email on login-block state optional

---
 .../user/SystemRolesAndRightsController.java      |  2 +-
 .../olat/admin/user/SystemRolesAndRightsForm.java | 13 +++++++++++++
 .../admin/user/_i18n/LocalStrings_de.properties   |  4 +++-
 .../admin/user/_i18n/LocalStrings_en.properties   |  6 ++++--
 .../user/bulkChange/UserBulkChangeManager.java    |  2 +-
 .../user/bulkChange/UserBulkChangeStep01.java     | 15 +++++++++++++++
 6 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java b/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java
index 9b9f411dc4f..483901f1ed4 100644
--- a/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java
+++ b/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java
@@ -195,7 +195,7 @@ public class SystemRolesAndRightsController extends BasicController {
 									: (newStatus == Identity.STATUS_DELETED ? "deleted"
 											: "unknown"))));
 			
-			if(newStatus == Identity.STATUS_LOGIN_DENIED) {
+			if(oldStatus != newStatus && newStatus == Identity.STATUS_LOGIN_DENIED && form.getSendLoginDeniedEmail()) {
 				UserBulkChangeManager.getInstance().sendLoginDeniedEmail(myIdentity);
 			}
 			
diff --git a/src/main/java/org/olat/admin/user/SystemRolesAndRightsForm.java b/src/main/java/org/olat/admin/user/SystemRolesAndRightsForm.java
index 6a737ff0655..f4b4a6d8c1e 100644
--- a/src/main/java/org/olat/admin/user/SystemRolesAndRightsForm.java
+++ b/src/main/java/org/olat/admin/user/SystemRolesAndRightsForm.java
@@ -36,6 +36,7 @@ import org.olat.basesecurity.SecurityGroup;
 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.elements.SelectionElement;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.SpacerElement;
@@ -65,6 +66,7 @@ public class SystemRolesAndRightsForm extends FormBasicController {
 	private SpacerElement rolesSep;
 	private SpacerElement sysSep;
 	private SingleSelection statusRE;
+	private MultipleSelectionElement sendLoginDeniedEmailCB;
 	
 	private Identity identity;
 	private boolean iAmOlatAdmin, isAdmin, isUserManager, isAuthor, isGroupManager, isPoolManager, isGuestOnly, isInstitutionalResourceManager;
@@ -255,6 +257,10 @@ public class SystemRolesAndRightsForm extends FormBasicController {
 		statusRE.setEnabled(status != Identity.STATUS_DELETED);
 	}
 
+	public boolean getSendLoginDeniedEmail() {
+		return sendLoginDeniedEmailCB.isSelected(0);
+	}
+	
 	private void setRole (String k, boolean tf) {
 		if (roleKeys.contains(k)) RolesSE.select(k, tf); 
 	}
@@ -278,7 +284,10 @@ public class SystemRolesAndRightsForm extends FormBasicController {
 		if (source == AnonymousRE) {
 			RolesSE.setVisible(!isAnonymous());
 			rolesSep.setVisible(!isAnonymous());
+		} else if (source == statusRE && iAmOlatAdmin) {
+			sendLoginDeniedEmailCB.setVisible(statusRE.isSelected(2));
 		}
+		
 	}
 
 	@Override
@@ -310,9 +319,13 @@ public class SystemRolesAndRightsForm extends FormBasicController {
 				statusKeys.toArray(new String[statusKeys.size()]),
 				statusValues.toArray(new String[statusKeys.size()])
 		);
+		statusRE.addActionListener(this, FormEvent.ONCHANGE);
+		sendLoginDeniedEmailCB = uifactory.addCheckboxesHorizontal("rightsForm.sendLoginDeniedEmail", formLayout, new String[]{"y"}, new String[]{translate("rightsForm.sendLoginDeniedEmail")}, null);
+		sendLoginDeniedEmailCB.setLabel(null, null);
 		
 		rolesSep.setVisible(iAmOlatAdmin);
 		statusRE.setVisible(iAmOlatAdmin);
+		sendLoginDeniedEmailCB.setVisible(false);
 		
 		FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonGroupLayout", getTranslator());
 		formLayout.add(buttonGroupLayout);
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties
index 610698fc597..5134aabe892 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties
@@ -48,7 +48,7 @@ header.normal=Suche mit Benutzerattributen
 help.hover.rightsForm-eff=Hilfe zu den Systemrollen
 mailto.userlist=Liste der Benutzer
 mailtemplate.login.denied.subject=Deaktivierung ihres OpenOLAT Accounts
-mailtemplate.login.denied.body=Sehr geehrte/r {6} {4},\n\nIhr OpenOLAT Account {0} mit der E-Mail {1} auf dem System {5} wurde deaktiviert.\n\nWenn Sie möchten, dass der Account wieder aktiviert wird, dann melden Sie sich bitte beim Support unter {3}.\n\n\nViele Grüsse\nDas elearning Team
+mailtemplate.login.denied.body=Sehr geehrte/r {6} {4},\n\nIhr OpenOLAT Account {0} mit der E-Mail {1} auf dem System {5} wurde deaktiviert.\n\nWenn Sie möchten, dass der Account wieder aktiviert wird, dann melden Sie sich bitte beim Support unter {3}.\n\n\nViele Grüsse\nDas e-Learning Team
 msg.selectionempty=Bitte min. einen User ausw\u00E4hlen.
 new.error.email.choosen=Diese E-Mail-Adresse ist bereits vorhanden, Sie k\u00F6nnen f\u00FCr diese Person kein neues Benutzerkonto erstellen. Es wurden keine Daten gespeichert.
 new.error.loginname.choosen=Dieser Benutzername ist bereits vergeben. Versuchen Sie es mit einem anderen Benutzernamen.
@@ -89,12 +89,14 @@ rightsForm.status.deleted=Gel\u00F6scht
 rightsForm.status.login_denied=Login gesperrt
 rightsForm.status.permanent=Aktiv und nicht l\u00F6schbar
 rightsForm.title=Systemrollen und Rechte zuteilen
+rightsForm.sendLoginDeniedEmail=Benutzer über Loginsperre informieren
 search.cancel=Die Aktion wurde abgebrochen.
 search.form.afterDate=Benutzer erstellt nach
 search.form.beforeDate=Benutzer erstellt vor
 search.form.constraint.admin=Systemadministrator
 search.form.constraint.auth.OLAT=OLAT/WebDAV-Passwort
 search.form.constraint.auth.Shib=Shibboleth-Passwort
+search.form.constraint.auth.ShibGeneric=$\:search.form.constraint.auth.Shib
 search.form.constraint.auth.LDAP=LDAP-Passwort
 search.form.constraint.auth.WEBDAV=WebDAV-Passwort
 search.form.constraint.auth.none=Ohne Authentifizierung
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties
index ad1b492bdda..e38f8b2249e 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties
@@ -50,8 +50,8 @@ found.property=Property selected {0}
 header.autocompletion=Search combined with auto-completion
 header.normal=Search along with user attributes
 help.hover.rightsForm-eff=Help regarding system roles and rights
-mailtemplate.login.denied.body=Your OpenOLAT account {0} with the email address {1} is blocked.\n\n\nIf you do not agree with this change, please contact support immediately at {3}.
-mailtemplate.login.denied.subject=OpenOLAT Account blocked
+mailtemplate.login.denied.body=Dear {6} {4},\n\nyour OpenOLAT account {0} with the email address {1} on system {5} has been blocked.\n\n\nIf you want to re-activate your account, please contact support at {3}\n\n\nBest regards\nThe e-learning team
+mailtemplate.login.denied.subject=OpenOLAT account blocked
 mailto.userlist=List of users
 msg.selectionempty=Please select at least one user.
 new.error.email.choosen=This e-mail address already exists. There is no need to create another account for this user. No data saved.
@@ -93,6 +93,7 @@ rightsForm.status.deleted=Deleted
 rightsForm.status.login_denied=Login denied
 rightsForm.status.permanent=Active and not deletable
 rightsForm.title=Assign system roles and rights
+rightsForm.sendLoginDeniedEmail=Notify user about login denied change
 search.cancel=Action cancelled.
 search.form.afterDate=User created after
 search.form.beforeDate=User created before
@@ -100,6 +101,7 @@ search.form.constraint.admin=Administrator
 search.form.constraint.auth.LDAP=LDAP password
 search.form.constraint.auth.OLAT=OLAT/WebDAV password 
 search.form.constraint.auth.Shib=Shibboleth password 
+search.form.constraint.auth.ShibGeneric=$\:search.form.constraint.auth.Shib
 search.form.constraint.auth.WEBDAV=WebDAV password
 search.form.constraint.auth.none=No authentication
 search.form.constraint.author=Author
diff --git a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
index 1f17324854a..b879d23e605 100644
--- a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
+++ b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
@@ -221,7 +221,7 @@ public class UserBulkChangeManager extends BasicManager {
 								: (status == Identity.STATUS_LOGIN_DENIED ? "login_denied"
 										: (status == Identity.STATUS_DELETED ? "deleted"
 												: "unknown"))));
-				if(status == Identity.STATUS_LOGIN_DENIED) {
+				if(oldStatus != status && status == Identity.STATUS_LOGIN_DENIED && Boolean.parseBoolean(roleChangeMap.get("sendLoginDeniedEmail"))) {
 					sendLoginDeniedEmail(identity);
 				}
 				identity = secMgr.saveIdentityStatus(identity, status);
diff --git a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep01.java b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep01.java
index 3c3e6480f90..de5b8012eb4 100644
--- a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep01.java
+++ b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep01.java
@@ -103,6 +103,7 @@ class UserBulkChangeStep01 extends BasicStep {
 		private SingleSelection setAdmin;
 		private MultipleSelectionElement chkStatus;
 		private SingleSelection setStatus;
+		private MultipleSelectionElement sendLoginDeniedEmail;
 
 		public UserBulkChangeStepForm01(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) {
 			super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null);
@@ -146,6 +147,10 @@ class UserBulkChangeStep01 extends BasicStep {
 
 			if (chkStatus!=null && chkStatus.getSelectedKeys().contains("Status")) {
 				roleChangeMap.put("Status", setStatus.getSelectedKey());
+				// also check dependent send-email checkbox
+				if (sendLoginDeniedEmail!=null) {
+					roleChangeMap.put("sendLoginDeniedEmail", Boolean.toString(sendLoginDeniedEmail.isSelected(0)));					
+				}
 				validChange = true;
 			}
 
@@ -267,10 +272,20 @@ class UserBulkChangeStep01 extends BasicStep {
 
 				setStatus = uifactory.addDropdownSingleselect("setStatus",null, innerFormLayout, statusKeys, statusValues, null);
 				setStatus.setVisible(false);
+				setStatus.addActionListener(listener, FormEvent.ONCHANGE);
 				targets = new HashSet<FormItem>();
 				targets.add(setStatus);
 				RulesFactory.createHideRule(chkStatus, null, targets, innerFormLayout);
 				RulesFactory.createShowRule(chkStatus, "Status", targets, innerFormLayout);
+				
+				sendLoginDeniedEmail = uifactory.addCheckboxesHorizontal("rightsForm.sendLoginDeniedEmail", innerFormLayout, new String[]{"y"}, new String[]{translate("rightsForm.sendLoginDeniedEmail")}, null);
+				sendLoginDeniedEmail.setLabel(null, null);
+				sendLoginDeniedEmail.setVisible(false);
+				RulesFactory.createHideRule(chkStatus, null, sendLoginDeniedEmail, innerFormLayout);
+				RulesFactory.createHideRule(setStatus, Integer.toString(Identity.STATUS_ACTIV), sendLoginDeniedEmail, innerFormLayout);
+				RulesFactory.createHideRule(setStatus, Integer.toString(Identity.STATUS_PERMANENT), sendLoginDeniedEmail, innerFormLayout);
+				RulesFactory.createShowRule(setStatus, Integer.toString(Identity.STATUS_LOGIN_DENIED), sendLoginDeniedEmail, innerFormLayout);
+
 			}
 
 		}
-- 
GitLab