public SecurityGroup CreateOrFindGroup(string groupNamePrefix, string suggestedGroupName, IEnumerable <string> noiseWords) { var groupName = _routeGenerator.GenerateRoute(groupNamePrefix, suggestedGroupName, noiseWords); IMemberGroup group; do { group = _memberGroupService.GetByName(groupName); if (group == null) { group = new MemberGroup { Name = groupName }; _memberGroupService.Save(group); break; } else { groupName = _routeGenerator.IncrementRoute(groupName); } }while (group != null); return(new SecurityGroup { Key = group.Key, Name = group.Name }); }
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)); }
public async Task <ActionResult> CreateClub([Bind(Prefix = "Club", Include = "ClubName,Teams")] Club club) { if (club is null) { throw new System.ArgumentNullException(nameof(club)); } // We're not interested in validating the details of the selected teams foreach (var key in ModelState.Keys.Where(x => x.StartsWith("Club.Teams", StringComparison.OrdinalIgnoreCase))) { ModelState[key].Errors.Clear(); } var isAuthorized = _authorizationPolicy.IsAuthorized(club); if (isAuthorized[AuthorizedAction.CreateClub] && ModelState.IsValid) { // Create an owner group var groupName = _routeGenerator.GenerateRoute("club", club.ClubName, NoiseWords.ClubRoute); IMemberGroup group; do { group = Services.MemberGroupService.GetByName(groupName); if (group == null) { group = new MemberGroup { Name = groupName }; Services.MemberGroupService.Save(group); club.MemberGroupKey = group.Key; club.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 club var createdClub = await _clubRepository.CreateClub(club, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.TeamListingsCacheKeyPrefix); // Redirect to the club return(Redirect(createdClub.ClubRoute)); } var viewModel = new ClubViewModel(CurrentPage, Services.UserService) { Club = club, }; viewModel.IsAuthorized = isAuthorized; viewModel.Metadata.PageTitle = $"Add a club"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Teams, Url = new Uri(Constants.Pages.TeamsUrl, UriKind.Relative) }); return(View("CreateClub", viewModel)); }
public async Task <ActionResult> CreateCompetition([Bind(Prefix = "Competition", Include = "CompetitionName,UntilYear,PlayerType,Facebook,Twitter,Instagram,YouTube,Website")] Competition competition) { if (competition is null) { throw new System.ArgumentNullException(nameof(competition)); } // get this from the unvalidated form instead of via modelbinding so that HTML can be allowed competition.Introduction = Request.Unvalidated.Form["Competition.Introduction"]; competition.PublicContactDetails = Request.Unvalidated.Form["Competition.PublicContactDetails"]; competition.PrivateContactDetails = Request.Unvalidated.Form["Competition.PrivateContactDetails"]; var isAuthorized = _authorizationPolicy.IsAuthorized(competition); if (isAuthorized[AuthorizedAction.CreateCompetition] && ModelState.IsValid) { // Create an owner group var groupName = _routeGenerator.GenerateRoute("competition", competition.CompetitionName, NoiseWords.CompetitionRoute); IMemberGroup group; do { group = Services.MemberGroupService.GetByName(groupName); if (group == null) { group = new MemberGroup { Name = groupName }; Services.MemberGroupService.Save(group); competition.MemberGroupKey = group.Key; competition.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 competition var createdCompetition = await _competitionRepository.CreateCompetition(competition, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.CompetitionsPolicyCacheKeyPrefix); // Redirect to the competition return(Redirect(createdCompetition.CompetitionRoute)); } var viewModel = new CompetitionViewModel(CurrentPage, Services.UserService) { Competition = competition, }; viewModel.IsAuthorized = isAuthorized; viewModel.Metadata.PageTitle = $"Add a competition"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Competitions, Url = new Uri(Constants.Pages.CompetitionsUrl, UriKind.Relative) }); return(View("CreateCompetition", viewModel)); }