Commit 9910b7ff authored by Douwe Maan's avatar Douwe Maan

Allow groups to be mentioned.

Resolves #1673.
parent 56a456b4
...@@ -102,7 +102,7 @@ class ProjectsController < ApplicationController ...@@ -102,7 +102,7 @@ class ProjectsController < ApplicationController
note_type = params['type'] note_type = params['type']
note_id = params['type_id'] note_id = params['type_id']
autocomplete = ::Projects::AutocompleteService.new(@project) autocomplete = ::Projects::AutocompleteService.new(@project)
participants = ::Projects::ParticipantsService.new(@project).execute(note_type, note_id) participants = ::Projects::ParticipantsService.new(@project, current_user).execute(note_type, note_id)
@suggestions = { @suggestions = {
emojis: autocomplete_emojis, emojis: autocomplete_emojis,
......
...@@ -51,9 +51,12 @@ module Mentionable ...@@ -51,9 +51,12 @@ module Mentionable
identifier = match.delete "@" identifier = match.delete "@"
if identifier == "all" if identifier == "all"
users.push(*project.team.members.flatten) users.push(*project.team.members.flatten)
else elsif namespace = Namespace.find_by(path: identifier)
id = User.find_by(username: identifier).try(:id) if namespace.type == "Group"
users << User.find(id) unless id.blank? users.push(*namespace.users)
else
users << namespace.owner
end
end end
end end
users.uniq users.uniq
......
module Projects module Projects
class ParticipantsService < BaseService class ParticipantsService < BaseService
def initialize(project) def initialize(project, user)
@project = project @project = project
@user = user
end end
def execute(note_type, note_id) def execute(note_type, note_id)
...@@ -12,7 +13,7 @@ module Projects ...@@ -12,7 +13,7 @@ module Projects
[] []
end end
team_members = sorted(@project.team.members) team_members = sorted(@project.team.members)
participants = all_members + team_members + participating participants = all_members + groups + team_members + participating
participants.uniq participants.uniq
end end
...@@ -37,6 +38,10 @@ module Projects ...@@ -37,6 +38,10 @@ module Projects
users.uniq.to_a.compact.sort_by(&:username).map { |user| { username: user.username, name: user.name } } users.uniq.to_a.compact.sort_by(&:username).map { |user| { username: user.username, name: user.name } }
end end
def groups
@user.authorized_groups.sort_by(&:path).map { |group| { username: group.path, name: group.name } }
end
def all_members def all_members
[{ username: "all", name: "Project and Group Members" }] [{ username: "all", name: "Project and Group Members" }]
end end
......
...@@ -170,7 +170,7 @@ GFM will turn that reference into a link so you can navigate between them easily ...@@ -170,7 +170,7 @@ GFM will turn that reference into a link so you can navigate between them easily
GFM will recognize the following: GFM will recognize the following:
- @foo : for team members - @foo : for specific team members or groups
- @all : for the whole team - @all : for the whole team
- #123 : for issues - #123 : for issues
- !123 : for merge requests - !123 : for merge requests
......
...@@ -202,8 +202,15 @@ module Gitlab ...@@ -202,8 +202,15 @@ module Gitlab
if identifier == "all" if identifier == "all"
link_to("@all", project_url(project), options) link_to("@all", project_url(project), options)
elsif User.find_by(username: identifier) elsif namespace = Namespace.find_by(path: identifier)
link_to("@#{identifier}", user_url(identifier), options) url =
if namespace.type == "Group"
group_url(identifier)
else
user_url(identifier)
end
link_to("@#{identifier}", url, options)
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment