You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Invitation.go 2.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package user
  2. import (
  3. "errors"
  4. "strconv"
  5. "strings"
  6. "code.gitea.io/gitea/models"
  7. "code.gitea.io/gitea/modules/base"
  8. "code.gitea.io/gitea/modules/context"
  9. "code.gitea.io/gitea/modules/log"
  10. "code.gitea.io/gitea/modules/setting"
  11. "code.gitea.io/gitea/services/repository"
  12. )
  13. const (
  14. tplInvitation base.TplName = "user/settings/invite"
  15. )
  16. func GetInvitaionCode(ctx *context.Context) {
  17. page := ctx.QueryInt("page")
  18. if page <= 0 {
  19. page = 1
  20. }
  21. pageSize := ctx.QueryInt("pageSize")
  22. if pageSize <= 0 {
  23. pageSize = setting.UI.IssuePagingNum
  24. }
  25. url := setting.RecommentRepoAddr + "invitaion_page"
  26. result, err := repository.RecommendFromPromote(url)
  27. resultJsonMap := make(map[string]interface{}, 0)
  28. if err == nil {
  29. for _, strLine := range result {
  30. tmpIndex := strings.Index(strLine, "=")
  31. if tmpIndex != -1 {
  32. key := strLine[0:tmpIndex]
  33. value := strLine[tmpIndex+1:]
  34. resultJsonMap[key] = value
  35. }
  36. }
  37. }
  38. if ctx.IsSigned {
  39. resultJsonMap["invitation_code"] = getInvitaionCode(ctx)
  40. re, count := models.QueryInvitaionBySrcUserId(ctx.User.ID, (page-1)*pageSize, pageSize)
  41. for _, record := range re {
  42. tmpUser, err := models.GetUserByID(record.UserID)
  43. if err == nil {
  44. record.Avatar = strings.TrimRight(setting.AppSubURL, "/") + "/user/avatar/" + tmpUser.Name + "/" + strconv.Itoa(-1)
  45. record.IsActive = tmpUser.IsActive
  46. record.Name = tmpUser.Name
  47. }
  48. }
  49. resultJsonMap["invitation_users"] = re
  50. resultJsonMap["invitation_users_count"] = count
  51. }
  52. ctx.JSON(200, resultJsonMap)
  53. }
  54. func InviationTpl(ctx *context.Context) {
  55. ctx.HTML(200, tplInvitation)
  56. }
  57. func RegisteUserByInvitaionCode(invitationcode string, newUserId int64, newPhoneNumber string) error {
  58. user := parseInvitaionCode(invitationcode)
  59. if user == nil {
  60. return errors.New("The invitated user not existed.")
  61. }
  62. if newPhoneNumber != "" {
  63. re := models.QueryInvitaionByPhone(newPhoneNumber)
  64. if re != nil {
  65. if len(re) > 0 {
  66. log.Info("The phone has been invitated. so ingore it.")
  67. return errors.New("The phone has been invitated.")
  68. }
  69. }
  70. } else {
  71. log.Info("the phone number is null. user name=" + user.Name)
  72. }
  73. invitation := &models.Invitation{
  74. SrcUserID: user.ID,
  75. UserID: newUserId,
  76. Phone: newPhoneNumber,
  77. }
  78. err := models.InsertInvitaion(invitation)
  79. if err != nil {
  80. log.Info("insert error," + err.Error())
  81. }
  82. return err
  83. }
  84. func getInvitaionCode(ctx *context.Context) string {
  85. return ctx.User.Name
  86. }
  87. func parseInvitaionCode(invitationcode string) *models.User {
  88. user, err := models.GetUserByName(invitationcode)
  89. if err == nil {
  90. return user
  91. }
  92. return nil
  93. }