From 46837f1084d4f697c739fc866dc5c24e83af2586 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Fri, 11 Jan 2019 09:03:31 +0100
Subject: [PATCH] OO-3720: beautify the notifications mails and other fixes

---
 .../org/olat/core/util/mail/MailHelper.java   |  6 ++--
 .../org/olat/core/util/mail/MailManager.java  |  3 ++
 .../util/mail/manager/MailManagerImpl.java    | 31 +++++++++++++++++++
 .../RegistrationAdminController.java          | 12 +++++--
 .../registration/RegistrationController.java  | 18 +++++------
 .../registration/RegistrationManager.java     | 24 +++++++++-----
 .../_i18n/LocalStrings_ar.properties          |  1 -
 .../_i18n/LocalStrings_bg.properties          |  1 -
 .../_i18n/LocalStrings_cs.properties          |  1 -
 .../_i18n/LocalStrings_da.properties          |  1 -
 .../_i18n/LocalStrings_de.properties          |  2 +-
 .../_i18n/LocalStrings_el.properties          |  1 -
 .../_i18n/LocalStrings_en.properties          |  2 +-
 .../_i18n/LocalStrings_es.properties          |  1 -
 .../_i18n/LocalStrings_fr.properties          |  2 +-
 .../_i18n/LocalStrings_it.properties          |  1 -
 .../_i18n/LocalStrings_jp.properties          |  1 -
 .../_i18n/LocalStrings_nl_NL.properties       |  1 -
 .../_i18n/LocalStrings_pl.properties          |  1 -
 .../_i18n/LocalStrings_pt_BR.properties       |  1 -
 .../_i18n/LocalStrings_pt_PT.properties       |  1 -
 .../_i18n/LocalStrings_ru.properties          |  1 -
 .../_i18n/LocalStrings_sq.properties          |  1 -
 .../_i18n/LocalStrings_zh_CN.properties       |  1 -
 .../_i18n/LocalStrings_zh_TW.properties       |  1 -
 .../org/olat/user/UserPropertiesConfig.java   |  4 +--
 .../UserPropertiesConfigImpl.java             | 23 ++------------
 .../UserPropertyUsageContext.java             |  8 ++---
 28 files changed, 82 insertions(+), 69 deletions(-)

diff --git a/src/main/java/org/olat/core/util/mail/MailHelper.java b/src/main/java/org/olat/core/util/mail/MailHelper.java
index 9310964b42a..f63e7dedfa2 100644
--- a/src/main/java/org/olat/core/util/mail/MailHelper.java
+++ b/src/main/java/org/olat/core/util/mail/MailHelper.java
@@ -57,7 +57,7 @@ import org.olat.user.propertyhandlers.UserPropertyHandler;
  *         http://www.frentix.com
  */
 public class MailHelper {
-	private static Map<String, Translator> translators = new HashMap<String, Translator>();
+	private static Map<String, Translator> translators = new HashMap<>();
 	
 	
 	public static String getMailFooter(Locale locale) {
@@ -104,7 +104,7 @@ public class MailHelper {
 		// username / server-url are always first [0], [1].		
 		UserManager um = UserManager.getInstance();
 		List<UserPropertyHandler> userPropertyHandlers = um.getUserPropertyHandlersFor(MailHelper.class.getCanonicalName(), false);
-		List<String> userPropList = new ArrayList<String>(userPropertyHandlers.size()+2);
+		List<String> userPropList = new ArrayList<>(userPropertyHandlers.size()+2);
 		String email = UserManager.getInstance().getUserDisplayEmail(sender, locale);
 		userPropList.add(email);
 		userPropList.add(Settings.getServerContextPathURI());
@@ -298,7 +298,7 @@ public class MailHelper {
 	}
 	
 	public static List<File> checkAttachments(File[] attachments, MailerResult result) {
-		List<File> attachmentList = new ArrayList<File>();
+		List<File> attachmentList = new ArrayList<>();
 		if(attachments != null) {
 			for(File attachment:attachments) {
 				if(attachment == null || !attachment.exists()) {
diff --git a/src/main/java/org/olat/core/util/mail/MailManager.java b/src/main/java/org/olat/core/util/mail/MailManager.java
index 8fab7fba115..bb100412c74 100644
--- a/src/main/java/org/olat/core/util/mail/MailManager.java
+++ b/src/main/java/org/olat/core/util/mail/MailManager.java
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.InputStream;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 
 import javax.mail.Address;
 import javax.mail.internet.MimeMessage;
@@ -199,5 +200,7 @@ public interface MailManager {
 	public void sendMessage(MimeMessage msg, MailerResult result);
 	
 	public MailContent decorateMail(MailBundle bundle);
+	
+	public String decorateMailBody(String body, Locale locale);
 
 }
diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
index ff70f3d134b..39631adcfa7 100644
--- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
+++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
@@ -36,6 +36,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
@@ -754,6 +755,36 @@ public class MailManagerImpl implements MailManager, InitializingBean  {
 		return new SimpleMailContent(content.getSubject(), decoratedBody, content.getAttachments());
 	}
 	
+	public String decorateMailBody(String body, Locale locale) {
+		String template = getMailTemplate();
+		boolean htmlTemplate = StringHelper.isHtml(template);
+		if (htmlTemplate) {
+			template = decorateStyle(template);
+		}
+		boolean htmlContent =  StringHelper.isHtml(body);
+		if(htmlTemplate && !htmlContent) {
+			body = body.replace("&", "&amp;");
+			body = body.replace("<", "&lt;");
+			body = body.replace("\n", "<br />");
+		}
+		VelocityContext context = new VelocityContext();
+		context.put("content", body);
+		context.put("footer", MailHelper.getMailFooter(locale));
+		context.put("server", Settings.getServerContextPathURI());
+
+		StringWriter writer = new StringWriter(2000);
+		MailerResult result = new MailerResult();
+		evaluate(context, template, writer, result);
+		
+		String decoratedBody;
+		if(result.isSuccessful()) {
+			decoratedBody = writer.toString();
+		} else {
+			decoratedBody =body;
+		}
+		return decoratedBody;
+	}
+	
 	private String decorateStyle(String template) {
 		String emailCss = guiSettings.getGuiTheme().getEmailCss();
 		return new StringBuilder()
diff --git a/src/main/java/org/olat/registration/RegistrationAdminController.java b/src/main/java/org/olat/registration/RegistrationAdminController.java
index 5a44d3d5aaa..7d0e447af92 100644
--- a/src/main/java/org/olat/registration/RegistrationAdminController.java
+++ b/src/main/java/org/olat/registration/RegistrationAdminController.java
@@ -40,6 +40,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.helpers.Settings;
 import org.olat.core.id.Organisation;
+import org.olat.core.id.UserConstants;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.mail.MailHelper;
 import org.olat.user.UserPropertiesConfig;
@@ -108,7 +109,8 @@ public class RegistrationAdminController extends FormBasicController {
 		List<UserPropertyHandler> allPropertyHandlers = userPropertiesConfig.getAllUserPropertyHandlers();
 		List<UserPropertyHandler> propertyHandlers = new ArrayList<>(allPropertyHandlers.size());
 		for(UserPropertyHandler handler:allPropertyHandlers) {
-			if(handler instanceof Generic127CharTextPropertyHandler) {
+			if(handler instanceof Generic127CharTextPropertyHandler
+					&& !UserConstants.USERNAME.equals(handler.getName())) {
 				propertyHandlers.add(handler);
 			}
 		}
@@ -338,13 +340,17 @@ public class RegistrationAdminController extends FormBasicController {
 		
 		pendingPropContainer.setVisible(enableMain);
 		if(enableMain) {
-			boolean useProps = RegistrationPendingStatus.pendingMatchingProperties.name()
-					.equals(pendingRegistrationStatusEl.getSelectedKey());
+			String selectedStatus = pendingRegistrationStatusEl.getSelectedKey();
+			boolean useProps = RegistrationPendingStatus.pendingMatchingProperties.name().equals(selectedStatus);
 			pendingProperty1Els.setVisible(useProps);
 			pendingProperty2Els.setVisible(useProps);
 			pendingProperty3Els.setVisible(useProps);
 			pendingProperty4Els.setVisible(useProps);
 			pendingProperty5Els.setVisible(useProps);
+
+			boolean mail = RegistrationPendingStatus.pendingMatchingProperties.name().equals(selectedStatus)
+					|| RegistrationPendingStatus.pending.name().equals(selectedStatus);
+			pendingRegistrationNotificationEl.setVisible(mail);
 		}
 		
 		//static prop
diff --git a/src/main/java/org/olat/registration/RegistrationController.java b/src/main/java/org/olat/registration/RegistrationController.java
index b309c8515e1..bc4d5fd1f37 100644
--- a/src/main/java/org/olat/registration/RegistrationController.java
+++ b/src/main/java/org/olat/registration/RegistrationController.java
@@ -248,12 +248,7 @@ public class RegistrationController extends BasicController implements Activatea
 			}
 		} else if (source == emailSendForm) {
 			if (event == Event.DONE_EVENT) { // form
-				boolean isMailSent = processEmail(ureq);
-				if (isMailSent) {
-					showInfo("email.sent");
-				} else {
-					showError("email.notsent");
-				}
+				processEmail(ureq);
 			}
 		}  else if (source == registrationForm) {
 			// Userdata entered
@@ -333,7 +328,7 @@ public class RegistrationController extends BasicController implements Activatea
 		regarea.setContent(emailSendForm.getInitialComponent());
 	}
 	
-	private boolean processEmail(UserRequest ureq) {
+	private void processEmail(UserRequest ureq) {
 		// validation
 		// was ok
 		wizInfoController.setCurStep(3);
@@ -351,7 +346,6 @@ public class RegistrationController extends BasicController implements Activatea
 			serverpath, today, ip
 		};
 
-		boolean isMailSent = false;
 		if (registrationManager.isRegistrationPending(email) || userManager.isEmailAllowed(email)) {
 			TemporaryKey tk = null;
 			if (userModule.isEmailUnique()) {
@@ -376,7 +370,11 @@ public class RegistrationController extends BasicController implements Activatea
 			if(!htmlBody) {
 				body += SEPARATOR + translate("reg.wherefrom", whereFromAttrs);
 			}
-			sendMessage(email, translate("reg.subject"), body);
+			if(sendMessage(email, translate("reg.subject"), body)) {
+				showInfo("email.sent");
+			} else {
+				showError("email.notsent");
+			}
 		} else {
 			// if users with this email address exists, they are informed.
 			List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(email));
@@ -385,8 +383,8 @@ public class RegistrationController extends BasicController implements Activatea
 				String body = translate("login.body", identity.getName()) + SEPARATOR + translate("reg.wherefrom", whereFromAttrs);
 				sendMessage(email, subject, body);
 			}
+			showError("email.notsent");
 		}
-		return isMailSent;
 	}
 	
 	private boolean sendMessage(String email, String subject, String body) {
diff --git a/src/main/java/org/olat/registration/RegistrationManager.java b/src/main/java/org/olat/registration/RegistrationManager.java
index 9b482c09834..1ebf0408981 100644
--- a/src/main/java/org/olat/registration/RegistrationManager.java
+++ b/src/main/java/org/olat/registration/RegistrationManager.java
@@ -54,6 +54,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.Organisation;
 import org.olat.core.id.User;
 import org.olat.core.id.UserConstants;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Encoder;
@@ -277,21 +278,30 @@ public class RegistrationManager implements UserDataDeletable, UserDataExportabl
 			log.error("Could not send registration notification message, bad mail address", e);
 			return;
 		}
+		
+		// http://localhost:8080/auth/UserAdminSite/0/usearch/0/table/0/Identity/720896/tab/10
+		
+		String userPath = "[UserAdminSite:0][usearch:0][table:0][Identity:" + newIdentity.getKey() + "][tab:10]";
+		String url = BusinessControlFactory.getInstance().getURLFromBusinessPathString(userPath);
+		
 		MailerResult result = new MailerResult();
 		User user = newIdentity.getUser();
 		Locale loc = I18nModule.getDefaultLocale();
 		String[] userParams = new  String[] {
-				newIdentity.getName(), 
-				user.getProperty(UserConstants.FIRSTNAME, loc), 
-				user.getProperty(UserConstants.LASTNAME, loc), 
-				UserManager.getInstance().getUserDisplayEmail(user, loc),
-				user.getPreferences().getLanguage(), 
-				Settings.getServerDomainName() + WebappHelper.getServletContextPath() };
+				newIdentity.getName(), 													// 0
+				user.getProperty(UserConstants.FIRSTNAME, loc), 						// 1
+				user.getProperty(UserConstants.LASTNAME, loc),							// 2
+				UserManager.getInstance().getUserDisplayEmail(user, loc),				// 3
+				user.getPreferences().getLanguage(),									// 4
+				Settings.getServerDomainName() + WebappHelper.getServletContextPath(),	// 5
+				url																		// 6
+			};
 		Translator trans = Util.createPackageTranslator(RegistrationManager.class, loc);
 		String subject = trans.translate("reg.notiEmail.subject", userParams);
 		String body = trans.translate("reg.notiEmail.body", userParams);
+		String decoratedBody = mailManager.decorateMailBody(body, loc);
 		
-		MimeMessage msg = mailManager.createMimeMessage(from, to, null, null, body, subject, null, result);
+		MimeMessage msg = mailManager.createMimeMessage(from, to, null, null, subject, decoratedBody, null, result);
 		mailManager.sendMessage(msg, result);
 		if (result.getReturnCode() != MailerResult.OK ) {
 			log.error("Could not send registration notification message, MailerResult was ::" + result.getReturnCode(), null);			
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties
index d3288c4db60..7936c3dfd65 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties
@@ -47,7 +47,6 @@ pwform.cancelled=\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u062a\u063a\u064a\
 pwform.failed=\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639\u060c \u0648\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0644\u0645 \u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631\u0647\u0627.
 pwkey.missingentry=\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0641\u062a\u0627\u062d \u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.
 reg.body=<p>\u0634\u0643\u0631\u0627 \u0644\u0627\u0647\u062a\u0645\u0627\u0645\u0643 \u0628\u0623\u0648\u0644\u0627\u062a</p><p>{3} \u064a\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0631\u0627\u0628\u0637</p><p>\u0644\u0627\u0633\u062a\u0643\u0645\u0627\u0644 \u062a\u0633\u062c\u064a\u0644\u0643 \u0641\u0649 \u0623\u0648\u0644\u0627\u062a.</p><p>\u0641\u064a \u062d\u0627\u0644\u0629 \u0639\u062f\u0645 \u0631\u063a\u0628\u062a\u0643 \u0641\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644\u060c \u0641\u0642\u0637 \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u0649.</p><p>\u0641\u0631\u064a\u0642 \u0623\u0648\u0644\u0627\u062a</p>
-reg.notiEmail.body=\u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f \u0641\u0649 \u0623\u0648\u0644\u0627\u062a\:\r\n\r\n\u0627\u0644\u0627\u0633\u0645\:  \t{2}\r\n\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644\:     \t{1}\r\n\u0627\u0644\u062f\u062e\u0648\u0644\: \t\t{0}\r\n\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u0649\:  \t{3}\r\n\u0627\u0644\u0644\u063a\u0629\: \t\t{4}\r\n \u0627\u0644\u0633\u064a\u0631\u0641\u0631\: \t\t{5}
 reg.notiEmail.subject=({0}) {2} {1} \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f \u0628\u0623\u0648\u0644\u0627\u062a
 reg.subject=\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0641\u0649 \u0623\u0648\u0644\u0627\u062a
 reg.wherefrom=\u062a\u0645 \u0637\u0644\u0628 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0644\u0644\u0633\u064a\u0631\u0641\u0631 {0} \u0641\u0649 {1}\r\n{2} \u0645\u0646 \u0627\u0644\u0639\u0646\u0648\u0627\u0646
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties
index 2dfea701d08..87af3ff9e79 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties
@@ -38,7 +38,6 @@ pwdhelp=\u041f\u0430\u0440\u043e\u043b\u0430\u0442\u0430<ul><li>\u0442\u0440\u04
 pwform.cancelled=\u041f\u0440\u043e\u043c\u044f\u043d\u0430\u0442\u0430 \u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430 \u0435 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430. \u041f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043e\u0441\u0442\u0430\u0432\u0430 \u043d\u0435\u043f\u0440\u043e\u043c\u0435\u043d\u0435\u043d\u0430.
 pwkey.missingentry=\u041a\u043b\u044e\u0447\u044a\u0442 \u0437\u0430 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.
 reg.body=<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0437\u0430 \u0432\u0430\u0448\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a\u044a\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430.</p><p>\u041c\u043e\u043b\u044f \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 {3},<br>\u0437\u0430 \u0434\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430.</p><p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0439, \u0447\u0435 \u043d\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 \u0439-\u043c\u0430\u0439\u043b.</p>
-reg.notiEmail.body=\u041d\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430 \u0442\u043e\u043a\u0443-\u0449\u043e\: \r\n\r\n\u0418\u043c\u0435\: \t{2}\r\n\u0418\u043c\u0435\: \t\t{1}\r\n\u0412\u043b\u0438\u0437\u0430\u043d\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430\: \t\t{0}\r\n\u0418-\u043c\u0435\u0439\u043b\: \t{3}\r\n\u0415\u0437\u0438\u043a\: \t\t{4}\r\n\u0421\u044a\u0440\u0432\u044a\u0440\: \t\t{5}
 reg.notiEmail.subject=\u041d\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430\: {1} {2} ({0})
 reg.subject=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043a\u043b\u044e\u0447 \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430
 reg.wherefrom=\u0422\u0430\u0437\u0438 \u0437\u0430\u044f\u0432\u043a\u0430 \u0437\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430 {0} \u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0435\u043d\u0430 \u043d\u0430 {1} \r\n\u043e\u0442 IP \u0430\u0434\u0440\u0435\u0441 {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties
index 7ce07328f9a..0eef4643b75 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties
@@ -37,7 +37,6 @@ pwdhelp=Heslo<ul><li>Mus\u00ED obsahovat alespo\u0148 4 znaky</li><li>mus\u00ED
 pwform.cancelled=Zm\u011Bna hesla zru\u0161ena. Heslo z\u016Fstalo stejn\u00E9.
 pwkey.missingentry=Kl\u00ED\u010D pro zm\u011Bnu hesla nenalezen.
 reg.body=<p>D\u011Bkujeme za z\u00E1jem.</p><p>Pou\u017Eijte odkaz {3}</p><p>k \u00FApln\u00E9 registraci.</p><p>Pokud se nechcete zaregistrovat, tento e-mail ignorujte.</p><p>Spr\u00E1va syst\u00E9mu.</p>
-reg.notiEmail.body=Byl zaregistrov\u00E1n nov\u00FD u\u017Eivatel OpenOLATu\: \n\nJm\u00E9no\: \t{2}\nJm\u00E9no\: \t\t{1}\nU\u017Eivatelsk\u00E9 jm\u00E9no\: \t\t{0}\nE-mail\: \t{3}\nJazyk\: \t\t{4}\nServer\: \t\t{5}
 reg.notiEmail.subject=Nov\u00FD u\u017Eivatel OpenOLATu\: {1} {2} ({0})
 reg.subject=Registra\u010Dn\u00ED kl\u00ED\u010D
 reg.wherefrom=Tento registra\u010Dn\u00ED po\u017Eadavek  {0} byl ud\u011Bl\u00E1n {1} \nz IP adresy {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties
index f278ad08a39..c07727e43da 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties
@@ -38,7 +38,6 @@ pwdhelp=Kodeord <ul><li>skal indeholde mindst 4 tegn<ul><li>skal best\u00E5 af b
 pwform.cancelled=OpenOLAT kodeordsskift er afbrudt. Kodeord er u\u00E6ndret.
 pwkey.missingentry=N\u00F8gle til OpenOLAT kodeordsskift er ikke fundet.
 reg.body=<p>Tak for din interesse i OpenOLAT.</p><p>Benyt venligst dette link {3}</p><p>for at afslutte registreringen.</p><p>Hvis du ikke \u00F8nsker at registrere, skal du blot ignorere denne e-mail.</p><p>Dit OpenOLAT team.</p>
-reg.notiEmail.body=En ny OpenOLAT bruger har netop registreret\: \n\nNavn\: \t{2}\nFornavn\: \t\t{1}\nLogin\: \t\t{0}\nE-mail\: \t{3}\nSprog\: \t\t{4}\nServer\: \t\t{5}
 reg.notiEmail.subject=Ny OpenOLAT bruger\: {1} {2} ({0})
 reg.subject=Registreringsn\u00F8gle til OpenOLAT
 reg.wherefrom=Denne registreringsanmodning til serveren {0} er foretaget {1} \nfra IP-adressen {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties
index f9a4e7e8a48..be4f34b7d94 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties
@@ -87,7 +87,7 @@ reg.error.disabled.body=Die Selbstregistrierung wurde f\u00FCr dieses System dea
 reg.error.no_username=Kein Benutzername konnte erstellt werden
 reg.error.title=Registrierung abgebrochen
 reg.error.user_in_use=Benutzername ist schon besetzt
-reg.notiEmail.body=Soeben hat sich ein neuer Benutzer in OpenOLAT registriert\: \n\nName\: \t{2}\nVorname\: \t\t{1}\nLogin\: \t\t{0}\nE-Mail\: \t{3}\nSprache\: \t\t{4}\nServer\: \t\t{5}
+reg.notiEmail.body=<p>Soeben hat sich ein neuer Benutzer in OpenOLAT registriert\:<br><ul><li>Name\: {2}</li><li>Vorname\: {1}</li><li>Login\: {0}</li><li>E-Mail\: {3}</li><li>Sprache\: {4}</li><li>Server\: {5}</li><li>Zu benutzer: <a href="{6}">{6}</a></li></p>
 reg.notiEmail.subject=Neuer OpenOLAT-Benutzer\: {1} {2} ({0})
 reg.subject=Registrierungsschl\u00FCssel f\u00FCr OpenOLAT
 reg.wherefrom=Diese Anfrage an den Server {0} wurde am {1} \nvon der IP-Adresse {2} abgeschickt.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties
index 7213be3b236..94155111d6c 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties
@@ -50,7 +50,6 @@ reg.body=<p>\u03a3\u03b1\u03c2 \u03b5\u03c5\u03c7\u03b1\u03c1\u03b9\u03c3\u03c4\
 reg.error.no_username=\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03b4\u03b5 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5
 reg.error.title=\u0397 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5
 reg.error.user_in_use=\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7
-reg.notiEmail.body=\u0388\u03bd\u03b1\u03c2 \u039d\u03ad\u03bf\u03c2 \u03a7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 \u03c4\u03bf\u03c5 OpenOLAT \u03bc\u03cc\u03bb\u03b9\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03c4\u03b7\u03ba\u03b5\: \n\n\u038c\u03bd\u03bf\u03bc\u03b1\: \t{2}\n\u038c\u03bd\u03bf\u03bc\u03b1\: \t\t{1}\n\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\: \t\t{0}\nEmail\: \t{3}\n\u0393\u03bb\u03ce\u03c3\u03c3\u03b1\: \t\t{4}\n\u0394\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2\: \t\t{5}
 reg.notiEmail.subject=\u039d\u03ad\u03bf\u03c2 \u03a7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 OpenOLAT\: {1} {2} ({0})
 reg.subject=\u039a\u03bb\u03b5\u03b9\u03b4\u03af \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf OpenOLAT
 reg.wherefrom=\u0397 \u03b1\u03af\u03c4\u03b7\u03c3\u03b7 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2 \u03c3\u03c4\u03bf server {0} \u03ad\u03b3\u03b9\u03bd\u03b5 \u03c3\u03c4\u03b9\u03c2 {1} \n\u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 IP {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties
index d845de3cc28..72bede20aef 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties
@@ -87,7 +87,7 @@ reg.error.disabled.body=The self registration for this system has been disabled.
 reg.error.no_username=User name could not be created
 reg.error.title=Registration cancelled
 reg.error.user_in_use=This user name already exists
-reg.notiEmail.body=A new OpenOLAT user has just registered in OpenOLAT\: \r\n\r\nName\: \t{2}\r\nFirst name\: \t\t{1}\r\nLogin\: \t\t{0}\r\nE-mail\:  \t{3}\r\nLanguage\: \t\t{4}\r\nServer\: \t\t{5}
+reg.notiEmail.body=<p>A new OpenOLAT user has just registered in OpenOLAT\:<br><ul><li>Name\: {2}</li><li>First name\: {1}</li><li>Login\: {0}</li><li>E-mail\:  {3}</li><li>Language\: {4}</li><li>Server\: {5}</li><li>To user: <a href="{6}">{6}</a></li></ul></p>
 reg.notiEmail.subject=New OpenOLAT user\: {1} {2} ({0})
 reg.subject=Registration key for OpenOLAT
 reg.wherefrom=This registration request to the server {0} was made on {1} \nfrom the IP address {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties
index 18a068ba30e..685762b1477 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties
@@ -38,7 +38,6 @@ pwdhelp=La contrase\u00F1a<ul><li>debe contener al menos 4 caracteres</li><li>de
 pwform.cancelled=El cambio de contrase\u00F1a OpenOLAT ha sido cancelada. La contrase\u00F1a se mantiene inalterada.
 pwkey.missingentry=No se ha encontrado la clave para cambiar la contrase\u00F1a OpenOLAT.
 reg.body=<p>Gracias por tu inter\u00E9s en OpenOLAT.</p><p>Por favor utiliza el enlace {3} \npara completar el registro.</p><p>En caso de no querer registrarte, ignora este e-mail.</p><p>Tu equipo OpenOLAT.</p>
-reg.notiEmail.body=Un nuevo usuario OpenOLAT esta registrado\: \n\nNombre\: \t{2}\nApellido\: \t\t{1}\nUsario\: \t\t{0}\nE-Mail\: \t{3}\nIdioma\: \t\t{4}\nServidor\: \t\t{5}
 reg.notiEmail.subject=Nuevo usuario OpenOLAT\: {1} {2} ({0})
 reg.subject=Clave de registro para OpenOLAT
 reg.wherefrom=Esta petici\u00F3n de registro al servidor {0} se hizo el {1} \ndesde la direcci\u00F3n IP {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties
index af36e0f3aa8..a8e5987ab25 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties
@@ -85,7 +85,7 @@ reg.error.disabled.body=L'auto-enregistrement a \u00E9t\u00E9 d\u00E9sactiv\u00E
 reg.error.no_username=Le nom d'utilisateur n'a pas \u00E9t\u00E9 cr\u00E9\u00E9.
 reg.error.title=Enregistrement interrompu
 reg.error.user_in_use=Le nom d'utilisateur existe d\u00E9j\u00E0
-reg.notiEmail.body=Un nouvel utilisateur \r\n\r\nNom\: \t{2}\r\nPr\u00E9nom\: \t\t{1}\r\nLogin\: \t\t{0}\r\nE-mail\: \t{3}\r\nLangue\: \t\t{4}\r\nServeur\: \t\t{5}
+reg.notiEmail.body=<p>Un nouvel utilisateur:<br><ul><li>Nom\: {2}</li><li>Pr\u00E9nom\: {1}</li><li>Login\: {0}</li><li>E-mail\: {3}</li><li>Langue\: {4}</li><li>Serveur\: {5}</li><li>Vers l'utilisateur: <a href="{6}">{6}</a></li></ul></p>
 reg.notiEmail.subject=Nouvel utilisateur OpenOLAT {1} {2} ({0})
 reg.subject=Cl\u00E9 d'enregistrement pour OpenOLAT
 reg.wherefrom=Cette requ\u00EAte au serveur {0} a \u00E9t\u00E9 notifi\u00E9e le {1} par l'adresse IP {2}
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties
index 5465c8afb6a..dba23676ef2 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties
@@ -80,7 +80,6 @@ reg.error.disabled.body=L'auto-registrazione \u00E8 disattivata per questo siste
 reg.error.no_username=Il nome utente non \u00E8 stato creato.
 reg.error.title=Registrazione interrotta
 reg.error.user_in_use=Il nome d'utente esiste gi\u00E0
-reg.notiEmail.body=Una/un nuova/o utente OpenOLAT si \u00E8 appena registrata/o\: \n\nNome\: \t{2}\nCognome\: \t\t{1}\nLogin\: \t\t{0}\nE-mail\: \t{3}\nLingua\: \t\t{4}\nServer\: \t\t{5}
 reg.notiEmail.subject=Nuova/o utente OpenOLAT\: {1} {2} ({0})
 reg.subject=Chiave di registrazione per OpenOLAT
 reg.wherefrom=Questa richiesta al server {0} \u00E8 stata inoltrata in data {1} \r\ndall'indirizzo IP {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties
index 281153633af..e7fce0202ca 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties
@@ -47,7 +47,6 @@ reg.body=<p>OpenOLAT\u306b\u8208\u5473\u3092\u6301\u3063\u3066\u3044\u305f\u3060
 reg.error.no_username=\u30e6\u30fc\u30b6\u540d\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
 reg.error.title=\u767b\u9332\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002
 reg.error.user_in_use=\u3053\u306e\u30e6\u30fc\u30b6\u540d\u306f\u3059\u3067\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-reg.notiEmail.body=\u65b0\u3057\u3044OpenOLAT\u30e6\u30fc\u30b6\u304c\u767b\u9332\u3055\u308c\u307e\u3057\u305f\: \r\n\r\n\u59d3\:       {2}\r\n\u540d\:       {1}\r\n\u30ed\u30b0\u30a4\u30f3\:   {0}\r\nE\u30e1\u30fc\u30eb\:   {3}\r\n\u8a00\u8a9e\:     {4}\r\n\u30b5\u30fc\u30d0\:   {5}
 reg.notiEmail.subject=\u65b0\u3057\u3044OpenOLAT\u30e6\u30fc\u30b6\: {1} {2} ({0})
 reg.subject=OpenOLAT\u767b\u9332\u30ad\u30fc
 reg.wherefrom=\u3053\u306e\u767b\u9332\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u3001 \u30b5\u30fc\u30d0 {0} \u306b\u5bfe\u3057\u3066 {1} \u3001IP\u30a2\u30c9\u30ec\u30b9 {2} \u3088\u308a\u5b9f\u65bd\u3055\u308c\u307e\u3057\u305f\u3002
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties
index e16d6efbf7b..bdf5eff3ad0 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties
@@ -50,7 +50,6 @@ reg.body=<p>Hartelijk dank voor uw interesse in OpenOLAT.</p><p>Gebruik de link
 reg.error.no_username=Gebruikersnaam kon niet aangemaakt worden
 reg.error.title=Registratie geannuleerd
 reg.error.user_in_use=Deze gebruikersnaam bestaat al
-reg.notiEmail.body=Een nieuwe OpenOLAT-gebruiker heft zich net geregistreerd\: \\n\\nNaam\: \\t{2}\\Voornaam\: \\t\\t{1}\\nAanmelden\: \\t\\t{0}\\nE-mail\: \\t{3}\\nTaal\: \\t\\t{4}\\nServer\: \\t\\t{5}
 reg.notiEmail.subject=Nieuwe OpenOLAT-gebruiker\: {1} {2} ({0})
 reg.subject=Registratiecode voor OpenOLAT
 reg.wherefrom=Dit registratieverzoek aan de server  {0} werd verstuurd {1} \\n vanuit het IP-adres {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties
index 5dd83cfbf84..7b3c0226ec7 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties
@@ -56,7 +56,6 @@ reg.body=<p>Dzi\u0119kujemy za zainteresowanie OpenOLAT.</p><p>U\u017Cyj linka {
 reg.error.no_username=Nie uda\u0142o si\u0119 utworzy\u0107 nazwy u\u017Cytkownika
 reg.error.title=Rejestracja anulowana
 reg.error.user_in_use=Podana nazwa u\u017Cytkownika ju\u017C istnieje
-reg.notiEmail.body=Nowy u\u017Cytkownik OpenOLAT w\u0142a\u015Bnie si\u0119 zarejestrowa\u0142\: \n\nNazwa u\u017Cytkownika\: \t{2}\nImi\u0119\: \t\t{1}\nLogin\: \t\t{0}\nEmail\: \t{3}\nJ\u0119zyk\: \t\t{4}\nSerwer\: \t\t{5}
 reg.notiEmail.subject=Nowy u\u017Cytkownik OpenOLAT\: {1} {2} ({0})
 reg.subject=Klucz rejestracji OpenOLAT
 reg.wherefrom=Ta pr\u00F3ba rejestracji do serwera {0} zosta\u0142a przeprowadzona {1} \nz adresu IP {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties
index 1e9e260c819..d17948d32fa 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties
@@ -85,7 +85,6 @@ reg.error.disabled.body=O auto-registro para este sistema foi desativado. Entre
 reg.error.no_username=Nome de Usu\u00E1rio n\u00E3o pode ser criado
 reg.error.title=Registro cancelado
 reg.error.user_in_use=Esse nome de usu\u00E1rio j\u00E1 existe
-reg.notiEmail.body=Um novo usu\u00E1rio do OpenOLAT acabou de se registrar\: \n\nNome\: \t{2}\nPrimeiro nome\: \t\t{1}\nLogin\: \t\t{0}\nEmail\: \t{3}\nIdioma\: \t\t{4}\nServidor\: \t\t{5}
 reg.notiEmail.subject=Novo usu\u00E1rio do OpenOLAT \: {1} {2} ({0})
 reg.subject=Chave de registro para OpenOLAT
 reg.wherefrom=Este pedido de registro para o servidor {0} foi feito em {1} \ndo endere\u00E7o IP {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties
index 928fa2c66eb..a0839f1c7ce 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties
@@ -38,7 +38,6 @@ pwdhelp=A senha<ul><li>deve conter pelo menos  4 caracteres</li><li>deve conter
 pwform.cancelled=Altera\u00E7\u00E3o da senha OpenOLAT foi cancelada. A senha permanece inalterada.
 pwkey.missingentry=Chave para altera\u00E7\u00E3o de senha OLA n\u00E3o encontrada.
 reg.body=<p>Agradecemos seu interesse no OpenOLAT.</p><p>Favor usar o link {3}<br>para completar o registro.</p><p>Caso n\u00E3o queira registrar-se, ignore este e-mail.</p><p>Sua Equipe OpenOLAT.</p>
-reg.notiEmail.body=Um novo usu\u00E1rio do OpenOLAT acabou de se registrar\: \n\nNome\: \t{2}\nPrimeiro nome\: \t\t{1}\nLogin\: \t\t{0}\nEmail\: \t{3}\nIdioma\: \t\t{4}\nServidor\: \t\t{5}
 reg.notiEmail.subject=Novo usu\u00E1rio do OpenOLAT \: {1} {2} ({0})
 reg.subject=Chave de registro para OpenOLAT
 reg.wherefrom=Este pedido de registro para o servidor {0} foi feito em {1} \ndo endere\u00E7o IP {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties
index 56deb66f7bd..578366b870e 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties
@@ -38,7 +38,6 @@ pwdhelp=\u041f\u0430\u0440\u043e\u043b\u044c <ul><li>\u0434\u043e\u043b\u0436\u0
 pwform.cancelled=\u0412\u0432\u043e\u0434 \u043d\u043e\u0432\u043e\u0433\u043e OpenOLAT-\u043f\u0430\u0440\u043e\u043b\u044f \u0431\u044b\u043b \u043f\u0440\u0435\u0440\u0432\u0430\u043d. \u041f\u0430\u0440\u043e\u043b\u044c \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.  
 pwkey.missingentry=\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f OpenOLAT, \u043d\u0435 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u043a\u043b\u044e\u0447.
 reg.body=<p>\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0412\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 OpenOLAT.</p><p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0441\u044b\u043b\u043a\u0443 {3}<br>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0412\u0430\u0448\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.</p><p>\u0412 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 e-mail.</p><p>\u0412\u0430\u0448 OpenOLAT \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432</p>
-reg.notiEmail.body=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0432 OpenOLAT \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\: \n\n\u0424\u0430\u043c\u0438\u043b\u0438\u044f\: \t{2}\n\u0418\u043c\u044f\: \t\t{1}\n\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\: \t\t{0}\nE-mail\: \t{3}\n\u042f\u0437\u044b\u043a\: \t\t{4}\n\u0421\u0435\u0440\u0432\u0435\u0440\: \t\t{5}
 reg.notiEmail.subject=\u041d\u043e\u0432\u044b\u0439 OpenOLAT-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\: {1} {2} ({0})
 reg.subject=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f OpenOLAT
 reg.wherefrom=\u042d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043e\u0441\u043b\u0430\u043d {1} \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 {0}\r\n\u0441 IP-\u0430\u0434\u0440\u0435\u0441\u0430 {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties
index f7b1fc934dd..31d77290c5a 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties
@@ -38,7 +38,6 @@ pwdhelp=Fjal\u00EBkalimi<ul><li>duhet t\u00EB p\u00EBrmbaj\u00EB s\u00EB paku 4
 pwform.cancelled=Nd\u00EBrrimi i OpenOLAT fjal\u00EBkalimit u anulua. Fjal\u00EBkalimi mbeti i pa nd\u00EBrruar.
 pwkey.missingentry=\u00C7el\u00EBsi p\u00EBr nd\u00EBrrimin e OpenOLAT fjal\u00EBkalimit nuk \u00EBsht\u00EB gjetur.
 reg.body=<p>Faleminderit p\u00EBr interesimin tuaj n\u00EB OpenOLAT.</p>Ju lutemi shfryt\u00EBzoni lidhjen {3}<br>t\u00EB kompletoni regjistrimin.</p><p>N\u00EB rast se nuk doni t\u00EB regjistroheni, vet\u00EBm injoroni k\u00EBt\u00EB e-mail.</p><p>Ekipi juaj i OpenOLAT.</p>
-reg.notiEmail.body=Nj\u00EB shfryt\u00EBzues i ri \u00EBsht\u00EB regjistruar\: \n\nMbiemri\: \t{2}\nEmri\: \t\t{1}\nNofka\: \t\t{0}\nE-posta\: \t{3}\nGjuha\: \t\t{4}\nServeri\: \t\t{5}
 reg.notiEmail.subject=Shfryt\u00EBzues i ri i OpenOLAT-it \: {1} {2} ({0})
 reg.subject=\u00C7el\u00EBsi i regjistrimit p\u00EBr OpenOLAT
 reg.wherefrom=Kjo k\u00EBrkes\u00EB p\u00EBr regjistrim tek serveri {0} \u00EBsht\u00EB b\u00EBr\u00EB m\u00EB {1} \nnga IP adresa {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties
index 1c2cb0edde8..d306d4144c5 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties
@@ -65,7 +65,6 @@ reg.body=<p>\u611F\u8C22\u4F60\u5173\u6CE8OpenOLAT.</p><p>\u8BF7\u4F7F\u7528\u8F
 reg.error.no_username=\u65E0\u6CD5\u521B\u5EFA\u7528\u6237\u540D
 reg.error.title=\u5DF2\u53D6\u6D88\u6CE8\u518C
 reg.error.user_in_use=\u6B64\u7528\u6237\u540D\u5DF2\u7ECF\u5B58\u5728
-reg.notiEmail.body=\u521A\u521A\u6CE8\u518C\u4E86\u4E00\u4E2A\u65B0OpenOLAT\u7528\u6237\uFF1A\r\n\r\n\u540D \uFF1A            {2}\r\n\u59D3 \uFF1A            {1}\r\n\u767B\u5165 \uFF1A          {0}\r\n\u7535\u5B50\u90AE\u4EF6 \uFF1A {3} \r\n\u4F7F\u7528\u8BED\u8A00 \uFF1A      {4}\r\n\u670D\u52A1\u5668 \uFF1A        {5}
 reg.notiEmail.subject=\u65B0OpenOLAT\u7528\u6237\uFF1A {1} {2} {{0}}
 reg.subject=OpenOLAT\u7684\u6CE8\u518C\u5BC6\u94A5\u3002
 reg.wherefrom=\u8FD9\u4E2A\u8BF7\u6C42\u670D\u52A1\u7684\u6CE8\u518C {0}\u5DF2\u7ECF\u5728 {1}\u4E0A\u751F\u6210 \n\u901A\u8FC7IP\u5730\u5740 {2}.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties
index 9eb7adde2d2..0d56908735c 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties
@@ -50,7 +50,6 @@ reg.body=<p>\u611F\u8B1D\u60A8\u5C0D OpenOLAT \u7684\u8208\u8DA3\u3002</p><p>\u8
 reg.error.no_username=\u7121\u6CD5\u5EFA\u7ACB\u4F7F\u7528\u8005\u540D\u7A31
 reg.error.title=\u53D6\u6D88\u8A3B\u518A
 reg.error.user_in_use=\u9019\u500B\u4F7F\u7528\u8005\u540D\u7A31\u5DF2\u7D93\u5B58\u5728
-reg.notiEmail.body=\u4E00\u500B\u65B0 OpenOLAT \u4F7F\u7528\u8005\u525B\u8A3B\u518A\u4E86\uFF1A\n\n\u59D3\u540D\uFF1A\t{2}\n\u540D\u5B57\uFF1A\t\t{1}\n\u767B\u5165\uFF1A\t\t{0}\n\u96FB\u5B50\u90F5\u4EF6\uFF1A\t{3}\n\u8A9E\u8A00\uFF1A\t\t{4}\n\u4F3A\u670D\u5668\uFF1A\t\t{5}
 reg.notiEmail.subject=\u65B0 OpenOLAT \u4F7F\u7528\u8005\uFF1A {1} {2} ({0})
 reg.subject=OpenOLAT \u8A3B\u518A\u6388\u6B0A\u78BC
 reg.wherefrom=\u5C0D\u4F3A\u670D\u5668 {0} \u7684\u9019\u500B\u8A3B\u518A\u8981\u6C42\u662F\u7522\u751F\u5728 {1} \r\n\u4F86\u81EA IP \u4F4D\u5740 {2}\u3002
diff --git a/src/main/java/org/olat/user/UserPropertiesConfig.java b/src/main/java/org/olat/user/UserPropertiesConfig.java
index 0740928b1ac..7f2ae5e845f 100644
--- a/src/main/java/org/olat/user/UserPropertiesConfig.java
+++ b/src/main/java/org/olat/user/UserPropertiesConfig.java
@@ -93,7 +93,7 @@ public interface UserPropertiesConfig {
 	public void setUserPropertyHandlers(List<UserPropertyHandler> userPropertyHandlers);
 	
 	/**
-	 * returns a map containing all the userPropertyUsageContexts
+	 * @return A map containing all the userPropertyUsageContexts
 	 */
 	public Map<String,UserPropertyUsageContext> getUserPropertyUsageContexts();
 	
@@ -101,7 +101,7 @@ public interface UserPropertiesConfig {
 	 * Get all available property handlers. Do not use this for forms or tables,
 	 * use this only to cleanup things
 	 * 
-	 * @return
+	 * @return A list of user property handlers
 	 */
 	public List<UserPropertyHandler> getAllUserPropertyHandlers();
 
diff --git a/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java b/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java
index d58b3d54aed..185112ccf6b 100644
--- a/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java
+++ b/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java
@@ -47,7 +47,7 @@ public class UserPropertiesConfigImpl implements UserPropertiesConfig {
 
 	
 	private Map<String, UserPropertyHandler> userPropertyNameLookupMap;
-	private ConcurrentMap<String, List<UserPropertyHandler>> userPropertyUsageContextsLookupMap = new ConcurrentHashMap<String, List<UserPropertyHandler>>();
+	private ConcurrentMap<String, List<UserPropertyHandler>> userPropertyUsageContextsLookupMap = new ConcurrentHashMap<>();
 	
 	private List<UserPropertyHandler> userPropertyHandlers;
 	private Map<String, UserPropertyUsageContext> userPropertyUsageContexts;
@@ -88,17 +88,13 @@ public class UserPropertiesConfigImpl implements UserPropertiesConfig {
 	public void setUserPropertyHandlers(List<UserPropertyHandler> userPropertyHandlers) {
 		this.userPropertyHandlers = userPropertyHandlers;
 		// populate name lookup map for faster lookup service
-		userPropertyNameLookupMap = new HashMap<String, UserPropertyHandler>(userPropertyHandlers.size());
+		userPropertyNameLookupMap = new HashMap<>(userPropertyHandlers.size());
 		for (UserPropertyHandler propertyHandler : userPropertyHandlers) {
 			String name = propertyHandler.getName();
 			userPropertyNameLookupMap.put(name, propertyHandler);
 		}
 	}
 
-	/**
-	 * 
-	 * @see org.olat.user.UserPropertiesConfig#getPropertyHandler(java.lang.String)
-	 */
 	@Override
 	public UserPropertyHandler getPropertyHandler(String handlerName) {
 		UserPropertyHandler handler =  userPropertyNameLookupMap.get(handlerName);
@@ -108,25 +104,16 @@ public class UserPropertiesConfigImpl implements UserPropertiesConfig {
 		return handler;
 	}
 
-	/**
-	 * @see org.olat.user.UserPropertiesConfig#getTranslator(org.olat.core.gui.translator.Translator)
-	 */
 	@Override
 	public Translator getTranslator(Translator fallBack) {
 		return new PackageTranslator(PACKAGE, fallBack.getLocale(), fallBack); 
 	}
 
-	/**
-	 * @see org.olat.user.UserPropertiesConfig#getAllUserPropertyHandlers()
-	 */
 	@Override
 	public List<UserPropertyHandler> getAllUserPropertyHandlers() {
 		return userPropertyHandlers;
 	}
 
-	/**
-	 * @see org.olat.user.UserPropertiesConfig#getUserPropertyHandlersFor(java.lang.String, boolean)
-	 */
 	@Override
 	public List<UserPropertyHandler> getUserPropertyHandlersFor(String usageIdentifyer, boolean isAdministrativeUser) {
 		String key = usageIdentifyer + "_" + isAdministrativeUser;
@@ -152,18 +139,12 @@ public class UserPropertiesConfigImpl implements UserPropertiesConfig {
 		return currentUsageHandlers;
 	}
 
-	/**
-	 * @see org.olat.user.UserPropertiesConfig#isMandatoryUserProperty(java.lang.String, org.olat.user.propertyhandlers.UserPropertyHandler)
-	 */
 	@Override
 	public boolean isMandatoryUserProperty(String usageIdentifyer, UserPropertyHandler propertyHandler) {
 		UserPropertyUsageContext currentUsageConfig = getCurrentUsageConfig(usageIdentifyer);
 		return currentUsageConfig.isMandatoryUserProperty(propertyHandler);
 	}
 
-	/**
-	 * @see org.olat.user.UserPropertiesConfig#isUserViewReadOnly(java.lang.String, org.olat.user.propertyhandlers.UserPropertyHandler)
-	 */
 	@Override
 	public boolean isUserViewReadOnly(String usageIdentifyer, UserPropertyHandler propertyHandler) {
 		UserPropertyUsageContext currentUsageConfig = getCurrentUsageConfig(usageIdentifyer);
diff --git a/src/main/java/org/olat/user/propertyhandlers/UserPropertyUsageContext.java b/src/main/java/org/olat/user/propertyhandlers/UserPropertyUsageContext.java
index b7622b1d903..773816ca883 100644
--- a/src/main/java/org/olat/user/propertyhandlers/UserPropertyUsageContext.java
+++ b/src/main/java/org/olat/user/propertyhandlers/UserPropertyUsageContext.java
@@ -41,10 +41,10 @@ public class UserPropertyUsageContext {
 
 	private String description = "";
 
-	private List<UserPropertyHandler> propertyHandlers = new ArrayList<UserPropertyHandler>();
-	private Set<UserPropertyHandler> mandatoryProperties = new HashSet<UserPropertyHandler>();
-	private Set<UserPropertyHandler> adminViewOnlyProperties = new HashSet<UserPropertyHandler>();
-	private Set<UserPropertyHandler> userViewReadOnlyProperties = new HashSet<UserPropertyHandler>();
+	private List<UserPropertyHandler> propertyHandlers = new ArrayList<>();
+	private Set<UserPropertyHandler> mandatoryProperties = new HashSet<>();
+	private Set<UserPropertyHandler> adminViewOnlyProperties = new HashSet<>();
+	private Set<UserPropertyHandler> userViewReadOnlyProperties = new HashSet<>();
 
 	/**
 	 * Spring setter
-- 
GitLab