47 lines
1.1 KiB
Ruby
47 lines
1.1 KiB
Ruby
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
|
|
|
|
class Karma::User < ApplicationModel
|
|
self.table_name = 'karma_users'
|
|
|
|
def self.sync(user)
|
|
score = Karma.score_by_user(user)
|
|
level = level_by_score(score)
|
|
record = Karma::User.find_by(user_id: user.id)
|
|
if record
|
|
return record if record.score == score && record.level == level
|
|
|
|
record.score = score
|
|
record.level = level
|
|
record.save
|
|
return record
|
|
end
|
|
Karma::User.create!(
|
|
user_id: user.id,
|
|
level: level,
|
|
score: score,
|
|
)
|
|
end
|
|
|
|
def self.by_user(user)
|
|
record = Karma::User.find_by(user_id: user.id)
|
|
return record if record
|
|
|
|
sync(user)
|
|
end
|
|
|
|
def self.level_by_score(score)
|
|
level = nil
|
|
karma_levels = Setting.get('karma_levels')
|
|
karma_levels.each do |local_level|
|
|
if !level
|
|
level = local_level[:name]
|
|
end
|
|
next if local_level[:start] && score < local_level[:start]
|
|
next if local_level[:end] && score > local_level[:end]
|
|
|
|
level = local_level[:name]
|
|
end
|
|
level
|
|
end
|
|
|
|
end
|