diff options
Diffstat (limited to 'models/user.go')
-rw-r--r-- | models/user.go | 79 |
1 files changed, 61 insertions, 18 deletions
diff --git a/models/user.go b/models/user.go index 6dd31536..a58bb634 100644 --- a/models/user.go +++ b/models/user.go @@ -13,7 +13,9 @@ import ( "fmt" "image" "image/jpeg" + _ "image/jpeg" "os" + "path" "path/filepath" "strings" "time" @@ -116,11 +118,40 @@ func (u *User) HomeLink() string { // AvatarLink returns user gravatar link. func (u *User) AvatarLink() string { + defaultImgUrl := setting.AppSubUrl + "/img/avatar_default.jpg" + imgPath := path.Join(setting.AvatarUploadPath, com.ToStr(u.Id)) switch { case u.UseCustomAvatar: + if !com.IsExist(imgPath) { + return defaultImgUrl + } return setting.AppSubUrl + "/avatars/" + com.ToStr(u.Id) case setting.DisableGravatar, setting.OfflineMode: - return setting.AppSubUrl + "/img/avatar_default.jpg" + if !com.IsExist(imgPath) { + img, err := avatar.RandomImage([]byte(u.Email)) + if err != nil { + log.Error(3, "RandomImage: %v", err) + return defaultImgUrl + } + if err = os.MkdirAll(path.Dir(imgPath), os.ModePerm); err != nil { + log.Error(3, "MkdirAll: %v", err) + return defaultImgUrl + } + fw, err := os.Create(imgPath) + if err != nil { + log.Error(3, "Create: %v", err) + return defaultImgUrl + } + defer fw.Close() + + if err = jpeg.Encode(fw, img, nil); err != nil { + log.Error(3, "Encode: %v", err) + return defaultImgUrl + } + log.Info("New random avatar created: %d", u.Id) + } + + return setting.AppSubUrl + "/avatars/" + com.ToStr(u.Id) case setting.Service.EnableCacheAvatar: return setting.AppSubUrl + "/avatar/" + u.Avatar } @@ -163,7 +194,7 @@ func (u *User) UploadAvatar(data []byte) error { if err != nil { return err } - m := resize.Resize(200, 200, img, resize.NearestNeighbor) + m := resize.Resize(234, 234, img, resize.NearestNeighbor) sess := x.NewSession() defer sess.Close() @@ -226,7 +257,7 @@ func (u *User) GetOrganizations() error { u.Orgs = make([]*User, len(ous)) for i, ou := range ous { - u.Orgs[i], err = GetUserById(ou.OrgID) + u.Orgs[i], err = GetUserByID(ou.OrgID) if err != nil { return err } @@ -522,10 +553,12 @@ func DeleteUser(u *User) error { return err } - // Delete user directory. + // Delete user data. if err = os.RemoveAll(UserPath(u.Name)); err != nil { return err } + // Delete avatar. + os.Remove(u.CustomAvatarPath()) return sess.Commit() } @@ -555,7 +588,7 @@ func GetUserByKeyId(keyId int64) (*User, error) { return user, nil } -func getUserById(e Engine, id int64) (*User, error) { +func getUserByID(e Engine, id int64) (*User, error) { u := new(User) has, err := e.Id(id).Get(u) if err != nil { @@ -566,9 +599,20 @@ func getUserById(e Engine, id int64) (*User, error) { return u, nil } -// GetUserById returns the user object by given ID if exists. -func GetUserById(id int64) (*User, error) { - return getUserById(x, id) +// GetUserByID returns the user object by given ID if exists. +func GetUserByID(id int64) (*User, error) { + return getUserByID(x, id) +} + +// GetAssigneeByID returns the user with write access of repository by given ID. +func GetAssigneeByID(repo *Repository, userID int64) (*User, error) { + has, err := HasAccess(&User{Id: userID}, repo, ACCESS_MODE_WRITE) + if err != nil { + return nil, err + } else if !has { + return nil, ErrUserNotExist{userID, ""} + } + return GetUserByID(userID) } // GetUserByName returns user by given name. @@ -620,7 +664,7 @@ func GetEmailAddresses(uid int64) ([]*EmailAddress, error) { return nil, err } - u, err := GetUserById(uid) + u, err := GetUserByID(uid) if err != nil { return nil, err } @@ -666,7 +710,7 @@ func (email *EmailAddress) Activate() error { return err } - if user, err := GetUserById(email.Uid); err != nil { + if user, err := GetUserByID(email.Uid); err != nil { return err } else { user.Rands = GetUserSalt() @@ -793,7 +837,7 @@ func GetUserByEmail(email string) (*User, error) { return nil, err } if has { - return GetUserById(emailAddress.Uid) + return GetUserByID(emailAddress.Uid) } return nil, ErrUserNotExist{0, "email"} @@ -869,18 +913,19 @@ func UnFollowUser(userId int64, unFollowId int64) (err error) { } func UpdateMentions(userNames []string, issueId int64) error { + for i := range userNames { + userNames[i] = strings.ToLower(userNames[i]) + } users := make([]*User, 0, len(userNames)) - if err := x.Where("name IN (?)", strings.Join(userNames, "\",\"")).OrderBy("name ASC").Find(&users); err != nil { + if err := x.Where("lower_name IN (?)", strings.Join(userNames, "\",\"")).OrderBy("lower_name ASC").Find(&users); err != nil { return err } ids := make([]int64, 0, len(userNames)) - for _, user := range users { ids = append(ids, user.Id) - - if user.Type == INDIVIDUAL { + if !user.IsOrganization() { continue } @@ -889,9 +934,7 @@ func UpdateMentions(userNames []string, issueId int64) error { } tempIds := make([]int64, 0, user.NumMembers) - orgUsers, err := GetOrgUsersByOrgId(user.Id) - if err != nil { return err } @@ -903,7 +946,7 @@ func UpdateMentions(userNames []string, issueId int64) error { ids = append(ids, tempIds...) } - if err := UpdateIssueUserPairsByMentions(ids, issueId); err != nil { + if err := UpdateIssueUsersByMentions(ids, issueId); err != nil { return err } |