Esempio n. 1
0
        public ActionResult FilterAttempts(AttemptFilterView view)
        {
            view.Filters.Quiz  = cx.Quizzes.Find(view.Filters.Quiz?.Id);
            view.Filters.Group = cx.Groups.Find(view.Filters.Group?.Id);
            view.Filters.User  = cx.Users.Find(view.Filters.User?.Id);

            if (view.Command == "Reset")
            {
                Session["filters"] = null;

                return(PartialView(new AttemptFilters()
                {
                    Page = 1
                }.Filter
                                   (
                                       cx,
                                       cx.Users.Find(UserManager.FindByName(User.Identity.Name).Id)
                                   )));
            }

            if (view.Navigation != null || view.Navigation == "")
            {
                if (view.Navigation == "Back")
                {
                    view.Filters.Page--;
                }
                else if (view.Navigation == "Next")
                {
                    view.Filters.Page++;
                }
                else if (Int32.TryParse(view.Navigation, out int page))
                {
                    view.Filters.Page = page;
                }
                else
                {
                    throw new Exception("Navigation is initialized wrong");
                }
            }
            else
            {
                view.Filters.Page = 1;
            }

            Session["filters"] = view.Filters;

            //my attempts окрема (checkbox)

            ModelState.Clear();

            return(PartialView(
                       view.Filters.Filter(
                           cx,
                           cx.Users.Find(UserManager.FindByName(User.Identity.Name).Id)
                           )));
        }
Esempio n. 2
0
        public AttemptFilterView Filter(QuizContext cx, ApplicationUser user)
        {
            CurrentUser = user;

            var users = new HashSet <ApplicationUser>();

            foreach (var group in cx.Groups.Where(x => x.Creator.Id == user.Id).ToList())
            {
                foreach (var applicationUser in group.ApplicationUsers)
                {
                    users.Add(applicationUser);
                }
            }

            var userIds = users.Select(x => x.Id).ToList();

            var filteringData = cx.QuizAttempts.
                                Where(x => x.User.Id == user.Id ||
                                      userIds.Contains(user.Id) ||
                                      x.Quiz.User.Id == user.Id).ToList();

            filteringData = filteringData.
                            Where(x => _Filter(x)).
                            ToList();

            int pagesCount = 0;

            int lastPagePushSize = filteringData.Count % PageSize;

            //last has all size OR Count == 0
            if (lastPagePushSize == 0)
            {
                pagesCount = filteringData.Count / PageSize;
                //Count == 0
                if (pagesCount == 0)
                {
                    pagesCount = 1;
                }
                else
                {
                    lastPagePushSize = PageSize;
                }
            }
            else
            {
                pagesCount = filteringData.Count / PageSize + 1;
            }

            if (Page > pagesCount)
            {
                //bag
                Page = 1;
            }

            var data = filteringData.GetRange((Page - 1) * PageSize,
                                              Page == pagesCount ? lastPagePushSize : PageSize);

            //quizzes - my + which i passed
            var attempts = cx.QuizAttempts.Where(x => x.User.Id == CurrentUser.Id).ToList();
            var quizIds  = attempts.Select(x => x.Quiz.Id).ToList();

            //groups - my + opened!!!!!!!!!!!!!!!!!!!!!!!!!!!
            var openedIds = user.Groups.Select(x => x.Id).ToList();

            var result = new AttemptFilterView()
            {
                Filters = this,
                Data    = data,
                Quizzes = cx.Quizzes.Where(x => x.User.Id == user.Id ||
                                           quizIds.Contains(x.Id)).ToList(),
                Groups = cx.Groups.Where(x => x.Creator.Id == user.Id ||
                                         openedIds.Contains(x.Id)),
                Users      = users,
                PagesCount = pagesCount
            };

            return(result);
        }