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));
        }
예제 #2
0
        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 }));
            }
        }