| @@ -77,7 +77,9 @@ There are 5 ways to install Gogs: | |||||
| ## Contributors | ## Contributors | ||||
| The [core team](http://gogs.io/team) of this project. See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors. | |||||
| - The [core team](http://gogs.io/team) of this project. | |||||
| - See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors. | |||||
| - See [TRANSLATORS](conf/locale/TRANSLATORS) for full list of translators. | |||||
| ## License | ## License | ||||
| @@ -68,7 +68,9 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自 | |||||
| ## 贡献成员 | ## 贡献成员 | ||||
| 本项目的 [开发团队](http://gogs.io/team)。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 | |||||
| - 本项目的 [开发团队](http://gogs.io/team)。 | |||||
| - 您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 | |||||
| - 您可以通过查看 [TRANSLATORS](conf/locale/TRANSLATORS) 文件获取完整的翻译人员列表。 | |||||
| ## 授权许可 | ## 授权许可 | ||||
| @@ -0,0 +1,3 @@ | |||||
| # This file lists all individuals having contributed content to the translation. | |||||
| Thomas Fanninger <gogs.thomas@fanninger.at> | |||||
| @@ -208,6 +208,7 @@ enable_custom_avatar_helper = Enable this to disable fetch from Gravatar | |||||
| choose_new_avatar = Choose new avatar | choose_new_avatar = Choose new avatar | ||||
| update_avatar = Update Avatar Setting | update_avatar = Update Avatar Setting | ||||
| uploaded_avatar_not_a_image = Uploaded file is not a image. | uploaded_avatar_not_a_image = Uploaded file is not a image. | ||||
| no_custom_avatar_available = No custom avatar available, cannot enable it. | |||||
| update_avatar_success = Your avatar setting has been updated successfully. | update_avatar_success = Your avatar setting has been updated successfully. | ||||
| change_password = Change Password | change_password = Change Password | ||||
| @@ -17,7 +17,7 @@ import ( | |||||
| "github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
| ) | ) | ||||
| const APP_VER = "0.5.8.1121 Beta" | |||||
| const APP_VER = "0.5.8.1122 Beta" | |||||
| func init() { | func init() { | ||||
| runtime.GOMAXPROCS(runtime.NumCPU()) | runtime.GOMAXPROCS(runtime.NumCPU()) | ||||
| @@ -140,10 +140,14 @@ func (u *User) ValidtePassword(passwd string) bool { | |||||
| return u.Passwd == newUser.Passwd | return u.Passwd == newUser.Passwd | ||||
| } | } | ||||
| // CustomAvatarPath returns user custom avatar file path. | |||||
| func (u *User) CustomAvatarPath() string { | |||||
| return filepath.Join(setting.AvatarUploadPath, com.ToStr(u.Id)) | |||||
| } | |||||
| // UploadAvatar saves custom avatar for user. | // UploadAvatar saves custom avatar for user. | ||||
| // FIXME: splite uploads to different subdirs in case we have massive users. | // FIXME: splite uploads to different subdirs in case we have massive users. | ||||
| func (u *User) UploadAvatar(data []byte) error { | func (u *User) UploadAvatar(data []byte) error { | ||||
| savePath := filepath.Join(setting.AvatarUploadPath, com.ToStr(u.Id)) | |||||
| u.UseCustomAvatar = true | u.UseCustomAvatar = true | ||||
| img, _, err := image.Decode(bytes.NewReader(data)) | img, _, err := image.Decode(bytes.NewReader(data)) | ||||
| @@ -164,7 +168,7 @@ func (u *User) UploadAvatar(data []byte) error { | |||||
| } | } | ||||
| os.MkdirAll(setting.AvatarUploadPath, os.ModePerm) | os.MkdirAll(setting.AvatarUploadPath, os.ModePerm) | ||||
| fw, err := os.Create(savePath) | |||||
| fw, err := os.Create(u.CustomAvatarPath()) | |||||
| if err != nil { | if err != nil { | ||||
| sess.Rollback() | sess.Rollback() | ||||
| return err | return err | ||||
| @@ -89,9 +89,6 @@ func SettingsAvatar(ctx *middleware.Context, form auth.UploadAvatarForm) { | |||||
| defer ctx.Redirect(setting.AppSubUrl + "/user/settings") | defer ctx.Redirect(setting.AppSubUrl + "/user/settings") | ||||
| ctx.User.UseCustomAvatar = form.Enable | ctx.User.UseCustomAvatar = form.Enable | ||||
| if err := models.UpdateUser(ctx.User); err != nil { | |||||
| ctx.Flash.Error(err.Error()) | |||||
| } | |||||
| if form.Avatar != nil { | if form.Avatar != nil { | ||||
| fr, err := form.Avatar.Open() | fr, err := form.Avatar.Open() | ||||
| @@ -113,7 +110,19 @@ func SettingsAvatar(ctx *middleware.Context, form auth.UploadAvatarForm) { | |||||
| ctx.Flash.Error(err.Error()) | ctx.Flash.Error(err.Error()) | ||||
| return | return | ||||
| } | } | ||||
| } else { | |||||
| // In case no avatar at all. | |||||
| if form.Enable && !com.IsFile(ctx.User.CustomAvatarPath()) { | |||||
| ctx.Flash.Error(ctx.Tr("settings.no_custom_avatar_available")) | |||||
| return | |||||
| } | |||||
| } | } | ||||
| if err := models.UpdateUser(ctx.User); err != nil { | |||||
| ctx.Flash.Error(err.Error()) | |||||
| return | |||||
| } | |||||
| ctx.Flash.Success(ctx.Tr("settings.update_avatar_success")) | ctx.Flash.Success(ctx.Tr("settings.update_avatar_success")) | ||||
| } | } | ||||
| @@ -1 +1 @@ | |||||
| 0.5.8.1121 Beta | |||||
| 0.5.8.1122 Beta | |||||