/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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); }
/// <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); }
/// <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; }
private static int UpdateUserExtCredits(int uid, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus) { return(UpdateUserExtCredits(uid, Scoresets.GetUserExtCredits(creditsOperationType), mount, creditsOperationType, pos, allowMinus)); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }
/// <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); }
/// <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)); }
/// <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)); }
/// <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; }
/// <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; }
/// <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); }
/// <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; }
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; }
/// <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); }
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); }
/// <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; }