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