- Form for editing user details 
- Form for adding a new password


git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3966 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2016-03-30 13:41:29 +00:00
parent e6fab036f4
commit 7d86a6db4c
6 changed files with 270 additions and 8 deletions

View File

@ -23,6 +23,7 @@ import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
@ -35,6 +36,8 @@ import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.form.CheckboxGroup;
import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.OptionGroup;
import com.arsdigita.bebop.form.Password;
import com.arsdigita.bebop.form.Submit;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
@ -44,6 +47,7 @@ import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.mail.Mail;
import com.arsdigita.ui.login.UserForm;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -76,6 +80,8 @@ public class UserAdmin extends BoxPanel {
private final UsersTable usersTable;
private final ActionLink backToUsersTable;
private final PropertySheet userProperties;
private final Form userEditForm;
private final Form passwordSetForm;
private final BoxPanel actionLinks;
// private final UserDetails userDetails;
private final BoxPanel userDetails;
@ -144,12 +150,173 @@ public class UserAdmin extends BoxPanel {
userProperties.setIdAttr("userProperties");
userDetails.add(userProperties);
userEditForm = new Form("userEditForm");
final TextField username = new TextField("username");
username.setLabel(new GlobalizedMessage(
"ui.admin.user_edit.username.label", ADMIN_BUNDLE));
username.addValidationListener(new NotEmptyValidationListener(
new GlobalizedMessage("ui.admin.user_edit.username.error.not_empty",
ADMIN_BUNDLE)));
userEditForm.add(username);
final TextField familyName = new TextField("familyName");
familyName.setLabel(new GlobalizedMessage(
"ui.admin.user_edit.familyname.label", ADMIN_BUNDLE));
familyName.addValidationListener(new NotEmptyValidationListener(
new GlobalizedMessage(
"ui.admin.user_edit.familyname.error_not_empty",
ADMIN_BUNDLE)));
userEditForm.add(familyName);
final TextField givenName = new TextField("givenName");
givenName.setLabel(new GlobalizedMessage(
"ui.admin.user_edit.givenname.label", ADMIN_BUNDLE));
givenName.addValidationListener(new NotEmptyValidationListener(
new GlobalizedMessage(
"ui.admin.user_edit.givenname.error.not_empty",
ADMIN_BUNDLE)));
userEditForm.add(givenName);
final CheckboxGroup banned = new CheckboxGroup("banned");
banned.addOption(new Option(
"banned",
new Label(new GlobalizedMessage("ui.admin.user_edit.banned.label",
ADMIN_BUNDLE))));
userEditForm.add(banned);
final CheckboxGroup passwordResetRequired = new CheckboxGroup(
"password_reset_required");
passwordResetRequired.addOption(new Option(
"password_reset_required",
new Label(new GlobalizedMessage(
"ui.admin.user_edit.password_reset_required.label",
ADMIN_BUNDLE))
));
userEditForm.add(passwordResetRequired);
final SaveCancelSection userEditFormSaveCancel = new SaveCancelSection();
userEditForm.add(userEditFormSaveCancel);
userEditForm.addInitListener(e -> {
final PageState state = e.getPageState();
final String userIdStr = selectedUserId.getSelectedKey(state);
final UserRepository userRepository = CdiUtil.createCdiUtil()
.findBean(UserRepository.class);
final User user = userRepository.findById(Long.parseLong(userIdStr));
username.setValue(state, user.getName());
familyName.setValue(state, user.getFamilyName());
givenName.setValue(state, user.getGivenName());
if (user.isBanned()) {
banned.setValue(state, "banned");
}
if (user.isPasswordResetRequired()) {
passwordResetRequired.setValue(state,
"password_reset_required");
}
});
userEditForm.addProcessListener(e -> {
final PageState state = e.getPageState();
if (userEditFormSaveCancel.getSaveButton().isSelected(state)) {
final String userIdStr = selectedUserId.getSelectedKey(state);
final UserRepository userRepository = CdiUtil.createCdiUtil()
.findBean(UserRepository.class);
final User user = userRepository.findById(Long.parseLong(
userIdStr));
if (!user.getName().equals(username.getValue(state))) {
user.setName((String) username.getValue(state));
}
if (!user.getFamilyName().equals(familyName.getValue(state))) {
user.setFamilyName((String) familyName.getValue(state));
}
if (!user.getGivenName().equals(givenName.getValue(state))) {
user.setGivenName((String) familyName.getValue(state));
}
if ("banned".equals(banned.getValue(state)) && !user.isBanned()) {
user.setBanned(true);
} else {
user.setBanned(false);
}
if ("password_reset_required".equals(passwordResetRequired
.getValue(
state))
&& !user.isPasswordResetRequired()) {
user.setPasswordResetRequired(true);
} else {
user.setPasswordResetRequired(false);
}
userRepository.save(user);
}
closeUserEditForm(state);
});
add(userEditForm);
passwordSetForm = new Form("password_set_form");
final Password newPassword = new Password("new_password");
newPassword.setLabel(new GlobalizedMessage(
"ui.admin.user_set_password.new_password.label", ADMIN_BUNDLE));
newPassword.addValidationListener(new NotEmptyValidationListener(
new GlobalizedMessage(
"ui.admin.set_password.new_password.error.not_empty",
ADMIN_BUNDLE)));
passwordSetForm.add(newPassword);
final Password passwordConfirm = new Password("password_confirm");
passwordConfirm.addValidationListener(new NotEmptyValidationListener(
new GlobalizedMessage(
"ui.admin.set_password.password_confirm.error.not_empty",
ADMIN_BUNDLE)));
passwordSetForm.add(newPassword);
passwordConfirm.setLabel(new GlobalizedMessage(
"ui.admin.user_set_password.confirm_password.label",
ADMIN_BUNDLE
));
passwordSetForm.add(passwordConfirm);
final SaveCancelSection passwordSetFormSaveCancel
= new SaveCancelSection();
passwordSetForm.add(passwordSetFormSaveCancel);
passwordSetForm.addValidationListener(e -> {
final PageState state = e.getPageState();
if (passwordSetFormSaveCancel.getSaveButton().isSelected(state)) {
final FormData formData = e.getFormData();
final String password = (String) newPassword.getValue(state);
final String confirm = (String) passwordConfirm.getValue(state);
if (!password.equals(confirm)) {
formData.addError(new GlobalizedMessage(
"ui.admin.user_set_password.error.do_not_match",
ADMIN_BUNDLE));
}
}
});
passwordSetForm.addProcessListener(e -> {
final PageState state = e.getPageState();
if (passwordSetFormSaveCancel.getSaveButton().isSelected(state)) {
final String userIdStr = selectedUserId.getSelectedKey(state);
final String password = (String) newPassword.getValue(state);
final UserRepository userRepository = CdiUtil.createCdiUtil()
.findBean(UserRepository.class);
final User user = userRepository.findById(Long.parseLong(
userIdStr));
final UserManager userManager = CdiUtil.createCdiUtil()
.findBean(
UserManager.class);
userManager.updatePassword(user, password);
}
closePasswordSetForm(state);
});
add(passwordSetForm);
actionLinks = new BoxPanel(BoxPanel.HORIZONTAL);
actionLinks.setIdAttr("userDetailsActionLinks");
final ActionLink editUserDetailsLink = new ActionLink(
new GlobalizedMessage("ui.admin.user_details.edit", ADMIN_BUNDLE));
editUserDetailsLink.addActionListener(e -> {
//ToDo
showUserEditForm(e.getPageState());
});
actionLinks.add(editUserDetailsLink);
actionLinks.add(new Text(" | "));
@ -158,7 +325,7 @@ public class UserAdmin extends BoxPanel {
new GlobalizedMessage("ui.admin.user_details.set_password",
ADMIN_BUNDLE));
setPasswordLink.addActionListener(e -> {
//ToDo
showPasswordSetForm(e.getPageState());
});
actionLinks.add(setPasswordLink);
actionLinks.add(new Text(" | "));
@ -170,13 +337,14 @@ public class UserAdmin extends BoxPanel {
"ui.admin.user_details.generate_password.confirm",
ADMIN_BUNDLE));
generatePasswordLink.addActionListener(e -> {
final UserRepository userRepository = CdiUtil.createCdiUtil().findBean(UserRepository.class);
final UserRepository userRepository = CdiUtil.createCdiUtil()
.findBean(UserRepository.class);
final User user = userRepository.findById(Long.parseLong(
selectedUserId.getSelectedKey(e.getPageState())));
final Mail mail = new Mail(
user.getPrimaryEmailAddress().getAddress(),
"libreccm.example",
user.getPrimaryEmailAddress().getAddress(),
"libreccm.example",
"New password has been generated.");
mail.setBody("Das eine Test-Email");
@ -311,7 +479,7 @@ public class UserAdmin extends BoxPanel {
link.setConfirmation(new GlobalizedMessage(
"ui.admin.user.email_addresses.delete.confirm",
ADMIN_BUNDLE));
}
}
return link;
}
@ -508,12 +676,16 @@ public class UserAdmin extends BoxPanel {
page.setVisibleDefault(usersTablePanel, true);
page.setVisibleDefault(userDetails, false);
page.setVisibleDefault(userEditForm, false);
page.setVisibleDefault(passwordSetForm, false);
page.setVisibleDefault(emailForm, false);
}
protected void showUserDetails(final PageState state) {
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, true);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
}
@ -521,12 +693,48 @@ public class UserAdmin extends BoxPanel {
selectedUserId.clearSelection(state);
usersTablePanel.setVisible(state, true);
userDetails.setVisible(state, false);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
}
protected void showUserEditForm(final PageState state) {
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, false);
userEditForm.setVisible(state, true);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
}
protected void closeUserEditForm(final PageState state) {
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, true);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
}
protected void showPasswordSetForm(final PageState state) {
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, false);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, true);
emailForm.setVisible(state, false);
}
protected void closePasswordSetForm(final PageState state) {
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, true);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
}
protected void showEmailForm(final PageState state) {
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, false);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, true);
}
@ -534,6 +742,8 @@ public class UserAdmin extends BoxPanel {
selectedEmailAddress.clearSelection(state);
usersTablePanel.setVisible(state, false);
userDetails.setVisible(state, true);
userEditForm.setVisible(state, false);
passwordSetForm.setVisible(state, false);
emailForm.setVisible(state, false);
}

View File

@ -237,7 +237,7 @@ public class User extends Party implements Serializable {
return banned;
}
protected void setBanned(final boolean banned) {
public void setBanned(final boolean banned) {
this.banned = banned;
}
@ -253,7 +253,7 @@ public class User extends Party implements Serializable {
return passwordResetRequired;
}
protected void setPasswordResetRequired(final boolean passwordResetRequired) {
public void setPasswordResetRequired(final boolean passwordResetRequired) {
this.passwordResetRequired = passwordResetRequired;
}

View File

@ -202,3 +202,16 @@ ui.admin.user.email_form.bouncing=Bouncing
ui.admin.user.email_form.address.not_empty=Email address can't be empty.
ui.admin.user.email_addresses.delete.confirm=Are sure to delete this email address?
ui.admin.user_details.generate_password.confirm=Are you sure to reset this users password?
ui.admin.user_edit.username.label=User name
ui.admin.user_edit.familyname.label=Familyname
ui.admin.user_edit.givenname.label=Given name
ui.admin.user_edit.banned.label=Banned?
ui.admin.user_edit.password_reset_required.label=Password reset required?
ui.admin.user_edit.username.error.not_empty=User name can't be empty
ui.admin.user_edit.familyname.error.not_empty=Familyname can't be empty
ui.admin.user_edit.givenname.error.not_empty=Given name can't be empty
ui.admin.user_set_password.new_password.label=Password
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.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

View File

@ -202,3 +202,16 @@ ui.admin.user.email_form.bouncing=Wird zur\u00fcckgewiesen
ui.admin.user.email_form.address.not_empty=Die E-Mail-Adresse darf nicht leer sein.
ui.admin.user.email_addresses.delete.confirm=Sind Sie sicher, dass Sie diese E-Mail-Adresse l\u00f6schen wollen?
ui.admin.user_details.generate_password.confirm=Sind Sie sicher, dass Sie das Passwort dieses Benutzers zur\u00fccksetzen wollen?
ui.admin.user_edit.username.label=Benutzername
ui.admin.user_edit.familyname.label=Familienname
ui.admin.user_edit.givenname.label=Vorname
ui.admin.user_edit.banned.label=Gesperrt?
ui.admin.user_edit.password_reset_required.label=Neues Passwort erforderlich?
ui.admin.user_edit.username.error.not_empty=Benutzername darf nicht leer sein
ui.admin.user_edit.familyname.error.not_empty=Familienname darf nicht leer sein
ui.admin.user_edit.givenname.error.not_empty=Vorname darf nicht leer sein
ui.admin.user_set_password.new_password.label=Passwort
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.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

View File

@ -175,3 +175,16 @@ ui.admin.user.email_form.bouncing=Bouncing
ui.admin.user.email_form.address.not_empty=Email address can't be empty.
ui.admin.user.email_addresses.delete.confirm=Are sure to delete this email address?
ui.admin.user_details.generate_password.confirm=Are you sure to reset this users password?
ui.admin.user_edit.username.label=User name
ui.admin.user_edit.familyname.label=Familyname
ui.admin.user_edit.givenname.label=Given name
ui.admin.user_edit.banned.label=Banned?
ui.admin.user_edit.password_reset_required.label=Password reset required?
ui.admin.user_edit.username.error.not_empty=User name can't be empty
ui.admin.user_edit.familyname.error.not_empty=Familyname can't be empty
ui.admin.user_edit.givenname.error.not_empty=Given name can't be empty
ui.admin.user_set_password.new_password.label=Password
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.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

View File

@ -166,3 +166,16 @@ ui.admin.user.email_form.bouncing=Bouncing
ui.admin.user.email_form.address.not_empty=Email address can't be empty.
ui.admin.user.email_addresses.delete.confirm=Are sure to delete this email address?
ui.admin.user_details.generate_password.confirm=Are you sure to reset this users password?
ui.admin.user_edit.username.label=User name
ui.admin.user_edit.familyname.label=Familyname
ui.admin.user_edit.givenname.label=Given name
ui.admin.user_edit.banned.label=Banned?
ui.admin.user_edit.password_reset_required.label=Password reset required?
ui.admin.user_edit.username.error.not_empty=User name can't be empty
ui.admin.user_edit.familyname.error.not_empty=Familyname can't be empty
ui.admin.user_edit.givenname.error.not_empty=Given name can't be empty
ui.admin.user_set_password.new_password.label=Password
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.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