debian-mirror-gitlab/app/helpers/integrations_helper.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

305 lines
11 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2021-09-30 23:02:18 +05:30
module IntegrationsHelper
2023-03-17 16:20:25 +05:30
# rubocop:disable Metrics/CyclomaticComplexity
2022-05-07 20:08:51 +05:30
def integration_event_title(event)
case event
when "push", "push_events"
_("Push")
when "tag_push", "tag_push_events"
_("Tag push")
when "note", "note_events"
_("Note")
when "confidential_note", "confidential_note_events"
_("Confidential note")
when "issue", "issue_events"
_("Issue")
when "confidential_issue", "confidential_issue_events"
_("Confidential issue")
when "merge_request", "merge_request_events"
_("Merge request")
when "pipeline", "pipeline_events"
_("Pipeline")
when "wiki_page", "wiki_page_events"
_("Wiki page")
when "commit", "commit_events"
_("Commit")
when "deployment"
_("Deployment")
when "alert"
_("Alert")
2023-03-17 16:20:25 +05:30
when "incident"
_("Incident")
2022-05-07 20:08:51 +05:30
end
end
2023-03-17 16:20:25 +05:30
# rubocop:enable Metrics/CyclomaticComplexity
2022-05-07 20:08:51 +05:30
2021-09-30 23:02:18 +05:30
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
2022-01-26 12:08:38 +05:30
def scoped_integrations_path(project: nil, group: nil)
if project.present?
project_settings_integrations_path(project)
elsif group.present?
group_settings_integrations_path(group)
2020-04-22 19:07:51 +05:30
else
integrations_admin_application_settings_path
end
end
2022-01-26 12:08:38 +05:30
def scoped_integration_path(integration, project: nil, group: nil)
if project.present?
2022-07-23 23:45:48 +05:30
project_settings_integration_path(project, integration)
2022-01-26 12:08:38 +05:30
elsif group.present?
group_settings_integration_path(group, integration)
2020-04-22 19:07:51 +05:30
else
admin_application_settings_integration_path(integration)
end
end
2022-01-26 12:08:38 +05:30
def scoped_edit_integration_path(integration, project: nil, group: nil)
if project.present?
2022-07-23 23:45:48 +05:30
edit_project_settings_integration_path(project, integration)
2022-01-26 12:08:38 +05:30
elsif group.present?
edit_group_settings_integration_path(group, integration)
2020-04-22 19:07:51 +05:30
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
2022-01-26 12:08:38 +05:30
def scoped_test_integration_path(integration, project: nil, group: nil)
if project.present?
2022-07-23 23:45:48 +05:30
test_project_settings_integration_path(project, integration)
2022-01-26 12:08:38 +05:30
elsif group.present?
test_group_settings_integration_path(group, integration)
2020-04-22 19:07:51 +05:30
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
2022-01-26 12:08:38 +05:30
def integration_form_data(integration, project: nil, 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,
2022-05-07 20:08:51 +05:30
activated: (integration.active || (integration.new_record? && integration.activate_disabled_reason.nil?)).to_s,
activate_disabled: integration.activate_disabled_reason.present?.to_s,
2020-07-28 23:09:34 +05:30
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,
2022-07-16 23:28:13 +05:30
about_pricing_url: Gitlab::Saas.about_pricing_url,
2021-09-30 23:02:18 +05:30
trigger_events: trigger_events_for_integration(integration),
2022-05-07 20:08:51 +05:30
sections: integration.sections.to_json,
2021-09-30 23:02:18 +05:30
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,
2022-01-26 12:08:38 +05:30
cancel_path: scoped_integrations_path(project: project, group: group),
2021-09-30 23:02:18 +05:30
can_test: integration.testable?.to_s,
2022-01-26 12:08:38 +05:30
test_path: scoped_test_integration_path(integration, project: project, group: group),
2022-03-02 08:16:31 +05:30
reset_path: scoped_reset_integration_path(integration, group: group),
form_path: scoped_integration_path(integration, project: project, group: group),
redirect_to: request.referer
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
2022-03-02 08:16:31 +05:30
def integration_overrides_data(integration, project: nil, group: nil)
2021-10-27 15:23:28 +05:30
{
2022-03-02 08:16:31 +05:30
edit_path: scoped_edit_integration_path(integration, project: project, group: group),
2021-10-27 15:23:28 +05:30
overrides_path: scoped_overrides_integration_path(integration, format: :json)
}
end
2022-01-26 12:08:38 +05:30
def integration_list_data(integrations, group: nil, project: nil)
2021-04-29 21:17:54 +05:30
{
2022-01-26 12:08:38 +05:30
integrations: integrations.map { |i| serialize_integration(i, group: group, project: project) }.to_json
2021-04-29 21:17:54 +05:30
}
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
2023-01-13 00:05:48 +05:30
def integration_issue_type(issue_type)
issue_type_i18n_map = {
'issue' => _('Issue'),
'incident' => _('Incident'),
'test_case' => _('Test case'),
'requirement' => _('Requirement'),
'task' => _('Task')
}
issue_type_i18n_map[issue_type] || issue_type
end
def integration_todo_target_type(target_type)
target_type_i18n_map = {
'Commit' => _('Commit'),
'Issue' => _('Issue'),
'MergeRequest' => _('Merge Request'),
'Epic' => _('Epic'),
DesignManagement::Design.name => _('design'),
AlertManagement::Alert.name => _('alert')
}
target_type_i18n_map[target_type] || target_type
end
2023-03-04 22:38:38 +05:30
def integration_webhook_event_human_name(event)
event_i18n_map = {
repository_update_events: _('Repository update events'),
push_events: _('Push events'),
tag_push_events: s_('Webhooks|Tag push events'),
note_events: _('Comments'),
confidential_note_events: s_('Webhooks|Confidential comments'),
issues_events: s_('Webhooks|Issues events'),
confidential_issues_events: s_('Webhooks|Confidential issues events'),
subgroup_events: s_('Webhooks|Subgroup events'),
member_events: s_('Webhooks|Member events'),
merge_requests_events: s_('Webhooks|Merge request events'),
job_events: s_('Webhooks|Job events'),
pipeline_events: s_('Webhooks|Pipeline events'),
wiki_page_events: s_('Webhooks|Wiki page events'),
deployment_events: s_('Webhooks|Deployment events'),
feature_flag_events: s_('Webhooks|Feature flag events'),
releases_events: s_('Webhooks|Releases events')
}
event_i18n_map[event] || event.to_s.humanize
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
2023-03-17 16:20:25 +05:30
# rubocop:disable Metrics/CyclomaticComplexity
2021-09-30 23:02:18 +05:30
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.")
2023-03-17 16:20:25 +05:30
when "incident"
s_("ProjectService|Trigger event when an incident is created.")
2021-09-30 23:02:18 +05:30
end
end
2023-03-17 16:20:25 +05:30
# rubocop:enable Metrics/CyclomaticComplexity
2021-09-30 23:02:18 +05:30
def trigger_events_for_integration(integration)
2022-07-23 23:45:48 +05:30
Integrations::EventSerializer.new(integration: integration).represent(integration.configurable_events).to_json
2021-09-30 23:02:18 +05:30
end
def fields_for_integration(integration)
2022-08-13 15:12:31 +05:30
Integrations::FieldSerializer.new(integration: integration).represent(integration.form_fields).to_json
2021-09-30 23:02:18 +05:30
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
2022-01-26 12:08:38 +05:30
def serialize_integration(integration, group: nil, project: nil)
2021-04-29 21:17:54 +05:30
{
active: integration.operating?,
title: integration.title,
description: integration.description,
updated_at: integration.updated_at,
2022-01-26 12:08:38 +05:30
edit_path: scoped_edit_integration_path(integration, group: group, project: project),
2021-04-29 21:17:54 +05:30
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')