@@ -32,6 +32,7 @@ import (
3232
3333const (
3434 tplSettingsProfile base.TplName = "user/settings/profile"
35+ tplSettingsAppearance base.TplName = "user/settings/appearance"
3536 tplSettingsOrganization base.TplName = "user/settings/organization"
3637 tplSettingsRepositories base.TplName = "user/settings/repos"
3738)
@@ -115,14 +116,6 @@ func ProfilePost(ctx *context.Context) {
115116 ctx .User .KeepEmailPrivate = form .KeepEmailPrivate
116117 ctx .User .Website = form .Website
117118 ctx .User .Location = form .Location
118- if len (form .Language ) != 0 {
119- if ! util .IsStringInSlice (form .Language , setting .Langs ) {
120- ctx .Flash .Error (ctx .Tr ("settings.update_language_not_found" , form .Language ))
121- ctx .Redirect (setting .AppSubURL + "/user/settings" )
122- return
123- }
124- ctx .User .Language = form .Language
125- }
126119 ctx .User .Description = form .Description
127120 ctx .User .KeepActivityPrivate = form .KeepActivityPrivate
128121 ctx .User .Visibility = form .Visibility
@@ -329,3 +322,68 @@ func Repos(ctx *context.Context) {
329322 ctx .Data ["Page" ] = pager
330323 ctx .HTML (http .StatusOK , tplSettingsRepositories )
331324}
325+
326+ // Appearance render user's appearance settings
327+ func Appearance (ctx * context.Context ) {
328+ ctx .Data ["Title" ] = ctx .Tr ("settings" )
329+ ctx .Data ["PageIsSettingsAppearance" ] = true
330+
331+ ctx .HTML (http .StatusOK , tplSettingsAppearance )
332+ }
333+
334+ // UpdateUIThemePost is used to update users' specific theme
335+ func UpdateUIThemePost (ctx * context.Context ) {
336+ form := web .GetForm (ctx ).(* forms.UpdateThemeForm )
337+ ctx .Data ["Title" ] = ctx .Tr ("settings" )
338+ ctx .Data ["PageIsSettingsAppearance" ] = true
339+
340+ if ctx .HasError () {
341+ ctx .Redirect (setting .AppSubURL + "/user/settings/appearance" )
342+ return
343+ }
344+
345+ if ! form .IsThemeExists () {
346+ ctx .Flash .Error (ctx .Tr ("settings.theme_update_error" ))
347+ ctx .Redirect (setting .AppSubURL + "/user/settings/appearance" )
348+ return
349+ }
350+
351+ if err := ctx .User .UpdateTheme (form .Theme ); err != nil {
352+ ctx .Flash .Error (ctx .Tr ("settings.theme_update_error" ))
353+ ctx .Redirect (setting .AppSubURL + "/user/settings/appearance" )
354+ return
355+ }
356+
357+ log .Trace ("Update user theme: %s" , ctx .User .Name )
358+ ctx .Flash .Success (ctx .Tr ("settings.theme_update_success" ))
359+ ctx .Redirect (setting .AppSubURL + "/user/settings/appearance" )
360+ }
361+
362+ // UpdateUserLang update a user's language
363+ func UpdateUserLang (ctx * context.Context ) {
364+ form := web .GetForm (ctx ).(* forms.UpdateLanguageForm )
365+ ctx .Data ["Title" ] = ctx .Tr ("settings" )
366+ ctx .Data ["PageIsSettingsAppearance" ] = true
367+
368+ if len (form .Language ) != 0 {
369+ if ! util .IsStringInSlice (form .Language , setting .Langs ) {
370+ ctx .Flash .Error (ctx .Tr ("settings.update_language_not_found" , form .Language ))
371+ ctx .Redirect (setting .AppSubURL + "/user/settings/appearance" )
372+ return
373+ }
374+ ctx .User .Language = form .Language
375+ }
376+
377+ if err := models .UpdateUserSetting (ctx .User ); err != nil {
378+ ctx .ServerError ("UpdateUserSetting" , err )
379+ return
380+ }
381+
382+ // Update the language to the one we just set
383+ middleware .SetLocaleCookie (ctx .Resp , ctx .User .Language , 0 )
384+
385+ log .Trace ("User settings updated: %s" , ctx .User .Name )
386+ ctx .Flash .Success (i18n .Tr (ctx .User .Language , "settings.update_language_success" ))
387+ ctx .Redirect (setting .AppSubURL + "/user/settings/appearance" )
388+
389+ }
0 commit comments