CCM NG: Add form for creating new users to /ccm/admin/

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3975 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2016-04-06 17:21:26 +00:00
parent 4bd63b1b45
commit ce1be1e87e
7 changed files with 300 additions and 11 deletions

View File

@ -49,8 +49,8 @@ import java.util.ArrayList;
class UserAdministrationTab extends LayoutPanel { class UserAdministrationTab extends LayoutPanel {
private final List sections; private final List sections;
private final java.util.List<Component> components = new ArrayList<Component>(); private final java.util.List<Component> components = new ArrayList<>();
private final java.util.List<Label> keys = new ArrayList<Label>(); private final java.util.List<Label> keys = new ArrayList<>();
private final GlobalizedMessage title = USER_NAVBAR_TITLE; private final GlobalizedMessage title = USER_NAVBAR_TITLE;
public UserAdministrationTab(final TabbedPane parent, final GroupAdministrationTab groupAdminTab) { public UserAdministrationTab(final TabbedPane parent, final GroupAdministrationTab groupAdminTab) {

View File

@ -24,6 +24,8 @@ import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink; import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.FormSection;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page; import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
@ -37,15 +39,16 @@ import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.form.CheckboxGroup; import com.arsdigita.bebop.form.CheckboxGroup;
import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.Password; import com.arsdigita.bebop.form.Password;
import com.arsdigita.bebop.form.RadioGroup;
import com.arsdigita.bebop.form.Submit; import com.arsdigita.bebop.form.Submit;
import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.NotEmptyValidationListener; import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
import com.arsdigita.bebop.parameters.StringLengthValidationListener;
import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel; import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.mail.Mail;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -56,8 +59,6 @@ import org.libreccm.security.User;
import org.libreccm.security.UserManager; import org.libreccm.security.UserManager;
import org.libreccm.security.UserRepository; import org.libreccm.security.UserRepository;
import java.util.logging.Level;
import javax.mail.MessagingException; import javax.mail.MessagingException;
import static com.arsdigita.ui.admin.AdminUiConstants.*; import static com.arsdigita.ui.admin.AdminUiConstants.*;
@ -85,11 +86,12 @@ public class UserAdmin extends BoxPanel {
// private final UserDetails userDetails; // private final UserDetails userDetails;
private final BoxPanel userDetails; private final BoxPanel userDetails;
private final Form emailForm; private final Form emailForm;
private final Form newUserForm;
public UserAdmin() { public UserAdmin() {
super(); super();
setIdAttr("userAdmin"); setBasicProperties();
usersTablePanel = new BoxPanel(); usersTablePanel = new BoxPanel();
usersTablePanel.setIdAttr("usersTablePanel"); usersTablePanel.setIdAttr("usersTablePanel");
@ -121,6 +123,13 @@ public class UserAdmin extends BoxPanel {
usersTable = new UsersTable(this, usersTableFilter, selectedUserId); usersTable = new UsersTable(this, usersTableFilter, selectedUserId);
usersTablePanel.add(usersTable); usersTablePanel.add(usersTable);
final ActionLink addNewUserLink = new ActionLink(new GlobalizedMessage(
"ui.admin.new_user.link", ADMIN_BUNDLE));
addNewUserLink.addActionListener(e -> {
showNewUserForm(e.getPageState());
});
usersTablePanel.add(addNewUserLink);
add(usersTablePanel); add(usersTablePanel);
// final Text text = new Text(); // final Text text = new Text();
@ -264,7 +273,6 @@ public class UserAdmin extends BoxPanel {
new GlobalizedMessage( new GlobalizedMessage(
"ui.admin.set_password.password_confirm.error.not_empty", "ui.admin.set_password.password_confirm.error.not_empty",
ADMIN_BUNDLE))); ADMIN_BUNDLE)));
passwordSetForm.add(newPassword);
passwordConfirm.setLabel(new GlobalizedMessage( passwordConfirm.setLabel(new GlobalizedMessage(
"ui.admin.user_set_password.confirm_password.label", "ui.admin.user_set_password.confirm_password.label",
ADMIN_BUNDLE ADMIN_BUNDLE
@ -660,6 +668,207 @@ public class UserAdmin extends BoxPanel {
add(userDetails); add(userDetails);
newUserForm = buildNewUserForm();
}
private void setBasicProperties() {
setIdAttr("userAdmin");
}
private Form buildNewUserForm() {
final Form form = new Form("new_user_form");
final String username = "username";
final TextField usernameField = new TextField(username);
usernameField.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.username.label", ADMIN_BUNDLE));
usernameField.setSize(32);
usernameField.setMaxLength(32);
usernameField.addValidationListener(new NotEmptyValidationListener());
usernameField.addValidationListener(new StringLengthValidationListener(
32));
form.add(usernameField);
final String givenName = "givenname";
final TextField givenNameField = new TextField(givenName);
givenNameField.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.givenname.label", ADMIN_BUNDLE));
givenNameField.setSize(32);
givenNameField.setMaxLength(256);
givenNameField.addValidationListener(new NotEmptyValidationListener());
givenNameField.addValidationListener(new StringLengthValidationListener(
256));
form.add(givenNameField);
final String familyName = "familyName";
final TextField familyNameField = new TextField(familyName);
familyNameField.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.familyname.label", ADMIN_BUNDLE));
familyNameField.setSize(32);
familyNameField.setMaxLength(256);
familyNameField.addValidationListener(new NotEmptyValidationListener());
familyNameField.addValidationListener(
new StringLengthValidationListener(256));
form.add(familyNameField);
final String email = "email";
final TextField emailField = new TextField(email);
emailField.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.email.label", ADMIN_BUNDLE));
emailField.setSize(48);
emailField.setMaxLength(256);
emailField.addValidationListener(new NotEmptyValidationListener());
emailField
.addValidationListener(new StringLengthValidationListener(256));
form.add(emailField);
final FormSection setPasswordSection = new FormSection(new BoxPanel(
BoxPanel.VERTICAL));
setPasswordSection.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.password_options.set_password.label",
ADMIN_BUNDLE));
final String password = "password";
final String passwordConfirmation = "passwordConfirmation";
final Password passwordField = new Password(password);
passwordField.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.password_options.set_password.password.label",
ADMIN_BUNDLE));
passwordField.setMaxLength(256);
passwordField.setSize(32);
passwordField.addValidationListener(new NotEmptyValidationListener());
passwordField.addValidationListener(new StringLengthValidationListener(
256));
setPasswordSection.add(passwordField);
final Password passwordConfirmationField = new Password(
passwordConfirmation);
passwordConfirmationField.setLabel(new GlobalizedMessage(
"ui.admin.new_user_form.password_options.set_password.password_confirmation.label",
ADMIN_BUNDLE));
passwordConfirmationField.setMaxLength(256);
passwordConfirmationField.setSize(32);
passwordConfirmationField.addValidationListener(
new NotEmptyValidationListener());
passwordConfirmationField.addValidationListener(
new StringLengthValidationListener(256));
setPasswordSection.add(passwordConfirmationField);
final String passwordOptions = "passwordOptions";
final String optionSetPassword = "setPassword";
final String optionSendPassword = "sendPassword";
final RadioGroup passwordOptionsGroup = new RadioGroup(passwordOptions);
// final Option setPasswordOption = new Option(
// optionSetPassword,
// new Label(new GlobalizedMessage(
// "ui.admin.new_user_form.password_options.set_password",
// ADMIN_BUNDLE)));
final Option setPasswordOption = new Option(
optionSetPassword, setPasswordSection);
passwordOptionsGroup.addOption(setPasswordOption);
final Option sendPasswordOption = new Option(
optionSendPassword,
new Label(new GlobalizedMessage(
"ui.admin.new_user_form.password_options.send_password.label",
ADMIN_BUNDLE)));
passwordOptionsGroup.addOption(sendPasswordOption);
newUserForm.add(passwordOptionsGroup);
final SaveCancelSection saveCancelSection = new SaveCancelSection();
newUserForm.add(saveCancelSection);
newUserForm.addValidationListener(e -> {
final PageState state = e.getPageState();
if (saveCancelSection.getSaveButton().isSelected(state)) {
final FormData data = e.getFormData();
final String usernameData = data.getString(username);
final String emailData = data.getString(email);
final String selectedPasswordOption = data.getString(
passwordOptions);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final UserRepository userRepository = cdiUtil.findBean(
UserRepository.class);
if (userRepository.findByName(usernameData) != null) {
data.addError(new GlobalizedMessage(
"ui.admin.new_user_form.error.username_already_in_use",
ADMIN_BUNDLE));
return;
}
if (userRepository.findByEmailAddress(emailData) != null) {
data.addError(new GlobalizedMessage(
"ui.admin.new_user_form.error.email_already_in_use",
ADMIN_BUNDLE));
return;
}
if (optionSetPassword.equals(selectedPasswordOption)) {
final String passwordData = data.getString(password);
final String passwordConfirmData = data.getString(
passwordConfirmation);
if (!passwordData.equals(passwordConfirmData)) {
data.addError(new GlobalizedMessage(
"ui.admin.new_user_form.error.password_do_not_match",
ADMIN_BUNDLE));
}
}
}
});
form.addProcessListener(e -> {
final PageState state = e.getPageState();
if (saveCancelSection.getSaveButton().isSelected(state)) {
final FormData data = e.getFormData();
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final UserManager userManager = cdiUtil.findBean(
UserManager.class);
final String dataUserName = data.getString(username);
final String dataFamilyName = data.getString(familyName);
final String dataGivenName = data.getString(givenName);
final String dataEmail = data.getString(email);
final String dataSelectedPasswordOption = data.getString(
passwordOptions);
final String dataPassword;
if (optionSetPassword.equals(dataSelectedPasswordOption)) {
dataPassword = data.getString(password);
} else {
dataPassword = null;
}
final User user = userManager.createUser(dataGivenName,
dataFamilyName,
dataUserName,
dataEmail,
dataPassword);
if (optionSendPassword.equals(dataSelectedPasswordOption)) {
final ChallengeManager challengeManager = cdiUtil.findBean(
ChallengeManager.class);
try {
challengeManager.sendPasswordRecover(user);
} catch (MessagingException ex) {
throw new FormProcessException(
"Failed to send password challenge to new user.",
new GlobalizedMessage(
"ui.admin.new_user_form.error.failed_to_send_password",
ADMIN_BUNDLE),
ex);
}
}
closeNewUserForm(state);
}
});
return newUserForm;
} }
@Override @Override
@ -674,6 +883,7 @@ public class UserAdmin extends BoxPanel {
page.setVisibleDefault(userEditForm, false); page.setVisibleDefault(userEditForm, false);
page.setVisibleDefault(passwordSetForm, false); page.setVisibleDefault(passwordSetForm, false);
page.setVisibleDefault(emailForm, false); page.setVisibleDefault(emailForm, false);
page.setVisibleDefault(newUserForm, false);
} }
protected void showUserDetails(final PageState state) { protected void showUserDetails(final PageState state) {
@ -682,6 +892,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
protected void closeUserDetails(final PageState state) { protected void closeUserDetails(final PageState state) {
@ -691,6 +902,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
protected void showUserEditForm(final PageState state) { protected void showUserEditForm(final PageState state) {
@ -699,6 +911,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, true); userEditForm.setVisible(state, true);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
protected void closeUserEditForm(final PageState state) { protected void closeUserEditForm(final PageState state) {
@ -707,6 +920,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
protected void showPasswordSetForm(final PageState state) { protected void showPasswordSetForm(final PageState state) {
@ -715,6 +929,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, true); passwordSetForm.setVisible(state, true);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
protected void closePasswordSetForm(final PageState state) { protected void closePasswordSetForm(final PageState state) {
@ -723,6 +938,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
protected void showEmailForm(final PageState state) { protected void showEmailForm(final PageState state) {
@ -731,6 +947,7 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, true); emailForm.setVisible(state, true);
newUserForm.setVisible(state, false);
} }
protected void closeEmailForm(final PageState state) { protected void closeEmailForm(final PageState state) {
@ -740,6 +957,27 @@ public class UserAdmin extends BoxPanel {
userEditForm.setVisible(state, false); userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false); passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false); emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
}
protected void showNewUserForm(final PageState state) {
selectedEmailAddress.clearSelection(state);
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, false);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
newUserForm.setVisible(state, true);
}
protected void closeNewUserForm(final PageState state) {
selectedEmailAddress.clearSelection(state);
usersTablePanel.setVisible(state, true);
userDetails.setVisible(state, false);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
newUserForm.setVisible(state, false);
} }
} }

View File

@ -96,10 +96,10 @@ public class UserNewForm extends Form {
"login.form.new_user.username.label", LOGIN_BUNDLE)); "login.form.new_user.username.label", LOGIN_BUNDLE));
userName.setHint(new GlobalizedMessage( userName.setHint(new GlobalizedMessage(
"login.form.new_user.username.hint", LOGIN_BUNDLE)); "login.form.new_user.username.hint", LOGIN_BUNDLE));
userName.setMaxLength(256); userName.setMaxLength(32);
userName.setSize(32); userName.setSize(32);
userName.addValidationListener(new NotEmptyValidationListener()); userName.addValidationListener(new NotEmptyValidationListener());
userName.addValidationListener(new StringLengthValidationListener(256)); userName.addValidationListener(new StringLengthValidationListener(32));
formPanel.add(userName); formPanel.add(userName);
givenName = new TextField(GIVEN_NAME); givenName = new TextField(GIVEN_NAME);
@ -199,8 +199,7 @@ public class UserNewForm extends Form {
UserRepository.class); UserRepository.class);
//check if there is already an account for the provided email //check if there is already an account for the provided email
if (userRepository.findByEmailAddress((String) data.get( if (userRepository.findByEmailAddress((String) data.get(
EMAIL)) EMAIL)) != null) {
!= null) {
data.addError(new GlobalizedMessage( data.addError(new GlobalizedMessage(
"login.form.new_user.error.email_already_registered", "login.form.new_user.error.email_already_registered",
LOGIN_BUNDLE)); LOGIN_BUNDLE));

View File

@ -215,3 +215,16 @@ ui.admin.user_set_password.confirm_password.label=Repeat password
ui.admin.user_set_password.error.do_not_match=Passwords do not match ui.admin.user_set_password.error.do_not_match=Passwords do not match
ui.admin.set_password.new_password.error.not_empty=Password can't be empty ui.admin.set_password.new_password.error.not_empty=Password can't be empty
ui.admin.set_password.password_confirm.error.not_empty=Password confirmation can't be empty ui.admin.set_password.password_confirm.error.not_empty=Password confirmation can't be empty
ui.admin.new_user.link=Add new user
ui.admin.new_user_form.username.label=User name
ui.admin.new_user_form.givenname.label=Given name
ui.admin.new_user_form.familyname.label=Family name
ui.admin.new_user_form.email.label=Email
ui.admin.new_user_form.password_options.set_password.label=Set password
ui.admin.new_user_form.password_options.set_password.password.label=Password
ui.admin.new_user_form.password_options.set_password.password_confirmation.label=Confirm password
ui.admin.new_user_form.password_options.send_password.label=Send password
ui.admin.new_user_form.error.username_already_in_use=The provided user name is already in use.
ui.admin.new_user_form.error.email_already_in_use=The provided email address is already assigned with an user account.
ui.admin.new_user_form.error.password_do_not_match=Passwords do not match.
ui.admin.new_user_form.error.failed_to_send_password=Failed to send password to new user.

View File

@ -215,3 +215,16 @@ ui.admin.user_set_password.confirm_password.label=Passwort wiederholen
ui.admin.user_set_password.error.do_not_match=Passw\u00f6rter sind nicht gleich ui.admin.user_set_password.error.do_not_match=Passw\u00f6rter sind nicht gleich
ui.admin.set_password.new_password.error.not_empty=Passwort darf nicht leer sein ui.admin.set_password.new_password.error.not_empty=Passwort darf nicht leer sein
ui.admin.set_password.password_confirm.error.not_empty=Passwortbest\u00e4tigung darf nicht leer sein ui.admin.set_password.password_confirm.error.not_empty=Passwortbest\u00e4tigung darf nicht leer sein
ui.admin.new_user.link=Neuen Benutzer hinzuf\u00fcgen
ui.admin.new_user_form.username.label=Benutzername
ui.admin.new_user_form.givenname.label=Vorname
ui.admin.new_user_form.familyname.label=Familienname
ui.admin.new_user_form.email.label=E-Mail
ui.admin.new_user_form.password_options.set_password.label=Passwort setzen
ui.admin.new_user_form.password_options.set_password.password.label=Passwort
ui.admin.new_user_form.password_options.set_password.password_confirmation.label=Passwort best\u00e4tigen
ui.admin.new_user_form.password_options.send_password.label=Passwort senden
ui.admin.new_user_form.error.username_already_in_use=Der angegebene Benutzername wird bereits verwendet.
ui.admin.new_user_form.error.email_already_in_use=Die angegebene E-Mail-Adresse ist bereits mit einem Benutzerkonto verbunden.
ui.admin.new_user_form.error.password_do_not_match=Die eingegebenen Passw\u00f6rter stimmen nicht \u00fcberein.
ui.admin.new_user_form.error.failed_to_send_password=Fehler beim Senden des Passworts an den neuen Benutzer.

View File

@ -188,3 +188,16 @@ ui.admin.user_set_password.confirm_password.label=Repeat password
ui.admin.user_set_password.error.do_not_match=Passwords do not match ui.admin.user_set_password.error.do_not_match=Passwords do not match
ui.admin.set_password.new_password.error.not_empty=Password can't be empty ui.admin.set_password.new_password.error.not_empty=Password can't be empty
ui.admin.set_password.password_confirm.error.not_empty=Password confirmation can't be empty ui.admin.set_password.password_confirm.error.not_empty=Password confirmation can't be empty
ui.admin.new_user.link=Add new user
ui.admin.new_user_form.username.label=User name
ui.admin.new_user_form.givenname.label=Given name
ui.admin.new_user_form.familyname.label=Family name
ui.admin.new_user_form.email.label=Email
ui.admin.new_user_form.password_options.set_password.label=Set password
ui.admin.new_user_form.password_options.set_password.password.label=Password
ui.admin.new_user_form.password_options.set_password.password_confirmation.label=Confirm password
ui.admin.new_user_form.password_options.send_password.label=Send password
ui.admin.new_user_form.error.username_already_in_use=The provided user name is already in use.
ui.admin.new_user_form.error.email_already_in_use=The provided email address is already assigned with an user account.
ui.admin.new_user_form.error.password_do_not_match=Passwords do not match.
ui.admin.new_user_form.error.failed_to_send_password=Failed to send password to new user.

View File

@ -179,3 +179,16 @@ ui.admin.user_set_password.confirm_password.label=Repeat password
ui.admin.user_set_password.error.do_not_match=Passwords do not match ui.admin.user_set_password.error.do_not_match=Passwords do not match
ui.admin.set_password.new_password.error.not_empty=Password can't be empty ui.admin.set_password.new_password.error.not_empty=Password can't be empty
ui.admin.set_password.password_confirm.error.not_empty=Password confirmation can't be empty ui.admin.set_password.password_confirm.error.not_empty=Password confirmation can't be empty
ui.admin.new_user.link=Add new user
ui.admin.new_user_form.username.label=User name
ui.admin.new_user_form.givenname.label=Given name
ui.admin.new_user_form.familyname.label=Family name
ui.admin.new_user_form.email.label=Email
ui.admin.new_user_form.password_options.set_password.label=Set password
ui.admin.new_user_form.password_options.set_password.password.label=Password
ui.admin.new_user_form.password_options.set_password.password_confirmation.label=Confirm password
ui.admin.new_user_form.password_options.send_password.label=Send password
ui.admin.new_user_form.error.username_already_in_use=The provided user name is already in use.
ui.admin.new_user_form.error.email_already_in_use=The provided email address is already assigned with an user account.
ui.admin.new_user_form.error.password_do_not_match=Passwords do not match.
ui.admin.new_user_form.error.failed_to_send_password=Failed to send password to new user.