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; } } }
public abstract int VoteQuestionBestPost(int threadID, int userID, bool isUseful, QuestionThread question);
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); }
public abstract int FinalQuestion(int threadID, int bestPostID, Dictionary <int, int> rewards, QuestionThread question);