private UserProfileModel PrepareUserProfileModel(User user)
        {
            if (user == null)
                throw new ArgumentNullException("user");

            AddHomeBreadcrumb();
            AddBreadcrumb("Profile for " + user.DisplayName, Url.RouteUrl("UserProfile", new { userName = user.UserName }));

            var model = new UserProfileModel
            {
                FinishedProjects = _projectService.GetFinishedProjectsByUserId(user.Id).Select(x => x.ToModel()).ToList(),
                IsOwnProfile = (_workContext.CurrentUser != null && user.Id == _workContext.CurrentUser.Id),
                MetaTitle = string.Format("User profile for {0} | Volunteer on #WeWillGather", user.DisplayName),
                OrganisedProjects = _projectService.GetOrganisedProjectsByUserId(user.Id).Select(x => x.ToModel()).ToList(),
                UpcomingProjects = _projectService.GetUpcomingProjectsByUserId(user.Id).Select(x => x.ToModel()).ToList(),
                User = user.ToModel()
            };

            if (model.IsOwnProfile)
            {
                model.User.AvailableDisclosureLevels = _webHelper.GetAllEnumListItems<DisclosureLevel>();
            }
            else
            {
                if (_workContext.CurrentUser != null)
                {
                    if (model.OrganisedProjects.Any(x => x.Volunteers.Any(y => y.Id == _workContext.CurrentUser.Id) || x.Owners.Any(y => y.Id == _workContext.CurrentUser.Id)))
                        model.VisitorIsVolunteer = true;
                }
            }

            return model;
        }
        public ActionResult UpdateProfile(string userName, UserProfileModel model)
        {
            var user = _userService.GetUserByUserName(userName);
            if (user == null || !user.Active)
                return RedirectToAction("error404", "error");

            bool updateUserName = model.User.UserName != user.UserName;

            user.DisplayName = model.User.DisplayName;
            user.Email = model.User.Email;
            user.Telephone = model.User.Telephone;
            user.UserName = model.User.UserName;
            user.Website = model.User.Website;

            if (Enum.IsDefined(typeof(DisclosureLevel), model.User.EmailDisclosureId))
                user.EmailDisclosureId = model.User.EmailDisclosureId;

            if (Enum.IsDefined(typeof(DisclosureLevel), model.User.TelephoneDisclosureId))
                user.TelephoneDisclosureId = model.User.TelephoneDisclosureId;

            if (Enum.IsDefined(typeof(DisclosureLevel), model.User.WebsiteDisclosureId))
                user.WebsiteDisclosureId = model.User.WebsiteDisclosureId;

            model = PrepareUserProfileModel(user);

            if (ModelState.IsValid)
            {
                try
                {
                    _userService.UpdateUser(user);
                    SuccessNotification("Your profile details have been updated successfully.");

                    if (updateUserName)
                        return RedirectToRoute("UserProfile", new { userName = user.UserName });
                }
                catch (Exception)
                {
                    ErrorNotification("An error occurred updating your profile details, please try again.");
                }
            }
            else
            {
                model.ShowEditProfile = true;
            }

            return View(model);
        }