public static int LinkKarma(string userName) { using (whoaverseEntities db = new whoaverseEntities()) { try { int likes = db.Messages .Where(r => r.Name.Equals(userName, StringComparison.OrdinalIgnoreCase)) .Sum(r => (int)r.Likes); int dislikes = db.Messages .Where(r => r.Name.Equals(userName, StringComparison.OrdinalIgnoreCase)) .Sum(r => (int)r.Dislikes); return likes - dislikes; } catch (Exception) { return 0; } } }
// delete a user account and all history: comments, posts and votes public static bool DeleteUser(string userName) { using (whoaverseEntities db = new whoaverseEntities()) { using (UserManager<ApplicationUser> tmpUserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) { var tmpuser = tmpUserManager.FindByName(userName); if (tmpuser != null) { //remove voting history for submisions db.Votingtrackers.RemoveRange(db.Votingtrackers.Where(x => x.UserName == userName)); //remove voting history for comments db.Commentvotingtrackers.RemoveRange(db.Commentvotingtrackers.Where(x => x.UserName == userName)); //remove all comments var comments = db.Comments.Where(c => c.Name == userName); foreach (Comment c in comments) { c.Name = "deleted"; c.CommentContent = "deleted"; db.SaveChangesAsync(); } //remove all submissions var submissions = db.Messages.Where(c => c.Name == userName); foreach (Message s in submissions) { if (s.Type == 1) { s.Name = "deleted"; s.MessageContent = "deleted"; s.Title = "deleted"; } else { s.Name = "deleted"; s.Linkdescription = "deleted"; s.MessageContent = "http://whoaverse.com"; } } db.SaveChangesAsync(); var result = tmpUserManager.DeleteAsync(tmpuser); return true; } else { return false; } } } }
//returns -1:downvoted, 1:upvoted, 0:not voted public static int CheckIfVoted(string userToCheck, int messageId) { int intCheckResult = 0; using (whoaverseEntities db = new whoaverseEntities()) { var checkResult = db.Votingtrackers .Where(b => b.MessageId == messageId && b.UserName == userToCheck) .FirstOrDefault(); if (checkResult != null) { intCheckResult = checkResult.VoteStatus.Value; } else { intCheckResult = 0; } return intCheckResult; } }
public static int CommentKarma(string userName) { using (whoaverseEntities db = new whoaverseEntities()) { try { int sumOfLikes = db.Comments .Where(r => r.Name.Trim().Equals(userName, StringComparison.OrdinalIgnoreCase)) .Sum(r => (int)r.Likes); int sumOfdislikes = db.Comments .Where(r => r.Name.Trim().Equals(userName, StringComparison.OrdinalIgnoreCase)) .Sum(r => (int)r.Dislikes); return sumOfLikes - sumOfdislikes; } catch (Exception) { return 0; } } }
//submit submission downvote public static void DownvoteSubmission(int submissionId, string userWhichDownvoted) { int result = Voting.CheckIfVoted(userWhichDownvoted, submissionId); using (whoaverseEntities db = new whoaverseEntities()) { Message submission = db.Messages.Find(submissionId); switch (result) { //never voted before case 0: if (submission != null) { submission.Dislikes++; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Whoaverse.Utils.Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; //register downvote Votingtracker tmpVotingTracker = new Votingtracker(); tmpVotingTracker.MessageId = submissionId; tmpVotingTracker.UserName = userWhichDownvoted; tmpVotingTracker.VoteStatus = -1; db.Votingtrackers.Add(tmpVotingTracker); db.SaveChanges(); } break; //upvoted before, turn upvote to downvote case 1: if (submission != null) { submission.Likes--; submission.Dislikes++; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Whoaverse.Utils.Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; //register Turn DownVote To UpVote var votingTracker = db.Votingtrackers .Where(b => b.MessageId == submissionId && b.UserName == userWhichDownvoted) .FirstOrDefault(); if (votingTracker != null) { votingTracker.VoteStatus = -1; } db.SaveChanges(); } break; //downvoted before, reset case -1: if (submission != null) { submission.Dislikes--; double currentScore = submission.Likes - submission.Dislikes; double submissionAge = Whoaverse.Utils.Submissions.CalcSubmissionAgeDouble(submission.Date); double newRank = Ranking.CalculateNewRank(submission.Rank, submissionAge, currentScore); submission.Rank = newRank; db.SaveChanges(); ResetMessageVote(userWhichDownvoted, submissionId); } break; } } }
//a user has either upvoted or downvoted this submission earlier and wishes to reset the vote, delete the record public static void ResetMessageVote(string userWhichVoted, int messageId) { using (whoaverseEntities db = new whoaverseEntities()) { var votingTracker = db.Votingtrackers .Where(b => b.MessageId == messageId && b.UserName == userWhichVoted) .FirstOrDefault(); if (votingTracker != null) { //delete vote history db.Votingtrackers.Remove(votingTracker); db.SaveChanges(); } } }
//submit submission downvote public static void DownvoteComment(int commentId, string userWhichDownvoted) { int result = VotingComments.CheckIfVotedComment(userWhichDownvoted, commentId); using (whoaverseEntities db = new whoaverseEntities()) { Comment comment = db.Comments.Find(commentId); switch (result) { //never voted before case 0: if (comment != null) { comment.Dislikes++; //register downvote Commentvotingtracker tmpVotingTracker = new Commentvotingtracker(); tmpVotingTracker.CommentId = commentId; tmpVotingTracker.UserName = userWhichDownvoted; tmpVotingTracker.VoteStatus = -1; db.Commentvotingtrackers.Add(tmpVotingTracker); db.SaveChanges(); } break; //upvoted before, turn upvote to downvote case 1: if (comment != null) { comment.Likes--; comment.Dislikes++; //register Turn DownVote To UpVote var votingTracker = db.Commentvotingtrackers .Where(b => b.CommentId == commentId && b.UserName == userWhichDownvoted) .FirstOrDefault(); if (votingTracker != null) { votingTracker.VoteStatus = -1; } db.SaveChanges(); } break; //downvoted before, reset case -1: if (comment != null) { comment.Dislikes--; db.SaveChanges(); ResetCommentVote(userWhichDownvoted, commentId); } break; } } }
// return a list of user badges public static List<Userbadge> UserBadges(string userName) { using (whoaverseEntities db = new whoaverseEntities()) { return db.Userbadges.Include("Badge") .Where(r => r.Username.Equals(userName, StringComparison.OrdinalIgnoreCase)) .ToList(); } }
// check if given user is moderator for a given subverse public static bool IsUserSubverseModerator(string userName, string subverse) { using (whoaverseEntities db = new whoaverseEntities()) { var subverseModerator = db.SubverseAdmins.Where(n => n.SubverseName == subverse && n.Power == 2).FirstOrDefault(); if (subverseModerator != null && subverseModerator.Username == userName) { return true; } else { return false; }; } }
// unsubscribe from a subverse public static void UnSubscribeFromSubverse(string userName, string subverse) { if (IsUserSubverseSubscriber(userName, subverse)) { using (whoaverseEntities db = new whoaverseEntities()) { var subscription = db.Subscriptions .Where(b => b.Username == userName && b.SubverseName == subverse) .FirstOrDefault(); if (subverse != null) { // remove subscription record db.Subscriptions.Remove(subscription); // record new unsubscription in subverse table subscribers field Subverse tmpSubverse = db.Subverses.Find(subverse); if (tmpSubverse != null) { tmpSubverse.subscribers--; } db.SaveChanges(); } } } }
// return subscription count for a given user public static int SubscriptionCount(string userName) { using (whoaverseEntities db = new whoaverseEntities()) { return db.Subscriptions.AsEnumerable() .Where(r => r.Username.Equals(userName, StringComparison.OrdinalIgnoreCase)) .Count(); } }
// subscribe to a subverse public static void SubscribeToSubverse(string userName, string subverse) { if (!IsUserSubverseSubscriber(userName, subverse)) { using (whoaverseEntities db = new whoaverseEntities()) { // add a new subscription Subscription newSubscription = new Subscription(); newSubscription.Username = userName; newSubscription.SubverseName = subverse; db.Subscriptions.Add(newSubscription); // record new subscription in subverse table subscribers field Subverse tmpSubverse = db.Subverses.Find(subverse); if (tmpSubverse != null) { tmpSubverse.subscribers++; } db.SaveChanges(); } } }
// check if given user is subscribed to a given subverse public static bool IsUserSubverseSubscriber(string userName, string subverse) { using (whoaverseEntities db = new whoaverseEntities()) { var subverseSubscriber = db.Subscriptions.Where(n => n.SubverseName.ToLower() == subverse.ToLower() && n.Username == userName).FirstOrDefault(); if (subverseSubscriber != null) { return true; } else { return false; }; } }
// check if given user is the owner for a given subverse public static bool IsUserSubverseAdmin(string userName, string subverse) { using (whoaverseEntities db = new whoaverseEntities()) { var subverseOwner = db.SubverseAdmins.Where(n => n.SubverseName.ToLower() == subverse.ToLower() && n.Power == 1).FirstOrDefault(); if (subverseOwner != null && subverseOwner.Username.ToLower() == userName.ToLower()) { return true; } else { return false; }; } }