diff --git a/CHANGELOG b/CHANGELOG index 441f36a5bde41d597193f96ea332bbff561bfef3..2a025d6481e665a9ed83e9321756c93448cd8c04 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,12 @@ +v 6.8.0 + - Ability to at mention users that are participating in issue and merge req. discussion + +v 6.7.2 + - Fix upgrader script + +v 6.7.1 + - Fix GitLab CI integration + v 6.7.0 - Increased the example Nginx client_max_body_size from 5MB to 20MB, consider updating it manually on existing installations - Add support for Gemnasium as a Project Service (Olivier Gonzalez) diff --git a/VERSION b/VERSION index f0e13c509025821bc44ae215533a6d4d332154d0..2dd517aa61c31a26b2f3e017e84c0ac028804aca 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.7.0 +6.7.2 diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index e181a0ec7fa05109556439462be50fbb3658a7af..ebb8a90c630039ace5730de753303406c5ba70e2 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -123,11 +123,20 @@ class ProjectsController < ApplicationController end def autocomplete_sources + note_type = params['type'] + note_id = params['type_id'] + participating = if note_type && note_id + participants_in(note_type, note_id) + else + [] + end + team_members = sorted(@project.team.members) + participants = team_members + participating @suggestions = { emojis: Emoji.names.map { |e| { name: e, path: view_context.image_url("emoji/#{e}.png") } }, issues: @project.issues.select([:iid, :title, :description]), mergerequests: @project.merge_requests.select([:iid, :title, :description]), - members: @project.team.members.sort_by(&:username).map { |user| { username: user.username, name: user.name } } + members: participants.uniq } respond_to do |format| @@ -162,4 +171,25 @@ class ProjectsController < ApplicationController def user_layout current_user ? "projects" : "public_projects" end + + def participants_in(type, id) + users = case type + when "Issue" + issue = @project.issues.find_by_iid(id) + issue ? issue.participants : [] + when "MergeRequest" + merge_request = @project.merge_requests.find_by_iid(id) + merge_request ? merge_request.participants : [] + when "Commit" + author_ids = Note.for_commit_id(id).pluck(:author_id).uniq + User.where(id: author_ids) + else + [] + end + sorted(users) + end + + def sorted(users) + users.uniq.sort_by(&:username).map { |user| { username: user.username, name: user.name } } + end end diff --git a/app/views/layouts/_init_auto_complete.html.haml b/app/views/layouts/_init_auto_complete.html.haml index 9e728b462bbe7c6253543e4ada083343c819e7e0..353f7ce34f1273604f4d6a9aa08d646c8e3c79a5 100644 --- a/app/views/layouts/_init_auto_complete.html.haml +++ b/app/views/layouts/_init_auto_complete.html.haml @@ -1,3 +1,3 @@ :javascript - GitLab.GfmAutoComplete.dataSource = "#{autocomplete_sources_project_path(@project)}" + GitLab.GfmAutoComplete.dataSource = "#{autocomplete_sources_project_path(@project, type: @noteable.class, type_id: params[:id])}" GitLab.GfmAutoComplete.setup(); diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 80bb00821f74fea51781888dcfa944a6186d3fea..de14a3eca275611cf7ada45224116049f31bf8e7 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -166,8 +166,8 @@ module Gitlab end def reference_user(identifier) - if member = @project.team_members.find { |user| user.username == identifier } - link_to("@#{identifier}", user_url(identifier), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) if member + if user = User.find_by_username(identifier) + link_to("@#{identifier}", user_url(identifier), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) end end