예제 #1
0
        protected void ButtonUploadPhoto_Click(object sender, EventArgs e)
        {
            var fileUpload = this.FileUploadPhoto;
            if (!fileUpload.HasFile)
            {
                return;
            }
            else
            {
                if (fileUpload.HasFile && (fileUpload.PostedFile.ContentType == PngImageFormat ||
                    fileUpload.PostedFile.ContentType == JpegImageFormat))
                {

                    var context = new ForumEmeraldContext();

                    using (context)
                    {
                        var userId = this.Request.QueryString["id"];

                        var user = context.Users.FirstOrDefault(x => x.Id == userId);
                        if (user != null)
                        {
                            string fileName = user.UserName + GetPhotoExtension(fileUpload.PostedFile.FileName);
                            fileUpload.SaveAs(Server.MapPath(MainPath) + fileName);
                            user.PhotoPath = MainPath + fileName;
                            context.SaveChanges();
                            this.BindUserInfo();
                            ErrorSuccessNotifier.AddInfoMessage("Profile picture updated.");
                        }
                    }
                }
            }
        }
예제 #2
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            this.postId = Convert.ToInt32(Request.QueryString["id"]);

            // gather data
            var context = new ForumEmeraldContext();
            var currentPost = context.Posts.Find(postId);
            var postComments = context.Comments.
                Where(c => c.Post.Id == currentPost.Id).
                OrderByDescending(c => c.Date).ToList();

            // render post
            this.PostDate.InnerText = currentPost.PostDate.ToString();
            this.imgCreatorPhoto.ImageUrl = currentPost.User.PhotoPath;
            this.PostCreatorName.InnerText = currentPost.User.UserName;

            this.TextBoxTitle.Text = currentPost.Title;
            this.TextBoxTitle.DataBind();
            this.TextBoxPostContent.Text = currentPost.Content;

            this.HyperLinkEditUser.NavigateUrl = "EditUser.aspx?id=" + currentPost.User.Id;

            // render comments
            this.ListViewComments.DataSource = postComments;
            this.ListViewComments.DataBind();

            // render tags
            this.ListViewTags.DataSource = currentPost.Tags.ToList();
            this.ListViewTags.DataBind();
            this.HyperLinkEditTags.NavigateUrl = "EditPostTags.aspx?id=" + currentPost.Id;
        }
예제 #3
0
        protected void ButtonComment_Click(object sender, EventArgs e)
        {
            this.Validate("AddComment");
            if (this.IsValid)
            {
                try
                {
                    var context = new ForumEmeraldContext();

                    // get needed data
                    int postId = int.Parse(Request.QueryString["id"]);
                    string commentText = this.TextBoxComment.Text;
                    var currentPost = context.Posts.Find(postId);
                    var currentUser = context.Users.Where(u => u.UserName == this.User.Identity.Name).FirstOrDefault();

                    // make new comment
                    Comment newComment = new Comment();
                    newComment.Text = commentText;
                    newComment.Post = currentPost;
                    newComment.Date = DateTime.Now;
                    newComment.User = currentUser;

                    context.Comments.Add(newComment);
                    context.SaveChanges();

                    this.TextBoxComment.Text = "";
                }
                catch (Exception ex)
                {
                    ErrorSuccessNotifier.AddErrorMessage(ex);
                }
            }
        }
예제 #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var context = new ForumEmeraldContext();

            this.ListViewUsers.DataSource = context.Users.ToList();
            this.ListViewUsers.DataBind();
        }
예제 #5
0
        protected void ButtonEditComment_Click(object sender, EventArgs e)
        {
            this.Validate("EditComment");
            if (this.IsValid)
            {
                try
                {
                    int commentId = Convert.ToInt32(Request.QueryString["id"]);

                    var context = new ForumEmeraldContext();
                    var commentToEdit = context.Comments.Find(commentId);

                    commentToEdit.Text = this.TextBoxEditableCommentContent.Text;

                    context.SaveChanges();

                    var postId = commentToEdit.Post.Id;
                    Response.Redirect("~/Administration/EditPost.aspx?id=" + postId, false);
                }
                catch (Exception ex)
                {
                    ErrorSuccessNotifier.AddErrorMessage(ex);
                }
            }
        }
예제 #6
0
        protected void ButtonDelete_Click(object sender, EventArgs e)
        {
            int postId = int.Parse(Request.QueryString["id"]);

            var context = new ForumEmeraldContext();
            var currentPost = context.Posts.Find(postId);
        }
예제 #7
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            string userId = Request.QueryString["Id"];

            if (userId == string.Empty || string.IsNullOrWhiteSpace(userId))
            {
                Response.Redirect("~/Users.aspx");
            }
            var context = new ForumEmeraldContext();

            // bind user info
            var user = context.Users.Where(u => u.Id == userId).ToList();
            this.ListViewUser.DataSource = user;
            this.ListViewUser.DataBind();

            if (this.User.Identity.IsAuthenticated)
            {
                // bind user posts
                var posts = context.Posts.Where(p => p.User.Id == userId).ToList();
                this.ListViewUserPosts.DataSource = posts;
                this.ListViewUserPosts.DataBind();
            }
            else
            {
                this.ListViewUserPosts.Visible = false;
            }
        }
예제 #8
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            int commentId = Convert.ToInt32(Request.QueryString["id"]);

            var context = new ForumEmeraldContext();
            var comment = context.Comments.Find(commentId);

            int postId = comment.Post.Id;

            this.LabelPostTitle.Text = context.Posts.Find(postId).Title;
            this.TextBoxEditableCommentContent.Text = comment.Text;
        }
예제 #9
0
        protected void Page_Prerender(object sender, EventArgs e)
        {
            int postId = int.Parse(Request.QueryString["id"]);

            var context = new ForumEmeraldContext();
            var currentPost = context.Posts.Find(postId);
            this.postTitle = currentPost.Title;
            this.postId = currentPost.Id;

            this.GridViewTags.DataSource = currentPost.Tags.ToList();
            this.DataBind();
        }
예제 #10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            int tagId = Convert.ToInt32(Request.QueryString["id"]);
            var context = new ForumEmeraldContext();

            var posts = (from p in context.Posts
                            from t in p.Tags
                      where t.Id == tagId
                      select p).ToList();

            this.ListViewSingleTagPosts.DataSource = posts;
            this.DataBind();
        }
예제 #11
0
        protected void GridViewTags_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int tagId = int.Parse(this.GridViewTags.DataKeys[e.RowIndex].Value.ToString());

            int postId = int.Parse(Request.QueryString["id"]);
            var context = new ForumEmeraldContext();
            var currentPost = context.Posts.Find(postId);

            var deletedTag = context.Tags.Find(tagId);

            currentPost.Tags.Remove(deletedTag);
            context.SaveChanges();
        }
예제 #12
0
        protected void ButtonAddTags_Click(object sender, EventArgs e)
        {
            string[] tags = this.TextBoxPostTags.Text.Split(' ');
            int postId = int.Parse(Request.QueryString["id"]);
            var context = new ForumEmeraldContext();
            var currentPost = context.Posts.Find(postId);

            foreach (var tagName in tags)
            {
                Tag newTag = CreateOrLoadTag(context, tagName);
                currentPost.Tags.Add(newTag);
            }

            context.SaveChanges();
            this.TextBoxPostTags.Text = "";
        }
예제 #13
0
        private void AddUserToRole()
        {
            var context = new ForumEmeraldContext();
            using (context)
            {
                var userRole = context.Roles.FirstOrDefault(x => x.Name == "User");
                var userRolePair = new UserRole();
                userRolePair.RoleId = userRole.Id;

                var username = this.UserName.Text;
                var user = context.Users.FirstOrDefault(x => x.UserName == username);
                userRolePair.UserId = user.Id;
                context.UserRoles.Add(userRolePair);
                context.SaveChanges();
            }
        }
예제 #14
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.User.IsInRole("Banned"))
            {
                this.LabelBannedUser.Visible = true;
            }
            var context = new ForumEmeraldContext();
            using (context)
            {
                var latestPosts = context.Posts.Include("User").Include("Tags")
                    .OrderByDescending(x => x.PostDate).Take(10).ToList();

                this.PostsViewer.Posts = latestPosts;
                this.PostsViewer.DataBind();
            }
        }
예제 #15
0
 protected void ButtonChangeEmail_Click(object sender, EventArgs e)
 {
     this.Validate("ValidateEmail");
     if (this.IsValid)
     {
         var context = new ForumEmeraldContext();
         using (context)
         {
             var userId = this.Request.QueryString["id"];
             var user = context.Users.FirstOrDefault(x => x.Id == userId);
             user.Email = this.TextBoxEmail.Text;
             context.SaveChanges();
             this.BindUserInfo();
             this.TextBoxEmail.Text = string.Empty;
             ErrorSuccessNotifier.AddInfoMessage("Email address updated.");
         }
     }
 }
예제 #16
0
        protected void ButtonChangeEmail_Click(object sender, EventArgs e)
        {
            this.Validate("ValidateEmail");
            if (this.IsValid)
            {
                var context = new ForumEmeraldContext();
                using (context)
                {
                    string username = this.User.Identity.GetUserName();
                    var user = context.Users.FirstOrDefault(x => x.UserName == username);
                    user.Email = this.TextBoxEmail.Text;
                    context.SaveChanges();
                    this.LabelCurrentEmail.Text = user.Email;
                    this.TextBoxEmail.Text = string.Empty;
                    ErrorSuccessNotifier.AddInfoMessage("Email address updated.");

                }
            }
        }
예제 #17
0
        // The return type can be changed to IEnumerable, however to support
        // paging and sorting, the following parameters must be added:
        //     int maximumRows
        //     int startRowIndex
        //     out int totalRowCount
        //     string sortByExpression
        public IQueryable<EmeraldForum.Models.Post> GridViewResults_GetData(
            [System.Web.ModelBinding.Control("TextBoxSearchText")] 
            string searchText)
        {
            if (String.IsNullOrEmpty(searchText))
            {
                return null;
            }

            char[] separators = new char[] { ' ', ',', ';' };
            string[] keywords = searchText.Split(separators,
                StringSplitOptions.RemoveEmptyEntries);
            var context = new ForumEmeraldContext();

            IQueryable<EmeraldForum.Models.Post> resultPosts = context.Posts.
                Where(p => keywords.
                    Any(w => p.Title.Contains(w)));

            return resultPosts.OrderBy(p => p.Id);
        }
예제 #18
0
        protected void ButtonChangeRole_Click(object sender, EventArgs e)
        {
            var userId = this.Request.QueryString["id"];
            var selectedRoleId = this.DropDownListRoles.SelectedItem.Value;

            var context = new ForumEmeraldContext();
            using (context)
            {
                var newUserRole = new UserRole();
                newUserRole.RoleId = selectedRoleId;
                newUserRole.UserId = userId;

                var oldUserRoles = context.UserRoles.Include("Role")
                    .Where(x => x.UserId == userId && x.Role.Name != BannedRole).ToList();

                context.UserRoles.RemoveRange(oldUserRoles);
                context.UserRoles.Add(newUserRole);
                context.SaveChanges();

                this.BindUserInfo();
            }
        }
예제 #19
0
 protected void ButtonSavePost_Click(object sender, EventArgs e)
 {
     using (var context = new ForumEmeraldContext())
     {
         var post = context.Posts.Find(this.postId);
         post.Title = this.TextBoxTitle.Text;
         post.Content = this.TextBoxPostContent.Text;
         try
         {
             context.SaveChanges();
             ErrorSuccessNotifier.AddInfoMessage("Post edited successfuly!");
             ErrorSuccessNotifier.ShowAfterRedirect = false;
             //var adminMaster = this.Master;
             //var notifier = (ErrorSuccessNotifier) adminMaster.Master.FindControl("ErrorSuccessNotifier");
             //var panel = (UpdatePanel) adminMaster.Master.FindControl("UpdatePanelErrorSuccessNotifier");
             //notifier.Update();
             //panel.Update();
         }
         catch (Exception ex)
         {
             ErrorSuccessNotifier.AddErrorMessage(ex);
         }
     }
 }
예제 #20
0
        private static Tag CreateOrLoadTag(ForumEmeraldContext context, string tagName)
        {
            Tag existingTag =
                (from t in context.Tags
                 where t.Name.ToLower() == tagName.ToLower()
                 select t).FirstOrDefault();

            if (existingTag != null)
            {
                return existingTag;
            }
            else
            {
                try
                {
                    Tag newTag = new Tag();
                    newTag.Name = tagName;
                    context.Tags.Add(newTag);
                    context.SaveChanges();

                    return newTag;
                }
                catch (DbEntityValidationException dbEx)
                {
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            Console.WriteLine("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                        }
                    }
                }

                return null;
            }
        }
예제 #21
0
        public IQueryable<EmeraldForum.Models.ForumUser> ListViewAllUsers_GetData()
        {
            var context = new ForumEmeraldContext();

            IQueryable<ForumUser> allUsers = context.Users;
            this.searchedCategory = this.ctegoryAllUsers;
            this.searchCriteria = this.TextBoxSearchCriteria.Text;

            if (this.RadioButtonOnlyBanned.Checked)
            {
                allUsers = allUsers.Where(x => x.Roles.Any(r => r.Role.Name == BannedRole)).AsQueryable();
                this.searchedCategory = this.ctegoryBanned;
            }
            else if (this.RadioButtonOnlyAdministrators.Checked)
            {
                allUsers = allUsers.Where(x => x.Roles.Any(r => r.Role.Name == AdministratorRole)).AsQueryable();
                this.searchedCategory = this.ctegoryAdmins;
            }
            else if (this.RadioButtonOnlyUsers.Checked)
            {
                allUsers = allUsers.Where(x => x.Roles.Any(r => r.Role.Name == UserRole)).AsQueryable();
                this.searchedCategory = this.ctegoryUsers;
            }

            if (searchOn)
            {
                var searchText = this.TextBoxSearchCriteria.Text;
                char[] separators = new char[] { ' ', ',', ';' };
                string[] keywords = searchText.Split(separators,
                    StringSplitOptions.RemoveEmptyEntries);
                allUsers = allUsers.Where(x => keywords.Any(w => x.UserName.Contains(w)));
            }

            this.LabelSearchedBy.Visible = false;
            return allUsers.OrderBy(x => x.UserName);
        }
예제 #22
0
        protected void Page_Prerender(object sender, EventArgs e)
        {
            int postId = int.Parse(Request.QueryString["id"]);

            // gather data
            var context = new ForumEmeraldContext();
            var currentPost = context.Posts.Find(postId);
            var postComments = context.Comments.Where(c => c.Post.Id == currentPost.Id).OrderByDescending(c => c.Date).ToList();

            // render post
            this.headerPostTitle.InnerText = currentPost.Title;
            this.divPostDate.InnerText = currentPost.PostDate.ToString();
            this.imgCreatorPhoto.ImageUrl = currentPost.User.PhotoPath;
            this.divPostCreatorName.InnerText = currentPost.User.UserName;
            this.divPostContent.InnerText = currentPost.Content;

            // render comments
            this.ListViewComments.DataSource = postComments;
            this.ListViewComments.DataBind();

            // render tags
            this.ListViewTags.DataSource = currentPost.Tags.ToList();
            this.ListViewTags.DataBind();
        }
예제 #23
0
        protected void Page_Load()
        {
            if (!IsPostBack)
            {
                // Determine the sections to render
                ILoginManager manager = new IdentityManager(new IdentityStore(new ForumEmeraldContext())).Logins;
                if (manager.HasLocalLogin(User.Identity.GetUserId()))
                {
                    changePasswordHolder.Visible = true;
                }
                else
                {
                    setPassword.Visible = true;
                    changePasswordHolder.Visible = false;
                }
                CanRemoveExternalLogins = manager.GetLogins(User.Identity.GetUserId()).Count() > 1;

                // Render success message
                var message = Request.QueryString["m"];
                if (message != null)
                {
                    // Strip the query string from action
                    Form.Action = ResolveUrl("~/Account/Manage");

                    SuccessMessage =
                        message == "ChangePwdSuccess" ? "Your password has been changed."
                        : message == "SetPwdSuccess" ? "Your password has been set."
                        : message == "RemoveLoginSuccess" ? "The account was removed."
                        : String.Empty;
                    successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);
                }

                var context = new ForumEmeraldContext();
                using (context)
                {
                    var username = this.User.Identity.GetUserName();
                    var user = context.Users.FirstOrDefault(x => x.UserName == username);
                    this.ImageProfilePicture.ImageUrl = user.PhotoPath;
                    this.ImageProfilePicture.AlternateText = user.UserName;
                    this.LabelCurrentEmail.Text = this.Server.HtmlEncode(user.Email);
                    this.CurrentUser.InnerText = this.Server.HtmlEncode(user.UserName);
                }
            }
        }
예제 #24
0
        protected void ButtonCreatePost_Click(object sender, EventArgs e)
        {
            var context = new ForumEmeraldContext();

            string title = this.TextBoxPostTitle.Text;
            string content = this.TextBoxPostContent.Text;
            string[] tags = this.TextBoxPostTags.Text.Split(' ');
            var currentUser = context.Users.Where(u => u.UserName == this.User.Identity.Name).FirstOrDefault();

            // validate input
            if (title.Trim().Length > MaxTitleLength)
            {
                ErrorSuccessNotifier.AddErrorMessage("The tite is too long, it has to be up to " + MaxTitleLength + " characters.");
                return;
            }

            if (title.Trim().Length < MinTitleLength)
            {
                ErrorSuccessNotifier.AddErrorMessage("The title is too short, it has to be at least " + MinTitleLength + " characters.");
            }

            if (tags.Length > MaxTagsCount)
            {
                ErrorSuccessNotifier.AddErrorMessage("Maximal allowed tags count is " + MaxTagsCount + ".");
                return;
            }

            if (tags.Length < MinTagsCount)
            {
                ErrorSuccessNotifier.AddErrorMessage("You need to add at least " + MinTagsCount + ".");
                return;
            }

            // validate tags
            foreach (var tagName in tags)
            {
                if (tagName.Length > MaxTagLength)
                {
                    ErrorSuccessNotifier.AddErrorMessage("Tags must be less than " + MaxTagLength + " characters.");
                    return;
                }
            }

            // validate content
            if (content.Trim() == "")
            {
                ErrorSuccessNotifier.AddErrorMessage("You must add content");
                return;
            }

            Models.Post post = new Models.Post();
            post.Title = title;
            post.Content = content;
            post.PostDate = DateTime.Now;
            post.User = currentUser;

            foreach (var tagName in tags)
            {
                Tag newTag = CreateOrLoadTag(context, tagName);
                post.Tags.Add(newTag);
            }

            context.Posts.Add(post);
            context.SaveChanges();

            Response.Redirect("~/Post.aspx?id=" + post.Id);
        }
예제 #25
0
        protected void LinkButtonBan_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == CommandBanUser)
            {
                var userId = this.Request.QueryString["id"];
                var context = new ForumEmeraldContext();

                using (context)
                {
                    var bannedRole = context.Roles.FirstOrDefault(x => x.Name == BannedRole);
                    var userRolePair = new UserRole();
                    userRolePair.RoleId = bannedRole.Id;

                    var user = context.Users.FirstOrDefault(x => x.Id == userId);
                    userRolePair.UserId = user.Id;
                    context.UserRoles.Add(userRolePair);
                    context.SaveChanges();

                    this.BindUserInfo();
                }
            }
        }
예제 #26
0
        protected void LinkButtonUnban_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == CommandUnbanUser)
            {
                var userId = this.Request.QueryString["id"];
                var context = new ForumEmeraldContext();

                using (context)
                {
                    var bannedRole = context.Roles.FirstOrDefault(x => x.Name == BannedRole);
                    var roleToRemove = context.UserRoles.FirstOrDefault(x => x.UserId == userId && x.RoleId == bannedRole.Id);

                    context.UserRoles.Remove(roleToRemove);
                    context.SaveChanges();

                    this.BindUserInfo();
                }
            }
        }
예제 #27
0
 // The return type can be changed to IEnumerable, however to support
 // paging and sorting, the following parameters must be added:
 //     int maximumRows
 //     int startRowIndex
 //     out int totalRowCount
 //     string sortByExpression
 public IQueryable<EmeraldForum.Models.Post> GridViewAllPosts_GetData()
 {
     var contect = new ForumEmeraldContext();
     var allPosts = contect.Posts;
     return allPosts.OrderBy(p => p.Id);
 }
예제 #28
0
        private void BindUserInfo()
        {
            var userId = this.Request.QueryString["id"];
            if (string.IsNullOrWhiteSpace(userId) || userId == string.Empty)
            {
                this.Response.Redirect("~/Administration/ManageUsers.aspx");
            }

            var context = new ForumEmeraldContext();
            using (context)
            {
                var user = context.Users.Include("Roles").FirstOrDefault(x => x.Id == userId);
                if (user != null)
                {
                    this.ImageUser.ImageUrl = user.PhotoPath;
                    this.ImageUser.AlternateText = user.UserName;
                    this.LabelUsername.Text = this.Server.HtmlEncode(user.UserName);
                    this.LabelCurrentEmail.Text = this.Server.HtmlEncode(user.Email);

                    var officialRole = user.Roles.FirstOrDefault(x => x.Role.Name != BannedRole);
                    this.LabelUserRole.Text = officialRole.Role.Name;

                    var allRoles = context.Roles.Where(x => x.Name != BannedRole).ToList();
                    this.DropDownListRoles.DataSource = allRoles;
                    this.DropDownListRoles.DataBind();

                    bool isBanned = user.Roles.Any(x => x.Role.Name == BannedRole);
                    if (isBanned)
                    {
                        this.LinkButtonUnban.CommandArgument = user.Id;
                        this.LinkButtonBan.Visible = false;
                        this.LinkButtonUnban.Visible = true;
                        this.LabelStatus.Text = "User is banned!";
                        this.LabelStatus.Visible = true;
                    }
                    else
                    {
                        this.LinkButtonBan.CommandArgument = user.Id;
                        this.LinkButtonUnban.Visible = false;
                        this.LinkButtonBan.Visible = true;
                        this.LabelStatus.Visible = false;
                    }
                }
            }
        }