public async Task <IActionResult> Create(int?id) { PageTitle = "Create Event"; var branchList = await _siteService.GetBranches(GetId(ClaimType.SystemId)); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); EventsDetailViewModel viewModel = new EventsDetailViewModel() { CanManageLocations = UserHasPermission(Permission.ManageLocations), BranchList = new SelectList(branchList, "Id", "Name"), LocationList = new SelectList(locationList, "Id", "Name"), ProgramList = new SelectList(programList, "Id", "Name") }; if (id.HasValue) { var graEvent = await _eventService.GetDetails(id.Value); if (!graEvent.ParentEventId.HasValue) { graEvent.ParentEventId = graEvent.Id; } viewModel.Event = graEvent; } return(View(viewModel)); }
public async Task <IActionResult> GetDetails(int eventId) { try { var viewModel = new EventsDetailViewModel { IsAuthenticated = AuthUser.Identity.IsAuthenticated, Event = await _eventService.GetDetails(eventId) }; if (viewModel.Event.ProgramId.HasValue) { var program = await _siteService.GetProgramByIdAsync(viewModel.Event.ProgramId.Value); viewModel.ProgramString = _sharedLocalizer[Annotations.Info.EventLimitedToProgram, program.Name]; } return(PartialView("_DetailPartial", viewModel)); } catch (GraException gex) { Response.StatusCode = (int)HttpStatusCode.NotFound; return(Content(gex.Message)); } }
public async Task <IActionResult> Detail(int id) { var site = await GetCurrentSiteAsync(); if (!string.IsNullOrEmpty(site.ExternalEventListUrl)) { return(new RedirectResult(site.ExternalEventListUrl)); } try { var viewModel = new EventsDetailViewModel { IsAuthenticated = AuthUser.Identity.IsAuthenticated, Event = await _eventService.GetDetails(id) }; PageTitle = _sharedLocalizer[Annotations.Interface.DateAtTime, viewModel.Event.Name, viewModel.Event.EventLocationName]; if (!string.IsNullOrEmpty(viewModel.Event.EventLocationName) && !string.IsNullOrEmpty(viewModel.Event.EventLocationAddress)) { viewModel.ShowStructuredData = true; if (viewModel.Event.AllDay) { viewModel.EventStart = viewModel.Event.StartDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } else { viewModel.EventStart = viewModel.Event.StartDate.ToString("s", CultureInfo.InvariantCulture); if (viewModel.Event.EndDate != null) { var endDate = (DateTime)viewModel.Event.EndDate; viewModel.EventEnd = endDate.ToString("s", CultureInfo.InvariantCulture); } } } if (viewModel.Event.ProgramId.HasValue) { var program = await _siteService.GetProgramByIdAsync(viewModel.Event.ProgramId.Value); viewModel.ProgramString = _sharedLocalizer[Annotations.Info.EventLimitedToProgram, program.Name]; } return(View(viewModel)); } catch (GraException gex) { ShowAlertWarning(gex.Message); return(await Index(httpStatus : HttpStatusCode.NotFound)); } }
public async Task <IActionResult> Create(EventsDetailViewModel model) { if (model.UseLocation && !model.Event.AtLocationId.HasValue) { ModelState.AddModelError("Event.AtLocationId", "The At Location field is required."); } if (!model.UseLocation && !model.Event.AtBranchId.HasValue) { ModelState.AddModelError("Event.AtBranchId", "The At Branch field is required."); } if (ModelState.IsValid) { try { if (!string.IsNullOrWhiteSpace(model.Event.ExternalLink)) { model.Event.ExternalLink = new UriBuilder( model.Event.ExternalLink).Uri.AbsoluteUri; } var graEvent = model.Event; if (model.UseLocation) { graEvent.AtBranchId = null; } else { graEvent.AtLocationId = null; } graEvent.IsActive = true; graEvent.IsValid = true; await _eventService.Add(graEvent); ShowAlertSuccess($"Event '{graEvent.Name}' created."); return(RedirectToAction("Index")); } catch (GraException gex) { ShowAlertWarning("Could not create event: ", gex.Message); } } PageTitle = "Create Event"; var branchList = await _siteService.GetBranches(GetId(ClaimType.SystemId)); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); model.BranchList = new SelectList(branchList, "Id", "Name"); model.LocationList = new SelectList(locationList, "Id", "Name"); model.ProgramList = new SelectList(programList, "Id", "Name"); return(View(model)); }
public async Task<IActionResult> GetDetails(int eventId) { EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = await _eventService.GetDetails(eventId) }; if (viewModel.Event.ProgramId.HasValue) { var program = await _siteService.GetProgramByIdAsync(viewModel.Event.ProgramId.Value); viewModel.ProgramString = $"This event is limited to the {program.Name} program."; } return PartialView("_DetailPartial", viewModel); }
public async Task <IActionResult> Detail(int id) { try { EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = await _eventService.GetDetails(id) }; PageTitle = $"{viewModel.Event.Name} @ {viewModel.Event.EventLocationName}"; if (!string.IsNullOrEmpty(viewModel.Event.EventLocationName) && !string.IsNullOrEmpty(viewModel.Event.EventLocationAddress)) { viewModel.ShowStructuredData = true; if (viewModel.Event.AllDay == true) { viewModel.EventStart = viewModel.Event.StartDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } else { viewModel.EventStart = viewModel.Event.StartDate.ToString("s", CultureInfo.InvariantCulture); if (viewModel.Event.EndDate != null) { var endDate = (DateTime)viewModel.Event.EndDate; viewModel.EventEnd = endDate.ToString("s", CultureInfo.InvariantCulture); } } } if (viewModel.Event.ProgramId.HasValue) { var program = await _siteService.GetProgramByIdAsync(viewModel.Event.ProgramId.Value); viewModel.ProgramString = $"This event is limited to the {program.Name} program."; } return(View(viewModel)); } catch (GraException gex) { ShowAlertWarning("Unable to view event: ", gex); return(RedirectToAction("Index")); } }
public async Task <IActionResult> Edit(int id) { PageTitle = "Edit Event"; var graEvent = await _eventService.GetDetails(id); var systemList = await _siteService.GetSystemList(true); var branchList = await _siteService.GetBranches(GetId(ClaimType.SystemId)); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = graEvent, UseLocation = graEvent.AtLocationId.HasValue, CanAddSecretCode = UserHasPermission(Permission.ManageTriggers), CanManageLocations = UserHasPermission(Permission.ManageLocations), SystemList = new SelectList(systemList, "Id", "Name"), BranchList = new SelectList(branchList, "Id", "Name"), LocationList = new SelectList(locationList, "Id", "Name"), ProgramList = new SelectList(programList, "Id", "Name") }; if (graEvent.AtBranchId.HasValue) { var branch = await _siteService.GetBranchByIdAsync(graEvent.AtBranchId.Value); viewModel.SystemId = branch.SystemId; viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } else { viewModel.SystemId = GetId(ClaimType.SystemId); viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } return(View(viewModel)); }
public async Task <IActionResult> GetDetails(int eventId) { try { EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = await _eventService.GetDetails(eventId) }; if (viewModel.Event.ProgramId.HasValue) { var program = await _siteService.GetProgramByIdAsync(viewModel.Event.ProgramId.Value); viewModel.ProgramString = $"This event is limited to the {program.Name} program."; } return(PartialView("_DetailPartial", viewModel)); } catch (GraException gex) { Response.StatusCode = (int)HttpStatusCode.NotFound; return(Content($"Unable to view event: {gex.Message}")); } }
public async Task <IActionResult> Detail(int id) { try { EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = await _eventService.GetDetails(id) }; if (viewModel.Event.ProgramId.HasValue) { var program = await _siteService.GetProgramByIdAsync(viewModel.Event.ProgramId.Value); viewModel.ProgramString = $"This event is limited to the {program.Name} program."; } return(View(viewModel)); } catch (GraException gex) { ShowAlertWarning("Unable to view event: ", gex); return(RedirectToAction("Index")); } }
public async Task <IActionResult> Edit(int id) { PageTitle = "Edit Event"; var graEvent = await _eventService.GetDetails(id); var branchList = await _siteService.GetBranches(GetId(ClaimType.SystemId)); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = graEvent, UseLocation = graEvent.AtLocationId.HasValue, CanManageLocations = UserHasPermission(Permission.ManageLocations), BranchList = new SelectList(branchList, "Id", "Name"), LocationList = new SelectList(locationList, "Id", "Name"), ProgramList = new SelectList(programList, "Id", "Name") }; return(View(viewModel)); }
public async Task <IActionResult> Edit(EventsDetailViewModel model) { if (model.Event.AllDay) { if (model.Event.EndDate.HasValue && model.Event.StartDate > model.Event.EndDate) { ModelState.AddModelError("Event.EndDate", "The End date cannot be before the Start date"); } } else { if (model.Event.EndDate.HasValue && model.Event.StartDate.TimeOfDay > model.Event.EndDate.Value.TimeOfDay) { ModelState.AddModelError("Event.EndDate", "The End time cannot be before the Start time"); } } if (model.UseLocation && !model.Event.AtLocationId.HasValue) { ModelState.AddModelError("Event.AtLocationId", "The At Location field is required."); } if (!model.UseLocation && !model.Event.AtBranchId.HasValue) { ModelState.AddModelError("Event.AtBranchId", "The At Branch field is required."); } if (!string.IsNullOrWhiteSpace(model.Event.ExternalLink)) { try { model.Event.ExternalLink = new UriBuilder( model.Event.ExternalLink).Uri.AbsoluteUri; } catch (Exception) { ModelState.AddModelError("Event.ExternalLink", "Invalid URL"); } } ModelState.Remove(nameof(model.SecretCode)); ModelState.Remove(nameof(model.AwardMessage)); ModelState.Remove(nameof(model.AwardPoints)); if (ModelState.IsValid) { try { if (model.Event.ChallengeId.HasValue) { model.Event.ChallengeGroupId = null; } if (model.Event.AllDay) { model.Event.StartDate = model.Event.StartDate.Date; if (model.Event.EndDate.HasValue) { if (model.Event.EndDate.Value.Date == model.Event.StartDate.Date) { model.Event.EndDate = null; } else { model.Event.EndDate = model.Event.EndDate.Value.Date; } } } else { if (model.Event.EndDate.HasValue) { if (model.Event.EndDate.Value.TimeOfDay == model.Event.StartDate.TimeOfDay) { model.Event.EndDate = null; } else { model.Event.EndDate = model.Event.StartDate.Date + model.Event.EndDate.Value.TimeOfDay; } } } var graEvent = model.Event; if (model.UseLocation) { graEvent.AtBranchId = null; } else { graEvent.AtLocationId = null; } await _eventService.Edit(graEvent); ShowAlertSuccess($"Event '{graEvent.Name}' edited."); if (graEvent.IsCommunityExperience) { return(RedirectToAction("CommunityExperiences")); } return(RedirectToAction("Index")); } catch (GraException gex) { ShowAlertWarning("Could not edit event: ", gex.Message); } } PageTitle = "Edit Event"; model.Event = await _eventService.GetRelatedChallengeDetails(model.Event, true); var systemList = await _siteService.GetSystemList(true); var branchList = await _siteService.GetBranches(model.SystemId, true); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); model.SystemList = new SelectList(systemList, "Id", "Name"); model.BranchList = new SelectList(branchList, "Id", "Name"); model.LocationList = new SelectList(locationList, "Id", "Name"); model.ProgramList = new SelectList(programList, "Id", "Name"); return(View(model)); }
public async Task <IActionResult> Edit(int id) { try { var graEvent = await _eventService.GetDetails(id, true); PageTitle = graEvent.IsCommunityExperience ? "Edit Community Experience" : "Edit Event"; var systemList = await _siteService.GetSystemList(true); var branchList = await _siteService.GetBranches(GetId(ClaimType.SystemId)); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); EventsDetailViewModel viewModel = new EventsDetailViewModel() { Event = graEvent, UseLocation = graEvent.AtLocationId.HasValue, CanAddSecretCode = UserHasPermission(Permission.ManageTriggers), CanEditGroups = UserHasPermission(Permission.EditChallengeGroups), CanManageLocations = UserHasPermission(Permission.ManageLocations), CanRelateChallenge = UserHasPermission(Permission.ViewAllChallenges), SystemList = new SelectList(systemList, "Id", "Name"), BranchList = new SelectList(branchList, "Id", "Name"), LocationList = new SelectList(locationList, "Id", "Name"), ProgramList = new SelectList(programList, "Id", "Name") }; if (graEvent.AtBranchId.HasValue) { var branch = await _siteService.GetBranchByIdAsync(graEvent.AtBranchId.Value); viewModel.SystemId = branch.SystemId; viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } else { viewModel.SystemId = GetId(ClaimType.SystemId); viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } if (graEvent.Challenge?.BadgeId != null) { var badge = await _badgeService.GetByIdAsync(graEvent.Challenge.BadgeId.Value); graEvent.Challenge.BadgeFilename = _pathResolver .ResolveContentPath(badge.Filename); } return(View(viewModel)); } catch (GraException gex) { ShowAlertWarning("Unable to view event/community experience: ", gex); return(RedirectToAction("Index")); } }
public async Task <IActionResult> Create(EventsDetailViewModel model) { var requireSecretCode = await GetSiteSettingBoolAsync( SiteSettingKey.Events.RequireBadge); if (model.Event.AllDay) { if (model.Event.EndDate.HasValue && model.Event.StartDate > model.Event.EndDate) { ModelState.AddModelError("Event.EndDate", "The End date cannot be before the Start date"); } } else { if (model.Event.EndDate.HasValue && model.Event.StartDate.TimeOfDay > model.Event.EndDate.Value.TimeOfDay) { ModelState.AddModelError("Event.EndDate", "The End time cannot be before the Start time"); } } if (model.UseLocation && !model.Event.AtLocationId.HasValue) { ModelState.AddModelError("Event.AtLocationId", "The At Location field is required."); } if (!model.UseLocation && !model.Event.AtBranchId.HasValue) { ModelState.AddModelError("Event.AtBranchId", "The At Branch field is required."); } if (model.IncludeSecretCode || requireSecretCode) { if (string.IsNullOrWhiteSpace(model.BadgeMakerImage) && model.BadgeUploadImage == null) { ModelState.AddModelError("BadgemakerImage", "A badge is required."); } else if (model.BadgeUploadImage != null && (string.IsNullOrWhiteSpace(model.BadgeMakerImage) || !model.UseBadgeMaker) && (Path.GetExtension(model.BadgeUploadImage.FileName).ToLower() != ".jpg" && Path.GetExtension(model.BadgeUploadImage.FileName).ToLower() != ".jpeg" && Path.GetExtension(model.BadgeUploadImage.FileName).ToLower() != ".png")) { ModelState.AddModelError("BadgeUploadImage", "Please use a .jpg or .png image."); } } else { ModelState.Remove(nameof(model.SecretCode)); ModelState.Remove(nameof(model.AwardMessage)); ModelState.Remove(nameof(model.AwardPoints)); } if (!string.IsNullOrWhiteSpace(model.Event.ExternalLink)) { try { model.Event.ExternalLink = new UriBuilder( model.Event.ExternalLink).Uri.AbsoluteUri; } catch (Exception) { ModelState.AddModelError("Event.ExternalLink", "Invalid URL"); } } if (ModelState.IsValid) { try { if (model.Event.ChallengeId.HasValue) { model.Event.ChallengeGroupId = null; } if (model.Event.AllDay) { model.Event.StartDate = model.Event.StartDate.Date; if (model.Event.EndDate.HasValue) { if (model.Event.EndDate.Value.Date == model.Event.StartDate.Date) { model.Event.EndDate = null; } else { model.Event.EndDate = model.Event.EndDate.Value.Date; } } } else { if (model.Event.EndDate.HasValue) { if (model.Event.EndDate.Value.TimeOfDay == model.Event.StartDate.TimeOfDay) { model.Event.EndDate = null; } else { model.Event.EndDate = model.Event.StartDate.Date + model.Event.EndDate.Value.TimeOfDay; } } } int?triggerId = null; if (model.IncludeSecretCode) { byte[] badgeBytes; string filename; if (!string.IsNullOrWhiteSpace(model.BadgeMakerImage) && (model.BadgeUploadImage == null || model.UseBadgeMaker)) { var badgeString = model.BadgeMakerImage.Split(',').Last(); badgeBytes = Convert.FromBase64String(badgeString); filename = "badge.png"; } else { using (var fileStream = model.BadgeUploadImage.OpenReadStream()) { using (var ms = new MemoryStream()) { fileStream.CopyTo(ms); badgeBytes = ms.ToArray(); } } filename = Path.GetFileName(model.BadgeUploadImage.FileName); } Badge newBadge = new Badge() { Filename = filename }; var badge = await _badgeService.AddBadgeAsync(newBadge, badgeBytes); Trigger trigger = new Trigger { Name = $"Event '{model.Event.Name}' code", SecretCode = model.SecretCode, AwardMessage = model.AwardMessage, AwardPoints = model.AwardPoints, AwardBadgeId = badge.Id, }; triggerId = (await _triggerService.AddAsync(trigger)).Id; } var graEvent = model.Event; if (model.UseLocation) { graEvent.AtBranchId = null; } else { graEvent.AtLocationId = null; } graEvent.IsActive = true; graEvent.IsValid = true; if (triggerId.HasValue) { graEvent.RelatedTriggerId = triggerId; } await _eventService.Add(graEvent); ShowAlertSuccess($"Event '{graEvent.Name}' created."); if (graEvent.IsCommunityExperience) { return(RedirectToAction("CommunityExperiences")); } return(RedirectToAction("Index")); } catch (GraException gex) { ShowAlertWarning("Could not create event: ", gex.Message); } } PageTitle = "Create Event"; var systemList = await _siteService.GetSystemList(true); var branchList = await _siteService.GetBranches(model.SystemId, true); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); model.SystemList = new SelectList(systemList, "Id", "Name"); model.BranchList = new SelectList(branchList, "Id", "Name"); model.LocationList = new SelectList(locationList, "Id", "Name"); model.ProgramList = new SelectList(programList, "Id", "Name"); model.RequireSecretCode = requireSecretCode; return(View(model)); }
public async Task <IActionResult> Create(int?id, bool communityExperience = false) { PageTitle = communityExperience == true ? "Create Community Experience" : "Create Event"; var requireSecretCode = await GetSiteSettingBoolAsync( SiteSettingKey.Events.RequireBadge); var systemList = await _siteService.GetSystemList(true); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); EventsDetailViewModel viewModel = new EventsDetailViewModel() { CanAddSecretCode = requireSecretCode || UserHasPermission(Permission.ManageTriggers), CanManageLocations = UserHasPermission(Permission.ManageLocations), CanRelateChallenge = UserHasPermission(Permission.ViewAllChallenges), SystemList = new SelectList(systemList, "Id", "Name"), LocationList = new SelectList(locationList, "Id", "Name"), ProgramList = new SelectList(programList, "Id", "Name"), IncludeSecretCode = requireSecretCode, RequireSecretCode = requireSecretCode }; if (viewModel.CanAddSecretCode) { var site = await GetCurrentSiteAsync(); var siteUrl = await _siteService.GetBaseUrl(Request.Scheme, Request.Host.Value); viewModel.BadgeMakerUrl = GetBadgeMakerUrl(siteUrl, site.FromEmailAddress); viewModel.UseBadgeMaker = true; } if (id.HasValue) { try { var graEvent = await _eventService.GetDetails(id.Value, viewModel.CanRelateChallenge); if (!graEvent.ParentEventId.HasValue) { graEvent.ParentEventId = graEvent.Id; } viewModel.Event = graEvent; viewModel.Event.RelatedTriggerId = null; if (graEvent.AtBranchId.HasValue) { var branch = await _siteService.GetBranchByIdAsync(graEvent.AtBranchId.Value); viewModel.SystemId = branch.SystemId; viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } } catch (GraException gex) { ShowAlertWarning("Unable to copy event: ", gex); } } if (viewModel.BranchList == null) { viewModel.SystemId = GetId(ClaimType.SystemId); viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } if (communityExperience) { viewModel.NewCommunityExperience = true; viewModel.UseLocation = true; } return(View(viewModel)); }
public async Task <IActionResult> Create(int?id, bool communityExperience = false) { PageTitle = "Create Event"; var systemList = await _siteService.GetSystemList(true); var locationList = await _eventService.GetLocations(); var programList = await _siteService.GetProgramList(); EventsDetailViewModel viewModel = new EventsDetailViewModel() { CanAddSecretCode = UserHasPermission(Permission.ManageTriggers), CanManageLocations = UserHasPermission(Permission.ManageLocations), SystemList = new SelectList(systemList, "Id", "Name"), LocationList = new SelectList(locationList, "Id", "Name"), ProgramList = new SelectList(programList, "Id", "Name") }; if (viewModel.CanAddSecretCode) { var site = await GetCurrentSiteAsync(); var siteUrl = await _siteService.GetBaseUrl(Request.Scheme, Request.Host.Value); viewModel.BadgeMakerUrl = GetBadgeMakerUrl(siteUrl, site.FromEmailAddress); viewModel.UseBadgeMaker = true; } if (id.HasValue) { var graEvent = await _eventService.GetDetails(id.Value); if (!graEvent.ParentEventId.HasValue) { graEvent.ParentEventId = graEvent.Id; } viewModel.Event = graEvent; viewModel.Event.RelatedTriggerId = null; if (graEvent.AtBranchId.HasValue) { var branch = await _siteService.GetBranchByIdAsync(graEvent.AtBranchId.Value); viewModel.SystemId = branch.SystemId; viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } } if (viewModel.BranchList == null) { viewModel.SystemId = GetId(ClaimType.SystemId); viewModel.BranchList = new SelectList(await _siteService .GetBranches(viewModel.SystemId, true), "Id", "Name"); } if (communityExperience) { viewModel.NewCommunityExperience = true; } return(View(viewModel)); }