public async Task <IActionResult> Edit(int id) { var site = await GetCurrentSiteAsync(); var siteUrl = await _siteService.GetBaseUrl(Request.Scheme, Request.Host.Value); Challenge challenge = new Challenge(); try { challenge = await _challengeService.MCGetChallengeDetailsAsync(id); if (TempData.ContainsKey(TempEditChallenge)) { var storedChallenge = Newtonsoft.Json.JsonConvert .DeserializeObject <Challenge>((string)TempData[TempEditChallenge]); challenge.Name = storedChallenge.Name; challenge.Description = storedChallenge.Description; challenge.PointsAwarded = storedChallenge.PointsAwarded; challenge.TasksToComplete = storedChallenge.TasksToComplete; challenge.LimitToSystemId = storedChallenge.LimitToSystemId; challenge.LimitToBranchId = storedChallenge.LimitToBranchId; challenge.LimitToProgramId = storedChallenge.LimitToProgramId; } } catch (GraException gex) { ShowAlertWarning("Unable to view challenge: ", gex); return(RedirectToAction("Index")); } if (challenge.TasksToComplete > challenge.Tasks.Count()) { AlertInfo = "The challenge does not have enough tasks to be completable"; } bool canActivate = challenge.IsValid && !challenge.IsActive && (UserHasPermission(Permission.ActivateAllChallenges) || (UserHasPermission(Permission.ActivateSystemChallenges) && challenge.RelatedSystemId == GetId(ClaimType.SystemId))); ChallengesDetailViewModel viewModel = new ChallengesDetailViewModel() { Challenge = challenge, TaskTypes = Enum.GetNames(typeof(ChallengeTaskType)) .Select(m => new SelectListItem { Text = m, Value = m }).ToList(), CanActivate = canActivate, CanViewTriggers = UserHasPermission(Permission.ManageTriggers), DependentTriggers = await _challengeService.GetDependentsAsync(challenge.Id), BadgeMakerUrl = GetBadgeMakerUrl(siteUrl, site.FromEmailAddress), UseBadgeMaker = true }; if (site.MaxPointsPerChallengeTask.HasValue) { viewModel.MaxPointsMessage = $"(Up to {site.MaxPointsPerChallengeTask.Value} points per required task)"; } if (challenge.BadgeId != null) { var challengeBadge = await _badgeService.GetByIdAsync((int)challenge.BadgeId); if (challengeBadge != null) { viewModel.BadgePath = _pathResolver.ResolveContentPath(challengeBadge.Filename); } } if (TempData.ContainsKey(NewTask)) { TempData.Remove(NewTask); TempData.Remove(EditTask); viewModel.AddTask = true; } else if (TempData.ContainsKey(EditTask)) { viewModel.Task = await _challengeService .GetTaskAsync((int)TempData[EditTask]); } PageTitle = $"Edit Challenge - {viewModel.Challenge.Name}"; viewModel = await GetDetailLists(viewModel); return(View("Edit", viewModel)); }
public async Task <IActionResult> Edit(int id) { var site = await GetCurrentSiteAsync(); var siteUrl = await _siteService.GetBaseUrl(Request.Scheme, Request.Host.Value); Challenge challenge; try { challenge = await _challengeService.MCGetChallengeDetailsAsync(id); foreach (var task in challenge.Tasks) { if (task.ChallengeTaskType == ChallengeTaskType.Action) { task.Description = CommonMark.CommonMarkConverter.Convert(task.Title); } if (!string.IsNullOrWhiteSpace(task.Filename)) { var contentPath = _pathResolver.ResolveContentPath(task.Filename); task.Filename = $"{siteUrl}/{contentPath}"; } } if (TempData.ContainsKey(TempEditChallenge)) { var storedChallenge = Newtonsoft.Json.JsonConvert .DeserializeObject <Challenge>((string)TempData[TempEditChallenge]); challenge.Name = storedChallenge.Name; challenge.Description = storedChallenge.Description; challenge.PointsAwarded = storedChallenge.PointsAwarded; challenge.TasksToComplete = storedChallenge.TasksToComplete; challenge.LimitToSystemId = storedChallenge.LimitToSystemId; challenge.LimitToBranchId = storedChallenge.LimitToBranchId; challenge.AssociatedProgramId = storedChallenge.AssociatedProgramId; challenge.CategoryIds = storedChallenge.CategoryIds; } else { challenge.CategoryIds = challenge.Categories.Select(_ => _.Id).ToList(); } } catch (GraException gex) { ShowAlertWarning("Unable to view challenge: ", gex); return(RedirectToAction("Index")); } if (challenge.TasksToComplete > challenge.Tasks.Count()) { AlertInfo = "The challenge does not have enough tasks to be completable"; } bool canActivate = challenge.IsValid && !challenge.IsActive && (UserHasPermission(Permission.ActivateAllChallenges) || (UserHasPermission(Permission.ActivateSystemChallenges) && challenge.RelatedSystemId == GetId(ClaimType.SystemId))); var viewModel = new ChallengesDetailViewModel { Challenge = challenge, CanActivate = canActivate, CanEditGroups = UserHasPermission(Permission.EditChallengeGroups), CanManageEvents = UserHasPermission(Permission.ManageEvents), CanViewParticipants = UserHasPermission(Permission.ViewParticipantDetails), CanViewTriggers = UserHasPermission(Permission.ManageTriggers), CreatedByName = await _userService.GetUsersNameByIdAsync(challenge.CreatedBy), DependentTriggers = await _challengeService.GetDependentsAsync(challenge.Id), Groups = await _challengeService.GetGroupsByChallengeId(challenge.Id), RelatedEvents = await _eventService.GetByChallengeIdAsync(challenge.Id), BadgeMakerUrl = GetBadgeMakerUrl(siteUrl, site.FromEmailAddress), UseBadgeMaker = true, IgnorePointLimits = UserHasPermission(Permission.IgnorePointLimits), MaxPointLimit = await _challengeService.GetMaximumAllowedPointsAsync(site.Id) }; if (viewModel.MaxPointLimit.HasValue) { viewModel.MaxPointsMessage = $"(Up to {viewModel.MaxPointLimit.Value} points per required task)"; } if (challenge.TasksToComplete.HasValue && viewModel.MaxPointLimit.HasValue) { double pointsPerChallenge = (double)viewModel.Challenge.PointsAwarded / viewModel.Challenge.TasksToComplete.Value; if (pointsPerChallenge > viewModel.MaxPointLimit) { viewModel.MaxPointsWarningMessage = $"This Challenge exceeds the maximum of {viewModel.MaxPointLimit.Value} points per required task - only Administrators can edit it."; } } if (challenge.BadgeId != null) { var challengeBadge = await _badgeService.GetByIdAsync((int)challenge.BadgeId); if (challengeBadge != null) { viewModel.BadgePath = _pathResolver.ResolveContentPath(challengeBadge.Filename); } } if (TempData.ContainsKey(NewTask)) { TempData.Remove(NewTask); TempData.Remove(EditTask); viewModel.AddTask = true; } else if (TempData.ContainsKey(EditTask)) { viewModel.Task = await _challengeService .GetTaskAsync((int)TempData[EditTask]); if (!string.IsNullOrWhiteSpace(viewModel.Task.Filename)) { var contentPath = _pathResolver.ResolveContentPath(viewModel.Task.Filename); viewModel.TaskFilePath = $"{siteUrl}/{contentPath}"; } } PageTitle = $"Edit Challenge - {viewModel.Challenge.Name}"; viewModel = await GetDetailLists(viewModel); return(View("Edit", viewModel)); }