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)); }
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)); }