public ActionResult UpdateProfile(UpdateProfileViewModel viewModel) { LayoutViewModel.ActiveLink = Links.AccountUpdateProfile; var membershipUser = Membership.GetUser(); if (ModelState.IsValid) { UpdateProfileModel updateModel = new UpdateProfileModel(); updateModel.FirstName = viewModel.FirstName; updateModel.LastName = viewModel.LastName; updateModel.PhoneNumber = viewModel.PhoneNumber; updateModel.Sex = viewModel.Sex; updateModel.SendEmailUpdates = viewModel.SendEmailUpdates; updateModel.PushNotifications = viewModel.PushNotifications; updateModel.PostToFacebook = viewModel.PostToFacebook; if (viewModel.DateOfBirthDay != null && viewModel.DateOfBirthMonth != null && viewModel.DateOfBirthYear != null) { updateModel.BirthDate = new DateTime(year: viewModel.DateOfBirthYear.Value, month: viewModel.DateOfBirthMonth.Value, day: viewModel.DateOfBirthDay.Value); } var success = true; // change password if (!string.IsNullOrEmpty(viewModel.OldPassword) || !string.IsNullOrEmpty(viewModel.NewPassword) || !string.IsNullOrEmpty(viewModel.ConfirmNewPassword)) { if (string.IsNullOrEmpty(viewModel.OldPassword)) { ModelState.AddModelError("OldPassword", "The Old password field is required."); success = false; } if (string.IsNullOrEmpty(viewModel.NewPassword)) { ModelState.AddModelError("NewPassword", "The New password field is required."); success = false; } if (string.IsNullOrEmpty(viewModel.ConfirmNewPassword)) { ModelState.AddModelError("ConfirmNewPassword", "The Confirm new password field is required."); success = false; } if (success && viewModel.NewPassword != viewModel.ConfirmNewPassword) { ModelState.AddModelError("ConfirmNewPassword", "New password and confirmation password do not match."); success = false; } if (success && !membershipUser.ChangePassword(viewModel.OldPassword, viewModel.NewPassword)) { ModelState.AddModelError("OldPassword", "Old password is incorrect."); success = false; } } if (viewModel.Photo != null && viewModel.Photo.ContentLength > 0) { MemoryStream target = new MemoryStream(); viewModel.Photo.InputStream.CopyTo(target); byte[] data = target.ToArray(); UploadModel model = new UploadModel { ContentType = viewModel.Photo.ContentType, Contents = data, FileName = viewModel.Photo.FileName }; UploadModel upload = new UploadService().UploadFile(LayoutViewModel.ProviderUserKey, model, true); } if (success) { var updated = new ProfileService().UpdateProfile(LayoutViewModel.ProviderUserKey, updateModel); // change username COMPLICATED if (membershipUser.UserName != viewModel.Email) { var config = WebConfigurationManager.OpenWebConfiguration("~"); var section = config.SectionGroups["system.web"].Sections["membership"] as MembershipSection; var defaultProvider = section.DefaultProvider; var connectionStringName = section.Providers[defaultProvider].ElementInformation.Properties["connectionStringName"].Value.ToString(); string connectionString = config.ConnectionStrings.ConnectionStrings[connectionStringName].ConnectionString; var changed = new ProfileService().ChangeUsername(membershipUser.UserName, viewModel.Email, connectionString); if (changed) { // change email as well membershipUser.Email = viewModel.Email; // need to re-verify membershipUser.IsApproved = false; SendVerifyEmail(membershipUser.Email, updateModel.FirstName, LayoutViewModel.CurrentAccountId, false); //instead I'm showing verifucation code in the view Membership.UpdateUser(membershipUser); // need to sign out to force verification FormsAuthentication.SignOut(); TempData["VerifyCode"] = ZBase32.Encode(LayoutViewModel.CurrentAccountId.ToByteArray()); // redirect to screen which tells user to check email return RedirectToAction("EmailChangeSuccess"); } else { ModelState.AddModelError("", "A user for that email address already exists. Please enter a different email address."); } } return RedirectToAction("MyProfile"); } //Something not valid, show errors viewModel.SupportEmail = ConfigurationManager.AppSettings["SupportEmail"]; return View(viewModel); } //Something not valid, show errors viewModel.SupportEmail = ConfigurationManager.AppSettings["SupportEmail"]; return View(viewModel); }
public ActionResult UpdateProfile() { LayoutViewModel.ActiveLink = Links.AccountUpdateProfile; var profileModel = new ProfileService().GetMyProfile(LayoutViewModel.ProviderUserKey, LayoutViewModel.CurrentUserEmail, 1); UpdateProfileViewModel viewModel = new UpdateProfileViewModel { FirstName = profileModel.User.FirstName, LastName = profileModel.User.LastName, PhoneNumber = profileModel.User.PhoneNumber, Sex = profileModel.User.Sex, Email = LayoutViewModel.CurrentUserEmail, PhotoId = profileModel.User.PhotoID, Address = ViewModelHelper.GetUserAddress(profileModel.Address), SupportEmail = ConfigurationManager.AppSettings["SupportEmail"], SendEmailUpdates = profileModel.User.SendEmailUpdates, PushNotifications = profileModel.User.PushNotifications, PostToFacebook = profileModel.User.PostToFacebook }; if (profileModel.User.DateOfBirth.HasValue) { DateTime date = profileModel.User.DateOfBirth.Value; viewModel.DateOfBirthDay = date.Day; viewModel.DateOfBirthMonth = date.Month; //viewModel.DateOfBirthMonthText = // viewModel.Months.Where(m => int.Parse(m.Value) == date.Month).First().Text; viewModel.DateOfBirthYear = date.Year; } //Auspost if (LayoutViewModel.IsAusPost) { return RedirectToAction("UpdateAuspost"); } return View(viewModel); }