2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2021-09-30 23:02:18 +05:30
module IntegrationsHelper
def integration_event_description ( integration , event )
case integration
when Integrations :: Jira
jira_integration_event_description ( event )
when Integrations :: Teamcity
teamcity_integration_event_description ( event )
else
default_integration_event_description ( event )
2016-08-24 12:49:21 +05:30
end
end
2021-09-30 23:02:18 +05:30
def integration_event_field_name ( event )
2016-09-29 09:46:39 +05:30
event = event . pluralize if %w[ merge_request issue confidential_issue ] . include? ( event )
2016-08-24 12:49:21 +05:30
" #{ event } _events "
end
2017-08-17 22:00:37 +05:30
2020-04-22 19:07:51 +05:30
def scoped_integrations_path
if @project . present?
project_settings_integrations_path ( @project )
elsif @group . present?
group_settings_integrations_path ( @group )
else
integrations_admin_application_settings_path
end
end
def scoped_integration_path ( integration )
if @project . present?
project_service_path ( @project , integration )
elsif @group . present?
group_settings_integration_path ( @group , integration )
else
admin_application_settings_integration_path ( integration )
end
end
def scoped_edit_integration_path ( integration )
if @project . present?
2020-05-24 23:13:21 +05:30
edit_project_service_path ( @project , integration )
2020-04-22 19:07:51 +05:30
elsif @group . present?
edit_group_settings_integration_path ( @group , integration )
else
edit_admin_application_settings_integration_path ( integration )
end
end
2021-10-27 15:23:28 +05:30
def scoped_overrides_integration_path ( integration , options = { } )
overrides_admin_application_settings_integration_path ( integration , options )
end
2020-04-22 19:07:51 +05:30
def scoped_test_integration_path ( integration )
if @project . present?
2020-07-28 23:09:34 +05:30
test_project_service_path ( @project , integration )
2020-04-22 19:07:51 +05:30
elsif @group . present?
test_group_settings_integration_path ( @group , integration )
else
test_admin_application_settings_integration_path ( integration )
end
end
2021-02-22 17:27:13 +05:30
def scoped_reset_integration_path ( integration , group : nil )
2021-03-08 18:12:59 +05:30
return '' unless integration . persisted?
2021-02-22 17:27:13 +05:30
if group . present?
reset_group_settings_integration_path ( group , integration )
else
reset_admin_application_settings_integration_path ( integration )
end
end
def integration_form_data ( integration , group : nil )
2021-04-29 21:17:54 +05:30
form_data = {
2020-07-28 23:09:34 +05:30
id : integration . id ,
show_active : integration . show_active_box? . to_s ,
activated : ( integration . active || integration . new_record? ) . to_s ,
type : integration . to_param ,
merge_request_events : integration . merge_requests_events . to_s ,
commit_events : integration . commit_events . to_s ,
enable_comments : integration . comment_on_event_enabled . to_s ,
comment_detail : integration . comment_detail ,
2020-11-24 15:15:51 +05:30
learn_more_path : integrations_help_page_path ,
2021-09-30 23:02:18 +05:30
trigger_events : trigger_events_for_integration ( integration ) ,
fields : fields_for_integration ( integration ) ,
2020-11-24 15:15:51 +05:30
inherit_from_id : integration . inherit_from_id ,
integration_level : integration_level ( integration ) ,
editable : integration . editable? . to_s ,
cancel_path : scoped_integrations_path ,
2021-09-30 23:02:18 +05:30
can_test : integration . testable? . to_s ,
2021-01-29 00:20:46 +05:30
test_path : scoped_test_integration_path ( integration ) ,
2021-03-08 18:12:59 +05:30
reset_path : scoped_reset_integration_path ( integration , group : group )
2020-07-28 23:09:34 +05:30
}
2021-04-29 21:17:54 +05:30
2021-09-04 01:27:46 +05:30
if integration . is_a? ( Integrations :: Jira )
2021-04-29 21:17:54 +05:30
form_data [ :jira_issue_transition_automatic ] = integration . jira_issue_transition_automatic
form_data [ :jira_issue_transition_id ] = integration . jira_issue_transition_id
end
form_data
end
2021-10-27 15:23:28 +05:30
def integration_overrides_data ( integration )
{
overrides_path : scoped_overrides_integration_path ( integration , format : :json )
}
end
2021-04-29 21:17:54 +05:30
def integration_list_data ( integrations )
{
integrations : integrations . map { | i | serialize_integration ( i ) } . to_json
}
2020-07-28 23:09:34 +05:30
end
2020-11-24 15:15:51 +05:30
def integrations_help_page_path
help_page_path ( 'user/admin_area/settings/project_integration_management' )
end
2020-07-28 23:09:34 +05:30
def project_jira_issues_integration?
false
2020-06-23 00:09:42 +05:30
end
2021-01-03 14:25:43 +05:30
def instance_level_integrations?
! Gitlab . com?
end
2021-10-27 15:23:28 +05:30
def integration_tabs ( integration : )
[
{ key : 'edit' , text : _ ( 'Settings' ) , href : scoped_edit_integration_path ( integration ) } ,
(
{ key : 'overrides' , text : s_ ( 'Integrations|Projects using custom settings' ) , href : scoped_overrides_integration_path ( integration ) } if integration . instance_level?
)
] . compact
end
2021-03-11 19:13:27 +05:30
def jira_issue_breadcrumb_link ( issue_reference )
link_to '' , { class : 'gl-display-flex gl-align-items-center gl-white-space-nowrap' } do
icon = image_tag image_path ( 'illustrations/logos/jira.svg' ) , width : 15 , height : 15 , class : 'gl-mr-2'
2021-09-04 01:27:46 +05:30
[ icon , html_escape ( issue_reference ) ] . join . html_safe
2021-03-11 19:13:27 +05:30
end
end
2017-08-17 22:00:37 +05:30
extend self
2020-11-24 15:15:51 +05:30
private
2021-09-30 23:02:18 +05:30
def jira_integration_event_description ( event )
case event
when " merge_request " , " merge_request_events "
s_ ( " JiraService|Jira comments are created when an issue is referenced in a merge request. " )
when " commit " , " commit_events "
s_ ( " JiraService|Jira comments are created when an issue is referenced in a commit. " )
end
end
def teamcity_integration_event_description ( event )
case event
when 'push' , 'push_events'
s_ ( 'TeamcityIntegration|Trigger TeamCity CI after every push to the repository, except branch delete' )
when 'merge_request' , 'merge_request_events'
s_ ( 'TeamcityIntegration|Trigger TeamCity CI after a merge request has been created or updated' )
end
end
def default_integration_event_description ( event )
case event
when " push " , " push_events "
s_ ( " ProjectService|Trigger event for pushes to the repository. " )
when " tag_push " , " tag_push_events "
s_ ( " ProjectService|Trigger event for new tags pushed to the repository. " )
when " note " , " note_events "
s_ ( " ProjectService|Trigger event for new comments. " )
when " confidential_note " , " confidential_note_events "
s_ ( " ProjectService|Trigger event for new comments on confidential issues. " )
when " issue " , " issue_events "
s_ ( " ProjectService|Trigger event when an issue is created, updated, or closed. " )
when " confidential_issue " , " confidential_issue_events "
s_ ( " ProjectService|Trigger event when a confidential issue is created, updated, or closed. " )
when " merge_request " , " merge_request_events "
s_ ( " ProjectService|Trigger event when a merge request is created, updated, or merged. " )
when " pipeline " , " pipeline_events "
s_ ( " ProjectService|Trigger event when a pipeline status changes. " )
when " wiki_page " , " wiki_page_events "
s_ ( " ProjectService|Trigger event when a wiki page is created or updated. " )
when " commit " , " commit_events "
s_ ( " ProjectService|Trigger event when a commit is created or updated. " )
when " deployment "
s_ ( " ProjectService|Trigger event when a deployment starts or finishes. " )
when " alert "
s_ ( " ProjectService|Trigger event when a new, unique alert is recorded. " )
end
end
def trigger_events_for_integration ( integration )
ServiceEventSerializer . new ( service : integration ) . represent ( integration . configurable_events ) . to_json
end
def fields_for_integration ( integration )
ServiceFieldSerializer . new ( service : integration ) . represent ( integration . global_fields ) . to_json
end
2020-11-24 15:15:51 +05:30
def integration_level ( integration )
2021-06-08 01:23:25 +05:30
if integration . instance_level?
2020-11-24 15:15:51 +05:30
'instance'
2021-06-08 01:23:25 +05:30
elsif integration . group_level?
2020-11-24 15:15:51 +05:30
'group'
else
'project'
end
end
2021-04-29 21:17:54 +05:30
def serialize_integration ( integration )
{
active : integration . operating? ,
title : integration . title ,
description : integration . description ,
updated_at : integration . updated_at ,
edit_path : scoped_edit_integration_path ( integration ) ,
name : integration . to_param
}
end
2016-08-24 12:49:21 +05:30
end
2019-12-04 20:38:33 +05:30
2021-09-30 23:02:18 +05:30
IntegrationsHelper . prepend_mod_with ( 'IntegrationsHelper' )
2019-12-04 20:38:33 +05:30
2021-09-30 23:02:18 +05:30
# The methods in `EE::IntegrationsHelper` should be available as both instance and
2019-12-04 20:38:33 +05:30
# class methods.
2021-09-30 23:02:18 +05:30
IntegrationsHelper . extend_mod_with ( 'IntegrationsHelper' )