preferences.go 2.1 KB

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