예제 #1
0
        // Functions

        public static NewsFeedViewModel CreatePost(CreatePostViewModel creatPostViewModel, HttpPostedFileBase postPhoto)
        {
            using (BewanderContext db = new BewanderContext())
            {
                // GET: Models needed for CreatePostViewModel
                string userID         = creatPostViewModel.UserID;
                User   user           = db.Users.Find(userID);
                Image  profilePicture = Image.GetProfileImages(userID, FileType.ProfilePicture);

                Post newPost = new Post {
                    DatePosted = DateTime.Now, Caption = creatPostViewModel.Caption, UserID = userID
                };
                Image postedPhoto = new Image();

                if (postPhoto != null)
                {
                    Image.SavePhotos(user, postPhoto);
                    postedPhoto     = (Image)db.Users.Find(userID).Files.Last();
                    newPost.PhotoID = postedPhoto.ID;
                }

                db.Posts.Add(newPost);
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();

                NewsFeedViewModel postDisplayViewModel = new NewsFeedViewModel(user, profilePicture, postedPhoto, newPost);

                return(postDisplayViewModel);
            }
        }
예제 #2
0
 public static List <int> GetNotifications(string userID)
 {
     using (BewanderContext db = new BewanderContext())
     {
         List <int> notificationIDs = db.Notifications.Where(i => i.UserID == userID).Select(i => i.MessageID).ToList();
         return(notificationIDs);
     }
 }
예제 #3
0
 public static List <int> GetRelationshipIDs(string userID)
 {
     using (BewanderContext db = new BewanderContext())
     {
         List <int> relationshipIDs = db.Relationships.Where(i => i.UserOneID == userID || i.UserTwoID == userID).Select(i => i.ID).ToList();
         return(relationshipIDs);
     }
 }
예제 #4
0
        // For test databases only, not for live site. Will only run if the number of users is less than 100
        protected void CreateTestUsers()
        {
            ApplicationDbContext db      = new ApplicationDbContext();
            BewanderContext      context = new BewanderContext();

            var UserManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(db));

            // Immediate query of database for number of users
            List <ApplicationUser> users = db.Users.ToList();

            //Number of users wanted for seeding
            int TestUsers = 100;

            // In case someone forgets to remove it on the live site
            if (users.Count < TestUsers)
            {
                // Creates new users
                for (var i = 0; i < TestUsers; i++)
                {
                    ApplicationUser user = new ApplicationUser();
                    user.UserName       = String.Format("User{0}@gmail.com", i.ToString());
                    user.Email          = String.Format("User{0}@gmail.com", i.ToString());
                    user.EmailConfirmed = true;

                    string userPWD = "Pass1234!";

                    var chkUser = UserManager.Create(user, userPWD);

                    //Create new User
                    User newUser = new User(user.Id, String.Format("FirstName User{0}", i.ToString()), String.Format("LastName User{0}", i.ToString()));
                    context.Users.Add(newUser);

                    // Create new UserProfile
                    UserProfile userProfile = new UserProfile {
                        UserID = user.Id, DOB = DateTime.Today, HomeTown = "1"
                    };
                    context.UserProfiles.Add(userProfile);

                    //Add default User to Role Admin
                    if (chkUser.Succeeded)
                    {
                        var result1 = UserManager.AddToRole(user.Id, "User");
                    }
                }

                context.SaveChanges();
            }
        }
예제 #5
0
        /// <summary>
        /// Gets posts from the users friends
        /// </summary>
        /// <param name="friendsID"></param>
        /// <param name="ID"></param>
        /// <returns></returns>
        public static List <NewsFeedViewModel> GetNewsFeed(List <string> friendsID)
        {
            using (BewanderContext db = new BewanderContext())
            {
                List <NewsFeedViewModel> posts = new List <NewsFeedViewModel>();
                foreach (string userID in friendsID)
                {
                    User  user                   = db.Users.Find(userID);
                    Image profilePicture         = Image.GetProfileImages(userID, FileType.ProfilePicture);
                    ICollection <Post> userPosts = user.Posts;

                    foreach (Post post in userPosts)
                    {
                        Image             postedPicture = (post.PhotoID != null) ? db.Images.Find(post.PhotoID) : new Image();
                        NewsFeedViewModel newPost       = new NewsFeedViewModel(user, profilePicture, postedPicture, post);
                        posts.Add(newPost);
                    }
                }

                return(posts.OrderByDescending(i => i.Likes.Count).ToList());
            }
        }
예제 #6
0
        /// <summary>
        /// Gets the most current photo that has been made into a profile picture or cover photo
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="fileType"></param>
        /// <returns></returns>
        public static Image GetProfileImages(string userID, FileType fileType)
        {
            try
            {
                using (BewanderContext db = new BewanderContext())
                {
                    // Parameters for SQL query
                    object[] parameters = new object[]
                    {
                        new SqlParameter("fileType1", (int)fileType),
                        new SqlParameter("fileType2", (fileType == FileType.CoverPhoto) ? (int)FileType.RentedCoverPhoto : (int)fileType),
                        new SqlParameter("userID", userID)
                    };

                    Image image = db.Images.SqlQuery(
                        "SELECT TOP 1 * FROM[dbo].[File] WHERE (FileType = @fileType1 OR FileType = @fileType2) AND UserID = @userID ORDER BY DateProfilePic DESC",
                        parameters).SingleOrDefault();

                    if (image.Path == null)
                    {
                        throw new NullReferenceException();
                    }

                    return(image);
                }
            }
            catch (Exception)
            {
                Image image = (fileType == FileType.ProfilePicture || fileType == FileType.AboutPicture) ? new Image {
                    Path = "no-image.png", FileName = "Default"
                } : new Image {
                    Path = "cover-image.jpg", FileName = "Default"
                };
                return(image);
            }
        }
        /*
         * this generates the table based on the search criteria given from the form on the index page.
         * the search variables will hold data based on what the admin wants to search users by.
         * the Filter variables are used to hold/store the search variables when a page change is made, this way you don't
         * lose the search criteria when you change to another page of the table.
         */
        public PartialViewResult _UserSearchResults(
            string sortOrder,
            string nameFilter, string hometownFilter, string daysFilter, string lockedOutFilter, string rolesFilter,
            string searchName, string searchHometown, string searchDays, string searchLockedOut, string searchRoles,
            int?page)
        {
            // Tanvir(23/12/16): Creating Paged List
            ViewBag.CurrentSort = sortOrder;
            ApplicationDbContext acSearchResults = new ApplicationDbContext();
            BewanderContext      bcSearchResults = new BewanderContext();

            var Users   = from u in bcSearchResults.Users select u;
            var Places  = from p in bcSearchResults.Places select p;
            int maxDays = 0;

            //these if's are needed to reset the page to 1 should the search criteria change while on a page other than 1
            //I believe you need one for each search criteria
            if (searchName != null)
            {
                page = 1;
            }
            else
            {
                searchName = nameFilter;
            }
            ViewBag.nameFilter = searchName;
            if (searchHometown != null)
            {
                page = 1;
            }
            else
            {
                searchHometown = hometownFilter;
            }
            ViewBag.hometownFilter = searchHometown;
            if (searchDays != null)
            {
                page = 1;
            }
            else
            {
                searchDays = daysFilter;
            }
            ViewBag.daysFilter = searchDays;
            if (searchLockedOut != null)
            {
                page = 1;
            }
            else
            {
                searchLockedOut = lockedOutFilter;
            }
            ViewBag.lockedOutFilter = searchLockedOut;
            if (searchRoles != null)
            {
                page = 1;
            }
            else
            {
                searchRoles = rolesFilter;
            }
            ViewBag.rolesFilter = searchRoles;
            if (!String.IsNullOrEmpty(searchName))
            {
                Users = Users.Where(u => u.LastName.ToLower().Contains(searchName.ToLower()) || u.FirstName.ToLower().Contains(searchName.ToLower()));
            }

            if (!String.IsNullOrEmpty(searchHometown))
            {
                Places = Places.Where(p => p.Name.ToLower().Contains(searchHometown.ToLower()));
            }

            if (!String.IsNullOrEmpty(searchDays))
            {
                maxDays = int.Parse(searchDays);
            }

            int pageSize   = 20;
            int pageNumber = (page ?? 1);

            // End of PagedList


            // Create ViewModel to run list function
            AdminSearchViewModel vm = new AdminSearchViewModel();
            // Assemble lists to be passed to list function
            List <AdminSearchViewModel> viewModels       = new List <AdminSearchViewModel>();
            List <ApplicationUser>      applicationUsers = acSearchResults.Users.ToList();
            List <User>        users        = Users.ToList();
            List <UserProfile> userProfiles = bcSearchResults.UserProfiles.ToList();
            List <Place>       places       = Places.ToList();
            List <Review>      reviews      = bcSearchResults.Reviews.ToList();
            List <Post>        posts        = bcSearchResults.Posts.ToList();

            //pass data to list function
            vm.AdminSearchList(viewModels,
                               users,
                               userProfiles,
                               places,
                               applicationUsers,
                               posts,
                               reviews,
                               searchHometown,
                               maxDays,
                               searchLockedOut,
                               searchRoles
                               );
            // for each viewModel, convert Id hash store in Role to name of role
            foreach (AdminSearchViewModel viewModel in viewModels)
            {
                viewModel.Role = acSearchResults.Roles.Where(a => a.Id == viewModel.Role).Select(a => a.Name).FirstOrDefault();
            }

            //SORTING CODE HERE
            ViewBag.NameSort        = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DaysSort        = sortOrder == "Days" ? "days_desc" : "Days";
            ViewBag.HometownSort    = String.IsNullOrEmpty(sortOrder) ? "hometown_desc" : "";
            ViewBag.FlaggedPostSort = sortOrder == "Flagged Posts" ? "flagged_post_desc" : "Flagged Posts";
            ViewBag.LockedOutSort   = sortOrder == "Locked Out" ? "locked_out_desc" : "Locked Out";
            ViewBag.RolesSort       = sortOrder == "Roles" ? "roles_desc" : "Roles";

            switch (sortOrder)
            {
            case "name_desc":
                viewModels = viewModels.OrderByDescending(v => v.LastName).ToList();
                break;

            case "Days":
                viewModels = viewModels.OrderBy(v => v.DaysAsMember).ToList();
                break;

            case "days_desc":
                viewModels = viewModels.OrderByDescending(v => v.DaysAsMember).ToList();
                break;

            case "hometown_desc":
                viewModels = viewModels.OrderByDescending(v => v.HomeTownName).ToList();
                break;

            case "Flagged Posts":
                viewModels = viewModels.OrderBy(v => v.PostFlag).ToList();
                break;

            case "flagged_post_desc":
                viewModels = viewModels.OrderByDescending(v => v.PostFlag).ToList();
                break;

            case "Locked Out":
                viewModels = viewModels.OrderBy(v => v.LockOutEnabled).ToList();
                break;

            case "locked_out_desc":
                viewModels = viewModels.OrderByDescending(v => v.LockOutEnabled).ToList();
                break;

            case "Roles":
                viewModels = viewModels.OrderBy(v => v.Role).ToList();
                break;

            case "roles_desc":
                viewModels = viewModels.OrderByDescending(v => v.Role).ToList();
                break;

            default:
                viewModels = viewModels.OrderBy(v => v.LastName).ToList();
                break;
            }
            //END OF SORTING CODE

            //these need to be here, you get connection to DB issue otherwise
            acSearchResults.Dispose();
            bcSearchResults.Dispose();

            //if there are no results, display the PartialView for that.
            if (viewModels.Count == 0)
            {
                return(PartialView("_UserSearchNoResults"));
            }
            else //otherwise displays PartialView with results from search
            {
                return(PartialView("_UserSearchResults", viewModels.ToPagedList(pageNumber, pageSize)));
            }
        }
예제 #8
0
        // In this method we will create default User roles and Admin user for login
        private void createRolesandUsers()
        {
            ApplicationDbContext context = new ApplicationDbContext();
            BewanderContext      bc      = new BewanderContext();

            var roleManager = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
            var UserManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));


            // In Startup I am creating first Admin Role and creating a default Admin User
            if (!roleManager.RoleExists("Admin"))
            {
                // first we create Admin role
                var role = new IdentityRole();
                role.Name = "Admin";
                roleManager.Create(role);

                //Here we create a Admin super user who will maintain the website We will need this for going live.

                var user = new ApplicationUser();
                user.UserName       = "******";
                user.Email          = "*****@*****.**";
                user.EmailConfirmed = true;

                string userPWD = "Pass1234!";

                var chkUser = UserManager.Create(user, userPWD);


                //Add default User to Role Admin
                if (chkUser.Succeeded)
                {
                    // Create Place
                    Place place = new Place("1", "New York", 40.7127837, -74.00594130000002);
                    bc.Places.Add(place);

                    //Create new User
                    User newUser = new User {
                        UserID = user.Id, FirstName = "Bewander", LastName = "Bewander", Permission = 0, DateJoined = DateTime.Now
                    };
                    bc.Users.Add(newUser);

                    // Create new UserProfile
                    UserProfile userProfile = new UserProfile {
                        UserID = user.Id, DOB = DateTime.Today, HomeTown = place.PlaceID
                    };
                    bc.UserProfiles.Add(userProfile);

                    bc.SaveChanges();

                    var result1 = UserManager.AddToRole(user.Id, "Admin");
                }
            }

            // creating Creating Manager role
            if (!roleManager.RoleExists("PowerUser"))
            {
                var role = new IdentityRole();
                role.Name = "PowerUser";
                roleManager.Create(role);
            }

            // creating Creating Employee role
            if (!roleManager.RoleExists("User"))
            {
                var role = new IdentityRole();
                role.Name = "User";
                roleManager.Create(role);
            }
        }