public async Task <IActionResult> OnPostAsync() { IsSpeaker = User.IsInRole("Speaker"); if (!ModelState.IsValid) { return(Page()); } var user = await _userManager.GetUserAsync(User); if (user == null) { return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.")); } var rolesToAdd = new List <string>(); var rolesToRemove = new List <string>(); if (IsSpeaker) { // Retrieve the speaker object var speaker = _context.Speakers .Where(s => s.SpeakerId == user.SpeakerId) .FirstOrDefault(); if (Input.IsVolunteer != user.IsVolunteer) { user.IsVolunteer = Input.IsVolunteer; // Add/remove roles accordingly if (User.IsInRole("Volunteer") && user.IsVolunteer == false) { rolesToRemove.Add("Volunteer"); } if (!User.IsInRole("Volunteer") && user.IsVolunteer == true) { rolesToAdd.Add("Volunteer"); } } if (Input.FirstName != user.FirstName) { user.FirstName = Input.FirstName; } if (Input.LastName != user.LastName) { user.LastName = Input.LastName; } if (Input.CompanyName != speaker.CompanyName) { speaker.CompanyName = Input.CompanyName; } // Convert the image to a byte array and store it in the // database if (Input.ImageFile != null && Input.ImageFile.ContentType.ToLower().StartsWith("image/") && Input.ImageFile.Length <= SpeakerViewModel.MaxImageSize) { MemoryStream ms = new MemoryStream(); Input.ImageFile.OpenReadStream().CopyTo(ms); speaker.Image = _speakerBL.ResizeImage(ms.ToArray()); } if (Input.Bio != speaker.Bio) { speaker.Bio = Input.Bio; } if (Input.WebsiteUrl != speaker.WebsiteUrl) { speaker.WebsiteUrl = Input.WebsiteUrl; } if (Input.BlogUrl != speaker.BlogUrl) { speaker.BlogUrl = Input.BlogUrl; } if (Input.GeographicLocation != user.GeographicLocation) { user.GeographicLocation = Input.GeographicLocation; } if (Input.TwitterHandle != user.TwitterHandle) { user.TwitterHandle = Input.TwitterHandle; } if (Input.LinkedIn != speaker.LinkedIn) { speaker.LinkedIn = Input.LinkedIn; } if (Input.IsMvp != speaker.IsMvp) { speaker.IsMvp = Input.IsMvp; } if (Input.NoteToOrganizers != speaker.NoteToOrganizers) { speaker.NoteToOrganizers = Input.NoteToOrganizers; } var email = await _userManager.GetEmailAsync(user); if (Input.Email != email) { var setEmailResult = await _userManager.SetEmailAsync(user, Input.Email); if (!setEmailResult.Succeeded) { var userId = await _userManager.GetUserIdAsync(user); throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'."); } } var phoneNumber = await _userManager.GetPhoneNumberAsync(user); if (Input.PhoneNumber != phoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); if (!setPhoneResult.Succeeded) { var userId = await _userManager.GetUserIdAsync(user); throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'."); } } } else // An Attendee { if (Input.IsVolunteer != user.IsVolunteer) { user.IsVolunteer = Input.IsVolunteer; // Add/remove roles accordingly if (User.IsInRole("Volunteer") && user.IsVolunteer == false) { rolesToRemove.Add("Volunteer"); } if (!User.IsInRole("Volunteer") && user.IsVolunteer == true) { rolesToAdd.Add("Volunteer"); } } if (Input.FirstName != user.FirstName) { user.FirstName = Input.FirstName; } if (Input.LastName != user.LastName) { user.LastName = Input.LastName; } if (Input.GeographicLocation != user.GeographicLocation) { user.GeographicLocation = Input.GeographicLocation; } if (Input.TwitterHandle != user.TwitterHandle) { user.TwitterHandle = Input.TwitterHandle; } var email = await _userManager.GetEmailAsync(user); if (Input.Email != email) { var setEmailResult = await _userManager.SetEmailAsync(user, Input.Email); if (!setEmailResult.Succeeded) { var userId = await _userManager.GetUserIdAsync(user); throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'."); } } var phoneNumber = await _userManager.GetPhoneNumberAsync(user); if (Input.PhoneNumber != phoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); if (!setPhoneResult.Succeeded) { var userId = await _userManager.GetUserIdAsync(user); throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'."); } } } // Remove selected roles await _userManager.RemoveFromRolesAsync(user, rolesToRemove); // Add selected roles await _userManager.AddToRolesAsync(user, rolesToAdd); // Update the user await _userManager.UpdateAsync(user); // Update EF changes to DB await _context.SaveChangesAsync(); await _signInManager.RefreshSignInAsync(user); StatusMessage = "Your profile has been updated"; return(RedirectToPage()); }
public async Task <IActionResult> Edit(int id, [Bind("SpeakerId,CodecampUserId,FirstName,LastName,CompanyName,ImageFile,ResizeImage,Bio,WebsiteUrl,BlogUrl,GeographicLocation,TwitterHandle,LinkedIn,IsVolunteer,IsMvp,NoteToOrganizers,Email,PhoneNumber,IsApproved")] SpeakerViewModel speakerVM) { if (ModelState.IsValid) { if (id != speakerVM.SpeakerId) { return(NotFound()); } var speaker = await _speakerBL.GetSpeaker(id); // Update the speaker information from the page speaker.CompanyName = speakerVM.CompanyName; speaker.Bio = speakerVM.Bio; speaker.WebsiteUrl = speakerVM.WebsiteUrl; speaker.BlogUrl = speakerVM.BlogUrl; speaker.NoteToOrganizers = speakerVM.NoteToOrganizers; speaker.IsApproved = speakerVM.IsApproved; speaker.IsMvp = speakerVM.IsMvp; speaker.LinkedIn = speakerVM.LinkedIn; speaker.CodecampUserId = speakerVM.CodecampUserId; // Convert the image to a byte array, reduce the size to 300px x 300px // and store it in the database if (speakerVM.ImageFile != null && speakerVM.ImageFile.ContentType.ToLower().StartsWith("image/") && speakerVM.ImageFile.Length <= SpeakerViewModel.MaxImageSize) { MemoryStream ms = new MemoryStream(); speakerVM.ImageFile.OpenReadStream().CopyTo(ms); speaker.Image = _speakerBL.ResizeImage(ms.ToArray()); } var result = await _speakerBL.UpdateSpeaker(speaker); var user = await _userBL.GetUser(speakerVM.CodecampUserId); // Update the user information from the page user.FirstName = speakerVM.FirstName; user.LastName = speakerVM.LastName; user.GeographicLocation = speakerVM.GeographicLocation; user.TwitterHandle = speakerVM.TwitterHandle; user.IsVolunteer = speakerVM.IsVolunteer; user.Email = speakerVM.Email; user.PhoneNumber = speakerVM.PhoneNumber; result &= await _userBL.UpdateUser(user); if (result == false) { return(NotFound()); } else { return(RedirectToAction(nameof(Index))); } } return(View(speakerVM)); }