public ThemeListViewModel(string pageTitle, IPagination<Theme> paginatedThemes, ThemeSortType sortType)
 {
     PageTitle = pageTitle;
     PaginatedThemes = paginatedThemes;
     SortType = sortType;
 }
        public ActionResult Themes(HeaderInfoController headerInfoController, SidebarController sidebarController, int? page, int? pagesize, ThemeSortType? sortType)
        {
            page = page ?? 1;
            pagesize = pagesize ?? 40;
            sortType = sortType ?? ThemeSortType.Popular;

            //Get sorted themes
            var themes = _puzzleService.GetThemes(pagesize.Value, page.Value, sortType.Value);
            var viewModel = new ThemeListViewModel(GetPageTitle(sortType.Value), themes, sortType.Value);
            return View(viewModel);

            ////Get sorted puzzles
            //IPagination<Puzzle> puzzles = _puzzleService.GetPuzzles(sortType.Value, page.Value, pageSize.Value);

            ////Get all the votes for the user for the puzzles that are to be displayed.
            //IEnumerable<Vote> votes = null;
            //IEnumerable<int> leadingPuzzles = null;
            //if (_authenticationService.IsAuthenticated)
            //{
            //    votes = _puzzleService.GetVotes(puzzles, _authenticationService.CurrentUserId);
            //    leadingPuzzles = _puzzleService.GetPuzzlesLedByUser(puzzles, _authenticationService.CurrentUserId);
            //}

            //var viewModel = new PuzzleListViewModel(GetPageTitle(sortType.Value), puzzles, sortType.Value, _authenticationService.IsAuthenticated, votes, leadingPuzzles);

            //return View(viewModel);
        }
 private static string GetPageTitle(ThemeSortType sortType)
 {
     switch (sortType)
     {
         case ThemeSortType.Alphabetical:
             return "Themes Sorted Alphabetically";
         case ThemeSortType.Popular:
             return "Most Popular Themes";
         default:
             throw new NotFiniteNumberException("Need to handle sorting for type {0}".ToFormat(sortType));
     }
 }
        public IPagination<Theme> GetThemes(int pageSize, int page, ThemeSortType sortType)
        {
            IEnumerable<Theme> themes = null;

            using (_repository.OpenSession())
            {
                switch (sortType)
                {
                    case ThemeSortType.Popular:
                        themes = _repository.All<Theme>().Where(x => x.Count > 0).OrderByDescending(x => x.Count).Skip((page - 1) * pageSize).Take(pageSize).ToList();
                        break;
                    case ThemeSortType.Alphabetical:
                        themes = _repository.All<Theme>().Where(x => x.Count > 0).OrderBy(x => x.Name).Skip((page - 1) * pageSize).Take(pageSize).ToList();
                        break;
                }

                return new CustomPagination<Theme>(themes, page, pageSize, _repository.All<Theme>().Count());
            }
        }