Beispiel #1
0
        /// <summary>
        /// 根据用户列表,一次更新多个用户的积分(此方法只在删除主题时使用过)
        /// </summary>
        /// <param name="uidlist">用户ID列表</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        private static int UpdateUserCredits(int[] uidlist, CreditsOperationType creditsOperationType, int pos)
        {
            ///根据公式计算用户的总积分,并更新
            int reval = 0;

            for (int i = 0; i < uidlist.Length; i++)
            {
                if (uidlist[i] > 0)
                {
                    reval = reval + UpdateUserCredits(uidlist[i], 1, creditsOperationType, pos, true);
                }
            }

            return(reval);
        }
Beispiel #2
0
        /// <summary>
        /// 根据用户列表,一次更新多个用户的积分(此方法只在删除主题时使用过)
        /// </summary>
        /// <param name="uidlist">用户ID列表</param>
        /// <param name="mountlist">操作的次数,用来记录增减积分的次数;例如删帖:删一个帖子(也就是一个操作),mountlist为1;删除两个帖子,两个帖子分别都有两个附件,也就是两次操作,mountlist值就为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        public static int UpdateUserCredits(int[] uidlist, int[] mountlist, CreditsOperationType creditsOperationType, int pos)
        {
            ///根据公式计算用户的总积分,并更新
            int reval = 0;

            for (int i = 0; i < uidlist.Length; i++)
            {
                if (uidlist[i] > 0)
                {
                    reval = reval + UpdateUserExtCredits(uidlist[i], mountlist[i], creditsOperationType, pos, true);
                }

                UserCredits.UpdateUserCredits(uidlist[i]);
            }
            return(reval);
        }
Beispiel #3
0
        /// <summary>
        /// 检查用户积分是否足够被减(适用于单用户, 单个或多个积分)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <returns></returns>
        public static bool CheckUserCreditsIsEnough(int uid, int mount, CreditsOperationType creditsOperationType, int pos)
        {
            DataTable dt = Scoresets.GetScoreSet();

            DataColumn[] keys = new DataColumn[1];
            keys[0]       = dt.Columns["id"];
            dt.PrimaryKey = keys;
            DataRow dr = dt.Rows[(int)creditsOperationType];

            for (int i = 2; i < 10; i++)
            {
                if (Utils.StrToFloat(dr[i], 0) < 0)//只要任何一项要求减分,就去数据库检查
                {
                    return(DatabaseProvider.GetInstance().CheckUserCreditsIsEnough(uid, dr, pos, mount));
                }
            }
            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// 根据用户列表,一次更新多个用户的积分
        /// </summary>
        /// <param name="uidlist">用户ID列表</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        private static int UpdateUserCredits(string uidlist, CreditsOperationType creditsOperationType, int pos)
        {
            if (Utils.IsNumericArray(Utils.SplitString(uidlist, ",")))
            {
                ///根据公式计算用户的总积分,并更新
                int reval = 0;
                foreach (string uid in Utils.SplitString(uidlist, ","))
                {
                    if (Utils.StrToInt(uid, 0) > 0)
                    {
                        reval = reval + UpdateUserCredits(Utils.StrToInt(uid, 0), 1, creditsOperationType, pos);
                    }
                }

                return(reval);
            }
            return(0);
        }
Beispiel #5
0
        /// <summary>
        /// 根据用户列表,一次更新多个用户的积分
        /// </summary>
        /// <param name="uidlist">用户ID列表</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        public static int UpdateUserCreditsAndExtCredits(string uidlist, CreditsOperationType creditsOperationType, int pos)
        {
            int reval = -1;

            if (Utils.IsNumericList(uidlist))
            {
                reval = 0;
                ///根据公式计算用户的总积分,并更新
                foreach (string uid in Utils.SplitString(uidlist, ","))
                {
                    if (TypeConverter.StrToInt(uid, 0) > 0)
                    {
                        reval = reval + UpdateUserExtCredits(TypeConverter.StrToInt(uid), 1, creditsOperationType, pos, false);
                    }

                    UserCredits.UpdateUserCredits(TypeConverter.StrToInt(uid));
                }
            }
            return(reval);
        }
Beispiel #6
0
        /// <summary>
        /// ����û������Ƿ��㹻����(�����ڵ��û�, ������������)
        /// </summary>
        /// <param name="uid">�û�ID</param>
        /// <param name="mount">��������,�������ϴ�2�����������˲���,��ô�˲���ֵӦΪ2</param>
        /// <param name="creditsOperationType">���ֲ�������,�緢����</param>
        /// <param name="pos">�ӻ����־(����Ϊ��,����Ϊ��,ͨ��������1����-1)</param>
        /// <returns></returns>
        public static bool CheckUserCreditsIsEnough(int uid, int mount, CreditsOperationType creditsOperationType, int pos)
        {
            DataTable dt = Scoresets.GetScoreSet();

            dt.PrimaryKey = new DataColumn[1] { dt.Columns["id"] };

            float[] extCredits = new float[8];
            for (int i = 0; i < 8; i++)
            {
                extCredits[i] = TypeConverter.ObjectToFloat(dt.Rows[(int)creditsOperationType]["extcredits" + (i + 1)]);
            }

            if (pos < 0)
            {
                for (int i = 0; i < 8; i++)
                {
                    if (Utils.StrToFloat(extCredits[i], 0) < 0)//ֻҪ�κ�һ��Ҫ�����,��ȥ���ݿ���
                        return Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount);
                }
            }
            return true;
        }
Beispiel #7
0
        /// <summary>
        /// 根据用户列表,一次更新多个用户的积分
        /// </summary>
        /// <param name="uidlist">用户ID列表</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        private static int UpdateUserCreditsAndExtCredits(string uidlist, CreditsOperationType creditsOperationType, int pos)
        {
            int reval = -1;
            if (Utils.IsNumericList(uidlist))
            {
                reval = 0;
                ///根据公式计算用户的总积分,并更新	
                foreach (string uid in Utils.SplitString(uidlist, ","))
                {
                    if (TypeConverter.StrToInt(uid, 0) > 0)
                        reval = reval + UpdateUserExtCredits(TypeConverter.StrToInt(uid), 1, creditsOperationType, pos);

                    UserCredits.UpdateUserCredits(TypeConverter.StrToInt(uid));
                }
            }
            return reval;
        }
Beispiel #8
0
        /// <summary>
        /// 更新用户积分(适用于单用户,单个或多个操作)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
        /// <returns></returns>
        private static int UpdateUserExtCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
        {
            float[] extCredits = Scoresets.GetUserExtCredits(creditsOperationType);
            float extCredit = 0;

            foreach (float e in extCredits)//此循环用于校验当前积分操作是否需要更新用户积分
            {
                if (e != 0)
                    extCredit = e;
            }

            if (extCredit == 0)//如果搜索积分设置中全部为0,即不操作积分,则直接返回1
                return 1;

            if (uid == -1)//如果当前用户为游客,则直接返回-1
                return -1;

            //return 0;

            //DataTable dt = Scoresets.GetScoreSet();

            //dt.PrimaryKey = new DataColumn[1] { dt.Columns["id"] };
            //float[] extCredits = GetUserExtCredits(dt.Rows[(int)creditsOperationType]);



            // 如果要减扩展积分, 首先判断扩展积分是否足够被减
            if (pos < 0)
            {
                //当不是删除主题或回复时
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                        return -1;
                }
            }
            else
            {
                if (creditsOperationType == CreditsOperationType.DownloadAttachment)//临时性解决用户下载附件可以为负数的问题,当积分系统被重新开发时,该判断代码可根据实际情况拿掉
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                        return -1;
                }

                if (creditsOperationType == CreditsOperationType.Search)//临时性解决用户搜索扣分可以为负数的问题,当积分系统被重新开发时,该判断代码可根据实际情况拿掉
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                        return -1;
                }
            }

            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, extCredits, pos, mount);

            for (int i = 0; i < extCredits.Length; i++)
            {
                if (extCredits[i] != 0.0)
                {
                    Sync.UpdateCredits(uid, i + 1, extCredits[i].ToString());
                }
            }

            ///更新用户积分
            return 1;// UpdateUserCredits(uid);
        }
Beispiel #9
0
 /// <summary>
 /// 更新用户积分(当扣分时,如果用户剩余分值不足,则不扣)
 /// </summary>
 /// <param name="uid">用户ID</param>
 /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
 /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
 /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
 private static int UpdateUserExtCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos)
 {
     return UpdateUserExtCredits(uid, mount, creditsOperationType, pos, false);
 }
Beispiel #10
0
 /// <summary>
 /// 更新用户积分(适用于单个操作)
 /// </summary>
 /// <param name="uid">用户ID</param>
 /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
 /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
 private static int UpdateUserExtCredits(int uid, CreditsOperationType creditsOperationType, int pos)
 {
     return UpdateUserExtCredits(uid, 1, creditsOperationType, pos);
 }
Beispiel #11
0
        /// <summary>
        /// 检查用户积分是否足够被减(适用于单用户, 单个或多个积分)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <returns></returns>
        public static bool CheckUserCreditsIsEnough(int uid, int mount, CreditsOperationType creditsOperationType, int pos)
        {
            DataTable dt = Scoresets.GetScoreSet();

            dt.PrimaryKey = new DataColumn[1] { dt.Columns["id"] };
            float[] extCredits = GetUserExtCredits(dt.Rows[(int)creditsOperationType]);
            if (pos < 0)
            {
                for (int i = 0; i < 8; i++)
                {
                    if (Utils.StrToFloat(extCredits[i], 0) < 0)//只要任何一项要求减分,就去数据库检查
                        return Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount);
                }
            }
            return true;
        }
Beispiel #12
0
		/// <summary>
		/// 更新用户积分(适用于单用户,单个或多个操作)
		/// </summary>
		/// <param name="uid">用户ID</param>
		/// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
		/// <param name="creditsOperationType">积分操作类型,如发帖等</param>
		/// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
		/// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
		/// <returns></returns>
		private static int UpdateUserCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
		{
			if (!Users.Exists(uid))
			{
				return 0;
			}

            DataTable dt = Scoresets.GetScoreSet();
			DataColumn[] keys = new DataColumn[1];
			keys[0] = dt.Columns["id"];
			dt.PrimaryKey = keys;
			DataRow dr = dt.Rows[(int)creditsOperationType];

			// 如果要减扩展积分, 首先判断扩展积分是否足够被减
            if (pos < 0)
            {
                //当不是删除主题或回复时
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !DatabaseProvider.GetInstance().CheckUserCreditsIsEnough(uid, dr, pos, mount))
                    {
                        return -1;
                    }
                }
            }
            DatabaseProvider.GetInstance().UpdateUserCredits(uid, dr, pos, mount);

			///更新用户积分
			return UpdateUserCredits(uid);

		}
Beispiel #13
0
        /// <summary>
        /// 在数据库中删除指定主题
        /// </summary>
        /// <param name="topiclist">主题列表</param>
        /// <param name="subtractCredits">是否减少用户积分(0不减少,1减少)</param>
        /// <returns>删除个数</returns>
        public static int DeleteTopics(string topicList, int subTractCredits, bool reserveAttach)
        {
            if (!Utils.IsNumericList(topicList))
            {
                return(-1);
            }

            GeneralConfigInfo configinfo = GeneralConfigs.GetConfig();
            DataTable         dt         = Topics.GetTopicList(topicList);

            if (dt == null)
            {
                return(-1);
            }

            foreach (DataRow dr in dt.Rows)
            {
                if (TypeConverter.ObjectToInt(dr["digest"]) > 0)
                {
                    UserCredits.UpdateUserExtCredits(TypeConverter.ObjectToInt(dr["posterid"]), -1, CreditsOperationType.Digest, 1, true);
                    UserCredits.UpdateUserCredits(TypeConverter.ObjectToInt(dr["posterid"]));
                }
            }

            dt = Posts.GetPostList(topicList);
            if (dt != null)
            {
                Hashtable attUidCount = new Hashtable();
                foreach (DataRow dr in dt.Rows)
                {
                    //后台设置的项为多少天外的老帖删除不减积分,而不是多少天内删帖可以不减分
                    if (configinfo.Losslessdel == 0 || Utils.StrDateDiffHours(dr["postdatetime"].ToString(), configinfo.Losslessdel * 24) < 0)
                    {
                        CreditsOperationType creditsOperationType = TypeConverter.ObjectToInt(dr["layer"]) == 0 ? CreditsOperationType.PostTopic : CreditsOperationType.PostReply;
                        //获取版块积分规则
                        float[] creditsValue = Forums.GetValues(
                            creditsOperationType == CreditsOperationType.PostTopic ?
                            Forums.GetForumInfo(TypeConverter.ObjectToInt(dr["fid"])).Postcredits :
                            Forums.GetForumInfo(TypeConverter.ObjectToInt(dr["fid"])).Replycredits
                            );

                        //如果未定义版块积分规则
                        if (creditsValue == null)
                        {
                            creditsValue = Scoresets.GetUserExtCredits(creditsOperationType);
                        }
                        UserCredits.UpdateUserExtCredits(TypeConverter.ObjectToInt(dr["posterid"]), creditsValue, 1, creditsOperationType, -1, true);
                        int attCount = Attachments.GetAttachmentCountByPid(TypeConverter.ObjectToInt(dr["pid"]));
                        if (attCount > 0)
                        {
                            int posterid = TypeConverter.ObjectToInt(dr["posterid"]);
                            if (attUidCount.ContainsKey(posterid))
                            {
                                attUidCount[posterid] = (int)attUidCount[posterid] + attCount;
                            }
                            else
                            {
                                attUidCount.Add(TypeConverter.ObjectToInt(dr["posterid"]), attCount);
                            }
                        }
                    }
                    UserCredits.UpdateUserCredits(TypeConverter.ObjectToInt(dr["posterid"]));
                }

                int   i            = 0;
                int[] tuidlist     = new int[attUidCount.Count];
                int[] attcountlist = new int[attUidCount.Count];
                foreach (DictionaryEntry de in attUidCount)
                {
                    tuidlist[i]     = (int)de.Key;
                    attcountlist[i] = (int)de.Value;
                    i++;
                }

                UserCredits.UpdateUserCredits(tuidlist, attcountlist, CreditsOperationType.UploadAttachment, -1);
            }

            int reval = 0;

            foreach (string posttableid in Posts.GetPostTableIdArray(topicList))
            {
                reval = Discuz.Data.TopicAdmins.DeleteTopicByTidList(topicList, posttableid);
            }
            if (reval > 0 && !reserveAttach)
            {
                Attachments.DeleteAttachmentByTid(topicList);
            }
            return(reval);
        }
Beispiel #14
0
		/// <summary>
		/// 根据用户列表,一次更新多个用户的积分
		/// </summary>
		/// <param name="uidlist">用户ID列表</param>
		/// <param name="creditsOperationType">积分操作类型,如发帖等</param>
		/// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
		private static int UpdateUserCredits(string uidlist, CreditsOperationType creditsOperationType,int pos)
		{
			if (Utils.IsNumericArray(Utils.SplitString(uidlist, ",")))
			{
				///根据公式计算用户的总积分,并更新
				int reval = 0;
				foreach(string uid in Utils.SplitString(uidlist, ","))
				{
					if (Utils.StrToInt(uid,0) > 0)
					{
						reval = reval + UpdateUserCredits(Utils.StrToInt(uid, 0), 1, creditsOperationType, pos);
					}
				}
				
				return reval;
			}
			return 0;

		}
Beispiel #15
0
 private static int UpdateUserExtCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
 {
     return(UpdateUserExtCredits(uid, Scoresets.GetUserExtCredits(creditsOperationType), mount, creditsOperationType, pos, allowMinus));
 }
Beispiel #16
0
 /// <summary>
 /// 根据用户列表,一次更新多个用户的积分(此方法只在删除主题时使用过)
 /// </summary>
 /// <param name="uidlist">用户ID列表</param>
 /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
 /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
 private static int UpdateUserCredits(int[] uidlist, CreditsOperationType creditsOperationType, int pos)
 {
     ///根据公式计算用户的总积分,并更新
     int[] mountlist = new int[uidlist.Length];
     for (int i = 0; i < mountlist.Length; i++)
     {
         mountlist[i] = 1;
     }
     return UpdateUserCredits(uidlist, mountlist, creditsOperationType, pos);
 }
Beispiel #17
0
        /// <summary>
        /// 更新用户积分(适用于单用户,单个或多个操作)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="extCredits">使用的积分规则</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
        /// <returns></returns>
        public static int UpdateUserExtCredits(int uid, float[] extCredits, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
        {
            //float[] extCredits = Scoresets.GetUserExtCredits(creditsOperationType);
            float extCredit = 0;

            foreach (float e in extCredits)//此循环用于校验当前积分操作是否需要更新用户积分
            {
                if (e != 0)
                {
                    extCredit = e;
                    break;
                }
            }

            if (extCredit == 0)//如果搜索积分设置中全部为0,即不操作积分,则直接返回1
            {
                return(1);
            }

            if (uid == -1)//如果当前用户为游客,则直接返回-1
            {
                return(-1);
            }

            // 如果要减扩展积分, 首先判断扩展积分是否足够被减
            if (pos < 0)
            {
                //当不是删除主题或回复时
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                    {
                        return(-1);
                    }
                }
            }
            else
            {
                if (creditsOperationType == CreditsOperationType.DownloadAttachment || creditsOperationType == CreditsOperationType.Search)//临时性解决用户搜索扣分可以为负数的问题,当积分系统被重新开发时,该判断代码可根据实际情况拿掉
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                    {
                        return(-1);
                    }
                }
            }

            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, extCredits, pos, mount);

            for (int i = 0; i < extCredits.Length; i++)
            {
                if (extCredits[i] != 0.0)
                {
                    Sync.UpdateCredits(uid, i + 1, extCredits[i].ToString(), "");
                }
            }

            ///更新用户积分
            return(1);
        }
Beispiel #18
0
        /// <summary>
        /// �����û��б�,һ�θ��¶���û��Ļ���
        /// </summary>
        /// <param name="uidlist">�û�ID�б�</param>
        /// <param name="creditsOperationType">���ֲ�������,�緢����</param>
        /// <param name="pos">�ӻ����־(����Ϊ��,����Ϊ��,ͨ��������1����-1)</param>
        public static int UpdateUserCreditsAndExtCredits(string uidlist, CreditsOperationType creditsOperationType, int pos)
        {
            int reval = -1;
            if (Utils.IsNumericList(uidlist))
            {
                reval = 0;
                ///���ݹ�ʽ�����û����ܻ���,������
                foreach (string uid in Utils.SplitString(uidlist, ","))
                {
                    if (TypeConverter.StrToInt(uid, 0) > 0)
                        reval = reval + UpdateUserExtCredits(TypeConverter.StrToInt(uid), 1, creditsOperationType, pos, false);

                    UserCredits.UpdateUserCredits(TypeConverter.StrToInt(uid));
                }
            }
            return reval;
        }
Beispiel #19
0
        /// <summary>
        /// �����û��б�,һ�θ��¶���û��Ļ���(�˷���ֻ��ɾ������ʱʹ�ù�)
        /// </summary>
        /// <param name="uidlist">�û�ID�б�</param>
        /// <param name="mountlist">�����Ĵ�����������¼�������ֵĴ���������ɾ����ɾһ�����ӣ�Ҳ����һ����������mountlistΪ1;ɾ���������ӣ��������ӷֱ�������������Ҳ�������β�����mountlistֵ��Ϊ2</param>
        /// <param name="creditsOperationType">���ֲ�������,�緢����</param>
        /// <param name="pos">�ӻ����־(����Ϊ��,����Ϊ��,ͨ��������1����-1)</param>
        public static int UpdateUserCredits(int[] uidlist, int[] mountlist, CreditsOperationType creditsOperationType, int pos)
        {
            ///���ݹ�ʽ�����û����ܻ���,������
            int reval = 0;
            for (int i = 0; i < uidlist.Length; i++)
            {
                if (uidlist[i] > 0)
                    reval = reval + UpdateUserExtCredits(uidlist[i], mountlist[i], creditsOperationType, pos, true);

                UserCredits.UpdateUserCredits(uidlist[i]);
            }
            return reval;
        }
Beispiel #20
0
		/// <summary>
		/// 更新用户积分(适用于单用户,单个或多个操作)
		/// </summary>
		/// <param name="uid">用户ID</param>
		/// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
		/// <param name="creditsOperationType">积分操作类型,如发帖等</param>
		/// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
		/// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
		/// <returns></returns>
		private static int UpdateUserCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
		{
			if (Users.GetShortUserInfo(uid) == null)
				return 0;

            DataTable dt = Scoresets.GetScoreSet();

            dt.PrimaryKey = new DataColumn[1] { dt.Columns["id"] };
            float[] extCredits = GetUserExtCredits(dt.Rows[(int)creditsOperationType]);

			// 如果要减扩展积分, 首先判断扩展积分是否足够被减
            if (pos < 0)
            {
                //当不是删除主题或回复时
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                        return -1;
                }
            }
            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, extCredits, pos, mount);

			///更新用户积分
			return UpdateUserCredits(uid);
		}
Beispiel #21
0
 /// <summary>
 /// 更新用户积分(适用于单个操作)
 /// </summary>
 /// <param name="uid">用户ID</param>
 /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
 /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
 private static int UpdateUserCredits(int uid, CreditsOperationType creditsOperationType, int pos)
 {
     return(UpdateUserCredits(uid, 1, creditsOperationType, pos));
 }
Beispiel #22
0
 /// <summary>
 /// 更新用户积分(当扣分时,如果用户剩余分值不足,则不扣)
 /// </summary>
 /// <param name="uid">用户ID</param>
 /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
 /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
 /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
 private static int UpdateUserCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos)
 {
     return(UpdateUserCredits(uid, mount, creditsOperationType, pos, false));
 }
Beispiel #23
0
        /// <summary>
        /// 根据用户列表,一次更新多个用户的积分(此方法只在删除主题时使用过)
        /// </summary>
        /// <param name="uidlist">用户ID列表</param>
        /// <param name="mountlist">操作的次数,用来记录增减积分的次数;例如删帖:删一个帖子(也就是一个操作),mountlist为1;删除两个帖子,两个帖子分别都有两个附件,也就是两次操作,mountlist值就为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        private static int UpdateUserCredits(int[] uidlist, int[] mountlist, CreditsOperationType creditsOperationType, int pos)
        {
            ///根据公式计算用户的总积分,并更新
            int reval = 0;
            for (int i = 0; i < uidlist.Length; i++)
            {
                if (uidlist[i] > 0)
                    reval = reval + UpdateUserExtCredits(uidlist[i], mountlist[i], creditsOperationType, pos, true);

                UserCredits.UpdateUserCredits(uidlist[i]);
            }
            return reval;
        }
Beispiel #24
0
        /// <summary>
        /// �����û�����(�����ڵ��û�,������������)
        /// </summary>
        /// <param name="uid">�û�ID</param>
        /// <param name="extCredits">ʹ�õĻ��ֹ���</param>
        /// <param name="mount">��������,�������ϴ�2�����������˲���,��ô�˲���ֵӦΪ2</param>
        /// <param name="creditsOperationType">���ֲ�������,�緢����</param>
        /// <param name="pos">�ӻ����־(����Ϊ��,����Ϊ��,ͨ��������1����-1)</param>
        /// <param name="allowMinus">�Ƿ�������۳ɸ���,true����,false��������Ҳ����п۷ַ���-1</param>
        /// <returns></returns>
        public static int UpdateUserExtCredits(int uid, float[] extCredits, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
        {
            //float[] extCredits = Scoresets.GetUserExtCredits(creditsOperationType);
            float extCredit = 0;

            foreach (float e in extCredits)//��ѭ������У�鵱ǰ���ֲ����Ƿ���Ҫ�����û�����
            {
                if (e != 0)
                {
                    extCredit = e;
                    break;
                }
            }

            if (extCredit == 0)//�����������������ȫ��Ϊ0�������������֣���ֱ�ӷ���1
                return 1;

            if (uid == -1)//�����ǰ�û�Ϊ�οͣ���ֱ�ӷ���-1
                return -1;

            // ���Ҫ����չ����, �����ж���չ�����Ƿ��㹻����
            if (pos < 0)
            {
                //������ɾ�������ظ�ʱ
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                        return -1;
                }
            }
            else
            {
                if (creditsOperationType == CreditsOperationType.DownloadAttachment || creditsOperationType == CreditsOperationType.Search)//��ʱ�Խ���û������۷ֿ���Ϊ���������⣬������ϵͳ�����¿���ʱ�����жϴ���ɸ���ʵ������õ�
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                        return -1;
                }
            }

            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, extCredits, pos, mount);

            for (int i = 0; i < extCredits.Length; i++)
            {
                if (extCredits[i] != 0.0)
                {
                    Sync.UpdateCredits(uid, i + 1, extCredits[i].ToString(), "");
                }
            }

            ///�����û�����
            return 1;
        }
Beispiel #25
0
 /// <summary>
 /// �����û��б�,һ�θ��¶���û��Ļ���(�˷���ֻ��ɾ������ʱʹ�ù�)
 /// </summary>
 /// <param name="uidlist">�û�ID�б�</param>
 /// <param name="creditsOperationType">���ֲ�������,�緢����</param>
 /// <param name="pos">�ӻ����־(����Ϊ��,����Ϊ��,ͨ��������1����-1)</param>
 private static int UpdateUserCredits(int[] uidlist, CreditsOperationType creditsOperationType, int pos)
 {
     ///���ݹ�ʽ�����û����ܻ���,������
     int[] mountlist = new int[uidlist.Length];
     for (int i = 0; i < mountlist.Length; i++)
     {
         mountlist[i] = 1;
     }
     return UpdateUserCredits(uidlist, mountlist, creditsOperationType, pos);
 }
Beispiel #26
0
        /// <summary>
        /// 更新用户积分(适用于单用户,单个或多个操作)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="extCredits">使用的积分规则</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
        /// <returns></returns>
        public static int UpdateUserExtCredits(int uid, float[] extCredits, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
        {
            //float[] extCredits = Scoresets.GetUserExtCredits(creditsOperationType);
            float extCredit = 0;

            foreach (float e in extCredits)//此循环用于校验当前积分操作是否需要更新用户积分
            {
                if (e != 0)
                {
                    extCredit = e;
                    break;
                }
            }

            if (extCredit == 0)//如果搜索积分设置中全部为0,即不操作积分,则直接返回1
                return 1;

            if (uid == -1)//如果当前用户为游客,则直接返回-1
                return -1;

            // 如果要减扩展积分, 首先判断扩展积分是否足够被减
            if (pos < 0)
            {
                //当不是删除主题或回复时
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                        return -1;
                }
            }
            else
            {
                if (creditsOperationType == CreditsOperationType.DownloadAttachment || creditsOperationType == CreditsOperationType.Search)//临时性解决用户搜索扣分可以为负数的问题,当积分系统被重新开发时,该判断代码可根据实际情况拿掉
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                        return -1;
                }
            }

            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, extCredits, pos, mount);

            for (int i = 0; i < extCredits.Length; i++)
            {
                if (extCredits[i] != 0.0)
                {
                    Sync.UpdateCredits(uid, i + 1, extCredits[i].ToString(), "");
                }
            }

            ///更新用户积分
            return 1;
        }
Beispiel #27
0
 public static float[] GetUserExtCredits(CreditsOperationType creditsOperationType)
 {
     DataRow dr = GetScoreSet().Rows[(int)creditsOperationType];
     float[] extCredits = new float[8];
     for (int i = 0; i < 8; i++)
     {
         extCredits[i] = TypeConverter.ObjectToFloat(dr["extcredits" + (i + 1)]);
     }
     return extCredits;
 }
Beispiel #28
0
 /// <summary>
 /// 更新用户积分(适用于单用户,单个或多个操作)
 /// </summary>
 /// <param name="uid">用户ID</param>
 /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
 /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
 /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
 /// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
 /// <returns></returns>
 public static int UpdateUserExtCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
 {
     return UpdateUserExtCredits(uid, Scoresets.GetUserExtCredits(creditsOperationType), mount, creditsOperationType, pos, allowMinus);
 }
Beispiel #29
0
        private static int UpdateUserExtCredits(int uid, float[] extCredits, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
        {
            if (uid == -1)
            {
                return(-1);
            }

            float num = 0f;

            for (int i = 0; i < extCredits.Length; i++)
            {
                float num2 = extCredits[i];
                if (num2 != 0f)
                {
                    num = num2;
                    break;
                }
            }
            if (num == 0f)
            {
                return(1);
            }

            if (pos < 0)
            {
                if (creditsOperationType != CreditsOperationType.PostTopic &&
                    creditsOperationType != CreditsOperationType.PostReply && !allowMinus &&
                    !User.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                {
                    return(-1);
                }
            }
            else
            {
                if ((creditsOperationType == CreditsOperationType.DownloadAttachment ||
                     creditsOperationType == CreditsOperationType.Search) && !allowMinus &&
                    !User.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                {
                    return(-1);
                }
            }
            User.UpdateUserExtCredits(uid, extCredits, pos, mount);
            for (int j = 0; j < extCredits.Length; j++)
            {
                if ((double)extCredits[j] != 0.0)
                {
                    Sync.UpdateCredits(uid, j + 1, extCredits[j].ToString(), "");
                }
            }
            UpdateUserCredits(uid);
            return(1);
        }
Beispiel #30
0
        /// <summary>
        /// 检查用户积分是否足够被减(适用于单用户, 单个或多个积分)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <returns></returns>
        public static bool CheckUserCreditsIsEnough(int uid, int mount, CreditsOperationType creditsOperationType, int pos)
        {
            DataTable dt = Scoresets.GetScoreSet();
            DataColumn[] keys = new DataColumn[1];
            keys[0] = dt.Columns["id"];
            dt.PrimaryKey = keys;
            DataRow dr = dt.Rows[(int)creditsOperationType];

            for (int i = 2; i < 10; i++)
            {
                if (Utils.StrToFloat(dr[i], 0) < 0)//只要任何一项要求减分,就去数据库检查
                {
                    return DatabaseProvider.GetInstance().CheckUserCreditsIsEnough(uid, dr, pos, mount);
                }
            }
            return true;           
        }