-
Notifications
You must be signed in to change notification settings - Fork 589
/
special_users.rb
73 lines (60 loc) · 1.86 KB
/
special_users.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# frozen_string_literal: true
#= Presenter for Setting / special users
class SpecialUsers
# #########
# Getters #
# #########
def self.special_users
Setting.find_or_create_by(key: 'special_users').value
end
# Checks if the user is a Special User of the given position
def self.is?(user, position)
if position == 'wikipedia_experts'
wikipedia_experts.include? user
else
SpecialUsers.special_users[position.to_sym] == user.username
end
end
def self.communications_manager
User.find_by(username: special_users[:communications_manager])
end
def self.classroom_program_manager
User.find_by(username: special_users[:classroom_program_manager])
end
def self.outreach_manager
User.find_by(username: special_users[:outreach_manager])
end
def self.wikipedia_experts
User.where(username: special_users[:wikipedia_experts])
end
def self.technical_help_staff
User.find_by(username: special_users[:technical_help_staff])
end
def self.survey_alerts_recipient
User.find_by(username: special_users[:survey_alerts_recipient])
end
def self.backup_account_creator
User.find_by(username: special_users[:backup_account_creator])
end
# #########
# Setters #
# #########
def self.set_user(role, username)
if role == 'wikipedia_experts'
experts = special_users[:wikipedia_experts] || []
Setting.set_hash('special_users', role.to_sym, experts + [username])
else
Setting.set_hash('special_users', role.to_sym, username)
end
end
def self.remove_user(role, username: nil)
users = Setting.find_or_create_by(key: 'special_users')
if role == 'wikipedia_experts'
experts = special_users[:wikipedia_experts] || []
Setting.set_hash('special_users', role.to_sym, experts - [username])
else
users.value.delete(role.to_sym)
end
users.save
end
end