Esempio n. 1
0
        public async Task <IActionResult> Settings(IndexViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
            }

            var email = user.Email;

            if (model.Email != email)
            {
                var setEmailResult = await _userManager.SetEmailAsync(user, model.Email);

                if (!setEmailResult.Succeeded)
                {
                    throw new ApplicationException($"Unexpected error occurred setting email for user with ID '{user.Id}'.");
                }
            }

            var phoneNumber = user.PhoneNumber;

            if (model.PhoneNumber != phoneNumber)
            {
                var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, model.PhoneNumber);

                if (!setPhoneResult.Succeeded)
                {
                    throw new ApplicationException($"Unexpected error occurred setting phone number for user with ID '{user.Id}'.");
                }
            }

            foreach (var prop in model.GetType().GetProperties())
            {
                if (user.GetType().GetProperty(prop.Name) == null)
                {
                    continue;
                }

                if (user.GetType().GetProperty(prop.Name).GetValue(user) == prop.GetValue(model))
                {
                    continue;
                }

                user.GetType().GetProperty(prop.Name).SetValue(user, prop.GetValue(model));
            }

            if (model.ProfileUploaded != null)
            {
                using (var fileStream = new FileStream((AppEnvironment.WebRootPath + "/images/Profiles/" + user.GetHashCode().ToString() + ".jpg"), FileMode.Create))
                {
                    await model.ProfileUploaded.CopyToAsync(fileStream);

                    user.ProfileImage = user.GetHashCode().ToString() + ".jpg";
                }
            }

            await _userManager.UpdateAsync(user);

            StatusMessage = "Ваш профиль был успешно обновлен!";
            return(RedirectToAction(nameof(Index)));
        }