public async override Task <ActionResult> Index(ContentModel contentModel) { if (contentModel is null) { throw new System.ArgumentNullException(nameof(contentModel)); } var model = new MatchLocationViewModel(contentModel.Content, Services?.UserService) { MatchLocation = await _matchLocationDataSource.ReadMatchLocationByRoute(Request.RawUrl, false).ConfigureAwait(false), GoogleMapsApiKey = _apiKeyProvider.GetApiKey("GoogleMaps") }; if (model.MatchLocation == null) { return(new HttpNotFoundResult()); } else { model.IsAuthorized = _authorizationPolicy.IsAuthorized(model.MatchLocation); model.Metadata.PageTitle = "Edit " + model.MatchLocation.NameAndLocalityOrTown(); model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.MatchLocations, Url = new Uri(Constants.Pages.MatchLocationsUrl, UriKind.Relative) }); model.Breadcrumbs.Add(new Breadcrumb { Name = model.MatchLocation.NameAndLocalityOrTownIfDifferent(), Url = new Uri(model.MatchLocation.MatchLocationRoute, UriKind.Relative) }); return(CurrentTemplate(model)); } }
public async Task <ActionResult> UpdateMatchLocation([Bind(Prefix = "MatchLocation", Include = "SecondaryAddressableObjectName,PrimaryAddressableObjectName,StreetDescription,Locality,Town,AdministrativeArea,Postcode,GeoPrecision,Latitude,Longitude")] MatchLocation location) { if (location is null) { throw new System.ArgumentNullException(nameof(location)); } var beforeUpdate = await _matchLocationDataSource.ReadMatchLocationByRoute(Request.RawUrl).ConfigureAwait(false); location.MatchLocationId = beforeUpdate.MatchLocationId; location.MatchLocationRoute = beforeUpdate.MatchLocationRoute; // get this from the unvalidated form instead of via modelbinding so that HTML can be allowed location.MatchLocationNotes = Request.Unvalidated.Form["MatchLocation.MatchLocationNotes"]; var isAuthorized = _authorizationPolicy.IsAuthorized(beforeUpdate); if (isAuthorized[AuthorizedAction.EditMatchLocation] && ModelState.IsValid) { var currentMember = Members.GetCurrentMember(); var updatedMatchLocation = await _matchLocationRepository.UpdateMatchLocation(location, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.MatchLocationsCacheKeyPrefix); return(Redirect(updatedMatchLocation.MatchLocationRoute + "/edit")); } var viewModel = new MatchLocationViewModel(CurrentPage, Services.UserService) { MatchLocation = location, }; viewModel.IsAuthorized = isAuthorized; viewModel.Metadata.PageTitle = $"Edit {location.NameAndLocalityOrTown()}"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.MatchLocations, Url = new Uri(Constants.Pages.MatchLocationsUrl, UriKind.Relative) }); viewModel.Breadcrumbs.Add(new Breadcrumb { Name = viewModel.MatchLocation.NameAndLocalityOrTownIfDifferent(), Url = new Uri(viewModel.MatchLocation.MatchLocationRoute, UriKind.Relative) }); return(View("EditMatchLocation", viewModel)); }
public async override Task <ActionResult> Index(ContentModel contentModel) { if (contentModel is null) { throw new ArgumentNullException(nameof(contentModel)); } var location = await _matchLocationDataSource.ReadMatchLocationByRoute(Request.RawUrl, false).ConfigureAwait(false); if (location == null) { return(new HttpNotFoundResult()); } else { var filter = _matchFilterFactory.MatchesForMatchLocation(location.MatchLocationId.Value); var model = new MatchLocationViewModel(contentModel.Content, Services?.UserService) { MatchLocation = location, DefaultMatchFilter = filter.filter, Matches = new MatchListingViewModel(contentModel.Content, Services?.UserService) { DateTimeFormatter = _dateFormatter }, }; model.AppliedMatchFilter = _matchFilterQueryStringParser.ParseQueryString(model.DefaultMatchFilter, HttpUtility.ParseQueryString(Request.Url.Query)); model.Matches.Matches = await _matchDataSource.ReadMatchListings(model.AppliedMatchFilter, filter.sortOrder).ConfigureAwait(false); model.IsAuthorized = _authorizationPolicy.IsAuthorized(model.MatchLocation); var userFilter = _matchFilterHumanizer.MatchingFilter(model.AppliedMatchFilter); if (!string.IsNullOrWhiteSpace(userFilter)) { model.FilterDescription = _matchFilterHumanizer.MatchesAndTournaments(model.AppliedMatchFilter) + userFilter; } model.Metadata.PageTitle = $"{_matchFilterHumanizer.MatchesAndTournaments(model.AppliedMatchFilter)} at {model.MatchLocation.NameAndLocalityOrTownIfDifferent()}{userFilter}"; model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.MatchLocations, Url = new Uri(Constants.Pages.MatchLocationsUrl, UriKind.Relative) }); return(CurrentTemplate(model)); } }
public override Task <ActionResult> Index(ContentModel contentModel) { if (contentModel is null) { throw new System.ArgumentNullException(nameof(contentModel)); } var model = new MatchLocationViewModel(contentModel.Content, Services?.UserService) { MatchLocation = new MatchLocation(), GoogleMapsApiKey = _apiKeyProvider.GetApiKey("GoogleMaps") }; model.IsAuthorized = _authorizationPolicy.IsAuthorized(model.MatchLocation); model.Metadata.PageTitle = "Add a ground or sports centre"; model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.MatchLocations, Url = new Uri(Constants.Pages.MatchLocationsUrl, UriKind.Relative) }); return(Task.FromResult(CurrentTemplate(model))); }
public async Task <ActionResult> CreateMatchLocation([Bind(Prefix = "MatchLocation", Include = "SecondaryAddressableObjectName,PrimaryAddressableObjectName,StreetDescription,Locality,Town,AdministrativeArea,Postcode,GeoPrecision,Latitude,Longitude")] MatchLocation location) { if (location is null) { throw new System.ArgumentNullException(nameof(location)); } // get this from the unvalidated form instead of via modelbinding so that HTML can be allowed location.MatchLocationNotes = Request.Unvalidated.Form["MatchLocation.MatchLocationNotes"]; var isAuthorized = _authorizationPolicy.IsAuthorized(location); if (isAuthorized[AuthorizedAction.CreateMatchLocation] && ModelState.IsValid) { // Create an owner group var groupName = _routeGenerator.GenerateRoute("location", location.NameAndLocalityOrTownIfDifferent(), NoiseWords.MatchLocationRoute); IMemberGroup group; do { group = Services.MemberGroupService.GetByName(groupName); if (group == null) { group = new MemberGroup { Name = groupName }; Services.MemberGroupService.Save(group); location.MemberGroupKey = group.Key; location.MemberGroupName = group.Name; break; } else { groupName = _routeGenerator.IncrementRoute(groupName); } }while (group != null); // Assign the current member to the group unless they're already admin var currentMember = Members.GetCurrentMember(); if (!Members.IsMemberAuthorized(null, new[] { Groups.Administrators }, null)) { Services.MemberService.AssignRole(currentMember.Id, group.Name); } // Create the location var createdMatchLocation = await _matchLocationRepository.CreateMatchLocation(location, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.MatchLocationsCacheKeyPrefix); // Redirect to the location return(Redirect(createdMatchLocation.MatchLocationRoute)); } var viewModel = new MatchLocationViewModel(CurrentPage, Services.UserService) { MatchLocation = location, }; viewModel.IsAuthorized = isAuthorized; viewModel.Metadata.PageTitle = $"Add a ground or sports centre"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.MatchLocations, Url = new Uri(Constants.Pages.MatchLocationsUrl, UriKind.Relative) }); return(View("CreateMatchLocation", viewModel)); }