preferences.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package sqlstore
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. func init() {
  8. bus.AddHandler("sql", GetPreferences)
  9. bus.AddHandler("sql", GetPreferencesWithDefaults)
  10. bus.AddHandler("sql", SavePreferences)
  11. }
  12. func GetPreferencesWithDefaults(query *m.GetPreferencesWithDefaultsQuery) error {
  13. prefs := make([]*m.Preferences, 0)
  14. filter := "(org_id=? AND user_id=?) OR (org_id=? AND user_id=0)"
  15. err := x.Where(filter, query.OrgId, query.UserId, query.OrgId).
  16. OrderBy("user_id ASC").
  17. Find(&prefs)
  18. if err != nil {
  19. return err
  20. }
  21. res := &m.Preferences{
  22. Theme: "dark",
  23. Timezone: "browser",
  24. HomeDashboardId: 0,
  25. }
  26. for _, p := range prefs {
  27. if p.Theme != "" {
  28. res.Theme = p.Theme
  29. }
  30. if p.Timezone != "" {
  31. res.Timezone = p.Timezone
  32. }
  33. if p.HomeDashboardId != 0 {
  34. res.HomeDashboardId = p.HomeDashboardId
  35. }
  36. }
  37. query.Result = res
  38. return nil
  39. }
  40. func GetPreferences(query *m.GetPreferencesQuery) error {
  41. var prefs m.Preferences
  42. exists, err := x.Where("org_id=? AND user_id=?", query.OrgId, query.UserId).Get(&prefs)
  43. if err != nil {
  44. return err
  45. }
  46. if exists {
  47. query.Result = &prefs
  48. } else {
  49. query.Result = new(m.Preferences)
  50. }
  51. return nil
  52. }
  53. func SavePreferences(cmd *m.SavePreferencesCommand) error {
  54. return inTransaction2(func(sess *session) error {
  55. var prefs m.Preferences
  56. exists, err := sess.Where("org_id=? AND user_id=?", cmd.OrgId, cmd.UserId).Get(&prefs)
  57. if !exists {
  58. prefs = m.Preferences{
  59. UserId: cmd.UserId,
  60. OrgId: cmd.OrgId,
  61. HomeDashboardId: cmd.HomeDashboardId,
  62. Timezone: cmd.Timezone,
  63. Theme: cmd.Theme,
  64. Created: time.Now(),
  65. Updated: time.Now(),
  66. }
  67. _, err = sess.Insert(&prefs)
  68. return err
  69. } else {
  70. prefs.HomeDashboardId = cmd.HomeDashboardId
  71. prefs.Timezone = cmd.Timezone
  72. prefs.Theme = cmd.Theme
  73. prefs.Updated = time.Now()
  74. prefs.Version += 1
  75. _, err := sess.Id(prefs.Id).AllCols().Update(&prefs)
  76. return err
  77. }
  78. })
  79. }