2013-01-07 18:48:57 +00:00
module GroupsHelper
2018-02-06 12:17:23 +00:00
def group_nav_link_paths
2018-04-08 10:20:05 +00:00
%w[ groups # projects groups # edit badges # index ci_cd # show ldap_group_links # index hooks # index audit_events # index pipeline_quota # index ]
2018-02-06 12:17:23 +00:00
end
2017-12-11 14:21:06 +00:00
def group_sidebar_links
@group_sidebar_links || = get_group_sidebar_links
end
def group_sidebar_link? ( link )
group_sidebar_links . include? ( link )
end
2016-03-01 15:22:29 +00:00
def can_change_group_visibility_level? ( group )
can? ( current_user , :change_visibility_level , group )
end
2017-09-05 19:43:48 +00:00
def can_change_share_with_group_lock? ( group )
can? ( current_user , :change_share_with_group_lock , group )
end
2018-02-23 12:10:57 +00:00
def group_issues_count ( state : )
IssuesFinder
. new ( current_user , group_id : @group . id , state : state , non_archived : true , include_subgroups : true )
. execute
. count
end
def group_merge_requests_count ( state : )
MergeRequestsFinder
. new ( current_user , group_id : @group . id , state : state , non_archived : true , include_subgroups : true )
. execute
. count
end
2017-10-02 11:35:01 +00:00
def group_icon ( group , options = { } )
img_path = group_icon_url ( group , options )
image_tag img_path , options
end
def group_icon_url ( group , options = { } )
2015-03-12 20:56:53 +00:00
if group . is_a? ( String )
2016-10-31 11:00:53 +00:00
group = Group . find_by_full_path ( group )
2015-03-12 20:56:53 +00:00
end
2017-10-10 08:59:07 +00:00
group . try ( :avatar_url ) || ActionController :: Base . helpers . image_path ( 'no_group_avatar.png' )
2015-03-12 20:56:53 +00:00
end
2015-09-07 11:18:11 +00:00
2015-09-17 10:16:24 +00:00
def group_title ( group , name = nil , url = nil )
2017-03-01 02:59:55 +00:00
@has_group_title = true
2016-12-08 16:28:49 +00:00
full_title = ''
2017-08-16 09:35:59 +00:00
group . ancestors . reverse . each_with_index do | parent , index |
2017-09-06 11:19:03 +00:00
if index > 0
2017-09-12 08:54:01 +00:00
add_to_breadcrumb_dropdown ( group_title_link ( parent , hidable : false , show_avatar : true , for_dropdown : true ) , location : :before )
2017-08-16 12:13:34 +00:00
else
2017-09-06 11:19:03 +00:00
full_title += breadcrumb_list_item group_title_link ( parent , hidable : false )
2017-08-16 12:13:34 +00:00
end
end
2017-09-06 11:19:03 +00:00
full_title += render " layouts/nav/breadcrumbs/collapsed_dropdown " , location : :before , title : _ ( " Show parent subgroups " )
2016-12-08 16:28:49 +00:00
2017-09-06 11:19:03 +00:00
full_title += breadcrumb_list_item group_title_link ( group )
2017-09-06 10:55:23 +00:00
full_title += ' · ' . html_safe + link_to ( simple_sanitize ( name ) , url , class : 'group-path breadcrumb-item-text js-breadcrumb-item-text' ) if name
2015-09-17 10:16:24 +00:00
2017-09-06 11:19:03 +00:00
full_title . html_safe
2015-09-07 11:18:11 +00:00
end
2016-09-01 23:49:48 +00:00
2016-09-06 16:48:00 +00:00
def projects_lfs_status ( group )
lfs_status =
if group . lfs_enabled?
group . projects . select ( & :lfs_enabled? ) . size
else
group . projects . reject ( & :lfs_enabled? ) . size
end
2016-09-05 20:40:49 +00:00
2016-09-05 18:14:49 +00:00
size = group . projects . size
2016-09-06 16:48:00 +00:00
if lfs_status == size
'for all projects'
2016-09-05 18:14:49 +00:00
else
2016-09-06 16:48:00 +00:00
" for #{ lfs_status } out of #{ pluralize ( size , 'project' ) } "
2016-09-05 18:14:49 +00:00
end
end
def group_lfs_status ( group )
2016-09-05 20:40:49 +00:00
status = group . lfs_enabled? ? 'enabled' : 'disabled'
content_tag ( :span , class : " lfs- #{ status } " ) do
2016-09-06 16:48:00 +00:00
" #{ status . humanize } #{ projects_lfs_status ( group ) } "
2016-09-05 18:14:49 +00:00
end
2016-09-01 23:49:48 +00:00
end
2016-11-05 17:28:29 +00:00
2017-07-04 15:18:51 +00:00
def remove_group_message ( group )
2017-08-14 11:35:28 +00:00
_ ( " You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure? " ) %
2017-07-04 15:18:51 +00:00
{ group_name : group . name }
end
2017-09-06 00:02:11 +00:00
def share_with_group_lock_help_text ( group )
return default_help unless group . parent & . share_with_group_lock?
if group . share_with_group_lock?
if can? ( current_user , :change_share_with_group_lock , group . parent )
ancestor_locked_but_you_can_override ( group )
else
ancestor_locked_so_ask_the_owner ( group )
end
else
ancestor_locked_and_has_been_overridden ( group )
end
2017-09-01 05:58:05 +00:00
end
2018-02-06 00:10:58 +00:00
def parent_group_options ( current_group )
groups = current_user . owned_groups . sort_by ( & :human_name ) . map do | group |
{ id : group . id , text : group . human_name }
end
groups . delete_if { | group | group [ :id ] == current_group . id }
groups . to_json
end
def supports_nested_groups?
Group . supports_nested_groups?
end
2017-06-30 16:52:11 +00:00
private
2017-12-11 14:21:06 +00:00
def get_group_sidebar_links
links = [ :overview , :group_members ]
if can? ( current_user , :read_cross_project )
2018-03-05 14:39:24 +00:00
links += [ :activity , :issues , :boards , :labels , :milestones , :merge_requests ]
2017-12-11 14:21:06 +00:00
end
if can? ( current_user , :admin_group , @group )
links << :settings
end
links
end
2017-09-12 08:54:01 +00:00
def group_title_link ( group , hidable : false , show_avatar : false , for_dropdown : false )
link_to ( group_path ( group ) , class : " group-path #{ 'breadcrumb-item-text' unless for_dropdown } js-breadcrumb-item-text #{ 'hidable' if hidable } " ) do
2017-06-30 16:52:11 +00:00
output =
2017-09-06 11:19:03 +00:00
if ( group . try ( :avatar_url ) || show_avatar ) && ! Rails . env . test?
2017-10-09 08:45:23 +00:00
group_icon ( group , class : " avatar-tile " , width : 15 , height : 15 )
2017-06-30 16:52:11 +00:00
else
" "
end
output << simple_sanitize ( group . name )
output . html_safe
end
end
2017-09-01 05:58:05 +00:00
2017-09-06 06:49:57 +00:00
def ancestor_group ( group )
2017-09-06 00:02:11 +00:00
ancestor = oldest_consecutively_locked_ancestor ( group )
2017-09-06 06:49:57 +00:00
if can? ( current_user , :read_group , ancestor )
link_to ancestor . name , group_path ( ancestor )
else
ancestor . name
end
2017-09-06 00:02:11 +00:00
end
2017-09-06 18:31:45 +00:00
def remove_the_share_with_group_lock_from_ancestor ( group )
2017-09-06 05:11:49 +00:00
ancestor = oldest_consecutively_locked_ancestor ( group )
2017-09-06 18:31:45 +00:00
text = s_ ( " GroupSettings|remove the share with group lock from %{ancestor_group_name} " ) % { ancestor_group_name : ancestor . name }
2017-09-06 06:49:57 +00:00
if can? ( current_user , :admin_group , ancestor )
link_to text , edit_group_path ( ancestor )
else
text
end
2017-09-06 05:11:49 +00:00
end
2017-09-06 00:02:11 +00:00
def oldest_consecutively_locked_ancestor ( group )
group . ancestors . find do | group |
! group . has_parent? || ! group . parent . share_with_group_lock?
end
2017-09-05 21:53:32 +00:00
end
2017-09-01 05:58:05 +00:00
def default_help
2017-09-22 10:10:25 +00:00
s_ ( " GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually. " )
2017-09-01 05:58:05 +00:00
end
2017-09-06 00:02:11 +00:00
def ancestor_locked_but_you_can_override ( group )
2017-09-06 18:31:45 +00:00
s_ ( " GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}. " ) . html_safe % { ancestor_group : ancestor_group ( group ) , remove_ancestor_share_with_group_lock : remove_the_share_with_group_lock_from_ancestor ( group ) }
2017-09-01 05:58:05 +00:00
end
2017-09-06 00:02:11 +00:00
def ancestor_locked_so_ask_the_owner ( group )
2017-09-06 18:31:45 +00:00
s_ ( " GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}. " ) . html_safe % { ancestor_group : ancestor_group ( group ) , remove_ancestor_share_with_group_lock : remove_the_share_with_group_lock_from_ancestor ( group ) }
2017-09-01 05:58:05 +00:00
end
2017-09-06 00:02:11 +00:00
def ancestor_locked_and_has_been_overridden ( group )
2017-09-06 09:05:50 +00:00
s_ ( " GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup. " ) . html_safe % { ancestor_group : ancestor_group ( group ) }
2017-09-01 05:58:05 +00:00
end
2013-01-07 18:48:57 +00:00
end