Example #1
0
        public IActionResult Share(Guid listId)
        {
            ShoppingList list = lists.Get(GetUser(), listId);

            if (list == null)
            {
                Message("Can't find list to share");
                return(RedirectToRoute(Names.ListIndex, Names.ListHash));
            }

            ListShareVM vm = new ListShareVM
            {
                ListName = list.Name,
                ListID   = list.ID,
                Friends  = new List <ListShareFriendVM>(),
            };

            foreach (User friend in lists.GetFriends(GetUser()))
            {
                vm.Friends.Add(new ListShareFriendVM
                {
                    IsShared = list.Users.Any(u => u.UserId == friend.ID),
                    UserID   = friend.ID,
                    UserName = friend.Name,
                });
            }

            return(View(vm));
        }
Example #2
0
        public async Task <IActionResult> Share(Guid listId, ListShareVM vm)
        {
            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            ShoppingList list = lists.Get(GetUser(), listId);

            if (list == null)
            {
                Message("Can't find list to share");
                return(RedirectToRoute(Names.ListIndex, Names.ListHash));
            }

            User current = GetUser();
            IEnumerable <User> friends = lists.GetFriends(current);

            foreach (ListShareFriendVM userVM in vm.Friends)
            {
                User u = lists.GetUser(userVM.UserID);
                if (u == null)
                {
                    ModelState.AddModelError(nameof(userVM.UserID), "Unknown user ID");
                    continue;
                }

                if (!friends.Contains(u))
                {
                    ModelState.AddModelError(nameof(userVM.UserName), "Can only share lists with friends");
                    continue;
                }
            }
            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            foreach (ListShareFriendVM userVM in vm.Friends)
            {
                User u = lists.GetUser(userVM.UserID);
                await lists.ShareList(list, u, userVM.IsShared);
            }

            if (list.Users.Count > 1)
            {
                Message("List {0} shared with {1}", list.Name, string.Join(", ", list.Users.Where(ul => ul.User != current).Select(ul => ul.User.Name)));
            }
            else
            {
                Message("List {0} not shared with anyone", list.Name);
            }

            return(RedirectToRoute(Names.ListDetails, new { listId = list.ID }, Names.ItemsHash));
        }