Commit eb7a9868002a3d96675a1509d75be52cfe43fa2f
Exists in
spb-stable
and in
3 other branches
Merge branch 'improve_at_mentions' into 'master'
Allow at mentions for people who are not members of the project
Showing
5 changed files
with
44 additions
and
5 deletions
Show diff stats
CHANGELOG
1 | +v 6.8.0 | |
2 | + - Ability to at mention users that are participating in issue and merge req. discussion | |
3 | + | |
4 | +v 6.7.2 | |
5 | + - Fix upgrader script | |
6 | + | |
7 | +v 6.7.1 | |
8 | + - Fix GitLab CI integration | |
9 | + | |
1 | 10 | v 6.7.0 |
2 | 11 | - Increased the example Nginx client_max_body_size from 5MB to 20MB, consider updating it manually on existing installations |
3 | 12 | - Add support for Gemnasium as a Project Service (Olivier Gonzalez) | ... | ... |
VERSION
app/controllers/projects_controller.rb
... | ... | @@ -123,11 +123,20 @@ class ProjectsController < ApplicationController |
123 | 123 | end |
124 | 124 | |
125 | 125 | def autocomplete_sources |
126 | + note_type = params['type'] | |
127 | + note_id = params['type_id'] | |
128 | + participating = if note_type && note_id | |
129 | + participants_in(note_type, note_id) | |
130 | + else | |
131 | + [] | |
132 | + end | |
133 | + team_members = sorted(@project.team.members) | |
134 | + participants = team_members + participating | |
126 | 135 | @suggestions = { |
127 | 136 | emojis: Emoji.names.map { |e| { name: e, path: view_context.image_url("emoji/#{e}.png") } }, |
128 | 137 | issues: @project.issues.select([:iid, :title, :description]), |
129 | 138 | mergerequests: @project.merge_requests.select([:iid, :title, :description]), |
130 | - members: @project.team.members.sort_by(&:username).map { |user| { username: user.username, name: user.name } } | |
139 | + members: participants.uniq | |
131 | 140 | } |
132 | 141 | |
133 | 142 | respond_to do |format| |
... | ... | @@ -162,4 +171,25 @@ class ProjectsController < ApplicationController |
162 | 171 | def user_layout |
163 | 172 | current_user ? "projects" : "public_projects" |
164 | 173 | end |
174 | + | |
175 | + def participants_in(type, id) | |
176 | + users = case type | |
177 | + when "Issue" | |
178 | + issue = @project.issues.find_by_iid(id) | |
179 | + issue ? issue.participants : [] | |
180 | + when "MergeRequest" | |
181 | + merge_request = @project.merge_requests.find_by_iid(id) | |
182 | + merge_request ? merge_request.participants : [] | |
183 | + when "Commit" | |
184 | + author_ids = Note.for_commit_id(id).pluck(:author_id).uniq | |
185 | + User.where(id: author_ids) | |
186 | + else | |
187 | + [] | |
188 | + end | |
189 | + sorted(users) | |
190 | + end | |
191 | + | |
192 | + def sorted(users) | |
193 | + users.uniq.sort_by(&:username).map { |user| { username: user.username, name: user.name } } | |
194 | + end | |
165 | 195 | end | ... | ... |
app/views/layouts/_init_auto_complete.html.haml
lib/gitlab/markdown.rb
... | ... | @@ -166,8 +166,8 @@ module Gitlab |
166 | 166 | end |
167 | 167 | |
168 | 168 | def reference_user(identifier) |
169 | - if member = @project.team_members.find { |user| user.username == identifier } | |
170 | - link_to("@#{identifier}", user_url(identifier), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) if member | |
169 | + if user = User.find_by_username(identifier) | |
170 | + link_to("@#{identifier}", user_url(identifier), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) | |
171 | 171 | end |
172 | 172 | end |
173 | 173 | ... | ... |