diff --git a/pkg/api/api.go b/pkg/api/api.go index 3f805cd9c98..a3d206c4956 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -96,7 +96,7 @@ func Register(r *macaron.Macaron) { r.Delete("/stars/dashboard/:id", wrap(UnstarDashboard)) r.Put("/password", bind(m.ChangeUserPasswordCommand{}), wrap(ChangeUserPassword)) r.Get("/quotas", wrap(GetUserQuotas)) - r.Put("/prefs", bind(m.SavePreferenceCommand{}), wrap(SaveUserPreferences)) + r.Put("/prefs", bind(m.SavePreferencesCommand{}), wrap(SaveUserPreferences)) }) // users (admin permission required) diff --git a/pkg/api/preferences.go b/pkg/api/preferences.go new file mode 100644 index 00000000000..849ed4aa8aa --- /dev/null +++ b/pkg/api/preferences.go @@ -0,0 +1,21 @@ +package api + +import ( + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/middleware" + m "github.com/grafana/grafana/pkg/models" +) + +// PUT /api/user/prefs +func SaveUserPreferences(c *middleware.Context, cmd m.SavePreferencesCommand) Response { + + cmd.PrefId = c.UserId + cmd.PrefType = `user` + + if err := bus.Dispatch(&cmd); err != nil { + return ApiError(500, "Failed to saved user preferences", err) + } + + return ApiSuccess("User preferences saved") + +} diff --git a/pkg/api/user.go b/pkg/api/user.go index d4545a7c709..5af243eeb22 100644 --- a/pkg/api/user.go +++ b/pkg/api/user.go @@ -5,7 +5,6 @@ import ( "github.com/grafana/grafana/pkg/middleware" m "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/util" - "github.com/grafana/grafana/pkg/log" ) // GET /api/user (current authenticated user) @@ -111,7 +110,7 @@ func UserSetUsingOrg(c *middleware.Context) Response { } func ChangeUserPassword(c *middleware.Context, cmd m.ChangeUserPasswordCommand) Response { - userQuery := m.GetUserByIdQuery{Id: c.UserId} + userQuery := m.GetUserByIdQuery{Id: c.UserId} if err := bus.Dispatch(&userQuery); err != nil { return ApiError(500, "Could not read user from database", err) @@ -145,18 +144,3 @@ func SearchUsers(c *middleware.Context) Response { return Json(200, query.Result) } - -func SaveUserPreferences(c *middleware.Context, cmd m.SavePreferenceCommand) Response { - - log.Info("%v", cmd.PrefData) - - cmd.PrefId = c.UserId - cmd.PrefType = `user` - - if err := bus.Dispatch(&cmd); err != nil { - return ApiError(500, "Failed to saved user preferences", err) - } - - return ApiSuccess("User preferences saved") - -} diff --git a/pkg/models/preferences.go b/pkg/models/preferences.go index cdaab0f6af8..8476ec49429 100644 --- a/pkg/models/preferences.go +++ b/pkg/models/preferences.go @@ -9,20 +9,18 @@ var ( ErrPreferenceNotFound = errors.New("Preference not found") ) -type Preference struct { - Id int64 - PrefId int64 - PrefType string - PrefData map[string]interface{} +type Preferences struct { + Id int64 + PrefId int64 + PrefType string + PrefData map[string]interface{} } // --------------------- // COMMANDS -type SavePreferenceCommand struct { - - PrefData map[string]interface{} `json:"prefData"` - PrefId int64 `json:"-"` +type SavePreferencesCommand struct { + PrefData map[string]interface{} `json:"prefData" binding:"Required"` + PrefId int64 `json:"-"` PrefType string `json:"-"` - } diff --git a/pkg/services/sqlstore/preferences.go b/pkg/services/sqlstore/preferences.go new file mode 100644 index 00000000000..756048360ec --- /dev/null +++ b/pkg/services/sqlstore/preferences.go @@ -0,0 +1,37 @@ +package sqlstore + +import ( + "github.com/grafana/grafana/pkg/bus" + m "github.com/grafana/grafana/pkg/models" +) + +func init() { + bus.AddHandler("sql", SavePreferences) +} + +func SavePreferences(cmd *m.SavePreferencesCommand) error { + return inTransaction2(func(sess *session) error { + + sql := `SELECT * FROM preferences WHERE pref_id = ? ` + + `AND pref_type = ?` + + var prefResults = make([]m.Preferences, 0) + + resultsErr := sess.Sql(sql, cmd.PrefId, cmd.PrefType).Find(&prefResults) + + if resultsErr != nil { + return resultsErr + } + + var matchedPref m.Preferences + matchedPref = prefResults[0] + matchedPref.PrefData = cmd.PrefData + affectedRows, updateErr := sess.Id(matchedPref.Id).Update(&matchedPref) + + if affectedRows == 0 { + return m.ErrPreferenceNotFound + } + + return updateErr + }) +} diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index a5c992d10b6..96b8c24b8fc 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -11,7 +11,6 @@ import ( m "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" - "github.com/grafana/grafana/pkg/log" ) func init() { @@ -28,7 +27,6 @@ func init() { bus.AddHandler("sql", DeleteUser) bus.AddHandler("sql", SetUsingOrg) bus.AddHandler("sql", UpdateUserPermissions) - bus.AddHandler("sql", SaveUserPreferences) } func getOrgIdForNewUser(cmd *m.CreateUserCommand, sess *session) (int64, error) { @@ -348,26 +346,3 @@ func UpdateUserPermissions(cmd *m.UpdateUserPermissionsCommand) error { return err }) } - -func SaveUserPreferences(cmd *m.SavePreferenceCommand) error { - return inTransaction2(func(sess *session) error { - - log.Info("%v", cmd) - - pref := m.Preference{ - PrefId: cmd.PrefId, - PrefType: cmd.PrefType, - PrefData: cmd.PrefData, - } - - sess.Table("preferences").Where("pref_id", pref.PrefId).And("pref_type", pref.PrefType) - - if _, err := sess.Update(&pref); err != nil { - return err - } - - log.Info("%v", pref) - - return nil - }) -} diff --git a/public/app/features/profile/partials/preferences.html b/public/app/features/profile/partials/preferences.html index 093163dde32..39cf64957cb 100644 --- a/public/app/features/profile/partials/preferences.html +++ b/public/app/features/profile/partials/preferences.html @@ -9,17 +9,17 @@