示例#1
0
        public async Task <IActionResult> Index(string Search     = null,
                                                int?Program       = null,
                                                string Categories = null,
                                                string Group      = null,
                                                bool Favorites    = false,
                                                string Status     = null,
                                                int page          = 1,
                                                ChallengeFilter.OrderingOption ordering = ChallengeFilter.OrderingOption.MostPopular,
                                                System.Net.HttpStatusCode httpStatus    = System.Net.HttpStatusCode.OK)
        {
            var filter = new ChallengeFilter(page)
            {
                Ordering = ordering
            };

            if (!string.IsNullOrWhiteSpace(Search))
            {
                filter.Search = Search;
            }
            if (Program.HasValue)
            {
                filter.ProgramIds = new List <int?> {
                    Program
                };
            }
            if (!string.IsNullOrWhiteSpace(Categories))
            {
                var categoryIds = new List <int>();
                foreach (var category in Categories.Split(','))
                {
                    if (int.TryParse(category, out int result))
                    {
                        categoryIds.Add(result);
                    }
                }
                filter.CategoryIds = categoryIds;
            }
            if (AuthUser.Identity.IsAuthenticated)
            {
                filter.Favorites = Favorites;
                if (string.IsNullOrWhiteSpace(Status) ||
                    string.Equals(Status, StatusUncompleted, StringComparison.OrdinalIgnoreCase))
                {
                    filter.IsCompleted = false;
                }
                else if (string.Equals(Status, StatusCompleted,
                                       StringComparison.OrdinalIgnoreCase))
                {
                    filter.IsCompleted = true;
                }
            }

            ChallengeGroup challengeGroup = null;

            if (!string.IsNullOrWhiteSpace(Group))
            {
                challengeGroup = await _challengeService.GetActiveGroupByStubAsync(Group);

                if (challengeGroup != null)
                {
                    filter.GroupId = challengeGroup.Id;
                }
                PageTitle
                    = _sharedLocalizer[Annotations.Title.ChallengeGroup, challengeGroup.Name];
            }

            var challengeList = await _challengeService.GetPaginatedChallengeListAsync(filter);

            var paginateModel = new PaginateViewModel
            {
                ItemCount    = challengeList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };

            if (paginateModel.PastMaxPage)
            {
                return(RedirectToRoute(
                           new
                {
                    page = paginateModel.LastPage ?? 1
                }));
            }

            foreach (var challenge in challengeList.Data)
            {
                if (!string.IsNullOrEmpty(challenge.BadgeFilename))
                {
                    challenge.BadgeFilename = _pathResolver
                                              .ResolveContentPath(challenge.BadgeFilename);
                }
                if (challenge.IsCompleted == true)
                {
                    challenge.Status = _sharedLocalizer[Annotations.Interface.Completed];
                }
            }

            var siteStage = GetSiteStage();

            var isActive = siteStage == SiteStage.ProgramOpen ||
                           siteStage == SiteStage.ProgramEnded;

            var categoryList = await _categoryService.GetListAsync(true);

            var featuredChallengeGroups = await _challengeService
                                          .GetActiveFeaturedChallengeGroupsAsync();

            var viewModel = new ChallengesListViewModel
            {
                Categories              = Categories,
                CategoryIds             = filter.CategoryIds,
                CategoryList            = new SelectList(categoryList, "Id", "Name"),
                ChallengeGroup          = challengeGroup,
                Challenges              = challengeList.Data.ToList(),
                Favorites               = Favorites,
                FeaturedChallengeGroups = featuredChallengeGroups,
                IsActive      = isActive,
                IsLoggedIn    = AuthUser.Identity.IsAuthenticated,
                Ordering      = filter.Ordering,
                PaginateModel = paginateModel,
                Program       = Program,
                ProgramList   = new SelectList(await _siteService.GetProgramList(), "Id", "Name"),
                Search        = Search,
                Status        = Status
            };

            if (!string.IsNullOrWhiteSpace(Search))
            {
                HttpContext.Session.SetString(SessionKey.ChallengeSearch, Search);
            }
            else
            {
                HttpContext.Session.Remove(SessionKey.ChallengeSearch);
            }
            HttpContext.Session.SetInt32(SessionKey.ChallengePage, page);

            if (httpStatus != System.Net.HttpStatusCode.OK)
            {
                Response.StatusCode = (int)httpStatus;
            }
            return(View(nameof(Index), viewModel));
        }
示例#2
0
        public async Task <IActionResult> Index(string Search, string Categories, string Group,
                                                bool Favorites = false, int page = 1)
        {
            int siteId = GetCurrentSiteId();

            ChallengeFilter filter = new ChallengeFilter(page);

            if (!string.IsNullOrWhiteSpace(Search))
            {
                filter.Search = Search;
            }
            if (!string.IsNullOrWhiteSpace(Categories))
            {
                var categoryIds = new List <int>();
                foreach (var category in Categories.Split(','))
                {
                    int result;
                    if (int.TryParse(category, out result))
                    {
                        categoryIds.Add(result);
                    }
                }
                filter.CategoryIds = categoryIds;
            }
            if (Favorites == true && AuthUser.Identity.IsAuthenticated)
            {
                filter.Favorites = true;
            }

            ChallengeGroup challengeGroup = null;

            if (!string.IsNullOrWhiteSpace(Group))
            {
                challengeGroup = await _challengeService.GetActiveGroupByStubAsync(Group);

                if (challengeGroup != null)
                {
                    filter.GroupId = challengeGroup.Id;
                }
            }

            var challengeList = await _challengeService.GetPaginatedChallengeListAsync(filter);

            PaginateViewModel paginateModel = new PaginateViewModel()
            {
                ItemCount    = challengeList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };

            if (paginateModel.MaxPage > 0 && paginateModel.CurrentPage > paginateModel.MaxPage)
            {
                return(RedirectToRoute(
                           new
                {
                    page = paginateModel.LastPage ?? 1
                }));
            }

            foreach (var challenge in challengeList.Data)
            {
                if (!string.IsNullOrEmpty(challenge.BadgeFilename))
                {
                    challenge.BadgeFilename = _pathResolver.ResolveContentPath(challenge.BadgeFilename);
                }
                if (challenge.IsCompleted == true)
                {
                    challenge.Status = "Completed!";
                }
            }

            var siteStage = GetSiteStage();

            var isActive = (siteStage == SiteStage.ProgramOpen ||
                            siteStage == SiteStage.ProgramEnded);

            var categoryList = await _categoryService.GetListAsync(true);

            ChallengesListViewModel viewModel = new ChallengesListViewModel()
            {
                Challenges     = challengeList.Data.ToList(),
                ChallengeGroup = challengeGroup,
                PaginateModel  = paginateModel,
                Search         = Search,
                Categories     = Categories,
                Favorites      = Favorites,
                IsActive       = isActive,
                IsLoggedIn     = AuthUser.Identity.IsAuthenticated,
                CategoryIds    = filter.CategoryIds,
                CategoryList   = new SelectList(categoryList, "Id", "Name")
            };

            if (!string.IsNullOrWhiteSpace(Search))
            {
                HttpContext.Session.SetString(SessionKey.ChallengeSearch, Search);
            }
            else
            {
                HttpContext.Session.Remove(SessionKey.ChallengeSearch);
            }
            HttpContext.Session.SetInt32(SessionKey.ChallengePage, page);

            return(View(nameof(Index), viewModel));
        }