Beispiel #1
0
        public async Task <IActionResult> UpdateFavorites(ChallengesListViewModel model)
        {
            var serviceResult = await _activityService.UpdateFavoriteChallenges(model.Challenges);

            if (serviceResult.Status == ServiceResultStatus.Warning &&
                !string.IsNullOrWhiteSpace(serviceResult.Message))
            {
                ShowAlertWarning(serviceResult.Message);
            }
            int?page = null;

            if (model.PaginateModel.CurrentPage > 1)
            {
                page = model.PaginateModel.CurrentPage;
            }
            return(RedirectToAction(nameof(Index), new
            {
                page,
                model.Search,
                model.Program,
                model.Categories,
                model.Favorites,
                model.Status,
                Group = model.ChallengeGroup?.Stub
            }));
        }
Beispiel #2
0
        private async Task <ChallengesListViewModel> GetChallengeList(string filterBy,
                                                                      string search, int page, int?filterId = null)
        {
            int take = 15;
            int skip = take * (page - 1);

            var challengeList = await _challengeService
                                .MCGetPaginatedChallengeListAsync(skip, take, search, filterBy, filterId);

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

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

            var systemList = (await _siteService.GetSystemList())
                             .OrderByDescending(_ => _.Id == GetId(ClaimType.SystemId)).ThenBy(_ => _.Name);

            ChallengesListViewModel viewModel = new ChallengesListViewModel()
            {
                Challenges          = challengeList.Data,
                PaginateModel       = paginateModel,
                FilterBy            = filterBy,
                FilterId            = filterId,
                Search              = search,
                CanAddChallenges    = UserHasPermission(Permission.AddChallenges),
                CanDeleteChallenges = UserHasPermission(Permission.RemoveChallenges),
                CanEditChallenges   = UserHasPermission(Permission.EditChallenges),
                SystemList          = systemList
            };

            if (!string.IsNullOrWhiteSpace(filterBy))
            {
                if (filterBy.Equals("System", StringComparison.OrdinalIgnoreCase))
                {
                    var systemId = filterId ?? GetId(ClaimType.SystemId);
                    viewModel.SystemName = systemList
                                           .Where(_ => _.Id == systemId).SingleOrDefault().Name;
                    viewModel.BranchList = (await _siteService.GetBranches(systemId))
                                           .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                           .ThenBy(_ => _.Name);
                }
                else if (filterBy.Equals("Branch", StringComparison.OrdinalIgnoreCase))
                {
                    var branchId = filterId ?? GetId(ClaimType.BranchId);
                    var branch   = await _siteService.GetBranchByIdAsync(branchId);

                    viewModel.BranchName = branch.Name;
                    viewModel.SystemName = systemList
                                           .Where(_ => _.Id == branch.SystemId).SingleOrDefault().Name;
                    viewModel.BranchList = (await _siteService.GetBranches(branch.SystemId))
                                           .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                           .ThenBy(_ => _.Name);
                }
            }

            if (viewModel.BranchList == null)
            {
                viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId)))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
            }

            return(viewModel);
        }
Beispiel #3
0
        public async Task <IActionResult> GetChallengeList(string challengeIds,
                                                           string scope,
                                                           string search,
                                                           bool showActive = false,
                                                           int page        = 1)
        {
            var filter = new ChallengeFilter(page, 10)
            {
                IsActive = true,
                Search   = search
            };

            if (!string.IsNullOrWhiteSpace(challengeIds))
            {
                filter.ChallengeIds = challengeIds.Split(',')
                                      .Where(_ => !string.IsNullOrWhiteSpace(_))
                                      .Select(int.Parse)
                                      .ToList();
            }

            switch (scope.ToLower())
            {
            case ("system"):
                filter.SystemIds = new List <int> {
                    GetId(ClaimType.SystemId)
                };
                break;

            case ("branch"):
                filter.BranchIds = new List <int> {
                    GetId(ClaimType.BranchId)
                };
                break;

            case ("mine"):
                filter.UserIds = new List <int> {
                    GetId(ClaimType.UserId)
                };
                break;

            default:
                break;
            }

            var challengeList = await _challengeService.MCGetPaginatedChallengeListAsync(filter);

            var paginateModel = new PaginateViewModel
            {
                ItemCount    = challengeList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };
            var viewModel = new ChallengesListViewModel
            {
                Challenges        = challengeList.Data,
                PaginateModel     = paginateModel,
                CanEditChallenges = UserHasPermission(Permission.EditChallenges),
                ShowActive        = showActive
            };

            foreach (var challenge in viewModel.Challenges)
            {
                if (!string.IsNullOrWhiteSpace(challenge.BadgeFilename))
                {
                    challenge.BadgeFilename = _pathResolver.ResolveContentPath(
                        challenge.BadgeFilename);
                }
            }

            return(PartialView("_ChallengeListPartial", viewModel));
        }
        public async Task <IActionResult> Index(string Search, int page = 1)
        {
            int siteId = GetCurrentSiteId();
            int take   = 15;
            int skip   = take * (page - 1);

            var challengeList = await _challengeService
                                .GetPaginatedChallengeListAsync(skip, take, Search);

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

            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 = AuthUser.Identity.IsAuthenticated && (siteStage == SiteStage.ProgramOpen ||
                                                                 siteStage == SiteStage.ProgramEnded);

            ChallengesListViewModel viewModel = new ChallengesListViewModel()
            {
                Challenges    = challengeList.Data,
                PaginateModel = paginateModel,
                Search        = Search,
                IsActive      = isActive
            };

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

            return(View(viewModel));
        }
        private async Task <ChallengesListViewModel> GetChallengeList(string Search, int?Program,
                                                                      int?System, int?Branch, bool?Mine, int page = 1, bool pending = false)
        {
            BaseFilter filter = new BaseFilter(page);

            if (!string.IsNullOrWhiteSpace(Search))
            {
                filter.Search = Search;
            }
            if (System.HasValue)
            {
                filter.SystemIds = new List <int>()
                {
                    System.Value
                };
            }
            if (Branch.HasValue)
            {
                filter.BranchIds = new List <int>()
                {
                    Branch.Value
                };
            }
            if (Program.HasValue)
            {
                if (Program.Value == 0)
                {
                    filter.ProgramIds = new List <int?>()
                    {
                        null
                    };
                }
                else
                {
                    filter.ProgramIds = new List <int?>()
                    {
                        Program.Value
                    };
                }
            }
            if (Mine == true)
            {
                filter.UserIds = new List <int>()
                {
                    GetId(ClaimType.UserId)
                };
            }
            if (pending)
            {
                filter.IsActive = false;
            }
            var challengeList = await _challengeService
                                .MCGetPaginatedChallengeListAsync(filter);

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

            PaginateViewModel paginateModel = new PaginateViewModel()
            {
                ItemCount    = challengeList.Count,
                CurrentPage  = (filter.Skip.Value / filter.Take.Value) + 1,
                ItemsPerPage = filter.Take.Value
            };

            var systemList = (await _siteService.GetSystemList())
                             .OrderByDescending(_ => _.Id == GetId(ClaimType.SystemId)).ThenBy(_ => _.Name);
            ChallengesListViewModel viewModel = new ChallengesListViewModel()
            {
                Challenges          = challengeList.Data,
                PaginateModel       = paginateModel,
                Search              = filter.Search,
                System              = System,
                Branch              = Branch,
                Program             = Program,
                Mine                = Mine,
                CanAddChallenges    = UserHasPermission(Permission.AddChallenges),
                CanDeleteChallenges = UserHasPermission(Permission.RemoveChallenges),
                CanEditChallenges   = UserHasPermission(Permission.EditChallenges),
                SystemList          = systemList,
                ProgramList         = await _siteService.GetProgramList()
            };

            if (Mine == true)
            {
                viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId)))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "Mine";
                if (pending && !UserHasPermission(Permission.ActivateAllChallenges))
                {
                    viewModel.SystemName = systemList
                                           .Where(_ => _.Id == GetId(ClaimType.SystemId)).SingleOrDefault().Name;
                }
            }
            else if (Branch.HasValue)
            {
                var branch = await _siteService.GetBranchByIdAsync(viewModel.Branch.Value);

                viewModel.BranchName = branch.Name;
                viewModel.SystemName = systemList
                                       .Where(_ => _.Id == branch.SystemId).SingleOrDefault().Name;
                viewModel.BranchList = (await _siteService.GetBranches(branch.SystemId))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "Branch";
            }
            else if (System.HasValue)
            {
                viewModel.SystemName = systemList
                                       .Where(_ => _.Id == viewModel.System.Value).SingleOrDefault().Name;
                viewModel.BranchList = (await _siteService.GetBranches(viewModel.System.Value))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "System";
            }
            else
            {
                viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId)))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "All";
            }

            if (Program.HasValue)
            {
                if (Program.Value > 0)
                {
                    viewModel.ProgramName =
                        (await _siteService.GetProgramByIdAsync(Program.Value)).Name;
                }
                else
                {
                    viewModel.ProgramName = "Not Limited";
                }
            }

            return(viewModel);
        }
Beispiel #6
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));
        }
Beispiel #7
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));
        }