public ActionResult Index(HeaderInfoController headerInfoController, SidebarController sidebarController, PuzzleSortType? sortType, int? page, int? pageSize)
        {
            sortType = sortType ?? PuzzleSortType.Newest;
            page = page ?? 1;
            pageSize = pageSize ?? 15;

            //Get sorted puzzles
            var puzzles = _puzzleService.GetPuzzleDetailView(sortType.Value, page.Value, pageSize.Value);

            var viewModel = new PuzzleListViewModel("Welcome", puzzles, sortType.Value, _authenticationService.IsAuthenticated, _authenticationService.CurrentUserId);

            return View(viewModel);
        }
        public ActionResult Create(HeaderInfoController headerInfoController, SidebarController sidebarController, CreatePuzzleViewModel viewModel, bool captchaValid)
        {
            var themes = Theme.GetThemesFromString(viewModel.Themes);

            ValidatePuzzleForCreation(viewModel, themes, captchaValid);

            if(!ModelState.IsValid)
            {
                return View(viewModel);
            }

            var result = _puzzleService.CreatePuzzle(viewModel.StartTopic, viewModel.EndTopic);

            if (!result.Success)
            {
                ModelState.AddModelErrors(result.RuleViolations);
                return View(viewModel);
            }

            _puzzleService.AddThemesToPuzzle(result.PuzzleId, _authenticationService.CurrentUserId, themes);

            return RedirectToAction("Display", new {id = result.PuzzleId});
        }
 public ActionResult Create(HeaderInfoController headerInfoController, SidebarController sidebarController)
 {
     return View();
 }
        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);
        }
        public ActionResult Themed(HeaderInfoController headerInfoController, SidebarController sidebarController, string themes, PuzzleSortType? sortType, int? page, int? pageSize)
        {
            sortType = sortType ?? PuzzleSortType.Newest;
            page = page ?? 1;
            pageSize = pageSize ?? 15;

            //Get sorted puzzles
            var themeList = Theme.GetThemesFromString(themes);
            IPagination<PuzzleDetailView> puzzles = _puzzleService.GetPuzzleDetailView(sortType.Value, page.Value, pageSize.Value, themeList);

            var viewModel = new PuzzleListViewModel(GetThemedPageTitle(sortType.Value, themeList), puzzles, sortType.Value, _authenticationService.IsAuthenticated, _authenticationService.CurrentUserId) {Themes = themeList};

            ViewData["themes"] = themes;
            return View(viewModel);
        }
        public ActionResult Edit(HeaderInfoController headerInfoController, SidebarController sidebarController, EditPuzzleViewModel viewModel, bool captchaValid)
        {
            if (_authenticationService.CurrentUser.Reputation < Settings.MinimumReputationToEditPuzzle)
                return View("NotPrivaledged");

            var themes = Theme.GetThemesFromString(viewModel.Themes);

            ValidatePuzzleEdit(viewModel, themes, captchaValid);

            if (!ModelState.IsValid)
                return View(viewModel);

            _puzzleService.AddThemesToPuzzle(viewModel.Id, _authenticationService.CurrentUserId, themes);

            return RedirectToAction("Display", new { id = viewModel.Id });
        }
        public ActionResult Edit(HeaderInfoController headerInfoController, SidebarController sidebarController, int id)
        {
            //Only allow logged in users with high enough reputation to edit the puzzle
            if (!_authenticationService.IsAuthenticated)
                return View("Unauthorized");

            if (_authenticationService.CurrentUser.Reputation < Settings.MinimumReputationToEditPuzzle)
                return View("NotPrivaledged");

            var puzzle = _puzzleService.GetPuzzleById(id);

            if (puzzle == null)
                return View("NotFound");

            //Only show puzzles that have not been verified to the user who created them.
            if (!puzzle.IsVerified)
            {
                if (puzzle.User.Id != _authenticationService.CurrentUserId)
                    return View("NotFound");
            }

            var vm = new EditPuzzleViewModel(puzzle);
            return View(vm);
        }
        public ActionResult Display(HeaderInfoController headerInfoController, SidebarController sidebarController, int id)
        {
            var puzzle = _puzzleService.GetPuzzleById(id);

            if (puzzle == null)
                return View("NotFound");

            //Only show puzzles that have not been verified to the user who created them.
            if (!puzzle.IsVerified)
            {
                if(puzzle.User.Id != _authenticationService.CurrentUserId)
                    return View("NotFound");
            }

            puzzle.Solutions = _puzzleService.GetSolutions(puzzle.Id);
            puzzle.Votes = _puzzleService.GetVotes(puzzle.Id);

            var latestSolution = puzzle.Solutions.Where(x => x.UserId == _authenticationService.CurrentUserId).LastOrDefault();
            if (latestSolution != null)
            {
                latestSolution.Steps = _puzzleService.GetSteps(latestSolution.Id);
            }

            var bestSolution = puzzle.Solutions.Where(x => x.UserId == _authenticationService.CurrentUserId).OrderByDescending(x => x.PointsAwarded).FirstOrDefault();
            if (bestSolution != null)
            {
                bestSolution.Steps = _puzzleService.GetSteps(bestSolution.Id);
            }

            var vote = puzzle.Votes.Where(x => x.UserId == _authenticationService.CurrentUserId).SingleOrDefault();
            var voteType = vote == null ? VoteType.None : vote.VoteType;
            var userSolutionCount = puzzle.Solutions.Where(x => x.UserId == _authenticationService.CurrentUserId).Count();

            var groupedSolutions = puzzle.Solutions.GroupBy(x => x.UserId);
            var topSolutions = new List<Solution>();
            foreach (var group in groupedSolutions)
            {
                topSolutions.Add(group.OrderBy(x => x.StepCount).First());
            }
            var puzzleLeaderBoard = topSolutions.OrderBy(x => x.StepCount).CreateOrderedEnumerable(x => x.DateCreated, new StandardComparer<DateTime>(), false).Take(10).Select(x => new SolutionViewModel(x, _accountService.GetUserById(x.UserId)));

            var viewModel = new PuzzleViewModel(puzzle, voteType, latestSolution, bestSolution, userSolutionCount, puzzleLeaderBoard, puzzle.User.Id == _authenticationService.CurrentUserId, false);

            return View(viewModel);
        }
 public ActionResult Index(HeaderInfoController headerInfoController, SidebarController sidebarController)
 {
     var badges = _accountService.GetAvailableBadges().OrderBy(x => x.Level);
     return View(badges);
 }
Esempio n. 10
0
        public ActionResult Start(HeaderInfoController headerInfoController, SidebarController sidebarController, int id)
        {
            var result = _gameService.StartPuzzle(id);

            return RedirectToAction("Continue", new { topic = result.StartTopic.Name });
        }
Esempio n. 11
0
 public ActionResult GoBack(HeaderInfoController headerInfoController, SidebarController sidebarController)
 {
     var result = _gameService.GoBack();
     return RedirectToAction("Continue", new { topic = result.PreviousTopic.Name });
 }