/// <summary> /// 创建邀请码信息 /// </summary> /// <param name="userInfo">创建用户信息</param> /// <returns></returns> public static int CreateInviteCode(ShortUserInfo userInfo) { InvitationConfigInfo configInfo = InvitationConfigs.GetConfig(); InviteCodeInfo inviteCode = new InviteCodeInfo(); inviteCode.CreatorId = userInfo.Uid; inviteCode.Creator = userInfo.Username; inviteCode.Code = BuildInviteCode(); while (IsInviteCodeExist(inviteCode.Code))//生成的邀请码code是否存在于数据库中 { inviteCode.Code = BuildInviteCode(); } inviteCode.CreateTime = Utils.GetDateTime(); inviteCode.InviteType = GeneralConfigs.GetConfig().Regstatus; inviteCode.ExpireTime = Utils.GetDateTime(configInfo.InviteCodeExpireTime); if (inviteCode.InviteType == 3) inviteCode.MaxCount = configInfo.InviteCodeMaxCount > 1 ? configInfo.InviteCodeMaxCount : 1; else inviteCode.MaxCount = configInfo.InviteCodeMaxCount; return Data.Invitation.CreateInviteCode(inviteCode); }
/// <summary> /// 在数据库中插入新的邀请码 /// </summary> /// <param name="code"></param> /// <param name="userid"></param> /// <param name="createtime"></param> /// <param name="invalidtime"></param> /// <param name="maxusecount"></param> public int CreateInviteCode(InviteCodeInfo inviteCode) { DbParameter[] parms = { DbHelper.MakeInParam("@code",(DbType)SqlDbType.NChar, 7, inviteCode.Code), DbHelper.MakeInParam("@creatorid",(DbType)SqlDbType.Int, 4, inviteCode.CreatorId), DbHelper.MakeInParam("@creator",(DbType)SqlDbType.NChar, 20, inviteCode.Creator), DbHelper.MakeInParam("@createtime",(DbType)SqlDbType.SmallDateTime, 4, inviteCode.CreateTime), DbHelper.MakeInParam("@expiretime",(DbType)SqlDbType.SmallDateTime, 4, inviteCode.ExpireTime), DbHelper.MakeInParam("@maxcount",(DbType)SqlDbType.Int, 4,inviteCode.MaxCount ), DbHelper.MakeInParam("@invitetype",(DbType)SqlDbType.Int, 4, inviteCode.InviteType) }; return TypeConverter.ObjectToInt(DbHelper.ExecuteScalar(CommandType.StoredProcedure, string.Format("[{0}createinvitecode]", BaseConfigs.GetTablePrefix), parms)); }
/// <summary> /// 将邀请码信息兑换为用户积分 /// </summary> /// <param name="inviteCode">邀请码信息</param> /// <param name="addScoreLine"></param> public static void ConvertInviteCodeToCredits(InviteCodeInfo inviteCode, int inviteCodePayCount) { int mount = inviteCode.SuccessCount - inviteCodePayCount; if (mount > -1)//如果邀请码使用次数超过了加分线,则做加分操作 { UserCredits.UpdateUserCreditsByInvite(inviteCode.CreatorId, inviteCode.SuccessCount); } }
/// <summary> /// 验证邀请码是否可用 /// </summary> /// <param name="inviteCode">邀请码信息</param> /// <returns></returns> public static bool CheckInviteCode(InviteCodeInfo inviteCode) { GeneralConfigInfo configInfo = GeneralConfigs.GetConfig(); if (inviteCode == null) return false; if (inviteCode.InviteType != configInfo.Regstatus) return false; if (inviteCode.CreateTime != inviteCode.ExpireTime) //如果创建时间等于失效时间,则表示该邀请码永不失效 if (Utils.StrDateDiffHours(inviteCode.ExpireTime, 0) > 0) return false; //如果邀请类型为邀请链接式,且全局邀请设置中链接最大使用次数不是0(无数次),则校验该邀请链接的次数合法性 //否则如果邀请码的最大使用次数不是0,则校验该邀请码的次数合法性 int maxCount = inviteCode.InviteType == 2 ? InvitationConfigs.GetConfig().InviteCodeMaxCount : inviteCode.MaxCount; if (maxCount > 0 && inviteCode.SuccessCount >= maxCount) return false; return true; }
public void SendEmail() { List<string> emailAddress = new List<string>(Utils.SplitString(DNTRequest.GetString("email"), ",")); if (invitecode != "")//针对弹窗发送邀请码的数据获取 invitecodeinfo = Invitation.GetInviteCodeByCode(invitecode); else { AddErrLine("丢失参数导致邮件发送失败,请检查本地杀毒软件设置"); return; } int sendSuccessCount = 0; foreach (string address in emailAddress) { if (string.IsNullOrEmpty(address) || !Utils.IsValidEmail(address)) continue; if (Emails.SendEmailNotify(address, "来自您的好友:" + invitecodeinfo.Creator + "的邀请!", string.Format(invitationconfiginfo.InvitationEmailTemplate, address, userid, invitecodeinfo.Creator, GetUserInviteUrl(invitecodeinfo.Code, true), config.Forumtitle, usersaid != "" ? usersaid : "", rooturl, avatarSmall, avatarMedium, avatarLarge))) sendSuccessCount++; if (sendSuccessCount > 19)//如果邮件发送次数已经达到20个,则不在继续发送 break; } if (sendSuccessCount > 0) { AddMsgLine("成功发送" + sendSuccessCount.ToString() + "封Email"); return; } else { AddErrLine("发送失败,请检查Email地址是否正确"); return; } }
protected override void ShowPage() { pagetitle = "邀请注册"; if (!Utils.InArray(config.Regstatus.ToString(), "2,3")) { AddErrLine("当前站点没有开启邀请功能!"); return; } if (userid > 0) { if (action == "floatwinemail") { return; } //提取预览头像 avatarSmall = Avatars.GetAvatarUrl(userid, AvatarSize.Small); avatarMedium = Avatars.GetAvatarUrl(userid, AvatarSize.Medium); avatarLarge = Avatars.GetAvatarUrl(userid, AvatarSize.Large); userinfo = Users.GetUserInfo(userid); if (config.Regstatus == 2) { invitecodeinfo = Invitation.GetInviteCodeByUid(userid); if (invitecodeinfo != null) { inviteurl = GetUserInviteUrl(invitecodeinfo.Code, false); userscore = GetUserInviteScore(invitecodeinfo.SuccessCount); usersaid = string.Format("邀请附言:<div id=\"usersaidinemail\">{0}</div>", usersaid); if (!ispost) CreateEmailPreview(); } } else { invitecodecount = Invitation.GetUserInviteCodeCount(userid); invitecodelist = Invitation.GetUserInviteCodeList(userid, pageindex); invitecodeprice = GetInviteCodePrice(); pagecount = ((invitecodecount - 1) / 10) + 1; pagenumber = Utils.GetPageNumbers(pageindex, pagecount, "invite.aspx", 8); } if (ispost) { switch (action) { case "createcode": CreateInviteCode();//创建开放式邀请码 break; case "convertcode": ConvertInviteCode();//将开放邀请码兑换为用户积分 break; case "buycode": BuyInviteCode();//购买封闭式邀请码 break; case "floatwinemailsend": SendEmail();//弹窗邮件发送邀请码 break; default: return; } } } if (userid == -1 && invitecode != "") { invitecodeinfo = Invitation.GetInviteCodeByCode(invitecode); } }
/// <summary> /// 创建邀请码 /// </summary> /// <param name="inviteCode"></param> /// <returns></returns> public static int CreateInviteCode(InviteCodeInfo inviteCode) { return DatabaseProvider.GetInstance().CreateInviteCode(inviteCode); }
/// <summary> /// 从reader中装载邀请码信息 /// </summary> /// <param name="reader"></param> /// <returns></returns> private static InviteCodeInfo LoadInviteCode(IDataReader reader) { InviteCodeInfo inviteCode = new InviteCodeInfo(); inviteCode.InviteId = TypeConverter.ObjectToInt(reader["inviteid"]); inviteCode.Code = reader["invitecode"].ToString(); inviteCode.CreatorId = TypeConverter.ObjectToInt(reader["creatorid"]); inviteCode.Creator = reader["creator"].ToString().Trim(); inviteCode.CreateTime = Utils.GetDate(reader["createdtime"].ToString(), ""); inviteCode.ExpireTime = Utils.GetDate(reader["expiretime"].ToString(), ""); inviteCode.SuccessCount = TypeConverter.ObjectToInt(reader["successcount"]); inviteCode.MaxCount = TypeConverter.ObjectToInt(reader["maxcount"]); inviteCode.InviteType = TypeConverter.ObjectToInt(reader["invitetype"]); return inviteCode; }