Esempio n. 1
0
        public async Task <IActionResult> CompleteTasks(ChallengeDetailViewModel model)
        {
            List <ChallengeTask> tasks = _mapper.Map <List <ChallengeTask> >(model.Tasks);

            try
            {
                var completed = await _activityService
                                .UpdateChallengeTasksAsync(model.Challenge.Id, tasks);

                if (!completed)
                {
                    var challenge
                        = await _challengeService.GetChallengeDetailsAsync(model.Challenge.Id);

                    if (challenge.TasksToComplete != null &&
                        challenge.TasksToComplete > 0)
                    {
                        int tasksCompleted = model.Tasks.Count(_ => _.IsCompleted);
                        int percentage     = tasksCompleted * 100 / (int)challenge.TasksToComplete;
                        ShowAlertSuccess(_sharedLocalizer[Annotations.Info.StatusSavedPercentage,
                                                          percentage,
                                                          challenge.Name]);
                    }
                    else
                    {
                        ShowAlertSuccess(_sharedLocalizer[Annotations.Info.StatusSaved]);
                    }
                }
            }
            catch (GraException gex)
            {
                AlertInfo = gex.Message;
            }
            return(RedirectToAction(nameof(Detail), new { id = model.Challenge.Id }));
        }
Esempio n. 2
0
        public async Task <IActionResult> Detail(int id)
        {
            Challenge challenge = new Domain.Model.Challenge();

            try
            {
                challenge = await _challengeService.GetChallengeDetailsAsync(id);
            }
            catch (GraException gex)
            {
                ShowAlertWarning("Unable to view challenge: ", gex);
                return(RedirectToAction("Index"));
            }
            var siteStage = GetSiteStage();

            if (!string.IsNullOrEmpty(challenge.BadgeFilename))
            {
                challenge.BadgeFilename = _pathResolver.ResolveContentPath(challenge.BadgeFilename);
            }

            bool isActive      = AuthUser.Identity.IsAuthenticated && siteStage == SiteStage.ProgramOpen;
            bool showCompleted = siteStage == SiteStage.ProgramOpen ||
                                 siteStage == SiteStage.ProgramEnded;

            ChallengeDetailViewModel viewModel = new ChallengeDetailViewModel()
            {
                Challenge     = challenge,
                BadgePath     = challenge.BadgeFilename,
                IsActive      = isActive,
                ShowCompleted = showCompleted,
                Tasks         = new List <TaskDetailViewModel>()
            };

            viewModel.Details = $"Completing <strong>{challenge.TasksToComplete} "
                                + $"{(challenge.TasksToComplete > 1 ? "Tasks" : "Task")}</strong> will earn: "
                                + $"<strong>{challenge.PointsAwarded} "
                                + $"{(challenge.PointsAwarded > 1 ? "Points" : "Point")}</strong> and "
                                + "<strong>a badge</strong>.";

            foreach (var task in challenge.Tasks)
            {
                TaskDetailViewModel taskModel = new TaskDetailViewModel()
                {
                    Id          = task.Id,
                    IsCompleted = task.IsCompleted ?? false,
                    TaskType    = task.ChallengeTaskType.ToString(),
                    Url         = task.Url
                };
                if (task.ChallengeTaskType.ToString() == "Book")
                {
                    string description = $"Read <strong><em>{task.Title}</em></strong>";
                    if (!string.IsNullOrWhiteSpace(task.Author))
                    {
                        description += $" by <strong>{task.Author}</strong>";
                    }
                    taskModel.Description = description;
                }
                else
                {
                    taskModel.Description = task.Title;
                }
                viewModel.Tasks.Add(taskModel);
            }
            return(View(viewModel));
        }
        public async Task <IActionResult> Detail(int id)
        {
            Challenge challenge;

            try
            {
                challenge = await _challengeService.GetChallengeDetailsAsync(id);
            }
            catch (GraException gex)
            {
                ShowAlertWarning(gex.Message);
                return(await Index(httpStatus : System.Net.HttpStatusCode.NotFound));
            }
            var siteStage = GetSiteStage();

            if (!string.IsNullOrEmpty(challenge.BadgeFilename))
            {
                challenge.BadgeFilename = _pathResolver.ResolveContentPath(challenge.BadgeFilename);
            }

            bool isActive      = AuthUser.Identity.IsAuthenticated && siteStage == SiteStage.ProgramOpen;
            bool showCompleted = siteStage == SiteStage.ProgramOpen ||
                                 siteStage == SiteStage.ProgramEnded;

            var viewModel = new ChallengeDetailViewModel
            {
                Challenge                = challenge,
                BadgePath                = challenge.BadgeFilename,
                IsActive                 = isActive,
                IsLoggedIn               = AuthUser.Identity.IsAuthenticated,
                ShowCompleted            = showCompleted,
                Tasks                    = new List <TaskDetailViewModel>(),
                IsBadgeEarning           = challenge.BadgeId.HasValue,
                PointCountAndDescription = challenge.PointsAwarded == 1
                    ? _sharedLocalizer[Annotations.Info.PointSingular, challenge.PointsAwarded]
                    : _sharedLocalizer[Annotations.Info.PointsPlural, challenge.PointsAwarded],
                TaskCountAndDescription = challenge.TasksToComplete == 1
                    ? _sharedLocalizer[Annotations.Info.TaskSingular, challenge.TasksToComplete]
                    : _sharedLocalizer[Annotations.Info.TasksPlural, challenge.TasksToComplete]
            };

            var siteUrl = await _siteService.GetBaseUrl(Request.Scheme, Request.Host.Value);

            foreach (var task in challenge.Tasks)
            {
                var taskModel = new TaskDetailViewModel
                {
                    Id          = task.Id,
                    IsCompleted = task.IsCompleted ?? false,
                    TaskType    = task.ChallengeTaskType.ToString(),
                    Url         = task.Url,
                    Title       = task.Title,
                    Author      = task.Author
                };
                if (taskModel.TaskType != "Book")
                {
                    taskModel.Description = CommonMark.CommonMarkConverter.Convert(task.Title);
                }
                if (!string.IsNullOrWhiteSpace(task.Filename))
                {
                    var contentPath = _pathResolver.ResolveContentPath(task.Filename);
                    taskModel.FilePath = $"{siteUrl}/{contentPath}";
                }
                viewModel.Tasks.Add(taskModel);
            }
            PageTitle = _sharedLocalizer[Annotations.Title.ChallengeDetails, challenge.Name];
            return(View(viewModel));
        }