/** * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.organization.webui.component; import org.exoplatform.commons.serialization.api.annotations.Serialized; import org.exoplatform.services.organization.OrganizationService; import org.exoplatform.services.organization.Query; import org.exoplatform.services.organization.User; import org.exoplatform.services.organization.UserHandler; import org.exoplatform.services.organization.UserStatus; import org.exoplatform.services.security.ConversationState; import org.exoplatform.web.CacheUserProfileFilter; import org.exoplatform.web.application.ApplicationMessage; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.form.UIFormCheckBoxInput; import org.exoplatform.webui.form.UIFormInputBase; import org.exoplatform.webui.form.UIFormInputSet; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.webui.form.validator.MandatoryValidator; import org.exoplatform.webui.form.validator.PasswordPolicyValidator; import org.exoplatform.webui.form.validator.PersonalNameValidator; import org.exoplatform.webui.form.validator.StringLengthValidator; import org.exoplatform.webui.form.validator.UserConfigurableValidator; import org.exoplatform.webui.organization.UIUserProfileInputSet; /** Created by The eXo Platform SARL Author : dang.tung tungcnw@gmail.com Jun 25, 2008 */ @Serialized public class UIAccountEditInputSet extends UIFormInputSet { static final String USERNAME = "userName"; static final String PASSWORD1X = "newPassword"; static final String PASSWORD2X = "confirmPassword"; static final String CHANGEPASS = "changePassword"; public UIAccountEditInputSet() { } public UIAccountEditInputSet(String name) throws Exception { super(name); addUIFormInput(new UIFormStringInput(USERNAME, "userName", null).setReadOnly(true) .addValidator(MandatoryValidator.class) .addValidator(UserConfigurableValidator.class, UserConfigurableValidator.USERNAME)); addUIFormInput(new UIFormStringInput("firstName", "firstName", null).addValidator(StringLengthValidator.class, 1, 45) .addValidator(MandatoryValidator.class).addValidator(PersonalNameValidator.class)); addUIFormInput(new UIFormStringInput("lastName", "lastName", null).addValidator(StringLengthValidator.class, 1, 45) .addValidator(MandatoryValidator.class).addValidator(PersonalNameValidator.class)); // TODO: GTNPORTAL-2358 switch bindingField fullName to displayName once displayName will be available in Organization // API addUIFormInput(new UIFormStringInput("displayName", "fullName", null).addValidator(StringLengthValidator.class, 0, 90) .addValidator(UserConfigurableValidator.class, "displayname", UserConfigurableValidator.KEY_PREFIX + "displayname", false)); addUIFormInput(new UIFormStringInput("email", "email", null).addValidator(MandatoryValidator.class).addValidator( UserConfigurableValidator.class, UserConfigurableValidator.EMAIL)); UIFormCheckBoxInput<Boolean> uiCheckbox = new UIFormCheckBoxInput<Boolean>(CHANGEPASS, null, false); uiCheckbox.setOnChange("ToggleChangePassword", "UIUserInfo"); addUIFormInput(uiCheckbox); UIFormInputBase<String> uiInput = new UIFormStringInput(PASSWORD1X, null, null) .setType(UIFormStringInput.PASSWORD_TYPE).addValidator(PasswordPolicyValidator.class) .addValidator(MandatoryValidator.class); uiInput.setRendered(false); addUIFormInput(uiInput); uiInput = new UIFormStringInput(PASSWORD2X, null, null).setType(UIFormStringInput.PASSWORD_TYPE) .addValidator(MandatoryValidator.class).addValidator(PasswordPolicyValidator.class); uiInput.setRendered(false); addUIFormInput(uiInput); } public String getUserName() { return getUIStringInput(USERNAME).getValue(); } public String getPropertyPrefix() { return "UIAccountForm"; } public void setValue(User user) throws Exception { if (user == null) { return; } invokeGetBindingField(user); } public boolean save(OrganizationService service) throws Exception { UserHandler userDAO = service.getUserHandler(); WebuiRequestContext context = WebuiRequestContext.getCurrentInstance(); UIApplication uiApp = context.getUIApplication(); String username = getUIStringInput(USERNAME).getValue(); User user = userDAO.findUserByName(username, UserStatus.ANY); if (user == null) { String messageBundle = "UIAccountInputSet.msg.user-is-deleted"; uiApp.addMessage(new ApplicationMessage(messageBundle, null, ApplicationMessage.WARNING)); UIUserInfo userInfo = getParent(); if (userInfo != null) { UIAccountEditInputSet accountInput = userInfo.getChild(UIAccountEditInputSet.class); UIUserProfileInputSet userProfile = userInfo.getChild(UIUserProfileInputSet.class); userInfo.setRenderSibling(UIListUsers.class); accountInput.reset(); userProfile.reset(); context.setProcessRender(true); } return false; } //need to enable user before saving boolean enable = user.isEnabled(); if (!enable) { user = userDAO.setEnabled(username, true, false); } String oldEmail = user.getEmail(); invokeSetBindingField(user); if (isChangePassword()) { String pass1x = getUIStringInput(PASSWORD1X).getValue(); String pass2x = getUIStringInput(PASSWORD2X).getValue(); if (!pass1x.equals(pass2x)) { uiApp.addMessage(new ApplicationMessage("UIAccountForm.msg.password-is-not-match", null, ApplicationMessage.WARNING)); return false; } user.setPassword(pass1x); } // Check if mail address is already used Query query = new Query(); String email = getUIStringInput("email").getValue(); query.setEmail(email); if (service.getUserHandler().findUsersByQuery(query, UserStatus.ANY).getSize() > 0 && !oldEmail.equals(email)) { // Be sure it keep old value user.setEmail(oldEmail); query.setEmail(oldEmail); Object[] args = { username }; uiApp.addMessage(new ApplicationMessage("UIAccountInputSet.msg.email-exist", args, ApplicationMessage.WARNING)); return false; } try { service.getUserHandler().saveUser(user, true); } catch (Exception e) { uiApp.addMessage(new ApplicationMessage("UIAccountInputSet.msg.fail.update.user", null, ApplicationMessage.ERROR)); return false; } if (!enable) { user = userDAO.setEnabled(username, false, false); } enableChangePassword(false); ConversationState state = ConversationState.getCurrent(); if (username.equals(((User) state.getAttribute(CacheUserProfileFilter.USER_PROFILE)).getUserName())) { state.setAttribute(CacheUserProfileFilter.USER_PROFILE, user); } return true; } public boolean isChangePassword() { return getUIFormCheckBoxInput(UIAccountEditInputSet.CHANGEPASS).isChecked(); } public void enableChangePassword(boolean enable) { getUIFormCheckBoxInput(UIAccountEditInputSet.CHANGEPASS).setChecked(enable); checkChangePassword(); } public void checkChangePassword() { UIFormStringInput password1 = getUIStringInput(UIAccountEditInputSet.PASSWORD1X); UIFormStringInput password2 = getUIStringInput(UIAccountEditInputSet.PASSWORD2X); boolean isChange = isChangePassword(); ((UIFormStringInput) password1.setValue(null)).setRendered(isChange); ((UIFormStringInput) password2.setValue(null)).setRendered(isChange); } @Override public void reset() { super.reset(); enableChangePassword(false); } }