Пример #1
0
        private static void ReSetFourmTopicPost(IDataReader reader, ref int fid, bool fixTopicCount)
        {
            if (reader != null)
            {
                int    topiccount     = 0;
                int    postcount      = 0;
                int    todaypostcount = 0;
                int    lasttid        = 0;
                string lasttitle      = "";
                string lastpost       = "1900-1-1";
                int    lastposterid   = 0;
                string lastposter     = "";

                while (reader.Read())
                {
                    fid        = Utils.StrToInt(reader["fid"], -1);
                    topiccount = Data.Topics.GetTopicCountOfForumWithSub(SubForumList(fid));
                    postcount  = GetPostsCountByFid(fid, out todaypostcount);
                    if (fixTopicCount)
                    {
                        Forums.SetRealCurrentTopics(fid);
                    }
                    else
                    {
                        lasttid      = 0;
                        lasttitle    = "";
                        lastpost     = "1900-1-1";
                        lastposterid = 0;
                        lastposter   = "";
                    }
                    IDataReader postreader = Discuz.Data.Posts.GetForumLastPost(fid, Posts.GetPostTableName(), topiccount, postcount, lasttid, lasttitle, lastpost, lastposterid, lastposter, todaypostcount);
                    if (postreader.Read())
                    {
                        TopicInfo topic = Topics.GetTopicInfo(TypeConverter.ObjectToInt(postreader["tid"]));
                        if (topic == null)
                        {
                            continue;
                        }
                        lasttid      = topic.Tid;
                        lasttitle    = topic.Title;//postreader["title"].ToString();
                        lastpost     = postreader["postdatetime"].ToString();
                        lastposterid = Utils.StrToInt(postreader["posterid"], 0);
                        lastposter   = postreader["poster"].ToString();
                    }
                    postreader.Close();

                    Discuz.Data.Forums.UpdateForum(fid, topiccount, postcount, lasttid, lasttitle, lastpost, lastposterid, lastposter, todaypostcount);
                }
                reader.Close();
            }
        }
Пример #2
0
        /// <summary>
        /// 重建论坛帖数
        /// </summary>
        /// <param name="statcount">要设置的版块数量</param>
        /// <param name="lastfid">输出参数:最后一个版块ID</param>
        public static void ReSetFourmTopicAPost(int statcount, ref int lastfid)
        {
            if (statcount < 1)
            {
                lastfid = -1;
                return;
            }


            Forums.SetRealCurrentTopics(lastfid);


            IDataReader reader = DatabaseProvider.GetInstance().GetTopForumFids(lastfid, statcount);

            lastfid = -1;
            if (reader != null)
            {
                int topiccount     = 0;
                int postcount      = 0;
                int todaypostcount = 0;

                while (reader.Read())
                {
                    lastfid = Utils.StrToInt(reader["fid"], -1);

                    topiccount = Topics.GetAllTopicCount(lastfid);

                    postcount = GetPostsCountByFid(lastfid, out todaypostcount);
                    int    lasttid      = 0;
                    string lasttitle    = "";
                    string lastpost     = "1900-1-1";
                    int    lastposterid = 0;
                    string lastposter   = "";

                    IDataReader postreader = DatabaseProvider.GetInstance().GetForumLastPost(lastfid, Posts.GetPostTableName(), topiccount, postcount, 0, "", "1900-1-1", 0, "", todaypostcount);
                    if (postreader.Read())
                    {
                        lasttid      = Utils.StrToInt(postreader["tid"], 0);
                        lasttitle    = Topics.GetTopicInfo(lasttid).Title;//postreader["title"].ToString();
                        lastpost     = postreader["postdatetime"].ToString();
                        lastposterid = Utils.StrToInt(postreader["posterid"], 0);
                        lastposter   = postreader["poster"].ToString();
                    }
                    postreader.Close();

                    DatabaseProvider.GetInstance().UpdateForum(lastfid, topiccount, postcount, lasttid, lasttitle, lastpost, lastposterid, lastposter, todaypostcount);
                }
                reader.Close();
            }
        }
Пример #3
0
        /// <summary>
        /// 重建论坛帖数
        /// </summary>
        /// <param name="start_fid">要设置的起始版块</param>
        /// <param name="end_fid">要设置的终止版块</param>
        public static void ReSetFourmTopicAPost(int start_fid, int end_fid)
        {
            IDataReader reader      = DatabaseProvider.GetInstance().GetForums(start_fid, end_fid);
            int         current_fid = start_fid;

            if (reader != null)
            {
                int    topiccount     = 0;
                int    postcount      = 0;
                int    todaypostcount = 0;
                int    lasttid        = 0;
                string lasttitle      = "";
                string lastpost       = "";
                int    lastposterid   = 0;
                string lastposter     = "";

                while (reader.Read())
                {
                    current_fid = Utils.StrToInt(reader["fid"], -1);

                    Forums.SetRealCurrentTopics(current_fid);

                    topiccount = Topics.GetAllTopicCount(current_fid);

                    postcount = GetPostsCountByFid(current_fid, out todaypostcount);

                    IDataReader postreader = DatabaseProvider.GetInstance().GetForumLastPost(current_fid, Posts.GetPostTableName(), topiccount, postcount, lasttid, lasttitle, lastpost, lastposterid, lastposter, todaypostcount);

                    if (postreader.Read())
                    {
                        lasttid      = Utils.StrToInt(postreader["tid"], 0);
                        lasttitle    = Topics.GetTopicInfo(lasttid).Title;//postreader["title"].ToString();
                        lastpost     = postreader["postdatetime"].ToString();
                        lastposterid = Utils.StrToInt(postreader["posterid"], 0);
                        lastposter   = postreader["poster"].ToString();
                        DatabaseProvider.GetInstance().UpdateForum(current_fid, topiccount, postcount, lasttid, lasttitle, lastpost, lastposterid, lastposter, todaypostcount);
                    }
                    postreader.Close();
                }
                reader.Close();
            }
        }
Пример #4
0
        /// <summary>
        /// 移动主题到指定版块
        /// </summary>
        /// <param name="topiclist">要移动的主题列表</param>
        /// <param name="fid">转到的版块ID</param>
        /// <param name="savelink">是否在原版块保留连接</param>
        /// <returns>更新记录数</returns>
        public static int MoveTopics(string topiclist, int fid, int oldfid, bool savelink, int topicType)
        {
            if (!Utils.IsNumericList(topiclist))
            {
                return(-1);
            }
            string    tidList = "";
            DataTable dt      = Topics.GetTopicList(topiclist);

            foreach (DataRow dr in dt.Rows)
            {
                if (TypeConverter.ObjectToInt(dr["closed"]) <= 1 || TypeConverter.ObjectToInt(dr["fid"]) != oldfid)
                {
                    tidList += dr["tid"].ToString() + ",";
                }
            }
            tidList = tidList.TrimEnd(',');

            if (string.IsNullOrEmpty(tidList))
            {
                return(-1);
            }
            Discuz.Data.TopicAdmins.DeleteClosedTopics(fid, tidList);

            //转移帖子
            MoveTopics(tidList, fid, oldfid, topicType);

            //如果保存链接则复制一条记录到原版块
            if (savelink)
            {
                if (Discuz.Data.TopicAdmins.CopyTopicLink(oldfid, tidList) <= 0)
                {
                    return(-2);
                }

                AdminForumStats.ReSetFourmTopicAPost(oldfid);
                Forums.SetRealCurrentTopics(oldfid);
            }
            return(1);
        }