Example #1
0
        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));
        }