/// <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="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> /// DataModel 转 ViewModel /// </summary> /// <param name="userscorelog"></param> /// <returns></returns> public static UserScoreLogVModel UserScoreLogInfoToVModel(UserScoreLogInfo userscorelog) { if (userscorelog == null) { return(new UserScoreLogVModel()); } return(new UserScoreLogVModel { Id = userscorelog.Id, UserId = userscorelog.UserId, Score = userscorelog.Score, CreateTime = userscorelog.CreateTime, Describe = userscorelog.Describe, OldScore = userscorelog.OldScore, NewScore = userscorelog.NewScore }); }
/// <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> /// 添加UserScoreLogInfo /// </summary> /// <param name="userscorelog"></param> /// <returns></returns> public static long AddUserScoreLog(UserScoreLogInfo userscorelog) { string sql = @"INSERT INTO [UserScoreLog] ([UserId],[Score],[CreateTime],[Describe],[OldScore],[NewScore]) VALUES (@UserId,@Score,@CreateTime,@Describe,@OldScore,@NewScore) SELECT SCOPE_IDENTITY() " ; var par = new DynamicParameters(); par.Add("@UserId", userscorelog.UserId, DbType.Int32); par.Add("@Score", userscorelog.Score, DbType.Int32); par.Add("@CreateTime", userscorelog.CreateTime, DbType.DateTime); par.Add("@Describe", userscorelog.Describe, DbType.String); par.Add("@OldScore", userscorelog.OldScore, DbType.Int64); par.Add("@NewScore", userscorelog.NewScore, DbType.Int64); return(DapWrapper.InnerQueryScalarSql <long>(DbConfig.ArticleManagerConnString, sql, par)); }
/// <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> /// <param name="sender"></param> /// <param name="e"></param> protected void Save(object sender, EditTermEventArgs <TermHistoryInfo> e) { try { var notes = e.TermHistory.Notes; //TODO: allow tag name editing // we have our UI values temporarily stored in variables above, we can update the history item (it needs to be added PRIOR to taxonomy term update done via core API) // TODO: Change auto approval to off Controller.AddTermHistory(ModuleContext.PortalId, View.Model.SelectedTerm.TermId, notes, true, ModuleContext.ModuleId); var cntTerm = new DotNetNuke.Entities.Content.Taxonomy.TermController(); var objTerm = View.Model.SelectedTerm; // make sure title/body are passing through security filters var objSecurity = new PortalSecurity(); var description = objSecurity.InputFilter(e.TermHistory.Description, PortalSecurity.FilterFlag.NoScripting); objTerm.Description = description; cntTerm.UpdateTerm(objTerm); var colUserScoring = QaSettings.GetUserScoringCollection(Controller.GetQaPortalSettings(ModuleContext.PortalId), ModuleContext.PortalId); var objScoreLog = new UserScoreLogInfo { UserId = ModuleContext.PortalSettings.UserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.EditedTag, Score = colUserScoring.Single( s => s.Key == Constants.UserScoringActions.EditedTag.ToString()).Value, CreatedOnDate = DateTime.Now }; Controller.AddScoringLog(objScoreLog, PrivilegeCollection); Response.Redirect(Links.ViewTagDetail(ModuleContext, ModuleContext.TabId, View.Model.SelectedTerm.Name), false); } catch (Exception exception) { ProcessModuleLoadException(exception); } }
/// <summary> /// 修改UserScoreLogInfo /// </summary> /// <param name="userscorelog"></param> /// <returns></returns> public static int UpdateUserScoreLog(UserScoreLogInfo userscorelog) { string sql = @"UPDATE [UserScoreLog] SET UserId=@UserId, Score=@Score, CreateTime=@CreateTime, Describe=@Describe, OldScore=@OldScore, NewScore=@NewScore WHERE Id=@Id"; var par = new DynamicParameters(); par.Add("@Id", userscorelog.Id, DbType.Int64); par.Add("@UserId", userscorelog.UserId, DbType.Int32); par.Add("@Score", userscorelog.Score, DbType.Int32); par.Add("@CreateTime", userscorelog.CreateTime, DbType.DateTime); par.Add("@Describe", userscorelog.Describe, DbType.String); par.Add("@OldScore", userscorelog.OldScore, DbType.Int64); par.Add("@NewScore", userscorelog.NewScore, DbType.Int64); return(DapWrapper.InnerExecuteSql(DbConfig.ArticleManagerConnString, sql, par)); }
/// <summary> /// /// </summary> /// <param name="objScoreLog"></param> /// <param name="sitePrivileges"></param> public void AddScoringLog(UserScoreLogInfo objScoreLog, IEnumerable <QaSettingInfo> sitePrivileges) { if (objScoreLog.Score > 0) { var currentScore = GetUserScore(objScoreLog.UserId, objScoreLog.PortalId); var oldTotal = 0; if (currentScore != null) { oldTotal = currentScore.Score; } var newScore = oldTotal + objScoreLog.Score; _dataProvider.AddScoringLog(objScoreLog.UserId, objScoreLog.PortalId, objScoreLog.UserScoringActionId, objScoreLog.Score, objScoreLog.KeyId, objScoreLog.Notes, objScoreLog.CreatedOnDate); // determine if the user gained a privilege with the last action var colPrivs = (from t in sitePrivileges where (t.Value > oldTotal) && (newScore >= t.Value) orderby t.Value ascending select t).ToList(); if (colPrivs.Count() > 0) { foreach (var privilege in colPrivs) { // this should only be one (we sort ascending so the one w/ the highest score is recorded last in case of multiples) // we need to set something in the db so we know to inform the user on their next view. _dataProvider.SetUserScoreMessage(objScoreLog.UserId, objScoreLog.PortalId, privilege.Key); } } } else { _dataProvider.AddScoringLog(objScoreLog.UserId, objScoreLog.PortalId, objScoreLog.UserScoringActionId, objScoreLog.Score, objScoreLog.KeyId, objScoreLog.Notes, objScoreLog.CreatedOnDate); } DataCache.RemoveCache(Constants.ModuleCacheKey + Constants.UserScoreCacheKey + objScoreLog.UserId + @"_" + objScoreLog.PortalId); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Save(object sender, AskQuestionEventArgs <PostInfo, bool, string> e) { try { var control = (System.Web.UI.UserControl)sender; if (e.Tags.Trim() == "") { var minMsg = Localization.GetString("SelectMinTag", LocalResourceFile); //var minCount = 1; //minMsg = minMsg.Replace("{0}", minCount.ToString()); UI.Skins.Skin.AddModuleMessage(control, minMsg, ModuleMessage.ModuleMessageType.RedError); return; } if (ModuleContext.Settings.ContainsKey(Constants.SettingMaxQuestionTags)) { var enteredTerms = e.Tags.Trim().Split(',').ToList(); if (enteredTerms.Count > Convert.ToInt32(ModuleContext.Settings[Constants.SettingMaxQuestionTags])) { var maxMsg = Localization.GetString("SelectMoreTags", LocalResourceFile); maxMsg = maxMsg.Replace("{0}", (ModuleContext.Settings[Constants.SettingMaxQuestionTags]).ToString()); UI.Skins.Skin.AddModuleMessage(control, maxMsg, ModuleMessage.ModuleMessageType.RedError); return; } } // TODO: validate selected tags are not in the disallow collection (module setting, loop through current collection and look for disallowed tags if found show message below) //UI.Skins.Skin.AddModuleMessage(this, Localization.GetString("InvalidTag", SharedResourceFile), ModuleMessage.ModuleMessageType.RedError); if (ModuleContext.Settings.ContainsKey(Constants.SettingMinBodyChars)) { if (e.Post.Content.Length > Convert.ToInt32(ModuleContext.Settings[Constants.SettingMaxQuestionTags])) { UI.Skins.Skin.AddModuleMessage(control, Localization.GetString("InvalidBody", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError); return; } } var userEnteredTerms = e.Tags.Split(',') .Where(s => s != string.Empty) .Select(p => p.Trim()) .Distinct().ToList(); foreach (var s in userEnteredTerms) { if (!Utils.ContainsSpecialCharacter(s)) { continue; } var msg = Localization.GetString("UnAllowedCharacters", LocalResourceFile); msg = msg.Replace("{0}", Constants.DisallowedCharacters); UI.Skins.Skin.AddModuleMessage(control, msg, ModuleMessage.ModuleMessageType.RedError); return; } var terms = new List <Term>(); userEnteredTerms.ForEach(t => terms.Add(Terms.CreateAndReturnTerm(t, VocabularyId))); var colOpThresholds = QaSettings.GetOpThresholdCollection(Controller.GetQaPortalSettings(ModuleContext.PortalId), ModuleContext.PortalId); var objTermApprove = colOpThresholds.Single(s => s.Key == Constants.OpThresholds.TermSynonymApproveCount.ToString()); var portalSynonyms = Controller.GetTermSynonyms(ModuleContext.PortalId); var postTerms = new List <Term>(); foreach (var term in terms) { var matchedSynonym = (from t in portalSynonyms where t.RelatedTermId == term.TermId && t.Score >= objTermApprove.Value select t).SingleOrDefault(); if (matchedSynonym != null) { var masterTerm = Terms.GetTermById(matchedSynonym.MasterTermId, VocabularyId); // we have to make sure the masterTerm is not already in the list of terms if (!terms.Contains(masterTerm)) { postTerms.Add(masterTerm); // update replaced count (for synonym) Controller.TermSynonymReplaced(matchedSynonym.RelatedTermId, ModuleContext.PortalId); } //else //{ // // show it was removed? //} } else { postTerms.Add(term); } } e.Post.Terms.AddRange(postTerms); e.Post.PortalId = ModuleContext.PortalId; e.Post.ModuleID = ModuleContext.ModuleId; e.Post.Body = Utils.ProcessSavePostBody(e.Post.Body); // remove line below if you want to enable post approval (changes in ascx too) e.Post.Approved = true; if (e.Post.Approved) { e.Post.ApprovedDate = DateTime.Now; } e.Post.ParentId = 0; e.Post.TabID = ModuleContext.TabId; e.Post.CreatedUserId = ModuleContext.PortalSettings.UserId; e.Post.CreatedDate = DateTime.Now; e.Post.LastModifiedUserId = ModuleContext.PortalSettings.UserId; e.Post.LastModifiedDate = DateTime.Now; // make sure title/body are passing through security filters var objSecurity = new PortalSecurity(); e.Post.Title = objSecurity.InputFilter(e.Post.Title, PortalSecurity.FilterFlag.NoScripting | PortalSecurity.FilterFlag.NoAngleBrackets | PortalSecurity.FilterFlag.NoMarkup); e.Post.Body = objSecurity.InputFilter(e.Post.Body, PortalSecurity.FilterFlag.NoScripting); var objPost = Controller.AddPost(e.Post, ModuleContext.TabId); Controller.UpdatePost(objPost, ModuleContext.TabId); // subscribe user if (e.Notify) { var objSub = new SubscriptionInfo { CreatedOnDate = DateTime.Now, PortalId = ModuleContext.PortalId, PostId = objPost.PostId, SubscriptionType = (int)Constants.SubscriptionType.InstantPost, UserId = ModuleContext.PortalSettings.UserId }; Controller.AddSubscription(objSub); } var colUserScoring = QaSettings.GetUserScoringCollection(Controller.GetQaPortalSettings(ModuleContext.PortalId), ModuleContext.PortalId); var objScoreLog = new UserScoreLogInfo { UserId = ModuleContext.PortalSettings.UserId, PortalId = ModuleContext.PortalId, UserScoringActionId = (int)Constants.UserScoringActions.AskedQuestion, Score = colUserScoring.Single( s => s.Key == Constants.UserScoringActions.AskedQuestion.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(objPost.PostId, objPost.Title, ModuleContext.PortalSettings.ActiveTab, ModuleContext.PortalSettings); cntJournal.AddQuestionToJournal(objPost, objPost.Title, ModuleContext.PortalId, ModuleContext.PortalSettings.UserId, questionUrl); Response.Redirect(questionUrl, false); } catch (Exception exception) { ProcessModuleLoadException(exception); } }
public void AddScoringLog(UserScoreLogInfo objScoreLog, IEnumerable <QaSettingInfo> privilegeCollection) { throw new NotImplementedException(); }
/// <summary> /// 修改UserScoreLogInfo /// </summary> /// <param name="userscorelog"></param> /// <returns></returns> public static int UpdateUserScoreLog(UserScoreLogInfo userscorelog) { return(DataProvider.UserScoreLogs.UpdateUserScoreLog(userscorelog)); }
/// <summary> /// 添加UserScoreLogInfo /// </summary> /// <param name="userscorelog"></param> /// <returns></returns> public static long AddUserScoreLog(UserScoreLogInfo userscorelog) { return(DataProvider.UserScoreLogs.AddUserScoreLog(userscorelog)); }
/// <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; } } }