public static void RerankSubmission(Submission submission) { double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // calculate relative rank var subCtr = GetSubverseHighestRanking(submission.Subverse); var relRank = CalculateNewRelativeRank(newRank, subCtr); if (relRank != null) { submission.RelativeRank = relRank.Value; } //update cache if higher rank that what's in there already UpdateSubverseHighestRanking(submission.Subverse, newRank); }
// submit submission upvote public static void UpvoteSubmission(int submissionId, string userWhichUpvoted, string clientIp) { // user account voting check int result = CheckIfVoted(userWhichUpvoted, submissionId); using (var db = new voatEntities()) { Message submission = db.Messages.Find(submissionId); if (submission.Anonymized) { // do not execute voting, subverse is in anonymized mode return; } switch (result) { // never voted before case 0: if (submission.Name != userWhichUpvoted) { // check if this IP already voted on the same submission, abort voting if true var ipVotedAlready = db.Votingtrackers.Where(x => x.MessageId == submissionId && x.ClientIpAddress == clientIp); if (ipVotedAlready.Any()) { return; } submission.Likes++; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register upvote var tmpVotingTracker = new Votingtracker { MessageId = submissionId, UserName = userWhichUpvoted, VoteStatus = 1, Timestamp = DateTime.Now, ClientIpAddress = clientIp }; db.Votingtrackers.Add(tmpVotingTracker); db.SaveChanges(); Karma.UpdateUserScp(submission.Name, 1); SendVoteNotification(submission.Name, "upvote"); } break; // downvoted before, turn downvote to upvote case -1: if (submission.Name != userWhichUpvoted) { submission.Likes++; submission.Dislikes--; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register Turn DownVote To UpVote var votingTracker = db.Votingtrackers.FirstOrDefault(b => b.MessageId == submissionId && b.UserName == userWhichUpvoted); if (votingTracker != null) { votingTracker.VoteStatus = 1; votingTracker.Timestamp = DateTime.Now; } db.SaveChanges(); Karma.UpdateUserScp(submission.Name, 2); SendVoteNotification(submission.Name, "downtoupvote"); } break; // upvoted before, reset case 1: { submission.Likes--; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; db.SaveChanges(); Karma.UpdateUserScp(submission.Name, -1); ResetMessageVote(userWhichUpvoted, submissionId); SendVoteNotification(submission.Name, "downvote"); } break; } } }
// submit submission downvote public static void DownvoteSubmission(int submissionId, string userWhichDownvoted, string clientIp) { int result = CheckIfVoted(userWhichDownvoted, submissionId); using (var db = new voatEntities()) { Message submission = db.Messages.Find(submissionId); // do not execute downvoting if subverse is in anonymized mode if (submission.Anonymized) { return; } // do not execute downvoting if user has insufficient CCP for target subverse if (Karma.CommentKarmaForSubverse(userWhichDownvoted, submission.Subverse) < submission.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 submission, abort voting if true var ipVotedAlready = db.Votingtrackers.Where(x => x.MessageId == submissionId && x.ClientIpAddress == clientIp); if (ipVotedAlready.Any()) { return; } submission.Dislikes++; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register downvote var tmpVotingTracker = new Votingtracker { MessageId = submissionId, UserName = userWhichDownvoted, VoteStatus = -1, Timestamp = DateTime.Now, ClientIpAddress = clientIp }; db.Votingtrackers.Add(tmpVotingTracker); db.SaveChanges(); Karma.UpdateUserScp(submission.Name, -1); SendVoteNotification(submission.Name, "downvote"); } break; // upvoted before, turn upvote to downvote case 1: { submission.Likes--; submission.Dislikes++; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register Turn DownVote To UpVote var votingTracker = db.Votingtrackers.FirstOrDefault(b => b.MessageId == submissionId && b.UserName == userWhichDownvoted); if (votingTracker != null) { votingTracker.VoteStatus = -1; votingTracker.Timestamp = DateTime.Now; } db.SaveChanges(); Karma.UpdateUserScp(submission.Name, -2); SendVoteNotification(submission.Name, "uptodownvote"); } break; // downvoted before, reset case -1: { submission.Dislikes--; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; db.SaveChanges(); Karma.UpdateUserScp(submission.Name, 1); ResetMessageVote(userWhichDownvoted, submissionId); SendVoteNotification(submission.Name, "upvote"); } break; } } }
// submit submission upvote public static void UpvoteSubmission(int submissionID, string userName, string clientIp) { //// user account voting check //int result = CheckIfVoted(userName, submissionID); using (var db = new voatEntities()) { SubmissionVoteTracker previousVote = db.SubmissionVoteTrackers.Where(u => u.UserName == userName && u.SubmissionID == submissionID).FirstOrDefault(); Submission submission = db.Submissions.Find(submissionID); if (submission.IsAnonymized) { // do not execute voting, subverse is in anonymized mode return; } int result = (previousVote == null ? 0 : previousVote.VoteStatus.Value); switch (result) { // never voted before case 0: if (submission.UserName != userName) { // check if this IP already voted on the same submission, abort voting if true var ipVotedAlready = db.SubmissionVoteTrackers.Where(x => x.SubmissionID == submissionID && x.IPAddress == clientIp); if (ipVotedAlready.Any()) { return; } submission.UpCount++; double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register upvote var tmpVotingTracker = new SubmissionVoteTracker { SubmissionID = submissionID, UserName = userName, VoteStatus = 1, CreationDate = DateTime.Now, IPAddress = clientIp }; db.SubmissionVoteTrackers.Add(tmpVotingTracker); db.SaveChanges(); SendVoteNotification(submission.UserName, "upvote"); } break; // downvoted before, turn downvote to upvote case -1: if (submission.UserName != userName) { submission.UpCount++; submission.DownCount--; double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; previousVote.VoteStatus = 1; previousVote.CreationDate = DateTime.Now; db.SaveChanges(); SendVoteNotification(submission.UserName, "downtoupvote"); } break; // upvoted before, reset case 1: { submission.UpCount--; double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; db.SubmissionVoteTrackers.Remove(previousVote); db.SaveChanges(); //ResetMessageVote(userName, submissionID); SendVoteNotification(submission.UserName, "downvote"); } break; } } }
// submit submission downvote public static void DownvoteSubmission(int submissionID, string userName, string clientIp) { //int result = CheckIfVoted(userWhichDownvoted, submissionId); using (var db = new voatEntities()) { Submission submission = db.Submissions.Find(submissionID); SubmissionVoteTracker previousVote = db.SubmissionVoteTrackers.Where(u => u.UserName == userName && u.SubmissionID == submissionID).FirstOrDefault(); // do not execute downvoting if subverse is in anonymized mode if (submission.IsAnonymized) { return; } // do not execute downvoting if user has insufficient CCP for target subverse if (Karma.CommentKarmaForSubverse(userName, submission.Subverse) < submission.Subverse1.MinCCPForDownvote) { return; } int result = (previousVote == null ? 0 : previousVote.VoteStatus.Value); switch (result) { // never voted before case 0: { // this user is downvoting more than upvoting, don't register the downvote if (UserHelper.IsUserCommentVotingMeanie(userName)) { return; } // check if this IP already voted on the same submission, abort voting if true var ipVotedAlready = db.SubmissionVoteTrackers.Where(x => x.SubmissionID == submissionID && x.IPAddress == clientIp); if (ipVotedAlready.Any()) { return; } submission.DownCount++; double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register downvote var tmpVotingTracker = new SubmissionVoteTracker { SubmissionID = submissionID, UserName = userName, VoteStatus = -1, CreationDate = DateTime.Now, IPAddress = clientIp }; db.SubmissionVoteTrackers.Add(tmpVotingTracker); db.SaveChanges(); SendVoteNotification(submission.UserName, "downvote"); } break; // upvoted before, turn upvote to downvote case 1: { submission.UpCount--; submission.DownCount++; double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; // register Turn DownVote To UpVote var votingTracker = db.SubmissionVoteTrackers.FirstOrDefault(b => b.SubmissionID == submissionID && b.UserName == userName); previousVote.VoteStatus = -1; previousVote.CreationDate = DateTime.Now; db.SaveChanges(); SendVoteNotification(submission.UserName, "uptodownvote"); } break; // downvoted before, reset case -1: { //ResetMessageVote(userName, submissionID); submission.DownCount--; double currentScore = submission.UpCount - submission.DownCount; double submissionAge = Submissions.CalcSubmissionAgeDouble(submission.CreationDate); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; db.SubmissionVoteTrackers.Remove(previousVote); db.SaveChanges(); SendVoteNotification(submission.UserName, "upvote"); } break; } } }