// submit submission downvote public static void DownvoteComment(int commentId, string userWhichDownvoted, string clientIpHash) { int result = CheckIfVotedComment(userWhichDownvoted, commentId); using (voatEntities db = new voatEntities()) { Comment comment = db.Comments.Find(commentId); // do not execute downvoting, subverse is in anonymized mode if (comment.Message.Anonymized) { return; } // do not execute downvoting if user has insufficient CCP for target subverse if (Karma.CommentKarmaForSubverse(userWhichDownvoted, comment.Message.Subverse) < comment.Message.Subverses.minimumdownvoteccp) { return; } switch (result) { // never voted before case 0: { // this user is downvoting more than upvoting, don't register the downvote if (UserHelper.IsUserCommentVotingMeanie(userWhichDownvoted)) { return; } // check if this IP already voted on the same comment, abort voting if true var ipVotedAlready = db.Commentvotingtrackers.Where(x => x.CommentId == commentId && x.ClientIpAddress == clientIpHash); if (ipVotedAlready.Any()) { return; } comment.Dislikes++; // register downvote var tmpVotingTracker = new Commentvotingtracker { CommentId = commentId, UserName = userWhichDownvoted, VoteStatus = -1, Timestamp = DateTime.Now, ClientIpAddress = clientIpHash }; db.Commentvotingtrackers.Add(tmpVotingTracker); db.SaveChanges(); Karma.UpdateUserCcp(comment.Name, -1); Voting.SendVoteNotification(comment.Name, "downvote"); } break; // upvoted before, turn upvote to downvote case 1: { comment.Likes--; comment.Dislikes++; //register Turn DownVote To UpVote var votingTracker = db.Commentvotingtrackers.FirstOrDefault(b => b.CommentId == commentId && b.UserName == userWhichDownvoted); if (votingTracker != null) { votingTracker.VoteStatus = -1; votingTracker.Timestamp = DateTime.Now; } db.SaveChanges(); Karma.UpdateUserCcp(comment.Name, -2); Voting.SendVoteNotification(comment.Name, "uptodownvote"); } break; // downvoted before, reset case -1: comment.Dislikes--; db.SaveChanges(); Karma.UpdateUserCcp(comment.Name, 1); ResetCommentVote(userWhichDownvoted, commentId); Voting.SendVoteNotification(comment.Name, "upvote"); break; } } }
// submit comment upvote public static void UpvoteComment(int commentId, string userWhichUpvoted, string clientIpHash) { int result = CheckIfVotedComment(userWhichUpvoted, commentId); using (voatEntities db = new voatEntities()) { Comment comment = db.Comments.Find(commentId); if (comment.Message.Anonymized) { // do not execute voting, subverse is in anonymized mode return; } switch (result) { // never voted before case 0: if (comment.Name != userWhichUpvoted) { // check if this IP already voted on the same comment, abort voting if true var ipVotedAlready = db.Commentvotingtrackers.Where(x => x.CommentId == commentId && x.ClientIpAddress == clientIpHash); if (ipVotedAlready.Any()) { return; } comment.Likes++; // register upvote var tmpVotingTracker = new Commentvotingtracker { CommentId = commentId, UserName = userWhichUpvoted, VoteStatus = 1, Timestamp = DateTime.Now, ClientIpAddress = clientIpHash }; db.Commentvotingtrackers.Add(tmpVotingTracker); db.SaveChanges(); Karma.UpdateUserCcp(comment.Name, 1); Voting.SendVoteNotification(comment.Name, "upvote"); } break; // downvoted before, turn downvote to upvote case -1: if (comment.Name != userWhichUpvoted) { comment.Likes++; comment.Dislikes--; // register Turn DownVote To UpVote var votingTracker = db.Commentvotingtrackers.FirstOrDefault(b => b.CommentId == commentId && b.UserName == userWhichUpvoted); if (votingTracker != null) { votingTracker.VoteStatus = 1; votingTracker.Timestamp = DateTime.Now; } db.SaveChanges(); Karma.UpdateUserCcp(comment.Name, 2); Voting.SendVoteNotification(comment.Name, "downtoupvote"); } break; // upvoted before, reset case 1: comment.Likes--; db.SaveChanges(); Karma.UpdateUserCcp(comment.Name, -1); Voting.SendVoteNotification(comment.Name, "downvote"); ResetCommentVote(userWhichUpvoted, commentId); break; } } }
// submit submission downvote public static void DownvoteComment(int commentId, string userWhichDownvoted, string clientIpHash) { int result = CheckIfVotedComment(userWhichDownvoted, commentId); using (voatEntities db = new voatEntities()) { Comment comment = db.Comments.Find(commentId); // do not execute downvoting, subverse is in anonymized mode if (comment.Submission.IsAnonymized) { return; } // do not execute downvoting if user has insufficient CCP for target subverse if (Karma.CommentKarmaForSubverse(userWhichDownvoted, comment.Submission.Subverse) < comment.Submission.Subverse1.MinCCPForDownvote) { return; } // do not execute downvoting if comment is older than 7 days var commentPostingDate = comment.CreationDate; TimeSpan timeElapsed = DateTime.Now - commentPostingDate; if (timeElapsed.TotalDays > 7) { return; } switch (result) { // never voted before case 0: { // this user is downvoting more than upvoting, don't register the downvote if (UserHelper.IsUserCommentVotingMeanie(userWhichDownvoted)) { return; } // check if this IP already voted on the same comment, abort voting if true var ipVotedAlready = db.CommentVoteTrackers.Where(x => x.CommentID == commentId && x.IPAddress == clientIpHash); if (ipVotedAlready.Any()) { return; } comment.DownCount++; // register downvote var tmpVotingTracker = new CommentVoteTracker { CommentID = commentId, UserName = userWhichDownvoted, VoteStatus = -1, CreationDate = DateTime.Now, IPAddress = clientIpHash }; db.CommentVoteTrackers.Add(tmpVotingTracker); db.SaveChanges(); Voting.SendVoteNotification(comment.UserName, "downvote"); } break; // upvoted before, turn upvote to downvote case 1: { comment.UpCount--; comment.DownCount++; //register Turn DownVote To UpVote var votingTracker = db.CommentVoteTrackers.FirstOrDefault(b => b.CommentID == commentId && b.UserName == userWhichDownvoted); if (votingTracker != null) { votingTracker.VoteStatus = -1; votingTracker.CreationDate = DateTime.Now; } db.SaveChanges(); Voting.SendVoteNotification(comment.UserName, "uptodownvote"); } break; // downvoted before, reset case -1: comment.DownCount--; db.SaveChanges(); ResetCommentVote(userWhichDownvoted, commentId); Voting.SendVoteNotification(comment.UserName, "upvote"); break; } } }