@@ -7,9 +7,10 @@ class AssignController < ApplicationController
7
7
8
8
def suggestions
9
9
users = [ current_user ]
10
- users += User
11
- . where ( 'users.id <> ?' , current_user . id )
12
- . joins ( <<~SQL
10
+ users +=
11
+ User
12
+ . where ( "users.id <> ?" , current_user . id )
13
+ . joins ( <<~SQL )
13
14
JOIN(
14
15
SELECT assigned_to_id user_id, MAX(created_at) last_assigned
15
16
FROM assignments
@@ -18,16 +19,22 @@ def suggestions
18
19
HAVING COUNT(*) < #{ SiteSetting . max_assigned_topics }
19
20
) as X ON X.user_id = users.id
20
21
SQL
21
- )
22
- . assign_allowed
23
- . order ( 'X.last_assigned DESC' )
24
- . limit ( 6 )
22
+ . assign_allowed
23
+ . order ( "X.last_assigned DESC" )
24
+ . limit ( 6 )
25
25
26
26
render json : {
27
- assign_allowed_on_groups : Group . visible_groups ( current_user ) . assign_allowed_groups . pluck ( :name ) ,
28
- assign_allowed_for_groups : Group . visible_groups ( current_user ) . assignable ( current_user ) . pluck ( :name ) ,
29
- suggestions : ActiveModel ::ArraySerializer . new ( users , scope : guardian , each_serializer : BasicUserSerializer ) ,
30
- }
27
+ assign_allowed_on_groups :
28
+ Group . visible_groups ( current_user ) . assign_allowed_groups . pluck ( :name ) ,
29
+ assign_allowed_for_groups :
30
+ Group . visible_groups ( current_user ) . assignable ( current_user ) . pluck ( :name ) ,
31
+ suggestions :
32
+ ActiveModel ::ArraySerializer . new (
33
+ users ,
34
+ scope : guardian ,
35
+ each_serializer : BasicUserSerializer ,
36
+ ) ,
37
+ }
31
38
end
32
39
33
40
def unassign
@@ -46,11 +53,18 @@ def unassign
46
53
def assign
47
54
target_id = params . require ( :target_id )
48
55
target_type = params . require ( :target_type )
49
- username = params . permit ( :username ) [ 'username' ]
50
- group_name = params . permit ( :group_name ) [ 'group_name' ]
51
- note = params . permit ( :note ) [ 'note' ] . presence
52
-
53
- assign_to = username . present? ? User . find_by ( username_lower : username . downcase ) : Group . where ( "LOWER(name) = ?" , group_name . downcase ) . first
56
+ username = params . permit ( :username ) [ "username" ]
57
+ group_name = params . permit ( :group_name ) [ "group_name" ]
58
+ note = params . permit ( :note ) [ "note" ] . presence
59
+
60
+ assign_to =
61
+ (
62
+ if username . present?
63
+ User . find_by ( username_lower : username . downcase )
64
+ else
65
+ Group . where ( "LOWER(name) = ?" , group_name . downcase ) . first
66
+ end
67
+ )
54
68
55
69
raise Discourse ::NotFound unless assign_to
56
70
raise Discourse ::NotFound if !Assignment . valid_type? ( target_type )
@@ -72,23 +86,31 @@ def assigned
72
86
offset = ( params [ :offset ] || 0 ) . to_i
73
87
limit = ( params [ :limit ] || 100 ) . to_i
74
88
75
- topics = Topic
76
- . includes ( :tags )
77
- . includes ( :user )
78
- . joins ( "JOIN assignments a ON a.target_id = topics.id AND a.target_type = 'Topic' AND a.assigned_to_id IS NOT NULL" )
79
- . order ( "a.assigned_to_id, topics.bumped_at desc" )
80
- . offset ( offset )
81
- . limit ( limit )
89
+ topics =
90
+ Topic
91
+ . includes ( :tags )
92
+ . includes ( :user )
93
+ . joins (
94
+ "JOIN assignments a ON a.target_id = topics.id AND a.target_type = 'Topic' AND a.assigned_to_id IS NOT NULL" ,
95
+ )
96
+ . order ( "a.assigned_to_id, topics.bumped_at desc" )
97
+ . offset ( offset )
98
+ . limit ( limit )
82
99
83
100
Topic . preload_custom_fields ( topics , TopicList . preloaded_custom_fields )
84
101
85
- topic_assignments = Assignment . where ( target_id : topics . map ( &:id ) , target_type : 'Topic' , active : true ) . pluck ( :target_id , :assigned_to_id ) . to_h
102
+ topic_assignments =
103
+ Assignment
104
+ . where ( target_id : topics . map ( &:id ) , target_type : "Topic" , active : true )
105
+ . pluck ( :target_id , :assigned_to_id )
106
+ . to_h
86
107
87
- users = User
88
- . where ( "users.id IN (?)" , topic_assignments . values . uniq )
89
- . joins ( "join user_emails on user_emails.user_id = users.id AND user_emails.primary" )
90
- . select ( UserLookup . lookup_columns )
91
- . to_a
108
+ users =
109
+ User
110
+ . where ( "users.id IN (?)" , topic_assignments . values . uniq )
111
+ . joins ( "join user_emails on user_emails.user_id = users.id AND user_emails.primary" )
112
+ . select ( UserLookup . lookup_columns )
113
+ . to_a
92
114
93
115
User . preload_custom_fields ( users , User . allowed_user_custom_fields ( guardian ) )
94
116
@@ -114,68 +136,101 @@ def group_members
114
136
115
137
guardian . ensure_can_see_group_members! ( group )
116
138
117
- members = User
118
- . joins ( "LEFT OUTER JOIN group_users g ON g.user_id = users.id" )
119
- . joins ( "LEFT OUTER JOIN assignments a ON a.assigned_to_id = users.id AND a.assigned_to_type = 'User'" )
120
- . joins ( "LEFT OUTER JOIN topics t ON t.id = a.target_id AND a.target_type = 'Topic'" )
121
- . where ( "g.group_id = ? AND users.id > 0 AND t.deleted_at IS NULL" , group . id )
122
- . where ( "a.assigned_to_id IS NOT NULL AND a.active" )
123
- . order ( 'COUNT(users.id) DESC' )
124
- . group ( 'users.id' )
125
- . select ( 'users.*, COUNT(users.id) as "assignments_count"' )
126
- . limit ( limit )
127
- . offset ( offset )
128
-
129
- if params [ :filter ]
130
- members = members . where ( <<~SQL , pattern : "%#{ params [ :filter ] } %" )
139
+ members =
140
+ User
141
+ . joins ( "LEFT OUTER JOIN group_users g ON g.user_id = users.id" )
142
+ . joins (
143
+ "LEFT OUTER JOIN assignments a ON a.assigned_to_id = users.id AND a.assigned_to_type = 'User'" ,
144
+ )
145
+ . joins ( "LEFT OUTER JOIN topics t ON t.id = a.target_id AND a.target_type = 'Topic'" )
146
+ . where ( "g.group_id = ? AND users.id > 0 AND t.deleted_at IS NULL" , group . id )
147
+ . where ( "a.assigned_to_id IS NOT NULL AND a.active" )
148
+ . order ( "COUNT(users.id) DESC" )
149
+ . group ( "users.id" )
150
+ . select ( 'users.*, COUNT(users.id) as "assignments_count"' )
151
+ . limit ( limit )
152
+ . offset ( offset )
153
+
154
+ members = members . where ( <<~SQL , pattern : "%#{ params [ :filter ] } %" ) if params [ :filter ]
131
155
users.name ILIKE :pattern OR users.username_lower ILIKE :pattern
132
156
SQL
133
- end
134
157
135
- group_assignments = Topic
136
- . joins ( "JOIN assignments a ON a.topic_id = topics.id" )
137
- . where ( <<~SQL , group_id : group . id )
158
+ group_assignments =
159
+ Topic
160
+ . joins ( "JOIN assignments a ON a.topic_id = topics.id" )
161
+ . where ( <<~SQL , group_id : group . id )
138
162
a.assigned_to_id = :group_id AND a.assigned_to_type = 'Group' AND a.active
139
163
SQL
140
- . pluck ( :topic_id )
164
+ . pluck ( :topic_id )
141
165
142
- assignments = TopicQuery
143
- . new ( current_user )
144
- . group_topics_assigned_results ( group )
145
- . pluck ( 'topics.id' )
166
+ assignments =
167
+ TopicQuery . new ( current_user ) . group_topics_assigned_results ( group ) . pluck ( "topics.id" )
146
168
147
169
render json : {
148
- members : serialize_data ( members , GroupUserAssignedSerializer ) ,
149
- assignment_count : ( assignments | group_assignments ) . count ,
150
- group_assignment_count : group_assignments . count
151
- }
170
+ members : serialize_data ( members , GroupUserAssignedSerializer ) ,
171
+ assignment_count : ( assignments | group_assignments ) . count ,
172
+ group_assignment_count : group_assignments . count ,
173
+ }
152
174
end
153
175
154
176
private
155
177
156
178
def translate_failure ( reason , assign_to )
157
179
case reason
158
180
when :already_assigned
159
- { error : I18n . t ( ' discourse_assign.already_assigned' , username : assign_to . username ) }
181
+ { error : I18n . t ( " discourse_assign.already_assigned" , username : assign_to . username ) }
160
182
when :forbidden_assign_to
161
- { error : I18n . t ( ' discourse_assign.forbidden_assign_to' , username : assign_to . username ) }
183
+ { error : I18n . t ( " discourse_assign.forbidden_assign_to" , username : assign_to . username ) }
162
184
when :forbidden_assignee_not_pm_participant
163
- { error : I18n . t ( 'discourse_assign.forbidden_assignee_not_pm_participant' , username : assign_to . username ) }
185
+ {
186
+ error :
187
+ I18n . t (
188
+ "discourse_assign.forbidden_assignee_not_pm_participant" ,
189
+ username : assign_to . username ,
190
+ ) ,
191
+ }
164
192
when :forbidden_assignee_cant_see_topic
165
- { error : I18n . t ( 'discourse_assign.forbidden_assignee_cant_see_topic' , username : assign_to . username ) }
193
+ {
194
+ error :
195
+ I18n . t (
196
+ "discourse_assign.forbidden_assignee_cant_see_topic" ,
197
+ username : assign_to . username ,
198
+ ) ,
199
+ }
166
200
when :group_already_assigned
167
- { error : I18n . t ( ' discourse_assign.group_already_assigned' , group : assign_to . name ) }
201
+ { error : I18n . t ( " discourse_assign.group_already_assigned" , group : assign_to . name ) }
168
202
when :forbidden_group_assign_to
169
- { error : I18n . t ( ' discourse_assign.forbidden_group_assign_to' , group : assign_to . name ) }
203
+ { error : I18n . t ( " discourse_assign.forbidden_group_assign_to" , group : assign_to . name ) }
170
204
when :forbidden_group_assignee_not_pm_participant
171
- { error : I18n . t ( 'discourse_assign.forbidden_group_assignee_not_pm_participant' , group : assign_to . name ) }
205
+ {
206
+ error :
207
+ I18n . t (
208
+ "discourse_assign.forbidden_group_assignee_not_pm_participant" ,
209
+ group : assign_to . name ,
210
+ ) ,
211
+ }
172
212
when :forbidden_group_assignee_cant_see_topic
173
- { error : I18n . t ( 'discourse_assign.forbidden_group_assignee_cant_see_topic' , group : assign_to . name ) }
213
+ {
214
+ error :
215
+ I18n . t (
216
+ "discourse_assign.forbidden_group_assignee_cant_see_topic" ,
217
+ group : assign_to . name ,
218
+ ) ,
219
+ }
174
220
when :too_many_assigns_for_topic
175
- { error : I18n . t ( 'discourse_assign.too_many_assigns_for_topic' , limit : Assigner ::ASSIGNMENTS_PER_TOPIC_LIMIT ) }
221
+ {
222
+ error :
223
+ I18n . t (
224
+ "discourse_assign.too_many_assigns_for_topic" ,
225
+ limit : Assigner ::ASSIGNMENTS_PER_TOPIC_LIMIT ,
226
+ ) ,
227
+ }
176
228
else
177
229
max = SiteSetting . max_assigned_topics
178
- { error : I18n . t ( 'discourse_assign.too_many_assigns' , username : assign_to . username , max : max ) }
230
+ {
231
+ error :
232
+ I18n . t ( "discourse_assign.too_many_assigns" , username : assign_to . username , max : max ) ,
233
+ }
179
234
end
180
235
end
181
236
0 commit comments