protected void RepItemDataBound(object sender, ProfileReputationEventArgs <UserScoreLogInfo, Literal, HyperLink> e) { //var control = (Control)sender; e.AnswerCountLiteral.Text = e.UserScoreLogInfo.Score.ToString(); var actionId = e.UserScoreLogInfo.UserScoringActionId; var usersAction = (Constants.UserScoringActions)actionId; var objScoringAction = UserScoringCollection.Single(s => s.Key == usersAction.ToString()); //e.QuestionTitleLink.NavigateUrl = Links.ViewQuestion(e.UserScoreLogInfo.PostId, e.QuestionInfo.TabID, ModuleContext.PortalSettings); e.QuestionTitleLink.Text = Localization.GetString(objScoringAction.Name, Constants.SharedResourceFileName); }
/// <summary> /// This method checks to see if the currently logged in user has gained a privilege since the last time the page was loaded. /// </summary> /// <remarks>This should be run on every page load.</remarks> private void AwardMessaging() { if (ModContext.PortalSettings.UserId > 0) { if (UserScore.Message.Length > 0) { int num; var message = ""; var isNum = int.TryParse(UserScore.Message, out num); if (isNum) { var actionId = Convert.ToInt32(UserScore.Message); var usersAction = (Constants.UserScoringActions)actionId; var objScoringAction = UserScoringCollection.Single(s => s.Key == usersAction.ToString()); if (objScoringAction.Value > 0) { message = Localization.GetString("ReputationPoints", MyResourceFile); var actionName = Localization.GetString(usersAction.ToString(), Constants.SharedResourceFileName); message = message.Replace("{0}", objScoringAction.Value.ToString()); message = message.Replace("{1}", actionName); } } else { message = Localization.GetString("NewPrivilege", MyResourceFile); // we store the key in the message table var objPriv = PrivilegeCollection.Single(s => s.Key == UserScore.Message); var privText = Localization.GetString(objPriv.Name, Constants.SharedResourceFileName); var privDesc = Localization.GetString(objPriv.Description, Constants.SharedResourceFileName); var privLink = Links.ViewPrivilege(ModContext, objPriv.Key); if (objPriv.Key != Constants.Privileges.CreatePost.ToString()) { var cntJournal = new Journal(); cntJournal.AddPrivilegeToJournal(objPriv, privText, privDesc, ModContext.PortalId, ModContext.TabId, ModContext.PortalSettings.UserId, privLink); } message = message.Replace("{0}", privText); message = message.Replace("{1}", privLink); } litMessage.Text = message; // clear the message from the db Controller.ClearUserScoreMessage(UserScore.UserId, ModContext.PortalId); } } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Save(object sender, AddAnswerEventArgs <PostInfo> e) { try { e.NewPost.PortalId = ModuleContext.PortalId; e.NewPost.ModuleID = ModuleContext.ModuleId; e.NewPost.Body = Utils.ProcessSavePostBody(e.NewPost.Body); // We will always have a parent here that is not 0. e.NewPost.ParentId = QuestionID; e.NewPost.Approved = true; e.NewPost.ApprovedDate = DateTime.Now; e.NewPost.ContentItemId = View.Model.Question.ContentItemId; e.NewPost.TabID = ModuleContext.TabId; e.NewPost.CreatedUserId = ModuleContext.PortalSettings.UserId; e.NewPost.CreatedDate = DateTime.Now; // make sure title/body are passing through security filters var objSecurity = new PortalSecurity(); e.NewPost.Body = objSecurity.InputFilter(e.NewPost.Body, PortalSecurity.FilterFlag.NoScripting); e.NewPost = Controller.AddPost(e.NewPost, ModuleContext.TabId); var objScoreLog = new UserScoreLogInfo { UserId = ModuleContext.PortalSettings.UserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.ProvidedAnswer, KeyId = e.NewPost.PostId, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.ProvidedAnswer.ToString()).Value, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLog, PrivilegeCollection); // if we ever allow moderation/approval to be enabled, this needs to respect that. var cntJournal = new Journal(); var questionUrl = Links.ViewQuestion(QuestionID, View.Model.Question.Title, ModuleContext.PortalSettings.ActiveTab, ModuleContext.PortalSettings); cntJournal.AddAnswerToJournal(e.NewPost, View.Model.Question.Title, ModuleContext.PortalId, ModuleContext.PortalSettings.UserId, questionUrl); Response.Redirect(questionUrl, true); } catch (Exception exception) { ProcessModuleLoadException(exception); } }
/// <summary> /// This will check if the flagged vote put us over the threshold to complete the flagging process (soft delete on the post, assign reputation points, clearing cache, etc.) /// </summary> /// <param name="currentPostId"></param> /// <param name="questionId"></param> /// <param name="contentItemId"></param> /// <remarks>Always delete the post last, in case we move to hard deletes. We need to know the deleted post info to log scoring actions.</remarks> private void FlagThresholdCheck(int currentPostId, int questionId, int contentItemId) { var votes = (from t in Controller.GetPostVotes(currentPostId) where (t.VoteTypeId == (int)Constants.VoteType.FlagPost) select t).ToList(); var objFlagCompleteThreshold = ThresholdCollection.Single(s => s.Key == Constants.OpThresholds.PostFlagCompleteCount.ToString()); if ((votes.Count) >= objFlagCompleteThreshold.Value) { var objPost = Controller.GetPost(currentPostId, ModuleContext.PortalId); if (currentPostId != questionId) { var objScoreLogApprove = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.ProvidedFlaggedAnswer, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.ProvidedFlaggedAnswer.ToString()).Value, KeyId = currentPostId, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLogApprove, PrivilegeCollection); Controller.DeletePost(currentPostId, questionId, ModuleContext.PortalId, contentItemId, true, ModuleContext.ModuleId); } else { var objScoreLogApprove = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.AskedFlaggedQuestion, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.AskedFlaggedQuestion.ToString()).Value, KeyId = questionId, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLogApprove, PrivilegeCollection); Controller.DeletePost(currentPostId, 0, ModuleContext.PortalId, contentItemId, true, ModuleContext.ModuleId); } } }
/// <summary> /// This will bind the text and navigation URL's for the links. When finished, it will call the DetermineVisibility method. /// </summary> private void BindNavigation() { hlHome.Text = Localization.GetString("hlHome", MyResourceFile); hlHome.NavigateUrl = Links.Home(ModContext.TabId); hlQuestions.Text = Localization.GetString("hlQuestions", MyResourceFile); hlQuestions.NavigateUrl = Links.ViewQuestions(ModContext); hlTags.Text = Localization.GetString("hlTags", MyResourceFile); hlTags.NavigateUrl = Links.ViewTags(ModContext); hlBadges.Text = Localization.GetString("hlBadges", MyResourceFile); hlBadges.NavigateUrl = Links.ViewBadges(ModContext); hlUnanswered.Text = Localization.GetString("hlUnanswered", MyResourceFile); hlUnanswered.NavigateUrl = Links.ViewUnansweredQuestions(ModContext, 1, ""); hlAskQuestion.Text = Localization.GetString("hlAskQuestion", MyResourceFile); hlAskQuestion.NavigateUrl = Links.AskQuestion(ModContext); imgSearch.ImageUrl = ResolveUrl("~/DesktopModules/DNNQA/images/searchButton_bg.png"); imgSearch.AlternateText = Localization.GetString("overlaySearch", MyResourceFile); imgSearch.ToolTip = Localization.GetString("overlaySearch", MyResourceFile); DetermineVisibility(); if (ModContext.PortalSettings.UserId > 0) { if (UserScore.Score == 0) { var objScoreLog = new UserScoreLogInfo { UserId = ModContext.PortalSettings.UserId, PortalId = ModContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.FirstLoggedInView, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.ProvidedAnswer.ToString()).Value, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLog, PrivilegeCollection); } } }
/// <summary> /// /// </summary> protected void ViewLoad(object sender, EventArgs eventArgs) { try { //var colBadges = Controller.GetPortalBadges(ModuleContext.PortalId); //var objBadge = colBadges.Single(s => s.BadgeId == Id); //if (objBadge != null) //{ // View.Model.Badge = objBadge; //} View.Model.PortalBadges = Controller.GetPortalBadges(ModuleContext.PortalId); View.Model.UserScoringActions = UserScoringCollection.ToList(); View.ItemDataBound += ItemDataBound; View.Refresh(); } catch (Exception exc) { ProcessModuleLoadException(exc); } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks>If we are changing the accepted answer, for now we are ok with multiple authors getting credit for an accepted answer BUT we only want to allow a single user to be rewarded 1x per answer. </remarks> protected void AcceptAnswer(object sender, AcceptAnswerEventArgs <int, int, int> e) { var objPost = Controller.GetPost(e.PostId, ModuleContext.PortalId); if (objPost != null) { Controller.AcceptAnswer(e.PostId, e.UserId, DateTime.Now, ModuleContext.ModuleId); var colUserScoring = QaSettings.GetUserScoringCollection(Controller.GetQaPortalSettings(ModuleContext.PortalId), ModuleContext.PortalId); if (View.Model.Question.AnswerId > 0) { // these prevent anyone for getting points 2x for the same answer (although multiple answer authors could be credited over the liftime of a question since an accepted answer can change). Controller.DeleteUserScoreLog(objPost.CreatedUserId, ModuleContext.PortalId, (int)Constants.UserScoringActions.ProvidedAcceptedAnswer, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.ProvidedAcceptedAnswer.ToString()).Value, e.PostId); Controller.DeleteUserScoreLog(ModuleContext.PortalSettings.UserId, ModuleContext.PortalId, (int)Constants.UserScoringActions.AcceptedQuestionAnswer, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.AcceptedQuestionAnswer.ToString()).Value, e.PostId); } var objAScoreLog = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.ProvidedAcceptedAnswer, KeyId = e.PostId, Score = colUserScoring.Single( s => s.Key == Constants.UserScoringActions.ProvidedAcceptedAnswer.ToString()).Value, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objAScoreLog, PrivilegeCollection); var objScoreLog = new UserScoreLogInfo { UserId = ModuleContext.PortalSettings.UserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.AcceptedQuestionAnswer, KeyId = e.PostId, Score = colUserScoring.Single( s => s.Key == Constants.UserScoringActions.AcceptedQuestionAnswer.ToString()).Value, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLog, PrivilegeCollection); } //TODO: CP - Journal Integration once accepted answer is in build.' Response.Redirect(Links.ViewQuestion(QuestionID, View.Model.Question.Title, ModuleContext.PortalSettings.ActiveTab, ModuleContext.PortalSettings), true); }
/// <summary> /// /// </summary> /// <param name="threshold"></param> /// <param name="voteType"></param> private void VotingThresholdCheck(Constants.OpThresholds threshold, Constants.VoteType voteType) { var objThreshold = ThresholdCollection.Single(s => s.Key == threshold.ToString()); var votes = new List <VoteInfo>(); switch (voteType) { case Constants.VoteType.VoteDownPost: votes = (from t in Controller.GetPostVotes(CurrentPostID) where (t.VoteTypeId == (int)Constants.VoteType.VoteDownPost) select t).ToList(); break; case Constants.VoteType.VoteUpPost: votes = (from t in Controller.GetPostVotes(CurrentPostID) where (t.VoteTypeId == (int)Constants.VoteType.VoteUpPost) select t).ToList(); break; case Constants.VoteType.VoteSynonymUp: votes = (from t in Controller.GetTermSynonymVotes(RelatedTermId, ModContext.PortalId) where (t.VoteTypeId == (int)Constants.VoteType.VoteSynonymUp) select t).ToList(); break; case Constants.VoteType.VoteSynonymDown: votes = (from t in Controller.GetTermSynonymVotes(RelatedTermId, ModContext.PortalId) where (t.VoteTypeId == (int)Constants.VoteType.VoteSynonymDown) select t).ToList(); break; // term cases possible in future } if ((votes.Count + 1) >= objThreshold.Value) { // we broke the threshold, log it switch (threshold) { case Constants.OpThresholds.TermSynonymApproveCount: // give the author any credit due for suggesting a sysnonym that was approved // we need to get the userId to given them some rep var colPortalSynonyms = Controller.GetTermSynonyms(ModContext.PortalId); var objSynonym = (from t in colPortalSynonyms where ((t.RelatedTermId == RelatedTermId) && (t.PortalId == ModContext.PortalId) && (t.MasterTermId == TermId)) select t).SingleOrDefault(); var objScoreLogApprove = new UserScoreLogInfo { UserId = objSynonym.CreatedByUserId, PortalId = ModContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.CreatedTagSynonym, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.CreatedTagSynonym.ToString()).Value, KeyId = RelatedTermId, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLogApprove, PrivilegeCollection); // TODO: handle remapping of tags (keep count)? (or do we only update the new posts added) break; case Constants.OpThresholds.TermSynonymRejectCount: // TODO: handle closing off term synonym (so it cannot be suggested again, any scoring actions) break; case Constants.OpThresholds.UserUpVoteQuestionCount: // a question can be voted up infinite times, take no action break; case Constants.OpThresholds.UserUpVoteAnswerCount: // an answer can be voted up infinite times, take no action break; //case Constants.OpThresholds.UserDownVoteQuestionCount : // break; //case Constants.OpThresholds.UserDownVoteAnswerCount : // break; } } }
/// <summary> /// /// </summary> /// <param name="voteValue"></param> private void SaveVote(int voteValue) { var objVote = new VoteInfo { CreatedByUserId = ModContext.PortalSettings.UserId, CreatedOnDate = DateTime.Now, TermId = -1, PostId = -1, PortalId = ModContext.PortalId }; switch (VotingMode) { case Constants.VoteMode.Synonym: var colTermVotes = Controller.GetTermSynonymVotes(RelatedTermId, ModContext.PortalId); switch (voteValue) { case -1: var voteSDown = UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedSynonymDown.ToString()).Value; objVote.VoteTypeId = (int)Constants.VoteType.VoteSynonymDown; objVote.TermId = RelatedTermId; var objUserVoteSd = (from t in colTermVotes where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && (t.VoteTypeId == (int)Constants.VoteType.VoteSynonymDown)) select t).SingleOrDefault(); if (objUserVoteSd != null) { Controller.DeleteUserScoreLog(ModContext.PortalSettings.UserId, ModContext.PortalId, (int)Constants.UserScoringActions.VotedSynonymDown, voteSDown, RelatedTermId); } else { var objScoreLog = new UserScoreLogInfo { UserId = ModContext.PortalSettings.UserId, PortalId = ModContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.VotedSynonymDown, Score = voteSDown, KeyId = RelatedTermId, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLog, PrivilegeCollection); VotingThresholdCheck(Constants.OpThresholds.TermSynonymRejectCount, Constants.VoteType.VoteSynonymDown); } break; case 1: var voteSUp = UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedSynonymUp.ToString()).Value; objVote.VoteTypeId = (int)Constants.VoteType.VoteSynonymUp; objVote.TermId = RelatedTermId; var objUserVoteSu = (from t in colTermVotes where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && (t.VoteTypeId == (int)Constants.VoteType.VoteSynonymUp)) select t).SingleOrDefault(); if (objUserVoteSu != null) { Controller.DeleteUserScoreLog(ModContext.PortalSettings.UserId, ModContext.PortalId, (int)Constants.UserScoringActions.VotedSynonymUp, voteSUp, RelatedTermId); } else { var objScoreLog = new UserScoreLogInfo { UserId = ModContext.PortalSettings.UserId, PortalId = ModContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.VotedSynonymUp, Score = voteSUp, KeyId = RelatedTermId, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLog, PrivilegeCollection); VotingThresholdCheck(Constants.OpThresholds.TermSynonymApproveCount, Constants.VoteType.VoteSynonymUp); } break; } break; //case Constants.VoteMode.Term: // //objVote.VoteTypeId = (int)Constants.VoteType.FlagPost; // break; default: // post=question/answer var colPostVotes = Controller.GetPostVotes(CurrentPostID); switch (voteValue) { case -1: objVote.VoteTypeId = (int)Constants.VoteType.VoteDownPost; objVote.PostId = CurrentPostID; var objUserPostVoteD = (from t in colPostVotes where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && (t.VoteTypeId == (int)Constants.VoteType.VoteDownPost)) select t).SingleOrDefault(); if (objUserPostVoteD != null) { if (VotingMode == Constants.VoteMode.Question) { Controller.DeleteUserScoreLog(ModContext.PortalSettings.UserId, ModContext.PortalId, (int)Constants.UserScoringActions.VotedDownQuestion, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedDownQuestion.ToString()).Value, CurrentPostID); var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); Controller.DeleteUserScoreLog(objPost.CreatedUserId, ModContext.PortalId, (int)Constants.UserScoringActions.AskedQuestionVotedDown, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.AskedQuestionVotedDown.ToString()).Value, CurrentPostID); } else { Controller.DeleteUserScoreLog(ModContext.PortalSettings.UserId, ModContext.PortalId, (int)Constants.UserScoringActions.VotedDownAnswer, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedDownAnswer.ToString()).Value, CurrentPostID); var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); Controller.DeleteUserScoreLog(objPost.CreatedUserId, ModContext.PortalId, (int)Constants.UserScoringActions.ProvidedAnswerVotedDown, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.ProvidedAnswerVotedDown.ToString()).Value, CurrentPostID); } } else { var objScoreLogD = new UserScoreLogInfo { UserId = ModContext.PortalSettings.UserId, PortalId = ModContext.PortalId, KeyId = CurrentPostID, CreatedOnDate = DateTime.Now }; if (VotingMode == Constants.VoteMode.Question) { objScoreLogD.UserScoringActionId = (int)Constants.UserScoringActions.VotedDownQuestion; objScoreLogD.Score = UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedDownQuestion.ToString()).Value; Controller.AddScoringLog(objScoreLogD, PrivilegeCollection); // handle reputation credit for question up-vote var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); var objUserScoringLog = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModContext.PortalId, KeyId = CurrentPostID, CreatedOnDate = DateTime.Now, UserScoringActionId = (int)Constants.UserScoringActions.AskedQuestionVotedDown, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.AskedQuestionVotedDown.ToString()). Value }; Controller.AddScoringLog(objUserScoringLog, PrivilegeCollection); //VotingThresholdCheck(Constants.OpThresholds.UserDownVoteQuestionCount, Constants.VoteType.VoteDownPost); } else { objScoreLogD.UserScoringActionId = (int)Constants.UserScoringActions.VotedDownAnswer; objScoreLogD.Score = UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedDownAnswer.ToString()).Value; Controller.AddScoringLog(objScoreLogD, PrivilegeCollection); // handle reputation credit for answer up-vote var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); var objUserScoringLog = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModContext.PortalId, KeyId = CurrentPostID, CreatedOnDate = DateTime.Now, UserScoringActionId = (int)Constants.UserScoringActions.ProvidedAnswerVotedDown, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.ProvidedAnswerVotedDown.ToString()). Value }; Controller.AddScoringLog(objUserScoringLog, PrivilegeCollection); //VotingThresholdCheck(Constants.OpThresholds.UserDownVoteAnswerCount, Constants.VoteType.VoteDownPost); } } break; case 1: objVote.VoteTypeId = (int)Constants.VoteType.VoteUpPost; objVote.PostId = CurrentPostID; var objUserPostVoteU = (from t in colPostVotes where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && (t.VoteTypeId == (int)Constants.VoteType.VoteUpPost)) select t).SingleOrDefault(); if (objUserPostVoteU != null) { if (VotingMode == Constants.VoteMode.Question) { Controller.DeleteUserScoreLog(ModContext.PortalSettings.UserId, ModContext.PortalId, (int)Constants.UserScoringActions.VotedUpQuestion, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedUpQuestion.ToString()).Value, CurrentPostID); var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); Controller.DeleteUserScoreLog(objPost.CreatedUserId, ModContext.PortalId, (int)Constants.UserScoringActions.AskedQuestionVotedUp, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.AskedQuestionVotedUp.ToString()).Value, CurrentPostID); } else { Controller.DeleteUserScoreLog(ModContext.PortalSettings.UserId, ModContext.PortalId, (int)Constants.UserScoringActions.VotedUpAnswer, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedUpAnswer.ToString()).Value, CurrentPostID); var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); Controller.DeleteUserScoreLog(objPost.CreatedUserId, ModContext.PortalId, (int)Constants.UserScoringActions.ProvidedAnswerVotedUp, UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.ProvidedAnswerVotedUp.ToString()).Value, CurrentPostID); } } else { var objScoreLogU = new UserScoreLogInfo { UserId = ModContext.PortalSettings.UserId, PortalId = ModContext.PortalId, KeyId = CurrentPostID, CreatedOnDate = DateTime.Now }; if (VotingMode == Constants.VoteMode.Question) { objScoreLogU.UserScoringActionId = (int)Constants.UserScoringActions.VotedUpQuestion; objScoreLogU.Score = UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedUpQuestion.ToString()).Value; Controller.AddScoringLog(objScoreLogU, PrivilegeCollection); // handle reputation credit for question up-vote var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); var objUserScoringLog = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModContext.PortalId, KeyId = CurrentPostID, CreatedOnDate = DateTime.Now, UserScoringActionId = (int)Constants.UserScoringActions.AskedQuestionVotedUp, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.AskedQuestionVotedUp.ToString()). Value }; Controller.AddScoringLog(objUserScoringLog, PrivilegeCollection); VotingThresholdCheck(Constants.OpThresholds.UserUpVoteQuestionCount, Constants.VoteType.VoteUpPost); } else { objScoreLogU.UserScoringActionId = (int)Constants.UserScoringActions.VotedUpAnswer; objScoreLogU.Score = UserScoringCollection.Single(s => s.Key == Constants.UserScoringActions.VotedUpAnswer.ToString()).Value; Controller.AddScoringLog(objScoreLogU, PrivilegeCollection); // handle reputation credit for answer up-vote var objPost = Controller.GetPost(CurrentPostID, ModContext.PortalId); var objUserScoringLog = new UserScoreLogInfo { UserId = objPost.CreatedUserId, PortalId = ModContext.PortalId, KeyId = CurrentPostID, CreatedOnDate = DateTime.Now, UserScoringActionId = (int)Constants.UserScoringActions.ProvidedAnswerVotedUp, Score = UserScoringCollection.Single( s => s.Key == Constants.UserScoringActions.ProvidedAnswerVotedUp.ToString()). Value }; Controller.AddScoringLog(objUserScoringLog, PrivilegeCollection); VotingThresholdCheck(Constants.OpThresholds.UserUpVoteAnswerCount, Constants.VoteType.VoteUpPost); } } break; } break; } VoteInfo objExistingVote; switch (VotingMode) { case Constants.VoteMode.Synonym: var col = Controller.GetTermSynonymVotes(RelatedTermId, ModContext.PortalId); objExistingVote = (from t in col where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && ((t.VoteTypeId == (int)Constants.VoteType.VoteSynonymUp) || (t.VoteTypeId == (int)Constants.VoteType.VoteSynonymDown))) select t).SingleOrDefault(); break; //case Constants.VoteMode.Term: // objUserVote = (from t in Controller.GetPostVotes(CurrentPostID) where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && (t.VoteTypeId == (int)Constants.VoteType.FlagPost)) select t).SingleOrDefault(); //break; default: // question/answer var colPostVotes = Controller.GetPostVotes(CurrentPostID); objExistingVote = (from t in colPostVotes where ((t.CreatedByUserId == ModContext.PortalSettings.UserId) && ((t.VoteTypeId == (int)Constants.VoteType.VoteUpPost) || (t.VoteTypeId == (int)Constants.VoteType.VoteDownPost))) select t).SingleOrDefault(); break; } objVote.VoteId = Controller.AddVote(objVote, ModContext.ModuleId); if (objVote.VoteTypeId == Convert.ToInt32(Constants.VoteType.FlagPost)) { return; } if (objExistingVote != null) { var cntJournal = new Journal(); cntJournal.RemoveVoteFromJournal(objExistingVote.VoteId, ModContext.ModuleId, ModContext.PortalId); } else { var cntJournal = new Journal(); string summary; var title = Question.Title; var questionUrl = Links.ViewQuestion(Question.PostId, Question.Title, ModContext.PortalSettings.ActiveTab, ModContext.PortalSettings); switch (objVote.VoteTypeId) { case (int)Constants.VoteType.VoteDownPost: summary = Services.Localization.Localization.GetString(objVote.PostId == Question.PostId ? "VoteDownTitleQuestion" : "VoteDownTitleAnswer", SharedResourceFile); cntJournal.AddVoteToJournal(Question, objVote.VoteId, title, summary, ModContext.PortalId, ModContext.PortalSettings.UserId, questionUrl); break; case (int)Constants.VoteType.VoteSynonymDown: break; case (int)Constants.VoteType.VoteUpPost: summary = Services.Localization.Localization.GetString(objVote.PostId == Question.PostId ? "VoteUpTitleQuestion" : "VoteUpTitleAnswer", SharedResourceFile); cntJournal.AddVoteToJournal(Question, objVote.VoteId, title, summary, ModContext.PortalId, ModContext.PortalSettings.UserId, questionUrl); break; case (int)Constants.VoteType.VoteSynonymUp: break; } } }