user.rb 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
  2. class Karma::User < ApplicationModel
  3. self.table_name = 'karma_users'
  4. def self.sync(user)
  5. score = Karma.score_by_user(user)
  6. level = level_by_score(score)
  7. record = Karma::User.find_by(user_id: user.id)
  8. if record
  9. return record if record.score == score && record.level == level
  10. record.score = score
  11. record.level = level
  12. record.save
  13. return record
  14. end
  15. Karma::User.create!(
  16. user_id: user.id,
  17. level: level,
  18. score: score,
  19. )
  20. end
  21. def self.by_user(user)
  22. record = Karma::User.find_by(user_id: user.id)
  23. return record if record
  24. sync(user)
  25. end
  26. def self.level_by_score(score)
  27. level = nil
  28. karma_levels = Setting.get('karma_levels')
  29. karma_levels.each do |local_level|
  30. if !level
  31. level = local_level[:name]
  32. end
  33. next if local_level[:start] && score < local_level[:start]
  34. next if local_level[:end] && score > local_level[:end]
  35. level = local_level[:name]
  36. end
  37. level
  38. end
  39. end