Commit 89f8020f authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'mention-groups'

Conflicts:
	CHANGELOG
parents 8c4b98be 04a70d9f
...@@ -38,6 +38,7 @@ v 7.8.0 ...@@ -38,6 +38,7 @@ v 7.8.0
- Add a commit calendar to the user profile (Hannes Rosenögger) - Add a commit calendar to the user profile (Hannes Rosenögger)
- -
- Submit comment on command-enter - Submit comment on command-enter
- Notify all members of a group when that group is mentioned in a comment, for example: `@gitlab-org` or `@sales`.
- -
- Fix long broadcast message cut-off on left sidebar (Visay Keo) - Fix long broadcast message cut-off on left sidebar (Visay Keo)
- Add Project Avatars (Steven Thonus and Hannes Rosenögger) - Add Project Avatars (Steven Thonus and Hannes Rosenögger)
...@@ -1126,4 +1127,4 @@ v 0.8.0 ...@@ -1126,4 +1127,4 @@ v 0.8.0
- stability - stability
- security fixes - security fixes
- increased test coverage - increased test coverage
- email notification - email notification
\ No newline at end of file
...@@ -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