public ActionResult Uninvite(int user, int theEvent, string returnTo) { //Check if user owns the event and remove the other user from it MeetupModel model = new MeetupModel(); int? infoID = this.UserId(); if (infoID is null) { return(RedirectToAction("Index", "Home")); } Event uninviteToEvent = model.Events.SingleOrDefault(e => e.Id == theEvent && e.HostUserId == infoID); Invite invite = model.Invites.SingleOrDefault(i => i.EventId == theEvent && i.UserId == user); if (uninviteToEvent is null) { return(RedirectToAction("Index", "Home")); } //Remove invite if (!(invite is null)) { model.Invites.Remove(invite); model.SaveChanges(); } return(Redirect(returnTo)); }
public async Task <ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { //find user id MeetupModel meetupModel = new MeetupModel(); List <User> users = meetupModel.Users.ToList(); Random random = new Random(); int randomID; do { randomID = random.Next(0, int.MaxValue); }while(users.Any(userInfo => userInfo.Id == randomID)); //Check picture if (!model.Picture.ContentType.Contains("image")) { ModelState.AddModelError("Picture", "Feltet \"Profil billed\" accepterer kun billeder."); return(View(model)); } string pictureDataString = model.Picture.PictureFileToString(); //add user ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email, InfoId = randomID }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false); Address usersAddress = new Address(model.Address.Country, model.Address.City, Convert.ToInt32(model.Address.CityZipCode), model.Address.StreetName, model.Address.StreetNumber); User newUser = new User(model.FirstName, model.LastName, model.Description, "data:image/png;base64," + pictureDataString, model.Email, usersAddress, randomID); meetupModel.Users.Add(newUser); meetupModel.SaveChanges(); return(RedirectToAction("Profile", "Users", new { Id = randomID })); } AddErrors(result); } // If we got this far, something failed, redisplay form return(View(model)); }
public ActionResult Create(EventEditCreationModel viewModel) { if (!ModelState.IsValid) { return(View("EditCreate", viewModel)); } else { //Get event owner and create event MeetupModel model = new MeetupModel(); int? infoID = this.UserId(); if (infoID is null) { return(RedirectToAction("Index", "Home")); } //get event ID int randomNumber; Random random = new Random(); do { randomNumber = random.Next(0, int.MaxValue); }while(model.Events.Any(e => e.Id == randomNumber)); //Create event Event newEvent = new Event(viewModel.Name, viewModel.Description, model.Users.SingleOrDefault(u => u.Id == infoID.Value), new Address(viewModel.Address.Country, viewModel.Address.City, Convert.ToInt32(viewModel.Address.CityZipCode), viewModel.Address.StreetName, viewModel.Address.StreetNumber), randomNumber); newEvent.BeginningTime = viewModel.Time.Value; //Save event model.Events.Add(newEvent); model.SaveChanges(); return(RedirectToAction("Index")); } }
public ActionResult Leave(LeaveEventModel viewModel) { //Get all the event data and make sure the user is in the event MeetupModel model = new MeetupModel(); int? infoId = this.UserId(); if (infoId is null) { return(RedirectToAction("Index", "Home")); } viewModel.EventInformation = model.Events.SingleOrDefault(e => e.Id == viewModel.EventId && e.Invites.Any(u => u.UserId == infoId)); if (viewModel.EventInformation is null) { return(RedirectToAction("Index", "Home")); } //Remove invite model.Invites.Remove(viewModel.EventInformation.Invites.SingleOrDefault(u => u.UserId == infoId)); model.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Edit(EventEditCreationModel viewModel) { if (!ModelState.IsValid) { viewModel.Editing = true; return(View("EditCreate", viewModel)); } else { MeetupModel model = new MeetupModel(); //Check if user owns the event int?infoID = this.UserId(); if (infoID is null) { return(RedirectToAction("Index", "Home")); } Event editEvent = model.Events.SingleOrDefault(e => e.Id == viewModel.EditingId && e.HostUserId == infoID); if (editEvent is null) { return(RedirectToAction("Index")); } //Fill in the event with the view model editEvent.Name = viewModel.Name; editEvent.Description = viewModel.Description; editEvent.BeginningTime = viewModel.Time.Value; editEvent.Address.CityName = viewModel.Address.City; editEvent.Address.Country = viewModel.Address.Country; editEvent.Address.StreetName = viewModel.Address.StreetName; editEvent.Address.StreetNumber = viewModel.Address.StreetNumber; editEvent.Address.ZipCode = Convert.ToInt32(viewModel.Address.CityZipCode); model.SaveChanges(); return(RedirectToAction("Page", new { eventId = viewModel.EditingId })); } }
public ActionResult Invite(int user, int theEvent, string returnTo) { //Check if user owns the event and add the other user to it MeetupModel model = new MeetupModel(); int? infoID = this.UserId(); if (infoID is null) { return(RedirectToAction("Index", "Home")); } User inviting = model.Users.SingleOrDefault(u => u.Id == user); Event inviteToEvent = model.Events.SingleOrDefault(e => e.Id == theEvent && e.HostUserId == infoID); if (inviting is null || inviteToEvent is null) { return(RedirectToAction("Index", "Home")); } //Make sure user isnt invited already if (!inviteToEvent.GetUsers().Any(u => u.Id == user)) { inviteToEvent.Invites.Add(new Invite(inviteToEvent, inviting, DateTime.Now)); model.SaveChanges(); } //Redirect back to last page if possible if (string.IsNullOrWhiteSpace(returnTo)) { return(RedirectToAction("Page", "Events", new { Id = theEvent })); } else { return(Redirect(returnTo)); } }
public ActionResult CreateList(EventListCreationModel viewModel) { MeetupModel model = new MeetupModel(); //Makes sure the user owns the event int?infoID = this.UserId(); viewModel.EventInformation = model.Events.SingleOrDefault(e => e.Id == viewModel.EventId && e.HostUserId == infoID); if (viewModel.EventInformation is null) { return(RedirectToAction("Index", "Home")); } if (!ModelState.IsValid) { return(View(viewModel)); } //Make sure there are enough people if (viewModel.EventInformation.Invites.Count < 2) { return(View("NotEnoughPeople", viewModel)); } //Creates a list of all users in the event List <User> UsersInEvent = viewModel.EventInformation.GetUsers().ToList(); //Clear old meeting list foreach (Seance meetingRow in viewModel.EventInformation.Seances) { model.Meetings.RemoveRange(meetingRow.Meetings); model.UserPauses.RemoveRange(meetingRow.UserPauses); } model.Seances.RemoveRange(viewModel.EventInformation.Seances); //Get list of all possible meetings List <MeetingScore> possibleMeetings = MeetingScore.GetPossibleMeetings(UsersInEvent, viewModel.EventId); //Generate Seances/meetings list int meetingsPerSeance = UsersInEvent.Count / 2; for (int i = 0; i < viewModel.AmountOfMeetings && possibleMeetings.Count != 0; i++) { //Create a meeting row (seance) List <MeetingScore> possibleMeetingsThisRow = possibleMeetings.Where(m => true).ToList(); List <User> usersNotInMeeting = UsersInEvent.Where(u => true).ToList(); DateTime beginningTime = viewModel.EventInformation.BeginningTime.AddMinutes(viewModel.MinuteInterval * i); Seance eventMeetingsRow = new Seance(viewModel.EventInformation, i, beginningTime, beginningTime.AddMinutes(viewModel.MinuteInterval)); for (int j = 0; j < meetingsPerSeance; j++) { if (possibleMeetingsThisRow.Count == 0) { //fill with already used meetings if turned on if (viewModel.ForceFillMeetings && usersNotInMeeting.Count >= 2) { possibleMeetingsThisRow = MeetingScore.GetPossibleMeetings(usersNotInMeeting, viewModel.EventId); } else { //Create list of users not in meetings in this seance foreach (User userNotInMeeting in usersNotInMeeting) { eventMeetingsRow.UserPauses.Add(new UserPause(userNotInMeeting, eventMeetingsRow)); } break; } } //add highest scored meeting to the event MeetingScore meetingToAdd = possibleMeetingsThisRow[0]; //remove impossible meetings (meetings containing the users who just have been added to the meeting list) eventMeetingsRow.Meetings.Add(new Meeting(meetingToAdd.Person1, meetingToAdd.Person2, eventMeetingsRow)); possibleMeetingsThisRow = possibleMeetingsThisRow.Where(m => m.Person1.Id != meetingToAdd.Person1.Id && m.Person2.Id != meetingToAdd.Person2.Id && m.Person1.Id != meetingToAdd.Person2.Id && m.Person2.Id != meetingToAdd.Person1.Id).ToList(); usersNotInMeeting = usersNotInMeeting.Where(u => u.Id != meetingToAdd.Person1.Id && u.Id != meetingToAdd.Person2.Id).ToList(); possibleMeetings.Remove(meetingToAdd); } viewModel.EventInformation.Seances.Add(eventMeetingsRow); } model.SaveChanges(); return(RedirectToAction("Page", new { Id = viewModel.EventId })); }
public ActionResult Edit(UserEditorModel viewModel) { //Get user MeetupModel model = new MeetupModel(); int? userId = this.UserId(); if (userId == null) { return(RedirectToAction("Index", "HomeController")); } User editUser = model.Users.SingleOrDefault(userInfo => userInfo.Id == userId); //Get businesses list if (string.IsNullOrEmpty(viewModel.ChosenBusinesses)) { viewModel.ChosenBusinesses = ""; } string[] selectedBusnisses = viewModel.ChosenBusinesses.Split(','); model.UsersBusinesses.RemoveRange(editUser.UsersBusinesses.Where(b => !selectedBusnisses.Contains(b.Business.Name))); List <Business> businesses = model.Businesses.Where(b => selectedBusnisses.Contains(b.Name)).ToList(); businesses = businesses.Where(b => !editUser.UsersBusinesses.Any(ub => ub.BusinessId == b.Id)).ToList(); foreach (Business business in businesses) { editUser.UsersBusinesses.Add(new UsersBusiness(business, editUser)); } //Get interests list if (string.IsNullOrEmpty(viewModel.ChosenInterests)) { viewModel.ChosenInterests = ""; } string[] selectedInterests = viewModel.ChosenInterests.Split(','); model.UsersInterests.RemoveRange(editUser.UsersInterests.Where(i => !selectedInterests.Contains(i.Interest.Name))); List <Interest> interests = model.Interests.Where(i => selectedInterests.Contains(i.Name)).ToList(); interests = interests.Where(i => !editUser.UsersInterests.Any(ui => ui.InterestId == i.Id)).ToList(); foreach (Interest interest in interests) { editUser.UsersInterests.Add(new UsersInterest(interest, editUser)); } //Make sure model is valid if (!ModelState.IsValid) { return(ReturnEdit(viewModel, editUser, model)); } else { if (!(viewModel.Organizations is null)) { //Create organizations list for (int i = 0; i < viewModel.Organizations.Count; i++) { OrganizationModel organization = viewModel.Organizations[i]; if (organization.State == "removed") { //Remove removed organizations UsersOrganizations removeOrganization = editUser.UsersOrganizations.SingleOrDefault(o => o.Id == organization.Id); if (!(removeOrganization is null)) { model.UsersOrganizations.Remove(removeOrganization); } } else if (organization.State == "old" || organization.State == "new") { //Make sure organization is in a valid state if (string.IsNullOrWhiteSpace(organization.Name)) { ModelState.AddModelError("Organizations[" + i + "].Name", "Feltet Organisation navn skal udfyldes."); return(ReturnEdit(viewModel, editUser, model)); } if (organization.StartDate is null) { ModelState.AddModelError("Organizations[" + i + "].StartDate", "Feltet ansættelsesdato skal udfyldes."); return(ReturnEdit(viewModel, editUser, model)); } if (organization.StartDate > DateTime.Now) { ModelState.AddModelError("Organizations[" + i + "].StartDate", "Ansættelsesdato må ikke være i fremtiden."); return(ReturnEdit(viewModel, editUser, model)); } else if (!(organization.EndDate is null)) { if (organization.StartDate.Value >= organization.EndDate) { ModelState.AddModelError("Organizations[" + i + "].StartDate", "Ansættelsesdato må ikke være efter s**t datoen."); return(ReturnEdit(viewModel, editUser, model)); } else if (organization.EndDate > DateTime.Now) { ModelState.AddModelError("Organizations[" + i + "].EndDate", "S**t datoen kan ikke være i fremtiden."); return(ReturnEdit(viewModel, editUser, model)); } } //Get the organization the user is editing or create a new one latter UsersOrganizations editOrganization = null; Organization newOrganization = null; Organization oldOrganization = null; if (organization.State == "old") { editOrganization = editUser.UsersOrganizations.SingleOrDefault(o => o.Id == organization.Id); if (editOrganization is null) { continue; } oldOrganization = editOrganization.Organization; } else if (organization.State != "new") { continue; } //Check new organization name if (organization.State == "new" || organization.Name != oldOrganization.Name) { newOrganization = model.Organizations.SingleOrDefault(o => o.Name == organization.Name); if (newOrganization is null) { //Call api to check organization name try { if (Organization.NameExists(organization.Name)) { newOrganization = new Organization(organization.Name); } else { ModelState.AddModelError("Organizations[" + i + "].Name", "Organisationen \"" + organization.Name + "\" eksisterer ikke."); return(ReturnEdit(viewModel, editUser, model)); } } catch (WebException) { ModelState.AddModelError("Organizations[" + i + "].Name", "Fejlede i at bedømme organisation navnet. Prøv igen senere"); return(ReturnEdit(viewModel, editUser, model)); } } } //Create new organization object or fill old object if (editOrganization is null) { editOrganization = new UsersOrganizations(newOrganization, editUser, organization.StartDate.Value); model.UsersOrganizations.Add(editOrganization); } else { if (!(newOrganization is null)) { editOrganization.Organization = newOrganization; } editOrganization.StartDate = organization.StartDate.Value; } editOrganization.EndDate = organization.EndDate; } } } if (!(viewModel.Picture is null)) { //Update profile picture if (!viewModel.Picture.ContentType.Contains("image")) { ModelState.AddModelError("Picture", "Feltet \"Profil Billed\" accepterer kun billeder."); return(ReturnEdit(viewModel, editUser, model)); } editUser.PictureUri = "data:image/png;base64," + viewModel.Picture.PictureFileToString(); } //Update everything else editUser.Description = viewModel.Description; editUser.Address.CityName = viewModel.Address.City; editUser.Address.Country = viewModel.Address.Country; editUser.Address.StreetName = viewModel.Address.StreetName; editUser.Address.StreetNumber = viewModel.Address.StreetNumber; editUser.Address.ZipCode = Convert.ToInt32(viewModel.Address.CityZipCode); editUser.FirstName = viewModel.FirstName; editUser.LastName = viewModel.LastName; model.SaveChanges(); return(RedirectToAction("Profile", "Users", new { editUser.Id })); } }