ProfileCtrl.js revision 2d7019e19039fd083850f76e54b6b26a7b06a8f2
891a081e38584dfb59697349fbf0aba2c4d4e1e2Christian Maeder * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
de6a40dbdd4712e5a9398b8519a59b1eaeab2f5aChristian Maeder * Copyright © 2011 ForgeRock AS. All rights reserved.
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu * The contents of this file are subject to the terms
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * of the Common Development and Distribution License
3f69b6948966979163bdfe8331c38833d5d90ecdChristian Maeder * (the License). You may not use this file except in
891a081e38584dfb59697349fbf0aba2c4d4e1e2Christian Maeder * compliance with the License.
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * You can obtain a copy of the License at
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder * http://forgerock.org/license/CDDLv1.0.html
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * See the License for the specific language governing
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * permission and limitations under the License.
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * When distributing Covered Code, include this CDDL
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * Header Notice in each file and include the License file
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski * at http://forgerock.org/license/CDDLv1.0.html
a14767aeac3e78ed100f5b75e210ba563ee10dbaChristian Maeder * If applicable, add the following below the CDDL Header,
7660d5932a1fb9677d07889714b677a059af2b2fChristian Maeder * with the fields enclosed by brackets [] replaced by
a14767aeac3e78ed100f5b75e210ba563ee10dbaChristian Maeder * your own identifying information:
a14767aeac3e78ed100f5b75e210ba563ee10dbaChristian Maeder * "Portions Copyrighted [year] [name of copyright owner]"
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder/*global $, define, require*/
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowskidefine("app/comp/user/profile/ProfileCtrl",[
319eb8dee52f1d1235910f80dde1dd5f9227ec4cChristian Maeder "app/comp/common/dialog/ConfirmationDialogCtrl",
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder "app/comp/user/changesecurityinfo/SecurityDialogCtrl",
80664cc18425d67cd71be80f27f882fa16e43848Christian Maeder "app/comp/user/changepassword/ChangePasswordDialogCtrl",
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder "app/comp/user/securitypicture/SelectPictureDialogCtrl",
0b7c8279c741857d1681160f8b4144a9430ffa7fTill Mossakowski function(profileView, userDelegate, eventManager, confirmationDialogCtrl, securityDialogCtrl, changePasswordDialogCtrl, selectPictureDialogCtrl, validators, constants, globalConfiguration, Validator, Condition) {
78d4b9e3558a2523c3335b1399385ac7d246f0c1Christian Maeder obj.view.setUserName(obj.user.firstname + " " + obj.user.lastname);
78d4b9e3558a2523c3335b1399385ac7d246f0c1Christian Maeder obj.view.getEmailInput().val(obj.user.email);
78d4b9e3558a2523c3335b1399385ac7d246f0c1Christian Maeder obj.view.getFirstNameInput().val(obj.user.firstname);
f4255fa60f8dcaa8f21ce60b2820c228a19e39aeChristian Maeder obj.view.getLastNameInput().val(obj.user.lastname);
f4255fa60f8dcaa8f21ce60b2820c228a19e39aeChristian Maeder obj.view.getAddress1Input().val(obj.user.address1);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.view.getAddress2Input().val(obj.user.address2);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.view.getCityInput().val(obj.user.city);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.view.getPostalCodeInput().val(obj.user.postalcode);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.view.getPhoneNumberInput().val(obj.user.phonenumber);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.setCountryAndStateProvince(obj.user.country, obj.user.state_province);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.setSecurityQuestionSelect(obj.user.securityquestion);
5c358300e78157f4bfaf5415c70e1096a9205b61Christian Maeder obj.view.getSecurityQuestion().val(obj.user.securityquestion);
048abf92dccee48433769bc8e677880be37b0c95Christian Maeder obj.view.getSecurityAnswer().val(obj.user.securityanswer);
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder //obj.view.getPasswordAttemptsInput().val(obj.user.passwordAttempts);
83b3260413a3b1b7dee1f9c4d3249dec994a875cMihai Codescu var curr_date, curr_month, curr_year, d = new Date(obj.user.lastPasswordSet);
78d4b9e3558a2523c3335b1399385ac7d246f0c1Christian Maeder obj.view.getLastPasswordSetInput().val(curr_year + "/" + curr_month + "/" + curr_date);
3c988357f9b9de1b366278a5644f4ea009d596e2Christian Maeder obj.view.getAccountStatusInput().val(obj.user.accountStatus);
3c988357f9b9de1b366278a5644f4ea009d596e2Christian Maeder require("app/comp/user/login/LoginCtrl").setUserName(obj.user.email);
3c988357f9b9de1b366278a5644f4ea009d596e2Christian Maeder obj.view.getUserProfileHeadingLabel().html(obj.user.firstname+" "+obj.user.lastname+"'s Profile");
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder obj.init = function(mode, profileName, user, callback) {
ad06a3932c674dd1ebf566b8b5594d0df9e52cc0Christian Maeder obj.mode = (mode) ? mode : constants.MODE_USER;
78d4b9e3558a2523c3335b1399385ac7d246f0c1Christian Maeder eventManager.sendEvent(constants.EVENT_PROFILE_INITIALIZATION, { profileName: profileName});
ad06a3932c674dd1ebf566b8b5594d0df9e52cc0Christian Maeder securityDialogCtrl.init(obj.getUser().userName, constants.MODE_USER, obj);
c549c7db6c5c3fa20df0df194eb968fc0bd377b3Christian Maeder securityDialogCtrl.init(obj.getUser().userName, constants.MODE_ADMIN, obj);
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder $("#passwordChangeLink").bind('click', function(event) {
975642b989852fc24119c59cf40bc1af653608ffChristian Maeder changePasswordDialogCtrl.init(obj.getUser().userName);
ad06a3932c674dd1ebf566b8b5594d0df9e52cc0Christian Maeder obj.setUser((user) ? user : globalConfiguration.loggedUser);
ad06a3932c674dd1ebf566b8b5594d0df9e52cc0Christian Maeder $("#authMethodLink").off().on('click', function(){ obj.authMethodDialog(); });
7c2d602a73afe304ac0ca225ecff42b2ae8bdab3Christian Maeder $("#passphraseLink").off().on('click', function(){ obj.passphraseDialog(); });
7c2d602a73afe304ac0ca225ecff42b2ae8bdab3Christian Maeder confirmationDialogCtrl.init("Select adaptive auth method", "<form><div style='float: left;'><input type='radio' name='auth' value='SMS' checked='checked'/>SMS</div><div style='float: left;'><input type='radio' name='auth' value='OAuth' disabled='disabled'/>OAuth</div></form>", "Update", function() {
abe0293c13ccb9c7c864e780181f370155de5658Christian Maeder console.log("ProfileCtrl.registerListeners()");
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder obj.view.getSaveButton().off().on('click', function(event) {
c549c7db6c5c3fa20df0df194eb968fc0bd377b3Christian Maeder obj.view.getCountryInput().change(obj.adjustStateProvinceDropdown).change();
c549c7db6c5c3fa20df0df194eb968fc0bd377b3Christian Maeder obj.view.getStateProvinceInput().change(function(event){
c549c7db6c5c3fa20df0df194eb968fc0bd377b3Christian Maeder if(obj.view.getStateProvinceInput().val()!==""){
c549c7db6c5c3fa20df0df194eb968fc0bd377b3Christian Maeder obj.view.getFirstStateProvinceOption().text("");
ad06a3932c674dd1ebf566b8b5594d0df9e52cc0Christian Maeder obj.view.getFirstStateProvinceOption().text("Please Select");
7c2d602a73afe304ac0ca225ecff42b2ae8bdab3Christian Maeder obj.view.getDeleteButton().on('click', function(event) {
78d4b9e3558a2523c3335b1399385ac7d246f0c1Christian Maeder confirmationDialogCtrl.init("Delete user", obj.user.email + " account will be deleted.", "Delete", function() {
ee34c4e1b244e46682a84bc52224f52289bd1950Christian Maeder obj.view.getBackButton().on('click', function(event) {
ccd28c25c1aee73a195053e677eca17e20917d84Christian Maeder eventManager.sendEvent(constants.EVENT_GO_BACK_REQUEST);
f7d2e793728bbb7fd185e027eb9dfd7b9dd11c21Christian Maeder obj.validators[0] = new Validator([ obj.view
f7d2e793728bbb7fd185e027eb9dfd7b9dd11c21Christian Maeder .getFirstNameInput() ], [ new Condition('letters-only',
e9490701e16d1e8abd995ef876d6f937da93b412Christian Maeder validators.nameValidator) ], 'keyup', 'simple',
e9490701e16d1e8abd995ef876d6f937da93b412Christian Maeder [ obj.view.getLastNameInput() ], [ new Condition(
27e8de893356be63440b1b8aa2c4f19fbaf399acChristian Maeder 'letters-only', validators.lastnameValidator) ],
e9490701e16d1e8abd995ef876d6f937da93b412Christian Maeder obj.validators[2] = new Validator([ obj.view
e9490701e16d1e8abd995ef876d6f937da93b412Christian Maeder 'letters-only', validators.phoneNumberValidator) ],
f876a858a3644fa16b793afb4692cf353fa13762Christian Maeder obj.validators[3] = new Validator([obj.view.getEmailInput()],
f876a858a3644fa16b793afb4692cf353fa13762Christian Maeder [new Condition('email', validators.emailValidator),
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder new Condition('unique', function(inputs, self) {
ccd28c25c1aee73a195053e677eca17e20917d84Christian Maeder userDelegate.checkUserNameAvailability(inputs[0].val(), function(available) {
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder self.simpleAddError(inputs[0], "Email address already exists.");
94e112d16f89130a688db8b03ad3224903f5e97eChristian Maeder })], 'change', 'simple', obj.validateForm);
94e112d16f89130a688db8b03ad3224903f5e97eChristian Maeder for (i = 0; i < obj.validators.length; i++) {
94e112d16f89130a688db8b03ad3224903f5e97eChristian Maeder var i, allOk = true;
94e112d16f89130a688db8b03ad3224903f5e97eChristian Maeder for (i = 0; i < obj.validators.length; i++) {
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder } else if (!allOk) {
3c988357f9b9de1b366278a5644f4ea009d596e2Christian Maeder eventManager.sendEvent(constants.EVENT_PROFILE_DELETE_USER_REQUEST, { userId: obj.user._id, successCallback: obj.afterUserDelete, errorCallback: obj.afterUserDelete});
f876a858a3644fa16b793afb4692cf353fa13762Christian Maeder if(obj.user._id === globalConfiguration.loggedUser._id) {
3c988357f9b9de1b366278a5644f4ea009d596e2Christian Maeder obj.delegate.patchUserDifferences(obj.user, obj.view.getUser(), function() {
6f5bf1e81c4669f7c605e13548861a1207b0c7e8Christian Maeder obj.delegate.readEntity(obj.user._id, function(user) {
6f5bf1e81c4669f7c605e13548861a1207b0c7e8Christian Maeder eventManager.sendEvent(constants.EVENT_USER_PROFILE_UPDATED_SUCCESSFULY, { user: user });
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder }, function() {
de5abf4b803d72be44859fb3d0a7d5446811ba17Christian Maeder eventManager.sendEvent(constants.EVENT_USER_PROFILE_UPDATE_FAILED);
94e112d16f89130a688db8b03ad3224903f5e97eChristian Maeder }, function() {
94e112d16f89130a688db8b03ad3224903f5e97eChristian Maeder eventManager.sendEvent(constants.EVENT_USER_PROFILE_UPDATE_FAILED);
319eb8dee52f1d1235910f80dde1dd5f9227ec4cChristian Maeder }, function() {
e9490701e16d1e8abd995ef876d6f937da93b412Christian Maeder obj.setStates = function(country,stateProvince) {
de1825031cd79d4bd0b87d0566c4a5c57d60cf77Christian Maeder obj.view.getStateProvinceInput().loadSelect(data);
var self = this;
$.ajax({
data = [ {
var self = this;
$.ajax({
var self = this;
return obj;