Exemple #1
0
        public override void QueryForBeforeRequestIn3M(out TopicStatusCollection experiesTopicStatus, out List <int> autoFinalQuestionThreadIds, out Dictionary <int, Dictionary <int, int> > autoFinalQuestionForumIDAndRewards)
        {
            //供放置查出的已经过期的提问
            //List<Question> expiresQuestions = new List<Question>();

            List <QuestionThread> expiresQuestions = new List <QuestionThread>();

            Dictionary <int, int> threadIDAndPostUserIDs = new Dictionary <int, int>();
            Dictionary <int, int> threadIDAndForumIDs    = new Dictionary <int, int>();

            autoFinalQuestionThreadIds = new List <int>();

            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText    = "bx_QueryForBeforeRequestIn3M";
                query.CommandType    = CommandType.StoredProcedure;
                query.CommandTimeout = 30;

                try
                {
                    if (IsAutoFinalQuestion == true)
                    {
                        experiesTopicStatus = new TopicStatusCollection();
                        autoFinalQuestionForumIDAndRewards = new Dictionary <int, Dictionary <int, int> >();
                        return;
                    }
                    IsAutoFinalQuestion = true;

                    using (XSqlDataReader reader = query.ExecuteReader())
                    {
                        experiesTopicStatus = new TopicStatusCollection(reader);

                        reader.NextResult();

                        while (reader.Read())
                        {
                            //Question question = ConvertData.ConvertToQuestion(reader);
                            QuestionThread question = new QuestionThread();
                            question.ThreadID = reader.Get <int>(reader.GetOrdinal("ThreadID"));
                            question.FillQuestion(reader);

                            expiresQuestions.Add(question);

                            int forumID = reader.Get <int>("ForumID");

                            threadIDAndForumIDs.Add(question.ThreadID, forumID);

                            threadIDAndPostUserIDs.Add(question.ThreadID, reader.GetInt32(reader.GetOrdinal("PostUserID")));
                        }
                    }


                    query.CommandText    = "bx_AutoFinalQuestion";
                    query.CommandType    = CommandType.StoredProcedure;
                    query.CommandTimeout = 30;

                    autoFinalQuestionForumIDAndRewards = new Dictionary <int, Dictionary <int, int> >();
                    foreach (QuestionThread q in expiresQuestions)
                    {
                        int forumID;
                        if (threadIDAndForumIDs.ContainsKey(q.ThreadID))
                        {
                            forumID = threadIDAndForumIDs[q.ThreadID];
                        }
                        else
                        {
                            continue;
                        }

                        query.Parameters.Clear();
                        query.CreateParameter <int>("@ThreadID", q.ThreadID, SqlDbType.Int);
                        query.CreateParameter <int>("@UserID", threadIDAndPostUserIDs[q.ThreadID], SqlDbType.Int);
                        query.CreateParameter <int>("@RewardCount", q.RewardCount, SqlDbType.Int);
                        query.CreateParameter <int>("@TotalReward", q.Reward, SqlDbType.Int);

                        if (autoFinalQuestionForumIDAndRewards.ContainsKey(forumID) == false)
                        {
                            autoFinalQuestionForumIDAndRewards.Add(forumID, new Dictionary <int, int>());
                        }

                        using (XSqlDataReader reader = query.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                int userID = reader.Get <int>("UserID");
                                int reward = reader.Get <int>("Reward");

                                if (autoFinalQuestionForumIDAndRewards[forumID].ContainsKey(userID))
                                {
                                    autoFinalQuestionForumIDAndRewards[forumID][userID] = autoFinalQuestionForumIDAndRewards[forumID][userID] + reward;
                                }
                                else
                                {
                                    autoFinalQuestionForumIDAndRewards[forumID].Add(userID, reward);
                                }
                            }
                        }
                        if (!autoFinalQuestionThreadIds.Contains(q.ThreadID))
                        {
                            autoFinalQuestionThreadIds.Add(q.ThreadID);
                        }
                    }

                    IsAutoFinalQuestion = false;
                }
                catch (Exception ex)
                {
                    IsAutoFinalQuestion = false;
                    throw ex;
                }
            }
        }
Exemple #2
0
 public abstract int VoteQuestionBestPost(int threadID, int userID, bool isUseful, QuestionThread question);
Exemple #3
0
        protected override bool CheckPermission()
        {
            if (Forum == null)
            {
                if (Thread == null)
                {
                    return(false);
                }

                Response.Redirect(BbsUrlHelper.GetArchiverThreadUrl(Thread.Forum.CodeName, Thread.ThreadID));
                //ErrorMessage = "版块不存在";
                //return false;
            }
            if (false == Forum.CanVisit(My))
            {
                if (!Forum.CanDisplayInList(My))
                {
                    ErrorMessage = "版块不存在!";
                }
                else
                {
                    ErrorMessage = "您没有权限进入该版块!";
                }
                return(false);
            }

            //版块类型正常,但需要密码
            if (Forum.ForumType == ForumType.Normal && !string.IsNullOrEmpty(Forum.Password))
            {
                //如果当前用户不拥有“进入版块不需要密码”的权限,继续检查
                if (!Forum.SigninWithoutPassword(My))
                {
                    //检查这个用户之前是否已经通过这个版块的验证,避免重复输入密码
                    if (!My.IsValidatedForum(Forum))
                    {
                        ErrorMessage = "进入该版块需要密码";
                        return(false);
                    }
                }
            }

            if (Thread == null || ReplyList == null)
            {
                ErrorMessage = "主题不存在";
                return(false);
            }

            if (Thread.ForumID != Forum.ForumID)
            {
                Response.Redirect(UrlHelper.GetArchiverThreadUrl(Thread.Forum.CodeName, Thread.ThreadID));
            }

            if (Can(ForumPermissionSetNode.Action.VisitThread) == false)
            {
                ErrorMessage = "您所在的用户组没有进入主题页的权限";
                return(false);
            }

            if (Thread.ThreadType == ThreadType.Move)
            {
                BasicThread tempThread   = PostBOV5.Instance.GetThread(Thread.RedirectThreadID);
                string      tempCodeName = "";
                if (tempThread != null)
                {
                    Forum tempForum = ForumBO.Instance.GetForum(tempCodeName);
                    if (tempForum != null)
                    {
                        tempCodeName = tempForum.CodeName;
                    }
                    else
                    {
                        ErrorMessage = "主题不存在!";
                        return(false);
                    }
                }
                else
                {
                    ErrorMessage = "主题不存在!";
                    return(false);
                }
                string url = BbsUrlHelper.GetArchiverThreadUrl(tempCodeName, tempThread.ThreadID);
                Response.Redirect(url);

                return(false);
            }
            else if (Thread.ThreadType == ThreadType.Question)
            {
                //PostV5 bestPost;
                //QuestionV5 question = PostBOV5.Instance.GetQuestion(Thread.ThreadID, out bestPost);
                //Question question = PostManager.GetQuestion(thread.ThreadID, false, out bestPost);
                QuestionThread question = null;
                if (Thread is QuestionThread)
                {
                    question = (QuestionThread)Thread;

                    if (PageNumber == 1 && question.BestPost != null)
                    {
                        //把最佳答案插入第2楼
                        m_ReplyList.Insert(1, question.BestPost);
                    }
                }
                if (question == null)
                {
                    ErrorMessage = "主题不存在!";
                }
                if (Thread.IsClosed)
                {
                    IsShowReplies = true;
                }
                else if (question.AlwaysEyeable || ForumPermission.Can(My, ForumPermissionSetNode.Action.AlwaysViewContents) || Thread.IsReplied(My))
                {
                    IsShowReplies = true;
                }
                else
                {
                    IsShowReplies = false;
                }
            }


            return(true);
        }
Exemple #4
0
 public abstract int FinalQuestion(int threadID, int bestPostID, Dictionary <int, int> rewards, QuestionThread question);