Show More
@@ -274,4 +274,11 b' class HomeController(BaseController):' | |||||
274 | @XHRRequired() |
|
274 | @XHRRequired() | |
275 | @jsonify |
|
275 | @jsonify | |
276 | def user_group_autocomplete_data(self): |
|
276 | def user_group_autocomplete_data(self): | |
277 | return {'suggestions': []} |
|
277 | query = request.GET.get('query') | |
|
278 | ||||
|
279 | repo_model = RepoModel() | |||
|
280 | _user_groups = repo_model.get_user_groups(name_contains=query) | |||
|
281 | _user_groups = _user_groups | |||
|
282 | ||||
|
283 | return {'suggestions': _user_groups} | |||
|
284 |
@@ -140,10 +140,12 b' class RepoModel(BaseModel):' | |||||
140 |
|
140 | |||
141 | return None |
|
141 | return None | |
142 |
|
142 | |||
143 | def get_users(self, name_contains=None, limit=20): |
|
143 | def get_users(self, name_contains=None, limit=20, only_active=True): | |
144 | # TODO: mikhail: move this method to the UserModel. |
|
144 | # TODO: mikhail: move this method to the UserModel. | |
145 | query = self.sa.query(User) |
|
145 | query = self.sa.query(User) | |
146 | query = query.filter(User.active == true()) |
|
146 | if only_active: | |
|
147 | query = query.filter(User.active == true()) | |||
|
148 | ||||
147 | if name_contains: |
|
149 | if name_contains: | |
148 | ilike_expression = u'%{}%'.format(safe_unicode(name_contains)) |
|
150 | ilike_expression = u'%{}%'.format(safe_unicode(name_contains)) | |
149 | query = query.filter( |
|
151 | query = query.filter( | |
@@ -165,16 +167,19 b' class RepoModel(BaseModel):' | |||||
165 | 'icon_link': h.gravatar_url(user.email, 14), |
|
167 | 'icon_link': h.gravatar_url(user.email, 14), | |
166 | 'value_display': h.person(user.email), |
|
168 | 'value_display': h.person(user.email), | |
167 | 'value': user.username, |
|
169 | 'value': user.username, | |
168 | 'value_type': 'user' |
|
170 | 'value_type': 'user', | |
|
171 | 'active': user.active, | |||
169 | } |
|
172 | } | |
170 | for user in users |
|
173 | for user in users | |
171 | ] |
|
174 | ] | |
172 | return _users |
|
175 | return _users | |
173 |
|
176 | |||
174 | def get_user_groups(self, name_contains=None, limit=20): |
|
177 | def get_user_groups(self, name_contains=None, limit=20, only_active=True): | |
175 | # TODO: mikhail: move this method to the UserGroupModel. |
|
178 | # TODO: mikhail: move this method to the UserGroupModel. | |
176 | query = self.sa.query(UserGroup) |
|
179 | query = self.sa.query(UserGroup) | |
177 | query = query.filter(UserGroup.users_group_active == true()) |
|
180 | if only_active: | |
|
181 | query = query.filter(UserGroup.users_group_active == true()) | |||
|
182 | ||||
178 | if name_contains: |
|
183 | if name_contains: | |
179 | ilike_expression = u'%{}%'.format(safe_unicode(name_contains)) |
|
184 | ilike_expression = u'%{}%'.format(safe_unicode(name_contains)) | |
180 | query = query.filter( |
|
185 | query = query.filter( | |
@@ -196,7 +201,8 b' class RepoModel(BaseModel):' | |||||
196 | 'value_display': 'Group: %s (%d members)' % ( |
|
201 | 'value_display': 'Group: %s (%d members)' % ( | |
197 | group.users_group_name, len(group.members),), |
|
202 | group.users_group_name, len(group.members),), | |
198 | 'value': group.users_group_name, |
|
203 | 'value': group.users_group_name, | |
199 | 'value_type': 'user_group' |
|
204 | 'value_type': 'user_group', | |
|
205 | 'active': group.users_group_active, | |||
200 | } |
|
206 | } | |
201 | for group in user_groups |
|
207 | for group in user_groups | |
202 | ] |
|
208 | ] |
@@ -19,19 +19,25 b'' | |||||
19 | /** |
|
19 | /** | |
20 | * autocomplete formatter that uses gravatar |
|
20 | * autocomplete formatter that uses gravatar | |
21 | * */ |
|
21 | * */ | |
22 | var autocompleteFormatResult = function(data, value, org_formatter) { |
|
22 | var autocompleteFormatResult = function (data, value, org_formatter) { | |
23 | var value_display = data.value_display; |
|
23 | var activeUser = data.active || true; | |
|
24 | var valueDisplay = data.value_display; | |||
|
25 | ||||
|
26 | if (!activeUser) { | |||
|
27 | valueDisplay = '<strong>(disabled)</strong> ' + valueDisplay; | |||
|
28 | } | |||
|
29 | ||||
24 | var escapeRegExChars = function (value) { |
|
30 | var escapeRegExChars = function (value) { | |
25 | return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); |
|
31 | return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); | |
26 | }; |
|
32 | }; | |
27 | var pattern = '(' + escapeRegExChars(value) + ')'; |
|
33 | var pattern = '(' + escapeRegExChars(value) + ')'; | |
28 |
value |
|
34 | valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>'); | |
29 | var tmpl = '<div class="ac-container-wrap"><img class="gravatar" src="{0}"/>{1}</div>'; |
|
35 | var tmpl = '<div class="ac-container-wrap"><img class="gravatar" src="{0}"/>{1}</div>'; | |
30 | if (data.icon_link === "") { |
|
36 | if (data.icon_link === "") { | |
31 | tmpl = '<div class="ac-container-wrap">{0}</div>'; |
|
37 | tmpl = '<div class="ac-container-wrap">{0}</div>'; | |
32 |
return tmpl.format(value |
|
38 | return tmpl.format(valueDisplay); | |
33 | } |
|
39 | } | |
34 |
return tmpl.format(data.icon_link, value |
|
40 | return tmpl.format(data.icon_link, valueDisplay); | |
35 | }; |
|
41 | }; | |
36 |
|
42 | |||
37 | /** |
|
43 | /** |
General Comments 0
You need to be logged in to leave comments.
Login now