aboutsummaryrefslogtreecommitdiff
path: root/models/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/user.go')
-rw-r--r--models/user.go79
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
}