Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 22:00:14 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 22:00:14 +0300
commit05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2 (patch)
tree11d0f2a6ec31c7793c184106cedc2ded3d9a2cc5 /app/helpers
parentec73467c23693d0db63a797d10194da9e72a74af (diff)
Add latest changes from gitlab-org/gitlab@15-8-stable-eev15.8.0-rc42
Diffstat (limited to 'app/helpers')
-rw-r--r--app/helpers/admin/components_helper.rb15
-rw-r--r--app/helpers/appearances_helper.rb4
-rw-r--r--app/helpers/application_helper.rb20
-rw-r--r--app/helpers/application_settings_helper.rb5
-rw-r--r--app/helpers/broadcast_messages_helper.rb8
-rw-r--r--app/helpers/button_helper.rb4
-rw-r--r--app/helpers/ci/runners_helper.rb2
-rw-r--r--app/helpers/emails_helper.rb35
-rw-r--r--app/helpers/environment_helper.rb5
-rw-r--r--app/helpers/feature_flags_helper.rb3
-rw-r--r--app/helpers/form_helper.rb12
-rw-r--r--app/helpers/graph_helper.rb2
-rw-r--r--app/helpers/groups/group_members_helper.rb4
-rw-r--r--app/helpers/groups/observability_helper.rb10
-rw-r--r--app/helpers/import_helper.rb2
-rw-r--r--app/helpers/integrations_helper.rb8
-rw-r--r--app/helpers/issuables_helper.rb22
-rw-r--r--app/helpers/issues_helper.rb28
-rw-r--r--app/helpers/markup_helper.rb15
-rw-r--r--app/helpers/merge_requests_helper.rb6
-rw-r--r--app/helpers/nav_helper.rb4
-rw-r--r--app/helpers/preferences_helper.rb17
-rw-r--r--app/helpers/projects/ml/experiments_helper.rb23
-rw-r--r--app/helpers/projects/project_members_helper.rb4
-rw-r--r--app/helpers/projects_helper.rb30
-rw-r--r--app/helpers/protected_branches_helper.rb19
-rw-r--r--app/helpers/search_helper.rb2
-rw-r--r--app/helpers/selects_helper.rb14
-rw-r--r--app/helpers/sidebars_helper.rb12
-rw-r--r--app/helpers/timeboxes_helper.rb14
-rw-r--r--app/helpers/todos_helper.rb4
-rw-r--r--app/helpers/url_helper.rb11
-rw-r--r--app/helpers/users/callouts_helper.rb4
-rw-r--r--app/helpers/users_helper.rb2
-rw-r--r--app/helpers/version_check_helper.rb2
-rw-r--r--app/helpers/visibility_level_helper.rb2
-rw-r--r--app/helpers/work_items_helper.rb4
37 files changed, 225 insertions, 153 deletions
diff --git a/app/helpers/admin/components_helper.rb b/app/helpers/admin/components_helper.rb
new file mode 100644
index 00000000000..577c12a0184
--- /dev/null
+++ b/app/helpers/admin/components_helper.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Admin
+ module ComponentsHelper
+ def database_versions
+ Gitlab::Database.database_base_models.transform_values do |base_model|
+ reflection = ::Gitlab::Database::Reflection.new(base_model)
+ {
+ adapter_name: reflection.human_adapter_name,
+ version: reflection.version
+ }
+ end.symbolize_keys
+ end
+ end
+end
diff --git a/app/helpers/appearances_helper.rb b/app/helpers/appearances_helper.rb
index 9a323852996..ab743e27603 100644
--- a/app/helpers/appearances_helper.rb
+++ b/app/helpers/appearances_helper.rb
@@ -4,6 +4,10 @@ module AppearancesHelper
include MarkupHelper
include Gitlab::Utils::StrongMemoize
+ def appearance_short_name
+ Appearance.current&.pwa_short_name.presence || _('GitLab')
+ end
+
def brand_title
current_appearance&.title.presence || default_brand_title
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index c78563a9a5f..f4b34044e0e 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -20,23 +20,15 @@ module ApplicationHelper
def dispensable_render(...)
render(...)
rescue StandardError => e
- if Feature.enabled?(:dispensable_render)
- Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
- nil
- else
- raise e
- end
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
+ nil
end
def dispensable_render_if_exists(...)
render_if_exists(...)
rescue StandardError => e
- if Feature.enabled?(:dispensable_render)
- Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
- nil
- else
- raise e
- end
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
+ nil
end
def partial_exists?(partial)
@@ -183,6 +175,8 @@ module ApplicationHelper
#
# Returns an HTML-safe String
def time_ago_with_tooltip(time, placement: 'top', html_class: '', short_format: false)
+ return "" if time.nil?
+
css_classes = [short_format ? 'js-short-timeago' : 'js-timeago']
css_classes << html_class unless html_class.blank?
@@ -242,7 +236,7 @@ module ApplicationHelper
end
def instance_review_permitted?
- ::Gitlab::CurrentSettings.instance_review_permitted? && current_user&.admin?
+ ::Gitlab::CurrentSettings.instance_review_permitted? && current_user&.can_read_all_resources?
end
def static_objects_external_storage_enabled?
diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb
index 2b2ac262848..339938245a0 100644
--- a/app/helpers/application_settings_helper.rb
+++ b/app/helpers/application_settings_helper.rb
@@ -273,6 +273,7 @@ module ApplicationSettingsHelper
:housekeeping_full_repack_period,
:housekeeping_gc_period,
:housekeeping_incremental_repack_period,
+ :housekeeping_optimize_repository_period,
:html_emails_enabled,
:import_sources,
:in_product_marketing_emails_enabled,
@@ -447,7 +448,9 @@ module ApplicationSettingsHelper
:pipeline_limit_per_project_user_sha,
:invitation_flow_enforcement,
:can_create_group,
- :bulk_import_enabled
+ :bulk_import_enabled,
+ :allow_runner_registration_token,
+ :user_defaults_to_private_profile
].tap do |settings|
next if Gitlab.com?
diff --git a/app/helpers/broadcast_messages_helper.rb b/app/helpers/broadcast_messages_helper.rb
index 9827f075e54..01d28ed3221 100644
--- a/app/helpers/broadcast_messages_helper.rb
+++ b/app/helpers/broadcast_messages_helper.rb
@@ -50,14 +50,6 @@ module BroadcastMessagesHelper
end
end
- def broadcast_type_options
- BroadcastMessage.broadcast_types.keys.map { |w| [w.humanize, w] }
- end
-
- def broadcast_theme_options
- BroadcastMessage.themes.keys
- end
-
def target_access_level_options
BroadcastMessage::ALLOWED_TARGET_ACCESS_LEVELS.map do |access_level|
[Gitlab::Access.human_access(access_level), access_level]
diff --git a/app/helpers/button_helper.rb b/app/helpers/button_helper.rb
index c47aef24367..64d6ba155cd 100644
--- a/app/helpers/button_helper.rb
+++ b/app/helpers/button_helper.rb
@@ -20,8 +20,8 @@ module ButtonHelper
#
# See http://clipboardjs.com/#usage
def clipboard_button(data = {})
- css_class = data[:class] || 'btn-clipboard gl-button btn-default-tertiary btn-icon btn-sm'
- title = data[:title] || _('Copy')
+ css_class = data.delete(:class) || 'btn-clipboard gl-button btn-default-tertiary btn-icon btn-sm'
+ title = data.delete(:title) || _('Copy')
button_text = data[:button_text] || nil
hide_tooltip = data[:hide_tooltip] || false
hide_button_icon = data[:hide_button_icon] || false
diff --git a/app/helpers/ci/runners_helper.rb b/app/helpers/ci/runners_helper.rb
index 8df30ee1f0d..ac36c867baf 100644
--- a/app/helpers/ci/runners_helper.rb
+++ b/app/helpers/ci/runners_helper.rb
@@ -78,7 +78,7 @@ module Ci
parent_shared_runners_setting: group.parent&.shared_runners_setting,
runner_enabled_value: Namespace::SR_ENABLED,
runner_disabled_value: Namespace::SR_DISABLED_AND_UNOVERRIDABLE,
- runner_allow_override_value: Namespace::SR_DISABLED_WITH_OVERRIDE
+ runner_allow_override_value: Namespace::SR_DISABLED_AND_OVERRIDABLE
}
end
diff --git a/app/helpers/emails_helper.rb b/app/helpers/emails_helper.rb
index cad39854c0e..f6de405cecb 100644
--- a/app/helpers/emails_helper.rb
+++ b/app/helpers/emails_helper.rb
@@ -284,23 +284,38 @@ module EmailsHelper
end
def change_reviewer_notification_text(new_reviewers, previous_reviewers, html_tag = nil)
- new = new_reviewers.any? ? users_to_sentence(new_reviewers) : s_('ChangeReviewer|Unassigned')
- old = previous_reviewers.any? ? users_to_sentence(previous_reviewers) : nil
+ if new_reviewers.empty?
+ s_('ChangeReviewer|All reviewers were removed.')
+ else
+ added_reviewers = new_reviewers - previous_reviewers
+ removed_reviewers = previous_reviewers - new_reviewers
- if html_tag.present?
- new = content_tag(html_tag, new)
- old = content_tag(html_tag, old) if old.present?
- end
+ added_reviewers_template_text = added_reviewers.size > 1 ? "were added as reviewers.<br>" : "was added as a reviewer.<br>"
+ removed_reviewers_template_text = removed_reviewers.size > 1 ? "were removed from reviewers." : "was removed from reviewers."
- if old.present?
- s_('ChangeReviewer|Reviewer changed from %{old} to %{new}').html_safe % { old: old, new: new }
- else
- s_('ChangeReviewer|Reviewer changed to %{new}').html_safe % { new: new }
+ added = format_reviewers_string(added_reviewers, html_tag)
+ removed = format_reviewers_string(removed_reviewers, html_tag)
+
+ added_reviewers_text = added ? "#{added} #{added_reviewers_template_text}".html_safe : ''
+ removed_reviewers_text = removed ? "#{removed} #{removed_reviewers_template_text}".html_safe : ''
+ s_('ChangeReviewer|%{added_reviewers_text}%{removed_reviewers_text}').html_safe % { added_reviewers_text: added_reviewers_text, removed_reviewers_text: removed_reviewers_text }
end
end
private
+ def format_reviewers_string(reviewers, html_tag = nil)
+ return unless reviewers.any?
+
+ formatted_reviewers = users_to_sentence(reviewers)
+
+ if html_tag.present?
+ content_tag(html_tag, formatted_reviewers)
+ else
+ formatted_reviewers
+ end
+ end
+
def users_to_sentence(users)
sanitize_name(users.map(&:name).to_sentence)
end
diff --git a/app/helpers/environment_helper.rb b/app/helpers/environment_helper.rb
index 0e64a98c9da..2b3700a9f21 100644
--- a/app/helpers/environment_helper.rb
+++ b/app/helpers/environment_helper.rb
@@ -58,8 +58,9 @@ module EnvironmentHelper
s_('Deployment|blocked')
end
- klass = "ci-status ci-#{status.dasherize}"
- text = "#{ci_icon_for_status(status)} #{status_text}".html_safe
+ ci_icon_utilities = "gl-display-inline-flex gl-align-items-center gl-line-height-0 gl-px-3 gl-py-2 gl-rounded-base"
+ klass = "ci-status ci-#{status.dasherize} #{ci_icon_utilities}"
+ text = "#{ci_icon_for_status(status)} <span class=\"gl-ml-2\">#{status_text}</span>".html_safe
if deployment.deployable
link_to(text, deployment_path(deployment), class: klass)
diff --git a/app/helpers/feature_flags_helper.rb b/app/helpers/feature_flags_helper.rb
index e12c6c605d2..3dde29dce91 100644
--- a/app/helpers/feature_flags_helper.rb
+++ b/app/helpers/feature_flags_helper.rb
@@ -18,7 +18,8 @@ module FeatureFlagsHelper
feature_flags_path: project_feature_flags_path(@project),
environments_endpoint: search_project_environments_path(@project, format: :json),
strategy_type_docs_page_path: help_page_path('operations/feature_flags', anchor: 'feature-flag-strategies'),
- environments_scope_docs_path: help_page_path('ci/environments/index.md', anchor: 'scope-environments-with-specs')
+ environments_scope_docs_path: help_page_path('ci/environments/index.md',
+ anchor: 'limit-the-environment-scope-of-a-cicd-variable')
}
end
end
diff --git a/app/helpers/form_helper.rb b/app/helpers/form_helper.rb
index 963f0b7afc4..8f0d01c7d6d 100644
--- a/app/helpers/form_helper.rb
+++ b/app/helpers/form_helper.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module FormHelper
- def form_errors(model, type: 'form', truncate: [])
+ def form_errors(model, type: 'form', truncate: [], custom_message: [])
errors = model.errors
return unless errors.any?
@@ -16,9 +16,15 @@ module FormHelper
messages = errors.map do |error|
attribute = error.attribute
- message = error.message
- message = html_escape_once(errors.full_message(attribute, message)).html_safe
+ message = errors.full_message(attribute, error.message)
+
+ # When error message is custom and does not follow the default pattern
+ # "<attribute name> <error message>" (e.g. "You have already reported this
+ # user"), use the message as-is
+ message = error.message if custom_message.include?(attribute)
+
+ message = html_escape_once(message).html_safe
message = tag.span(message, class: 'str-truncated-100') if truncate.include?(attribute)
message = append_help_page_link(message, error.options) if error.options[:help_page_url].present?
diff --git a/app/helpers/graph_helper.rb b/app/helpers/graph_helper.rb
index 788002f126d..ab72442857b 100644
--- a/app/helpers/graph_helper.rb
+++ b/app/helpers/graph_helper.rb
@@ -14,7 +14,7 @@ module GraphHelper
end
def parents_zip_spaces(parents, parent_spaces)
- ids = parents.map { |p| p.id }
+ ids = parents.map(&:id)
ids.zip(parent_spaces)
end
diff --git a/app/helpers/groups/group_members_helper.rb b/app/helpers/groups/group_members_helper.rb
index 5034a4cb9b4..60011e31d43 100644
--- a/app/helpers/groups/group_members_helper.rb
+++ b/app/helpers/groups/group_members_helper.rb
@@ -13,7 +13,9 @@ module Groups::GroupMembersHelper
access_request: group_members_list_data(group, access_requests.nil? ? [] : access_requests),
source_id: group.id,
can_manage_members: can?(current_user, :admin_group_member, group),
- can_manage_access_requests: can?(current_user, :admin_member_access_request, group)
+ can_manage_access_requests: can?(current_user, :admin_member_access_request, group),
+ group_name: group.name,
+ group_path: group.full_path
}
end
diff --git a/app/helpers/groups/observability_helper.rb b/app/helpers/groups/observability_helper.rb
index 26caac4ce7f..6cd6566cee1 100644
--- a/app/helpers/groups/observability_helper.rb
+++ b/app/helpers/groups/observability_helper.rb
@@ -5,15 +5,19 @@ module Groups
ACTION_TO_PATH = {
'dashboards' => {
path: '/',
- title: -> { _('Dashboards') }
+ title: -> { s_('Observability|Dashboards') }
},
'manage' => {
path: '/dashboards',
- title: -> { _('Manage Dashboards') }
+ title: -> { s_('Observability|Manage dashboards') }
},
'explore' => {
path: '/explore',
- title: -> { _('Explore') }
+ title: -> { s_('Observability|Explore telemetry data') }
+ },
+ 'datasources' => {
+ path: '/datasources',
+ title: -> { s_('Observability|Data sources') }
}
}.freeze
diff --git a/app/helpers/import_helper.rb b/app/helpers/import_helper.rb
index 329bbb5ad82..81b881592d0 100644
--- a/app/helpers/import_helper.rb
+++ b/app/helpers/import_helper.rb
@@ -62,7 +62,7 @@ module ImportHelper
def import_configure_github_admin_message
github_integration_link = link_to 'GitHub integration', help_page_path('integration/github')
- if current_user.admin?
+ if current_user.can_admin_all_resources?
_('Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token.').html_safe % { github_integration_link: github_integration_link }
else
_('Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token.').html_safe % { github_integration_link: github_integration_link }
diff --git a/app/helpers/integrations_helper.rb b/app/helpers/integrations_helper.rb
index 0650af33e37..5471109e6d5 100644
--- a/app/helpers/integrations_helper.rb
+++ b/app/helpers/integrations_helper.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
module IntegrationsHelper
+ # rubocop:disable Metrics/CyclomaticComplexity
def integration_event_title(event)
case event
when "push", "push_events"
@@ -27,8 +28,11 @@ module IntegrationsHelper
_("Deployment")
when "alert"
_("Alert")
+ when "incident"
+ _("Incident")
end
end
+ # rubocop:enable Metrics/CyclomaticComplexity
def integration_event_description(integration, event)
case integration
@@ -230,6 +234,7 @@ module IntegrationsHelper
end
end
+ # rubocop:disable Metrics/CyclomaticComplexity
def default_integration_event_description(event)
case event
when "push", "push_events"
@@ -256,8 +261,11 @@ module IntegrationsHelper
s_("ProjectService|Trigger event when a deployment starts or finishes.")
when "alert"
s_("ProjectService|Trigger event when a new, unique alert is recorded.")
+ when "incident"
+ s_("ProjectService|Trigger event when an incident is created.")
end
end
+ # rubocop:enable Metrics/CyclomaticComplexity
def trigger_events_for_integration(integration)
Integrations::EventSerializer.new(integration: integration).represent(integration.configurable_events).to_json
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index 2b21d8c51e6..fb407aa7eed 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -207,14 +207,10 @@ module IssuablesHelper
def assigned_issuables_count(issuable_type)
case issuable_type
when :issues
- if Feature.enabled?(:limit_assigned_issues_count)
- ::Users::AssignedIssuesCountService.new(
- current_user: current_user,
- max_limit: User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT
- ).count
- else
- current_user.assigned_open_issues_count
- end
+ ::Users::AssignedIssuesCountService.new(
+ current_user: current_user,
+ max_limit: User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT
+ ).count
when :merge_requests
current_user.assigned_open_merge_requests_count
else
@@ -225,7 +221,7 @@ module IssuablesHelper
def assigned_open_issues_count_text
count = assigned_issuables_count(:issues)
- if Feature.enabled?(:limit_assigned_issues_count) && count > User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT - 1
+ if count > User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT - 1
"#{count - 1}+"
else
count.to_s
@@ -372,6 +368,14 @@ module IssuablesHelper
end
end
+ def hidden_issuable_icon(issuable)
+ title = format(_('This %{issuable} is hidden because its author has been banned'),
+ issuable: issuable.is_a?(Issue) ? _('issue') : _('merge request'))
+ content_tag(:span, class: 'has-tooltip', title: title) do
+ sprite_icon('spam', css_class: 'gl-vertical-align-text-bottom')
+ end
+ end
+
private
def sidebar_gutter_collapsed?
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 1d68dccc741..362f1e65425 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -35,20 +35,6 @@ module IssuesHelper
end
end
- def status_box_class(item)
- if item.try(:expired?)
- 'gl-bg-orange-500'
- elsif item.try(:merged?)
- 'badge-info'
- elsif item.closed?
- item.is_a?(MergeRequest) ? 'badge-danger' : 'gl-bg-red-500'
- elsif item.try(:upcoming?)
- 'gl-bg-gray-500'
- else
- item.is_a?(MergeRequest) ? 'badge-success' : 'gl-bg-green-500'
- end
- end
-
def issue_status_visibility(issue, status_box:)
case status_box
when :open
@@ -77,9 +63,7 @@ module IssuesHelper
def hidden_issue_icon(issue)
return unless issue_hidden?(issue)
- content_tag(:span, class: 'has-tooltip', title: _('This issue is hidden because its author has been banned')) do
- sprite_icon('spam', css_class: 'gl-vertical-align-text-bottom')
- end
+ hidden_issuable_icon(issue)
end
def award_user_list(awards, current_user, limit: 10)
@@ -197,7 +181,9 @@ module IssuesHelper
issue_type: issuable_display_type(issuable),
new_issue_path: new_project_issue_path(project, new_issuable_params),
project_path: project.full_path,
- report_abuse_path: new_abuse_report_path(user_id: issuable.author.id, ref_url: issue_url(issuable)),
+ report_abuse_path: add_category_abuse_reports_path,
+ reported_user_id: issuable.author.id,
+ reported_from_url: issue_url(issuable),
submit_as_spam_path: mark_as_spam_project_issue_path(project, issuable)
}
end
@@ -258,8 +244,12 @@ module IssuesHelper
def dashboard_issues_list_data(current_user)
{
+ autocomplete_award_emojis_path: autocomplete_award_emojis_path,
calendar_path: url_for(safe_params.merge(calendar_url_options)),
- empty_state_svg_path: image_path('illustrations/issue-dashboard_results-without-filter.svg'),
+ dashboard_labels_path: dashboard_labels_path(format: :json, include_ancestor_groups: true),
+ dashboard_milestones_path: dashboard_milestones_path(format: :json),
+ empty_state_with_filter_svg_path: image_path('illustrations/issues.svg'),
+ empty_state_without_filter_svg_path: image_path('illustrations/issue-dashboard_results-without-filter.svg'),
initial_sort: current_user&.user_preference&.issues_sort,
is_public_visibility_restricted:
Gitlab::CurrentSettings.restricted_visibility_levels&.include?(Gitlab::VisibilityLevel::PUBLIC).to_s,
diff --git a/app/helpers/markup_helper.rb b/app/helpers/markup_helper.rb
index ed9129ff78b..4a5720e757d 100644
--- a/app/helpers/markup_helper.rb
+++ b/app/helpers/markup_helper.rb
@@ -63,17 +63,8 @@ module MarkupHelper
md = markdown_field(object, attribute, options.merge(post_process: false))
return unless md.present?
- includes_code = false
-
tags = %w(a gl-emoji b strong i em pre code p span)
- if is_todo
- fragment = Nokogiri::HTML.fragment(md)
- includes_code = fragment.css('code').any?
-
- md = fragment
- end
-
context = markdown_field_render_context(object, attribute, options)
context.reverse_merge!(truncate_visible_max_chars: max_chars || md.length)
@@ -89,12 +80,6 @@ module MarkupHelper
)
)
- # Extra span with relative positioning relative due to system font being behind
- # background color when username is first word of mention
- if is_todo && !includes_code
- text = "<span class=\"gl-relative\">\"</span>#{text}<span class=\"gl-relative\">\"</span>"
- end
-
# since <img> tags are stripped, this can leave empty <a> tags hanging around
# (as our markdown wraps images in links)
strip_empty_link_tags(text).html_safe
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index 1d7d812dc5d..ec395baef9e 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -276,6 +276,12 @@ module MergeRequestsHelper
data
end
+
+ def hidden_merge_request_icon(merge_request)
+ return unless merge_request.hidden?
+
+ hidden_issuable_icon(merge_request)
+ end
end
MergeRequestsHelper.prepend_mod_with('MergeRequestsHelper')
diff --git a/app/helpers/nav_helper.rb b/app/helpers/nav_helper.rb
index bf3b132e33a..d0421cd5184 100644
--- a/app/helpers/nav_helper.rb
+++ b/app/helpers/nav_helper.rb
@@ -65,6 +65,10 @@ module NavHelper
%w(dev_ops_report usage_trends)
end
+ def show_super_sidebar?
+ Feature.enabled?(:super_sidebar_nav, current_user) && current_user&.use_new_navigation
+ end
+
private
def get_header_links
diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb
index f2b7c0064e4..88e68a52199 100644
--- a/app/helpers/preferences_helper.rb
+++ b/app/helpers/preferences_helper.rb
@@ -17,8 +17,11 @@ module PreferencesHelper
dashboards -= excluded_dashboard_choices
dashboards.map do |key|
- # Use `fetch` so `KeyError` gets raised when a key is missing
- [localized_dashboard_choices.fetch(key), key]
+ {
+ # Use `fetch` so `KeyError` gets raised when a key is missing
+ text: localized_dashboard_choices.fetch(key),
+ value: key
+ }
end
end
@@ -99,10 +102,12 @@ module PreferencesHelper
end
def language_choices
- options_for_select(
- selectable_locales_with_translation_level(Gitlab::I18n::MINIMUM_TRANSLATION_LEVEL).sort,
- current_user.preferred_language
- )
+ selectable_locales_with_translation_level(Gitlab::I18n::MINIMUM_TRANSLATION_LEVEL).sort.map do |lang, key|
+ {
+ text: lang,
+ value: key
+ }
+ end
end
def default_preferred_language_choices
diff --git a/app/helpers/projects/ml/experiments_helper.rb b/app/helpers/projects/ml/experiments_helper.rb
index a67484e3d2f..b9a219b3021 100644
--- a/app/helpers/projects/ml/experiments_helper.rb
+++ b/app/helpers/projects/ml/experiments_helper.rb
@@ -11,7 +11,10 @@ module Projects
**candidate.params.to_h { |p| [p.name, p.value] },
**candidate.latest_metrics.to_h { |m| [m.name, number_with_precision(m.value, precision: 4)] },
artifact: link_to_artifact(candidate),
- details: link_to_details(candidate)
+ details: link_to_details(candidate),
+ name: candidate.name,
+ created_at: candidate.created_at,
+ user: user_info(candidate)
}
end
@@ -32,7 +35,8 @@ module Projects
experiment_name: candidate.experiment.name,
path_to_experiment: link_to_experiment(candidate),
status: candidate.status
- }
+ },
+ metadata: candidate.metadata
}
Gitlab::Json.generate(data)
@@ -45,11 +49,11 @@ module Projects
return unless artifact.present?
- project_package_path(candidate.experiment.project, artifact)
+ project_package_path(candidate.project, artifact)
end
def link_to_details(candidate)
- project_ml_candidate_path(candidate.experiment.project, candidate.iid)
+ project_ml_candidate_path(candidate.project, candidate.iid)
end
def link_to_experiment(candidate)
@@ -57,6 +61,17 @@ module Projects
project_ml_experiment_path(experiment.project, experiment.iid)
end
+
+ def user_info(candidate)
+ user = candidate.user
+
+ return unless user.present?
+
+ {
+ username: user.username,
+ path: user_path(user)
+ }
+ end
end
end
end
diff --git a/app/helpers/projects/project_members_helper.rb b/app/helpers/projects/project_members_helper.rb
index 6026124abb9..634f6e8ba59 100644
--- a/app/helpers/projects/project_members_helper.rb
+++ b/app/helpers/projects/project_members_helper.rb
@@ -9,7 +9,9 @@ module Projects::ProjectMembersHelper
access_request: project_members_list_data(project, access_requests.nil? ? [] : access_requests),
source_id: project.id,
can_manage_members: Ability.allowed?(current_user, :admin_project_member, project),
- can_manage_access_requests: Ability.allowed?(current_user, :admin_member_access_request, project)
+ can_manage_access_requests: Ability.allowed?(current_user, :admin_member_access_request, project),
+ group_name: project.group&.name,
+ group_path: project.group&.full_path
}.to_json
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 682febe9dc9..507e05b9967 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -479,32 +479,6 @@ module ProjectsHelper
format_cached_count(1000, number)
end
- def fork_divergence_message(counts)
- messages = []
-
- if counts[:behind].nil? || counts[:ahead].nil?
- return s_('ForksDivergence|Fork has diverged from upstream repository')
- end
-
- if counts[:behind] > 0
- messages << s_("ForksDivergence|%{behind} %{commit_word} behind") % {
- behind: counts[:behind], commit_word: n_('commit', 'commits', counts[:behind])
- }
- end
-
- if counts[:ahead] > 0
- messages << s_("ForksDivergence|%{ahead} %{commit_word} ahead of") % {
- ahead: counts[:ahead], commit_word: n_('commit', 'commits', counts[:ahead])
- }
- end
-
- if messages.blank?
- s_('ForksDivergence|Up to date with upstream repository')
- else
- s_("ForksDivergence|%{messages} upstream repository") % { messages: messages.join(', ') }
- end
- end
-
private
def localized_access_names
@@ -520,7 +494,7 @@ module ProjectsHelper
end
def configure_oauth_import_message(provider, help_url)
- str = if current_user.admin?
+ str = if current_user.can_admin_all_resources?
'ImportProjects|To enable importing projects from %{provider}, as administrator you need to configure %{link_start}OAuth integration%{link_end}'
else
'ImportProjects|To enable importing projects from %{provider}, ask your GitLab administrator to configure %{link_start}OAuth integration%{link_end}'
@@ -658,7 +632,7 @@ module ProjectsHelper
end
def restricted_levels
- return [] if current_user.admin?
+ return [] if current_user.can_admin_all_resources?
Gitlab::CurrentSettings.restricted_visibility_levels || []
end
diff --git a/app/helpers/protected_branches_helper.rb b/app/helpers/protected_branches_helper.rb
new file mode 100644
index 00000000000..07b07bfd33c
--- /dev/null
+++ b/app/helpers/protected_branches_helper.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module ProtectedBranchesHelper
+ def protected_branch_can_admin_entity?(protected_branch_entity)
+ if protected_branch_entity.is_a?(Group)
+ can?(current_user, :admin_group, protected_branch_entity)
+ else
+ can?(current_user, :admin_project, protected_branch_entity)
+ end
+ end
+
+ def protected_branch_path_by_entity(protected_branch, protected_branch_entity)
+ if protected_branch_entity.is_a?(Group)
+ group_protected_branch_path(protected_branch_entity, protected_branch)
+ else
+ project_protected_branch_path(protected_branch_entity, protected_branch)
+ end
+ end
+end
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index e03365ad5f1..ca5436ff019 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -49,7 +49,7 @@ module SearchHelper
search_pattern = Regexp.new(Regexp.escape(term), "i")
generic_results = project_autocomplete + default_autocomplete + help_autocomplete
- generic_results.concat(default_autocomplete_admin) if current_user.admin?
+ generic_results.concat(default_autocomplete_admin) if current_user.can_read_all_resources?
generic_results.select { |result| result[:label] =~ search_pattern }
end
diff --git a/app/helpers/selects_helper.rb b/app/helpers/selects_helper.rb
index 99da9a7af6c..7ee40c28bad 100644
--- a/app/helpers/selects_helper.rb
+++ b/app/helpers/selects_helper.rb
@@ -1,20 +1,6 @@
# frozen_string_literal: true
module SelectsHelper
- def groups_select_tag(id, opts = {})
- classes = Array.wrap(opts[:class])
- classes << 'ajax-groups-select'
-
- # EE requires this line to be present, but there is no easy way of injecting
- # this into EE without causing merge conflicts. Given this line is very
- # simple and not really EE specific on its own, we just include it in CE.
- classes << 'multiselect' if opts[:multiple]
-
- opts[:class] = classes.join(' ')
-
- select2_tag(id, opts)
- end
-
def project_select_tag(id, opts = {})
opts[:class] = [*opts[:class], 'ajax-project-select'].join(' ')
diff --git a/app/helpers/sidebars_helper.rb b/app/helpers/sidebars_helper.rb
index cbee02a28c0..f6257c92f3f 100644
--- a/app/helpers/sidebars_helper.rb
+++ b/app/helpers/sidebars_helper.rb
@@ -31,6 +31,18 @@ module SidebarsHelper
Sidebars::Groups::Context.new(**context_data)
end
+ def super_sidebar_context(user)
+ {
+ name: user.name,
+ username: user.username,
+ avatar_url: user.avatar_url,
+ assigned_open_issues_count: user.assigned_open_issues_count,
+ assigned_open_merge_requests_count: user.assigned_open_merge_requests_count,
+ todos_pending_count: user.todos_pending_count,
+ issues_dashboard_path: issues_dashboard_path(assignee_username: user.username)
+ }
+ end
+
private
def sidebar_attributes_for_object(object)
diff --git a/app/helpers/timeboxes_helper.rb b/app/helpers/timeboxes_helper.rb
index 307f03e0d64..66c9011fbcc 100644
--- a/app/helpers/timeboxes_helper.rb
+++ b/app/helpers/timeboxes_helper.rb
@@ -8,7 +8,7 @@ module TimeboxesHelper
if milestone.closed?
_('Closed')
elsif milestone.expired?
- _('Past due')
+ _('Expired')
elsif milestone.upcoming?
_('Upcoming')
else
@@ -16,6 +16,18 @@ module TimeboxesHelper
end
end
+ def milestone_badge_variant(milestone)
+ if milestone.closed?
+ :danger
+ elsif milestone.expired?
+ :warning
+ elsif milestone.upcoming?
+ :neutral
+ else
+ :success
+ end
+ end
+
def milestones_filter_path(opts = {})
if @project
project_milestones_path(@project, opts)
diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb
index d7c4540544b..daaf86e55a0 100644
--- a/app/helpers/todos_helper.rb
+++ b/app/helpers/todos_helper.rb
@@ -28,7 +28,7 @@ module TodosHelper
when Todo::UNMERGEABLE then s_('Todos|Could not merge')
when Todo::MERGE_TRAIN_REMOVED then s_("Todos|Removed from Merge Train")
when Todo::MEMBER_ACCESS_REQUESTED then format(
- s_("Todos|has requested access to group %{which}"), which: _(todo.target.name)
+ s_("Todos|has requested access to %{what} %{which}"), what: _(todo.member_access_type), which: _(todo.target.name)
)
end
end
@@ -99,7 +99,7 @@ module TodosHelper
path_options[:only_path] = true
Gitlab::UrlBuilder.build(todo.target, **path_options)
elsif todo.member_access_requested?
- todo.access_request_url
+ todo.access_request_url(only_path: true)
else
path = [todo.resource_parent, todo.target]
diff --git a/app/helpers/url_helper.rb b/app/helpers/url_helper.rb
new file mode 100644
index 00000000000..9083ca4e8dd
--- /dev/null
+++ b/app/helpers/url_helper.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module UrlHelper
+ def escaped_url(url)
+ return unless url
+
+ Addressable::URI.escape(url)
+ rescue Addressable::URI::InvalidURIError
+ nil
+ end
+end
diff --git a/app/helpers/users/callouts_helper.rb b/app/helpers/users/callouts_helper.rb
index a9fd219bbac..6ab78b58457 100644
--- a/app/helpers/users/callouts_helper.rb
+++ b/app/helpers/users/callouts_helper.rb
@@ -49,7 +49,7 @@ module Users
def show_registration_enabled_user_callout?
!Gitlab.com? &&
- current_user&.admin? &&
+ current_user&.can_admin_all_resources? &&
signup_enabled? &&
!user_dismissed?(REGISTRATION_ENABLED_CALLOUT) &&
REGISTRATION_ENABLED_CALLOUT_ALLOWED_CONTROLLER_PATHS.any? { |path| controller.controller_path.match?(path) }
@@ -59,7 +59,7 @@ module Users
end
def show_security_newsletter_user_callout?
- current_user&.admin? &&
+ current_user&.can_admin_all_resources? &&
!user_dismissed?(SECURITY_NEWSLETTER_CALLOUT)
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 4f345fdeb9c..a382b5e7b74 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -93,7 +93,7 @@ module UsersHelper
def user_badges_in_admin_section(user)
[].tap do |badges|
badges << blocked_user_badge(user) if user.blocked?
- badges << { text: s_('AdminUsers|Admin'), variant: 'success' } if user.admin?
+ badges << { text: s_('AdminUsers|Admin'), variant: 'success' } if user.admin? # rubocop:disable Cop/UserAdmin
badges << { text: s_('AdminUsers|Bot'), variant: 'muted' } if user.bot?
badges << { text: s_('AdminUsers|External'), variant: 'secondary' } if user.external?
badges << { text: s_("AdminUsers|It's you!"), variant: 'muted' } if current_user == user
diff --git a/app/helpers/version_check_helper.rb b/app/helpers/version_check_helper.rb
index 0bb92dfd118..4bd89a3d4e2 100644
--- a/app/helpers/version_check_helper.rb
+++ b/app/helpers/version_check_helper.rb
@@ -18,7 +18,7 @@ module VersionCheckHelper
strong_memoize_attr :gitlab_version_check
def show_security_patch_upgrade_alert?
- return false unless show_version_check? && gitlab_version_check
+ return false unless Feature.enabled?(:critical_security_alert) && show_version_check? && gitlab_version_check
gitlab_version_check['severity'] === SECURITY_ALERT_SEVERITY
end
diff --git a/app/helpers/visibility_level_helper.rb b/app/helpers/visibility_level_helper.rb
index 1baeeda0ef7..5ed341ee5e5 100644
--- a/app/helpers/visibility_level_helper.rb
+++ b/app/helpers/visibility_level_helper.rb
@@ -39,7 +39,7 @@ module VisibilityLevelHelper
end
def restricted_visibility_levels(show_all = false)
- return [] if current_user.admin? && !show_all
+ return [] if current_user.can_admin_all_resources? && !show_all
Gitlab::CurrentSettings.restricted_visibility_levels || []
end
diff --git a/app/helpers/work_items_helper.rb b/app/helpers/work_items_helper.rb
index 2c61fc20ca8..efa9a2bd463 100644
--- a/app/helpers/work_items_helper.rb
+++ b/app/helpers/work_items_helper.rb
@@ -4,7 +4,9 @@ module WorkItemsHelper
def work_items_index_data(project)
{
full_path: project.full_path,
- issues_list_path: project_issues_path(project)
+ issues_list_path: project_issues_path(project),
+ register_path: new_user_registration_path(redirect_to_referer: 'yes'),
+ sign_in_path: new_session_path(:user, redirect_to_referer: 'yes')
}
end
end