Example #1
0
        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);
        }
Example #2
0
        /// <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);
                }
            }
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
        /// <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);
                }
            }
        }
Example #5
0
        /// <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);
                }
            }
        }
Example #6
0
        /// <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);
            }
        }
Example #7
0
        /// <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);
        }
Example #8
0
        /// <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;
                }
            }
        }
Example #9
0
        /// <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;
                }
            }
        }