diff options
Diffstat (limited to 'app/views/admin')
44 files changed, 338 insertions, 250 deletions
diff --git a/app/views/admin/application_settings/_account_and_limit.html.haml b/app/views/admin/application_settings/_account_and_limit.html.haml index a0fa69c54c5..f914de138a9 100644 --- a/app/views/admin/application_settings/_account_and_limit.html.haml +++ b/app/views/admin/application_settings/_account_and_limit.html.haml @@ -19,6 +19,10 @@ = f.label :receive_max_input_size, _('Maximum push size (MB)'), class: 'label-light' = f.number_field :receive_max_input_size, class: 'form-control gl-form-input qa-receive-max-input-size-field', title: _('Maximum size limit for a single commit.'), data: { toggle: 'tooltip', container: 'body' } .form-group + = f.label :max_export_size, _('Maximum export size (MB)'), class: 'label-light' + = f.number_field :max_export_size, class: 'form-control gl-form-input', title: _('Maximum size of export files.'), data: { toggle: 'tooltip', container: 'body' } + %span.form-text.text-muted= _('Set to 0 for no size limit.') + .form-group = f.label :max_import_size, _('Maximum import size (MB)'), class: 'label-light' = f.number_field :max_import_size, class: 'form-control gl-form-input qa-receive-max-import-size-field', title: _('Maximum size of import files.'), data: { toggle: 'tooltip', container: 'body' } %span.form-text.text-muted= _('Only effective when remote storage is enabled. Set to 0 for no size limit.') @@ -29,9 +33,7 @@ = render_if_exists 'admin/application_settings/git_two_factor_session_expiry', form: f = render_if_exists 'admin/application_settings/personal_access_token_expiration_policy', form: f - = render_if_exists 'admin/application_settings/enforce_pat_expiration', form: f = render_if_exists 'admin/application_settings/ssh_key_expiration_policy', form: f - = render_if_exists 'admin/application_settings/enforce_ssh_key_expiration', form: f .form-group = f.label :user_oauth_applications, _('User OAuth applications'), class: 'label-bold' diff --git a/app/views/admin/application_settings/_issue_limits.html.haml b/app/views/admin/application_settings/_issue_limits.html.haml index 663e1485749..431e2a64c46 100644 --- a/app/views/admin/application_settings/_issue_limits.html.haml +++ b/app/views/admin/application_settings/_issue_limits.html.haml @@ -1,9 +1,9 @@ -= form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-issue-limits-settings'), html: { class: 'fieldset-form' } do |f| += gitlab_ui_form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-issue-limits-settings'), html: { class: 'fieldset-form' } do |f| = form_errors(@application_setting) %fieldset .form-group - = f.label :issues_create_limit, 'Max requests per minute per user', class: 'label-bold' + = f.label :issues_create_limit, _('Maximum number of requests per minute') = f.number_field :issues_create_limit, class: 'form-control gl-form-input' = f.submit _('Save changes'), class: "gl-button btn btn-confirm", data: { qa_selector: 'save_changes_button' } diff --git a/app/views/admin/application_settings/_note_limits.html.haml b/app/views/admin/application_settings/_note_limits.html.haml index d4ae0d3944c..40760b3c45e 100644 --- a/app/views/admin/application_settings/_note_limits.html.haml +++ b/app/views/admin/application_settings/_note_limits.html.haml @@ -9,7 +9,7 @@ = f.label :notes_create_limit_allowlist, _('Users to exclude from the rate limit'), class: 'label-bold' = f.text_area :notes_create_limit_allowlist_raw, class: 'form-control gl-form-input', rows: 5, aria: { describedBy: 'note-create-limits-allowlist-field-description' } .form-text.text-muted{ id: 'note-create-limits-allowlist-field-description' } - = _('List of users allowed to exceed the rate limit.') + = _('List of users who are allowed to exceed the rate limit. Example: username1, username2') = f.submit _('Save changes'), class: "gl-button btn btn-confirm", data: { qa_selector: 'save_changes_button' } diff --git a/app/views/admin/application_settings/_pipeline_limits.html.haml b/app/views/admin/application_settings/_pipeline_limits.html.haml new file mode 100644 index 00000000000..e93823172db --- /dev/null +++ b/app/views/admin/application_settings/_pipeline_limits.html.haml @@ -0,0 +1,9 @@ += gitlab_ui_form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-pipeline-limits-settings'), html: { class: 'fieldset-form' } do |f| + = form_errors(@application_setting) + + %fieldset + .form-group + = f.label :pipeline_limit_per_project_user_sha, _('Maximum number of requests per minute') + = f.number_field :pipeline_limit_per_project_user_sha, class: 'form-control gl-form-input' + + = f.submit _('Save changes'), class: "gl-button btn btn-confirm", data: { qa_selector: 'save_changes_button' } diff --git a/app/views/admin/application_settings/_prometheus.html.haml b/app/views/admin/application_settings/_prometheus.html.haml index 11830fac336..59681c0278e 100644 --- a/app/views/admin/application_settings/_prometheus.html.haml +++ b/app/views/admin/application_settings/_prometheus.html.haml @@ -1,20 +1,17 @@ -= form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-prometheus-settings'), html: { class: 'fieldset-form' } do |f| += gitlab_ui_form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-prometheus-settings'), html: { class: 'fieldset-form' } do |f| = form_errors(@application_setting) %fieldset .form-group - .form-check - = f.check_box :prometheus_metrics_enabled, class: 'form-check-input' - = f.label :prometheus_metrics_enabled, class: 'form-check-label' do - = _("Enable health and performance metrics endpoint") - .form-text.text-muted - = _('Enable a Prometheus endpoint that exposes health and performance statistics. The Health Check menu item appears in the Monitoring section of the Admin Area. Restart required.') - = link_to _('Learn More.'), help_page_path('administration/monitoring/prometheus/gitlab_metrics.md'), target: '_blank', rel: 'noopener noreferrer' + - prometheus_help_link_url = help_page_path('administration/monitoring/prometheus/gitlab_metrics') + - prometheus_help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: prometheus_help_link_url } + = f.gitlab_ui_checkbox_component :prometheus_metrics_enabled, + _('Enable health and performance metrics endpoint'), + help_text: s_('AdminSettings|Enable a Prometheus endpoint that exposes health and performance statistics. The Health Check menu item appears in the Monitoring section of the Admin Area. Restart required. %{link_start}Learn more.%{link_end}').html_safe % { link_start: prometheus_help_link_start, link_end: '</a>'.html_safe } + .form-text.gl-text-gray-500.gl-pl-6 - unless Gitlab::Metrics.metrics_folder_present? - .form-text.text-muted - %strong.cred= _("WARNING:") - = _("Environment variable %{environment_variable} does not exist or is not pointing to a valid directory.").html_safe % { environment_variable: '<code>prometheus_multiproc_dir</code>'.html_safe } - = link_to sprite_icon('question-o'), help_page_path('administration/monitoring/prometheus/gitlab_metrics', anchor: 'metrics-shared-directory') + - icon_link = link_to sprite_icon('question-o'), help_page_path('administration/monitoring/prometheus/gitlab_metrics', anchor: 'metrics-shared-directory'), target: '_blank', rel: 'noopener noreferrer' + = s_('AdminSettings|%{strongStart}WARNING:%{strongEnd} Environment variable %{environment_variable} does not exist or is not pointing to a valid directory. %{icon_link}').html_safe % { strongStart: '<strong class="gl-text-red-500">'.html_safe, strongEnd: '</strong>'.html_safe, environment_variable: '<code>prometheus_multiproc_dir</code>'.html_safe, icon_link: icon_link } .form-group = f.label :metrics_method_call_threshold, _('Method call threshold (ms)'), class: 'label-bold' = f.number_field :metrics_method_call_threshold, class: 'form-control gl-form-input' diff --git a/app/views/admin/application_settings/_registry.html.haml b/app/views/admin/application_settings/_registry.html.haml index eb1f94a2f04..856db32e088 100644 --- a/app/views/admin/application_settings/_registry.html.haml +++ b/app/views/admin/application_settings/_registry.html.haml @@ -13,7 +13,6 @@ = f.gitlab_ui_checkbox_component :container_expiration_policies_enable_historic_entries, '%{label} %{label_link}'.html_safe % { label: label, label_link: label_link }, help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link } - - if container_registry_expiration_policies_throttling? .form-group = f.label :container_registry_delete_tags_service_timeout, _('Cleanup policy maximum processing time (seconds)'), class: 'label-bold' = f.number_field :container_registry_delete_tags_service_timeout, min: 0, class: 'form-control gl-form-input' diff --git a/app/views/admin/application_settings/_repository_storage.html.haml b/app/views/admin/application_settings/_repository_storage.html.haml index 62a90e173ec..b5fa08aed79 100644 --- a/app/views/admin/application_settings/_repository_storage.html.haml +++ b/app/views/admin/application_settings/_repository_storage.html.haml @@ -1,16 +1,16 @@ -= form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-storage-settings'), html: { class: 'fieldset-form' } do |f| += gitlab_ui_form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-storage-settings'), html: { class: 'fieldset-form' } do |f| = form_errors(@application_setting) %fieldset .sub-section %h4= _('Hashed repository storage paths') .form-group - .form-check - = f.check_box :hashed_storage_enabled, class: 'form-check-input qa-hashed-storage-checkbox', disabled: @application_setting.hashed_storage_enabled? - = f.label :hashed_storage_enabled, _('Use hashed storage'), class: 'label-bold form-check-label' - .form-text.text-muted - = _('Use hashed storage paths for newly created and renamed repositories. Always enabled since 13.0.') - = link_to s_('Learn more.'), help_page_path('administration/repository_storage_types.md', anchor: 'hashed-storage'), target: '_blank', rel: 'noopener noreferrer' + - repository_storage_help_link_url = help_page_path('administration/repository_storage_types.md') + - repository_storage_help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: repository_storage_help_link_url } + = f.gitlab_ui_checkbox_component :hashed_storage_enabled, + _('Use hashed storage'), + checkbox_options: { disabled: @application_setting.hashed_storage_enabled? }, + help_text: _('Use hashed storage paths for newly created and renamed repositories. Always enabled since 13.0. %{link_start}Learn more.%{link_end}').html_safe % { link_start: repository_storage_help_link_start, link_end: '</a>'.html_safe } .sub-section %h4= _("Storage nodes for new repositories") diff --git a/app/views/admin/application_settings/_runner_registrars_form.html.haml b/app/views/admin/application_settings/_runner_registrars_form.html.haml index 08b3d173d20..1d6051a06ea 100644 --- a/app/views/admin/application_settings/_runner_registrars_form.html.haml +++ b/app/views/admin/application_settings/_runner_registrars_form.html.haml @@ -1,16 +1,16 @@ -= form_for @application_setting, url: ci_cd_admin_application_settings_path(anchor: 'js-runner-settings'), html: { class: 'fieldset-form' } do |f| += gitlab_ui_form_for @application_setting, url: ci_cd_admin_application_settings_path(anchor: 'js-runner-settings'), html: { class: 'fieldset-form' } do |f| = form_errors(@application_setting) %fieldset - .form-group - = hidden_field_tag "application_setting[valid_runner_registrars][]", nil - - ApplicationSetting::VALID_RUNNER_REGISTRAR_TYPES.each do |type| - .form-check - = f.check_box(:valid_runner_registrars, { multiple: true, checked: valid_runner_registrars.include?(type), class: 'form-check-input' }, type, nil) - = f.label :valid_runner_registrars, class: 'form-check-label' do - = s_("Runners|Members of the %{type} can register runners") % { type: type } - %span.form-text.gl-text-gray-600 + .gl-form-group + %span.form-text.gl-mb-3.gl-mt-0 = _('If no options are selected, only administrators can register runners.') = link_to _('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'prevent-users-from-registering-runners'), target: '_blank', rel: 'noopener noreferrer' + = hidden_field_tag "application_setting[valid_runner_registrars][]", nil + - ApplicationSetting::VALID_RUNNER_REGISTRAR_TYPES.each do |type| + = f.gitlab_ui_checkbox_component :valid_runner_registrars, s_("Runners|Members of the %{type} can register runners") % { type: type }, + checkbox_options: { multiple: true, checked: valid_runner_registrars.include?(type) }, + checked_value: type, + unchecked_value: nil = f.submit _('Save changes'), class: "gl-button btn btn-confirm" diff --git a/app/views/admin/application_settings/_signin.html.haml b/app/views/admin/application_settings/_signin.html.haml index bce210d28d3..48f0b9b2c31 100644 --- a/app/views/admin/application_settings/_signin.html.haml +++ b/app/views/admin/application_settings/_signin.html.haml @@ -1,39 +1,28 @@ -= form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-signin-settings'), html: { class: 'fieldset-form', id: 'signin-settings' } do |f| += gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-signin-settings'), html: { class: 'fieldset-form', id: 'signin-settings' } do |f| = form_errors(@application_setting) %fieldset .form-group - .form-check - = f.check_box :password_authentication_enabled_for_web, class: 'form-check-input' - = f.label :password_authentication_enabled_for_web, class: 'form-check-label' do - = _('Allow password authentication for the web interface') - .form-text.text-muted - = _('Clear this checkbox to use an external authentication provider instead.') + = f.gitlab_ui_checkbox_component :password_authentication_enabled_for_web, + _('Allow password authentication for the web interface'), + help_text: _('Clear this checkbox to use an external authentication provider instead.') .form-group - .form-check - = f.check_box :password_authentication_enabled_for_git, class: 'form-check-input' - = f.label :password_authentication_enabled_for_git, class: 'form-check-label' do - = _('Allow password authentication for Git over HTTP(S)') - .form-text.text-muted - - if Gitlab::Auth::Ldap::Config.enabled? - = _('Clear this checkbox to use a personal access token or LDAP password instead.') - - else - = _('Clear this checkbox to use a personal access token instead.') + = f.gitlab_ui_checkbox_component :password_authentication_enabled_for_git, + _('Allow password authentication for Git over HTTP(S)'), + help_text: Gitlab::Auth::Ldap::Config.enabled? ? _('Clear this checkbox to use a personal access token or LDAP password instead.') : _('Clear this checkbox to use a personal access token instead.') - if omniauth_enabled? && button_based_providers.any? %fieldset.form-group %legend.gl-font-base.gl-mb-3.gl-border-none.gl-font-weight-bold= _('Enabled OAuth authentication sources') = hidden_field_tag 'application_setting[enabled_oauth_sign_in_sources][]' - - oauth_providers_checkboxes.each do |source| + - oauth_providers_checkboxes(f).each do |source| = source .form-group = f.label :two_factor_authentication, _('Two-factor authentication'), class: 'label-bold' - .form-check - = f.check_box :require_two_factor_authentication, class: 'form-check-input' - = f.label :require_two_factor_authentication, class: 'form-check-label' do - = _('Enforce two-factor authentication') - %p.form-text.text-muted - = _('Enforce two-factor authentication for all user sign-ins.') - = link_to _('Learn more.'), help_page_path('security/two_factor_authentication.md'), target: '_blank', rel: 'noopener noreferrer' + - help_text = _('Enforce two-factor authentication for all user sign-ins.') + - help_link = link_to _('Learn more.'), help_page_path('security/two_factor_authentication.md'), target: '_blank', rel: 'noopener noreferrer' + = f.gitlab_ui_checkbox_component :require_two_factor_authentication, + _('Enforce two-factor authentication'), + help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link } .form-group = f.label :two_factor_authentication, _('Two-factor grace period'), class: 'label-bold' = f.number_field :two_factor_grace_period, min: 0, class: 'form-control gl-form-input', placeholder: '0' @@ -42,22 +31,18 @@ .form-group = f.label :admin_mode, _('Admin Mode'), class: 'label-bold' = sprite_icon('lock', css_class: 'gl-icon') - .form-check - = f.check_box :admin_mode, class: 'form-check-input' - = f.label :admin_mode, class: 'form-check-label' do - = _('Enable admin mode') - %p.form-text.text-muted - = _('Require additional authentication for administrative tasks.') - = link_to _('Learn more.'), help_page_path('user/admin_area/settings/sign_in_restrictions', anchor: 'admin-mode'), target: '_blank', rel: 'noopener noreferrer' + - help_text = _('Require additional authentication for administrative tasks.') + - help_link = link_to _('Learn more.'), help_page_path('user/admin_area/settings/sign_in_restrictions', anchor: 'admin-mode'), target: '_blank', rel: 'noopener noreferrer' + = f.gitlab_ui_checkbox_component :admin_mode, + _('Enable admin mode'), + help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link } .form-group = f.label :unknown_sign_in, _('Email notification for unknown sign-ins'), class: 'label-bold' - .form-check - = f.check_box :notify_on_unknown_sign_in, class: 'form-check-input' - = f.label :notify_on_unknown_sign_in, class: 'form-check-label' do - = _('Enable email notification') - %p.form-text.text-muted - = _('Notify users by email when sign-in location is not recognized.') - = link_to _('Learn more.'), help_page_path('user/profile/unknown_sign_in_notification.md'), target: '_blank', rel: 'noopener noreferrer' + - help_text = _('Notify users by email when sign-in location is not recognized.') + - help_link = link_to _('Learn more.'), help_page_path('user/profile/unknown_sign_in_notification.md'), target: '_blank', rel: 'noopener noreferrer' + = f.gitlab_ui_checkbox_component :notify_on_unknown_sign_in, + _('Enable email notification'), + help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link } .form-group = f.label :home_page_url, _('Home page URL'), class: 'label-bold' = f.text_field :home_page_url, class: 'form-control gl-form-input', placeholder: 'http://company.example.com', :'aria-describedby' => 'home_help_block' diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml index a1285a3f467..8b4ac9b79c8 100644 --- a/app/views/admin/application_settings/_usage.html.haml +++ b/app/views/admin/application_settings/_usage.html.haml @@ -13,7 +13,7 @@ .form-group - can_be_configured = @application_setting.usage_ping_can_be_configured? - service_ping_link_start = link_start % { url: help_page_path('development/service_ping/index') } - - deactivating_service_ping_link_start = link_start % { url: help_page_path('development/service_ping/index', anchor: 'disable-service-ping-using-the-configuration-file') } + - deactivating_service_ping_link_start = link_start % { url: help_page_path('user/admin_area/settings/usage_statistics', anchor: 'disable-usage-statistics-with-the-configuration-file') } - usage_ping_help_text = s_('AdminSettings|To help improve GitLab and its user experience, GitLab periodically collects usage information. %{link_start}What information is shared with GitLab Inc.?%{link_end}').html_safe % { link_start: service_ping_link_start, link_end: link_end } - disabled_help_text = s_('AdminSettings|Service ping is disabled in your configuration file, and cannot be enabled through this form. For more information, see the documentation on %{link_start}deactivating service ping%{link_end}.').html_safe % { link_start: deactivating_service_ping_link_start, link_end: link_end } = f.gitlab_ui_checkbox_component :usage_ping_enabled, s_('AdminSettings|Enable Service Ping'), @@ -28,7 +28,7 @@ .form-group - usage_ping_enabled = @application_setting.usage_ping_enabled? - label = s_('AdminSettings|Enable Registration Features') - - label_link = link_to sprite_icon('question-o'), help_page_path('development/service_ping/index', anchor: 'registration-features-program') + - label_link = link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/usage_statistics', anchor: 'registration-features-program') - help_text = usage_ping_enabled ? s_('AdminSettings|You can enable Registration Features because Service Ping is enabled. To continue using Registration Features in the future, you will also need to register with GitLab via a new cloud licensing service.') : s_('AdminSettings|To enable Registration Features, first enable Service Ping.') = f.gitlab_ui_checkbox_component :usage_ping_features_enabled?, '%{label} %{label_link}'.html_safe % { label: label, label_link: label_link }, help_text: '<span id="service_ping_features_helper_text">%{help_text}</span>'.html_safe % { help_text: help_text }, diff --git a/app/views/admin/application_settings/_users_api_limits.html.haml b/app/views/admin/application_settings/_users_api_limits.html.haml index 9b3502b3cfd..3918c76b12c 100644 --- a/app/views/admin/application_settings/_users_api_limits.html.haml +++ b/app/views/admin/application_settings/_users_api_limits.html.haml @@ -9,6 +9,6 @@ = f.label :users_get_by_id_limit_allowlist_raw, _('Users to exclude from the rate limit'), class: 'label-bold' = f.text_area :users_get_by_id_limit_allowlist_raw, class: 'form-control gl-form-input', rows: 5, aria: { describedBy: 'users-api-limit-users-allowlist-field-description' } .form-text.text-muted{ id: 'users-api-limit-users-allowlist-field-description' } - = _('List of users allowed to exceed the rate limit.') + = _('List of users who are allowed to exceed the rate limit. Example: username1, username2') = f.submit _('Save changes'), class: "gl-button btn btn-confirm", data: { qa_selector: 'save_changes_button' } diff --git a/app/views/admin/application_settings/_visibility_and_access.html.haml b/app/views/admin/application_settings/_visibility_and_access.html.haml index 23649bc2d54..e3c044ff979 100644 --- a/app/views/admin/application_settings/_visibility_and_access.html.haml +++ b/app/views/admin/application_settings/_visibility_and_access.html.haml @@ -16,29 +16,30 @@ = f.label :default_group_visibility, class: 'label-bold' = render('shared/visibility_radios', model_method: :default_group_visibility, form: f, selected_level: @application_setting.default_group_visibility, form_model: Group.new) .form-group - = f.label :restricted_visibility_levels, class: 'label-bold' + = f.label :restricted_visibility_levels, class: 'label-bold gl-mb-0' + %span.form-text.gl-mt-0.gl-mb-3#restricted-visibility-help + = _('Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users.') = hidden_field_tag 'application_setting[restricted_visibility_levels][]' - restricted_level_checkboxes(f).each do |level| = level - %span.form-text.text-muted#restricted-visibility-help - = _('Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users.') .form-group - = f.label :import_sources, class: 'label-bold' - = hidden_field_tag 'application_setting[import_sources][]' - - import_sources_checkboxes(f).each do |source| - = source - %span.form-text.text-muted#import-sources-help + = f.label :import_sources, s_('AdminSettings|Import sources'), class: 'label-bold gl-mb-0' + %span.form-text.gl-mt-0.gl-mb-3#import-sources-help = _('Enabled sources for code import during project creation. OmniAuth must be configured for GitHub') = link_to sprite_icon('question-o'), help_page_path("integration/github") , Bitbucket = link_to sprite_icon('question-o'), help_page_path("integration/bitbucket") and GitLab.com = link_to sprite_icon('question-o'), help_page_path("integration/gitlab") + = hidden_field_tag 'application_setting[import_sources][]' + - import_sources_checkboxes(f).each do |source| + = source = render_if_exists 'admin/application_settings/ldap_access_setting', form: f .form-group - = f.gitlab_ui_checkbox_component :project_export_enabled, s_('AdminSettings|Project export enabled') + = f.label :project_export, s_('AdminSettings|Project export'), class: 'label-bold' + = f.gitlab_ui_checkbox_component :project_export_enabled, s_('AdminSettings|Enabled') .form-group %label.label-bold= _('Enabled Git access protocols') diff --git a/app/views/admin/application_settings/ci/_header.html.haml b/app/views/admin/application_settings/ci/_header.html.haml index 1298be9a6cb..a22e67b0522 100644 --- a/app/views/admin/application_settings/ci/_header.html.haml +++ b/app/views/admin/application_settings/ci/_header.html.haml @@ -13,7 +13,7 @@ = _('Variables can be:') %ul %li - = html_escape(_('%{code_open}Protected:%{code_close} Only exposed to protected branches or tags.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } + = html_escape(_('%{code_open}Protected:%{code_close} Only exposed to protected branches or protected tags.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } %li = html_escape(_('%{code_open}Masked:%{code_close} Hidden in job logs. Must match masking requirements.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } = link_to _('Learn more.'), help_page_path('ci/variables/index', anchor: 'mask-a-cicd-variable'), target: '_blank', rel: 'noopener noreferrer' diff --git a/app/views/admin/application_settings/ci_cd.html.haml b/app/views/admin/application_settings/ci_cd.html.haml index aab4f44d4d7..e925175b7ea 100644 --- a/app/views/admin/application_settings/ci_cd.html.haml +++ b/app/views/admin/application_settings/ci_cd.html.haml @@ -8,7 +8,7 @@ .settings-content - if ci_variable_protected_by_default? %p.settings-message.text-center - - link_start = '<a href="%{url}">'.html_safe % { url: help_page_path('ci/variables/index', anchor: 'protect-a-cicd-variable') } + - link_start = '<a href="%{url}">'.html_safe % { url: help_page_path('ci/variables/index', anchor: 'protected-cicd-variables') } = s_('Environment variables on this GitLab instance are configured to be %{link_start}protected%{link_end} by default.').html_safe % { link_start: link_start, link_end: '</a>'.html_safe } #js-instance-variables{ data: { endpoint: admin_ci_variables_path, group: 'true', maskable_regex: ci_variable_maskable_regex, protected_by_default: ci_variable_protected_by_default?.to_s} } @@ -38,7 +38,7 @@ .settings-content = render 'registry' -- if Feature.enabled?(:runner_registration_control, default_enabled: :yaml) +- if Feature.enabled?(:runner_registration_control) %section.settings.as-runner.no-animate#js-runner-settings{ class: ('expanded' if expanded_by_default?) } .settings-header %h4 diff --git a/app/views/admin/application_settings/general.html.haml b/app/views/admin/application_settings/general.html.haml index bc2fedec69c..7643f8fa7a7 100644 --- a/app/views/admin/application_settings/general.html.haml +++ b/app/views/admin/application_settings/general.html.haml @@ -93,7 +93,7 @@ %p = _('Manage Web IDE features.') .settings-content - = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: "#js-web-ide-settings"), html: { class: 'fieldset-form', id: 'web-ide-settings' } do |f| + = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: "js-web-ide-settings"), html: { class: 'fieldset-form', id: 'web-ide-settings' } do |f| = form_errors(@application_setting) %fieldset @@ -115,4 +115,4 @@ = render 'admin/application_settings/snowplow' = render 'admin/application_settings/eks' = render 'admin/application_settings/floc' -= render_if_exists 'admin/application_settings/license_file' += render_if_exists 'admin/application_settings/add_license' diff --git a/app/views/admin/application_settings/metrics_and_profiling.html.haml b/app/views/admin/application_settings/metrics_and_profiling.html.haml index 7cb5760f62a..8e4b0b53f28 100644 --- a/app/views/admin/application_settings/metrics_and_profiling.html.haml +++ b/app/views/admin/application_settings/metrics_and_profiling.html.haml @@ -53,9 +53,7 @@ .settings-content = render 'usage' -= render_if_exists 'admin/application_settings/pseudonymizer_settings', expanded: expanded_by_default? - -- if Feature.enabled?(:configure_sentry_in_application_settings, default_enabled: :yaml) +- if Feature.enabled?(:configure_sentry_in_application_settings) %section.settings.as-sentry.no-animate#js-sentry-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'sentry_settings_content' } } .settings-header %h4 diff --git a/app/views/admin/application_settings/network.html.haml b/app/views/admin/application_settings/network.html.haml index ea35b7ab9c4..a2497fe122b 100644 --- a/app/views/admin/application_settings/network.html.haml +++ b/app/views/admin/application_settings/network.html.haml @@ -157,4 +157,16 @@ .settings-content = render 'import_export_limits' +%section.settings.as-pipeline-limits.no-animate#js-pipeline-limits-settings{ class: ('expanded' if expanded_by_default?) } + .settings-header + %h4 + = _('Pipeline creation rate limits') + %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' } + = expanded_by_default? ? _('Collapse') : _('Expand') + %p + = _('Limit the number of pipeline creation requests per minute. This limit includes pipelines created through the UI, the API, and by background processing.') + = link_to _('Learn more.'), help_page_path('user/admin_area/settings/rate_limit_on_pipelines_creation.md'), target: '_blank', rel: 'noopener noreferrer' + .settings-content + = render 'pipeline_limits' + = render_if_exists 'admin/application_settings/ee_network_settings' diff --git a/app/views/admin/application_settings/service_usage_data.html.haml b/app/views/admin/application_settings/service_usage_data.html.haml index ec084c05cf7..55c25ca32d5 100644 --- a/app/views/admin/application_settings/service_usage_data.html.haml +++ b/app/views/admin/application_settings/service_usage_data.html.haml @@ -18,9 +18,9 @@ - else = render Pajamas::AlertComponent.new(variant: :warning, dismissible: false, - title: _('Service Ping payload not found in the application cache')) do + title: _('Service Ping payload not found in the application cache')) do |c| - .gl-alert-body + = c.body do - enable_service_ping_link_url = help_page_path('user/admin_area/settings/usage_statistics', anchor: 'enable-or-disable-usage-statistics') - enable_service_ping_link = '<a href="%{url}">'.html_safe % { url: enable_service_ping_link_url } - generate_manually_link_url = help_page_path('administration/troubleshooting/gitlab_rails_cheat_sheet', anchor: 'generate-service-ping') diff --git a/app/views/admin/applications/_form.html.haml b/app/views/admin/applications/_form.html.haml index 925b3681298..fd73d4c5671 100644 --- a/app/views/admin/applications/_form.html.haml +++ b/app/views/admin/applications/_form.html.haml @@ -21,25 +21,13 @@ .col-sm-2.col-form-label.pt-0 = f.label :trusted .col-sm-10 - = f.check_box :trusted - %span.form-text.text-muted - Trusted applications are automatically authorized on GitLab OAuth flow. It's highly recommended for the security of users that trusted applications have the confidential setting set to true. + = f.gitlab_ui_checkbox_component :trusted, _('Trusted applications are automatically authorized on GitLab OAuth flow. It\'s highly recommended for the security of users that trusted applications have the confidential setting set to true.') = content_tag :div, class: 'form-group row' do .col-sm-2.col-form-label.pt-0 = f.label :confidential .col-sm-10 - = f.check_box :confidential - %span.form-text.text-muted - = _('The application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.') - - = content_tag :div, class: 'form-group row' do - .col-sm-2.col-form-label.pt-0 - = f.label :expire_access_tokens - .col-sm-10 - = f.check_box :expire_access_tokens - %span.form-text.text-muted - = _('Access tokens expire after 2 hours. A refresh token may be used at any time to generate a new access token. Non-expiring access tokens are deprecated. Clear this setting to enable backward compatibility.') + = f.gitlab_ui_checkbox_component :confidential, _('The application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.') .form-group.row .col-sm-2.col-form-label.pt-0 diff --git a/app/views/admin/background_migrations/_job.html.haml b/app/views/admin/background_migrations/_job.html.haml new file mode 100644 index 00000000000..e34f73e8b94 --- /dev/null +++ b/app/views/admin/background_migrations/_job.html.haml @@ -0,0 +1,10 @@ +%tr{ role: 'row' } + %td{ role: 'cell', data: { label: _('Id') } } + = link_to admin_background_migration_batched_job_path(job.batched_migration, job, params: { database: params[:database] }) do + = job.id + %td{ role: 'cell', data: { label: s_('BackgroundMigrations|Started at') } } + = job.started_at + %td{ role: 'cell', data: { label: s_('BackgroundMigrations|Finished at') } } + = job.finished_at + %td{ role: 'cell', data: { label: s_('BackgroundMigrations|Batch size') } } + = job.batch_size diff --git a/app/views/admin/background_migrations/_migration.html.haml b/app/views/admin/background_migrations/_migration.html.haml index 9cef8332259..f4906028e39 100644 --- a/app/views/admin/background_migrations/_migration.html.haml +++ b/app/views/admin/background_migrations/_migration.html.haml @@ -1,5 +1,7 @@ %tr{ role: 'row' } - %td{ role: 'cell', data: { label: _('Migration') } }= migration.job_class_name + ': ' + migration.table_name + %td{ role: 'cell', data: { label: _('Migration') } } + = link_to admin_background_migration_path(migration, database: params[:database]) do + = migration.job_class_name + ': ' + migration.table_name %td{ role: 'cell', data: { label: _('Progress') } } - progress = batched_migration_progress(migration, @successful_rows_counts[migration.id]) - if progress @@ -10,14 +12,14 @@ = gl_badge_tag migration.status_name.to_s.humanize, { size: :sm, variant: batched_migration_status_badge_variant(migration) } %td{ role: 'cell', data: { label: _('Action') } } - if migration.active? - = button_to pause_admin_background_migration_path(migration), + = button_to pause_admin_background_migration_path(migration, database: params[:database]), class: 'gl-button btn btn-icon has-tooltip', title: _('Pause'), 'aria-label' => _('Pause') do = sprite_icon('pause', css_class: 'gl-button-icon gl-icon') - elsif migration.paused? - = button_to resume_admin_background_migration_path(migration), + = button_to resume_admin_background_migration_path(migration, database: params[:database]), class: 'gl-button btn btn-icon has-tooltip', title: _('Resume'), 'aria-label' => _('Resume') do = sprite_icon('play', css_class: 'gl-button-icon gl-icon') - elsif migration.failed? - = button_to retry_admin_background_migration_path(migration), + = button_to retry_admin_background_migration_path(migration, database: params[:database]), class: 'gl-button btn btn-icon has-tooltip', title: _('Retry'), 'aria-label' => _('Retry') do = sprite_icon('retry', css_class: 'gl-button-icon gl-icon') diff --git a/app/views/admin/background_migrations/_migration_full_information.html.haml b/app/views/admin/background_migrations/_migration_full_information.html.haml new file mode 100644 index 00000000000..620274c375f --- /dev/null +++ b/app/views/admin/background_migrations/_migration_full_information.html.haml @@ -0,0 +1,21 @@ +%tr{ role: 'row' } + %td{ role: 'cell', data: { label: _('Id') } } + = @migration.id + %td{ role: 'cell', data: { label: _('Min Value') } } + = @migration.min_value + %td{ role: 'cell', data: { label: _('Max Value') } } + = @migration.max_value + %td{ role: 'cell', data: { label: _('Batch size') } } + = @migration.batch_size + %td{ role: 'cell', data: { label: _('Sub-batch size') } } + = @migration.sub_batch_size + %td{ role: 'cell', data: { label: _('Interval') } } + = @migration.interval + %td{ role: 'cell', data: { label: _('Pause time (ms)') } } + = @migration.pause_ms + %td{ role: 'cell', data: { label: _('Created on') } } + = @migration.created_at + %td{ role: 'cell', data: { label: _('Last updated') } } + = @migration.updated_at + %td{ role: 'cell', data: { label: _('Status') } } + = gl_badge_tag @migration.status_name.to_s.humanize, { size: :sm, variant: batched_migration_status_badge_variant(@migration) } diff --git a/app/views/admin/background_migrations/index.html.haml b/app/views/admin/background_migrations/index.html.haml index afceb6427e0..c8b195219ec 100644 --- a/app/views/admin/background_migrations/index.html.haml +++ b/app/views/admin/background_migrations/index.html.haml @@ -1,13 +1,26 @@ -- page_title _('Background Migrations') +- page_title s_('BackgroundMigrations|Background Migrations') +- @breadcrumb_link = admin_background_migrations_path(database: params[:database]) + +.gl-display-flex.gl-sm-flex-direction-column.gl-sm-align-items-flex-end.gl-pb-5.gl-border-b-1.gl-border-b-solid.gl-border-b-gray-100 + .gl-flex-grow-1 + %h3= s_('BackgroundMigrations|Background Migrations') + %p.light.gl-mb-0 + - learnmore_link = help_page_path('development/database/batched_background_migrations') + - learnmore_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: learnmore_link } + = html_escape(s_('BackgroundMigrations|Background migrations are used to perform data migrations whenever a migration exceeds the time limits in our guidelines. %{linkStart}Learn more%{linkEnd}')) % { linkStart: learnmore_link_start, linkEnd: '</a>'.html_safe } + + - if @databases.size > 1 + .gl-display-flex.gl-align-items-center.gl-flex-grow-0.gl-flex-basis-0.gl-sm-mt-0.gl-mt-5.gl-sm-ml-7.gl-ml-0 + #js-database-listbox{ data: { databases: @databases, selected_database: @selected_database } } = gl_tabs_nav do - = gl_tab_link_to admin_background_migrations_path, item_active: @current_tab == 'queued' do + = gl_tab_link_to admin_background_migrations_path({ tab: nil, database: params[:database] }), item_active: @current_tab == 'queued' do = _('Queued') = gl_tab_counter_badge limited_counter_with_delimiter(@relations_by_tab['queued']) - = gl_tab_link_to admin_background_migrations_path(tab: 'failed'), item_active: @current_tab == 'failed' do + = gl_tab_link_to admin_background_migrations_path({ tab: 'failed', database: params[:database] }), item_active: @current_tab == 'failed' do = _('Failed') = gl_tab_counter_badge limited_counter_with_delimiter(@relations_by_tab['failed']) - = gl_tab_link_to admin_background_migrations_path(tab: 'finished'), item_active: @current_tab == 'finished' do + = gl_tab_link_to admin_background_migrations_path({ tab: 'finished', database: params[:database] }), item_active: @current_tab == 'finished' do = _('Finished') = gl_tab_counter_badge limited_counter_with_delimiter(@relations_by_tab['finished']) @@ -16,10 +29,10 @@ %table.table.b-table.gl-table.b-table-stacked-md{ role: 'table' } %thead{ role: 'rowgroup' } %tr{ role: 'row' } - %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Migration') - %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Progress') - %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Status') - %th.table-th-transparent.border-bottom{ role: 'cell' } + %th.border-bottom{ role: 'cell' }= _('Migration') + %th.border-bottom{ role: 'cell' }= _('Progress') + %th.border-bottom{ role: 'cell' }= _('Status') + %th.border-bottom{ role: 'cell' } %tbody{ role: 'rowgroup' } = render partial: 'migration', collection: @migrations diff --git a/app/views/admin/background_migrations/show.html.haml b/app/views/admin/background_migrations/show.html.haml new file mode 100644 index 00000000000..7915a9d36dc --- /dev/null +++ b/app/views/admin/background_migrations/show.html.haml @@ -0,0 +1,39 @@ +- add_to_breadcrumbs s_('BackgroundMigrations|Background Migrations'), admin_background_migrations_path(database: params[:database]) +- breadcrumb_title @migration.id +- page_title @migration.job_class_name , s_('BackgroundMigrations|Background Migrations') +- @breadcrumb_link = admin_background_migration_path(@migration, database: params[:database]) + +%h3= @migration.job_class_name + ': ' + @migration.table_name + +.tab-content.gl-tab-content + .tab-pane.active{ role: 'tabpanel' } + %table.table.b-table.gl-table.b-table-stacked-md{ role: 'table' } + %thead{ role: 'rowgroup' } + %tr{ role: 'row' } + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Id') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Min Value') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Max Value') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Batch size') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Sub-batch size') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Interval') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Pause time (ms)') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Created on') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Last updated') + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Status') + %tbody{ role: 'rowgroup' } + = render partial: 'migration_full_information', migration: @migration + +- if @migration.batched_jobs.with_status(:failed).any? + %h5= s_('BackgroundMigrations|Failed jobs:') + + %table.table.b-table.gl-table.b-table-stacked-md{ role: 'table' } + %thead{ role: 'rowgroup' } + %tr{ role: 'row' } + %th{ role: 'cell' }= _('Id') + %th{ role: 'cell' }= s_('BackgroundMigrations|Started at') + %th{ role: 'cell' }= s_('BackgroundMigrations|Finished at') + %th{ role: 'cell' }= s_('BackgroundMigrations|Batch size') + %tbody{ role: 'rowgroup' } + = render partial: 'job', collection: @failed_jobs + + = paginate_collection @failed_jobs diff --git a/app/views/admin/batched_jobs/_job.html.haml b/app/views/admin/batched_jobs/_job.html.haml new file mode 100644 index 00000000000..512f4062ccf --- /dev/null +++ b/app/views/admin/batched_jobs/_job.html.haml @@ -0,0 +1,17 @@ +%tr{ role: 'row' } + %td{ role: 'cell', data: { label: _('Id') } } + = @job.id + %td{ role: 'cell', data: { label: s_('BatchedJob|Min value') } } + = @job.min_value + %td{ role: 'cell', data: { label: s_('BatchedJob|Max value') } } + = @job.max_value + %td{ role: 'cell', data: { label: s_('BatchedJob|Batch size') } } + = @job.batch_size + %td{ role: 'cell', data: { label: s_('BatchedJob|Started at') } } + = @job.started_at + %td{ role: 'cell', data: { label: s_('BatchedJob|Finished at') } } + = @job.finished_at + %td{ role: 'cell', data: { label: s_('BatchedJob|Attempts') } } + = @job.attempts + %td{ role: 'cell', data: { label: s_('BatchedJob|Pause ms') } } + = @job.pause_ms diff --git a/app/views/admin/batched_jobs/_transition_log.html.haml b/app/views/admin/batched_jobs/_transition_log.html.haml new file mode 100644 index 00000000000..bd81be4679a --- /dev/null +++ b/app/views/admin/batched_jobs/_transition_log.html.haml @@ -0,0 +1,13 @@ +%tr{ role: 'row' } + %td{ role: 'cell', data: { label: _('Id') } } + = transition_log.id + %td{ role: 'cell', data: { label: s_('BatchedJob|Created at') } } + = transition_log.created_at + %td{ role: 'cell', data: { label: s_('BatchedJob|Previous status') } } + = transition_log.previous_status + %td{ role: 'cell', data: { label: s_('BatchedJob|Next status') } } + = transition_log.next_status + %td{ role: 'cell', data: { label: s_('BatchedJob|Exception class') } } + = transition_log.exception_class + %td{ role: 'cell', data: { label: s_('BatchedJob|Exception message') } } + = transition_log.exception_message diff --git a/app/views/admin/batched_jobs/show.html.haml b/app/views/admin/batched_jobs/show.html.haml new file mode 100644 index 00000000000..760635413a5 --- /dev/null +++ b/app/views/admin/batched_jobs/show.html.haml @@ -0,0 +1,36 @@ +- add_to_breadcrumbs s_('Batched Job|Background Migrations'), admin_background_migrations_path(database: params[:database]) +- add_to_breadcrumbs @job.batched_background_migration_id, admin_background_migration_path(@job.batched_migration, database: params[:database]) +- breadcrumb_title sprintf(s_('Batched Job|Batched Job (Id: %{id})'), { id: @job.id.to_s}) +- page_title @job.id, s_('BatchedJob|Batched Jobs') +- @breadcrumb_link = admin_background_migration_batched_job_path(@job.batched_migration, @job, database: params[:database]) + +%h3= sprintf(s_('Batched Job|Batched Job (Id: %{id})'), { id: @job.id.to_s}) + +%table.table.b-table.gl-table.b-table-stacked-md{ role: 'table' } + %thead{ role: 'rowgroup' } + %tr{ role: 'row' } + %th.table-th-transparent.border-bottom{ role: 'cell' }= _('Id') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Min Value') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Max Value') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Batch size') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Started at') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Finished at') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Attempts') + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_('BatchedJob|Pause time (ms)') + %tbody{ role: 'rowgroup' } + = render partial: 'job', job: @job + +- if @transition_logs.any? + %h5= s_('BatchedJob|Transition logs:') + + %table.table.b-table.gl-table.b-table-stacked-md{ role: 'table' } + %thead{ role: 'rowgroup' } + %tr{ role: 'row' } + %th{ role: 'cell' }= _('Id') + %th{ role: 'cell' }= s_('BatchedJob|Created At') + %th{ role: 'cell' }= s_('BatchedJob|Previous Status') + %th{ role: 'cell' }= s_('BatchedJob|Next Status') + %th{ role: 'cell' }= s_('BatchedJob|Exception Class') + %th{ role: 'cell' }= s_('BatchedJob|Exception Message') + %tbody{ role: 'rowgroup' } + = render partial: 'transition_log', collection: @transition_logs diff --git a/app/views/admin/broadcast_messages/_form.html.haml b/app/views/admin/broadcast_messages/_form.html.haml index 4102918931f..dfd3b87c674 100644 --- a/app/views/admin/broadcast_messages/_form.html.haml +++ b/app/views/admin/broadcast_messages/_form.html.haml @@ -29,7 +29,7 @@ = f.label :starts_at, _("Dismissable") .col-sm-10 = f.gitlab_ui_checkbox_component :dismissable, _('Allow users to dismiss the broadcast message') - - if Feature.enabled?(:role_targeted_broadcast_messages, default_enabled: :yaml) + - if Feature.enabled?(:role_targeted_broadcast_messages) .form-group.row .col-sm-2.col-form-label = f.label :target_access_levels, _('Target roles') diff --git a/app/views/admin/broadcast_messages/index.html.haml b/app/views/admin/broadcast_messages/index.html.haml index 54c2a9d5250..8b657eda0c0 100644 --- a/app/views/admin/broadcast_messages/index.html.haml +++ b/app/views/admin/broadcast_messages/index.html.haml @@ -1,6 +1,6 @@ - breadcrumb_title _("Messages") - page_title _("Broadcast Messages") -- targeted_broadcast_messages_enabled = Feature.enabled?(:role_targeted_broadcast_messages, default_enabled: :yaml) +- targeted_broadcast_messages_enabled = Feature.enabled?(:role_targeted_broadcast_messages) %h3.page-title = _('Broadcast Messages') diff --git a/app/views/admin/dashboard/_security_newsletter_callout.html.haml b/app/views/admin/dashboard/_security_newsletter_callout.html.haml index 9b994b757f9..4b1303cc97c 100644 --- a/app/views/admin/dashboard/_security_newsletter_callout.html.haml +++ b/app/views/admin/dashboard/_security_newsletter_callout.html.haml @@ -6,9 +6,9 @@ alert_data: { feature_id: Users::CalloutsHelper::SECURITY_NEWSLETTER_CALLOUT, dismiss_endpoint: callouts_path, defer_links: 'true' }, - close_button_data: { testid: 'close-security-newsletter-callout' }) do - .gl-alert-body + close_button_data: { testid: 'close-security-newsletter-callout' }) do |c| + = c.body do = s_('AdminArea|Sign up for the GitLab Security Newsletter to get notified for security updates.') - .gl-alert-actions + = c.actions do = link_to 'https://about.gitlab.com/company/preference-center/', target: '_blank', rel: 'noreferrer noopener', class: 'deferred-link gl-alert-action btn-confirm btn-md gl-button' do = s_('AdminArea|Sign up for the GitLab newsletter') diff --git a/app/views/admin/groups/_form.html.haml b/app/views/admin/groups/_form.html.haml index 8ac6f63cdfb..944d7bfced0 100644 --- a/app/views/admin/groups/_form.html.haml +++ b/app/views/admin/groups/_form.html.haml @@ -27,8 +27,8 @@ - if @group.new_record? .form-group.row .offset-sm-2.col-sm-10 - = render Pajamas::AlertComponent.new(dismissible: false) do - .gl-alert-body + = render Pajamas::AlertComponent.new(dismissible: false) do |c| + = c.body do = render 'shared/group_tips' .form-actions = f.submit _('Create group'), class: "gl-button btn btn-confirm" diff --git a/app/views/admin/groups/show.html.haml b/app/views/admin/groups/show.html.haml index 09f2d431197..39b2fa41c80 100644 --- a/app/views/admin/groups/show.html.haml +++ b/app/views/admin/groups/show.html.haml @@ -112,7 +112,7 @@ = form_tag admin_group_members_update_path(@group), id: "new_project_member", class: "bulk_import", method: :put do %div - = users_select_tag(:user_ids, multiple: true, email_user: true, skip_ldap: @group.ldap_synced?, scope: :all) + = users_select_tag(:user_id, multiple: true, email_user: true, skip_ldap: @group.ldap_synced?, scope: :all) .gl-mt-3 = select_tag :access_level, options_for_select(@group.access_level_roles), class: "project-access-select select2" %hr diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml index be7055e6f7b..16f6e71d79b 100644 --- a/app/views/admin/projects/show.html.haml +++ b/app/views/admin/projects/show.html.haml @@ -16,8 +16,8 @@ .col-md-12 = render Pajamas::AlertComponent.new(variant: :danger, alert_class: 'gl-mb-5', - alert_data: { testid: 'last-repository-check-failed-alert' }) do - .gl-alert-body + alert_data: { testid: 'last-repository-check-failed-alert' }) do |c| + = c.body do - last_check_message = _("Last repository check (%{last_check_timestamp}) failed. See the 'repocheck.log' file for error messages.") - last_check_message = last_check_message % { last_check_timestamp: time_ago_with_tooltip(@project.last_repository_check_at) } = last_check_message.html_safe diff --git a/app/views/admin/requests_profiles/index.html.haml b/app/views/admin/requests_profiles/index.html.haml deleted file mode 100644 index 9d42a2bfa93..00000000000 --- a/app/views/admin/requests_profiles/index.html.haml +++ /dev/null @@ -1,22 +0,0 @@ -- page_title _('Requests Profiles') - -%h3.page-title - = page_title - -.bs-callout.clearfix - = html_escape(_('Pass the header %{codeOpen} X-Profile-Token: %{profile_token} %{codeClose} to profile the request')) % { profile_token: @profile_token, codeOpen: '<code>'.html_safe, codeClose: '</code>'.html_safe } - -- if @profiles.present? - .gl-mt-3 - - @profiles.each do |path, profiles| - .card - .card-header - %code= path - %ul.content-list - - profiles.each do |profile| - %li - = link_to profile.time.to_s(:long) + ' ' + profile.profile_mode.capitalize, - admin_requests_profile_path(profile) -- else - %p - = _('No profiles found') diff --git a/app/views/admin/runners/edit.html.haml b/app/views/admin/runners/edit.html.haml index 5570c46c17f..ccdfe67ea77 100644 --- a/app/views/admin/runners/edit.html.haml +++ b/app/views/admin/runners/edit.html.haml @@ -1,95 +1,53 @@ -- add_page_specific_style 'page_bundles/ci_status' - - runner_name = "##{@runner.id} (#{@runner.short_sha})" -- if Feature.enabled?(:runner_read_only_admin_view, default_enabled: :yaml) - - breadcrumb_title _('Edit') - - page_title _('Edit'), runner_name - - add_to_breadcrumbs _('Runners'), admin_runners_path - - add_to_breadcrumbs runner_name, admin_runner_path(@runner) -- else - - breadcrumb_title runner_name - - page_title runner_name +- breadcrumb_title _('Edit') +- page_title _('Edit'), runner_name +- add_to_breadcrumbs _('Runners'), admin_runners_path +- add_to_breadcrumbs runner_name, admin_runner_path(@runner) -#js-admin-runner-edit{ data: {runner_id: @runner.id} } +#js-admin-runner-edit{ data: {runner_id: @runner.id, runner_path: admin_runner_path(@runner) } } -.row - .col-md-6 - %h4= _('Restrict projects for this runner') - - if @runner.runner_projects.any? - %table.table{ data: { testid: 'assigned-projects' } } - %thead - %tr - %th= _('Assigned projects') - - @runner.runner_projects.each do |runner_project| - - project = runner_project.project - - if project - %tr - %td - = render Pajamas::AlertComponent.new(variant: :danger, - dismissible: false, - title: project.full_name) do - .gl-alert-actions - = link_to _('Disable'), admin_namespace_project_runner_project_path(project.namespace, project, runner_project), method: :delete, class: 'btn gl-alert-action btn-confirm btn-md gl-button' +- if @runner.project_type? + .gl-overflow-auto + %h4.gl-font-lg.gl-my-5= _('Restrict projects for this runner') - %table.table{ data: { testid: 'unassigned-projects' } } + - if @runner.runner_projects.any? + %table.table{ data: { testid: 'assigned-projects' } } %thead %tr - %th= _('Project') - %th - + %th= _('Assigned projects') + - @runner.runner_projects.each do |runner_project| + - project = runner_project.project + - if project + %tr + %td + = render Pajamas::AlertComponent.new(variant: :danger, + dismissible: false, + title: project.full_name) do |c| + = c.actions do + = link_to _('Disable'), admin_namespace_project_runner_project_path(project.namespace, project, runner_project), method: :delete, class: 'btn gl-alert-action btn-confirm btn-md gl-button' + + %table.table{ data: { testid: 'unassigned-projects' } } + %thead + %tr + %th= s_('Runners|Select projects to assign to this runner') + %th + + %tr + %td + = form_tag edit_admin_runner_path(@runner), id: 'runner-projects-search', class: 'form-inline', method: :get do + .input-group + = search_field_tag :search, params[:search], class: 'form-control gl-form-input', spellcheck: false + .input-group-append + = submit_tag _('Search'), class: 'gl-button btn btn-default' + + %td + - @projects.each do |project| %tr %td - = form_tag edit_admin_runner_path(@runner), id: 'runner-projects-search', class: 'form-inline', method: :get do - .input-group - = search_field_tag :search, params[:search], class: 'form-control gl-form-input', spellcheck: false - .input-group-append - = submit_tag _('Search'), class: 'gl-button btn btn-default' - + = project.full_name %td - - @projects.each do |project| - %tr - %td - = project.full_name - %td - .float-right - = form_for project.runner_projects.new, url: admin_namespace_project_runner_projects_path(project.namespace, project), method: :post do |f| - = f.hidden_field :runner_id, value: @runner.id - = f.submit _('Enable'), aria: { label: s_('Runners|Change to project runner') }, class: 'gl-button btn btn-sm', data: { confirm: (s_('Runners|You are about to change this instance runner to a project runner. This operation is not reversible. Are you sure you want to continue?') if @runner.instance_type?), confirm_btn_variant: 'danger' } - = paginate_without_count @projects - - .col-md-6 - %h4= _('Recent jobs served by this runner') - %table.table.ci-table.runner-builds - %thead - %tr - %th= _('Job') - %th= _('Status') - %th= _('Project') - %th= _('Commit') - %th= _('Finished at') - - - @builds.each do |build| - - project = build.project - %tr.build - %td.id - - if project - = link_to project_job_path(project, build) do - %strong ##{build.id} - - else - %strong ##{build.id} - - %td.status - = render 'ci/status/badge', status: build.detailed_status(current_user) - - %td.status - - if project - = project.full_name - - %td.build-link - - if project - = link_to pipeline_path(build.pipeline) do - %strong= build.pipeline.short_sha - - %td.timestamp - - if build.finished_at - %span= time_ago_with_tooltip build.finished_at + .float-right + = form_for project.runner_projects.new, url: admin_namespace_project_runner_projects_path(project.namespace, project), method: :post do |f| + = f.hidden_field :runner_id, value: @runner.id + = f.submit _('Enable'), class: 'gl-button btn btn-sm' + = paginate_without_count @projects diff --git a/app/views/admin/runners/show.html.haml b/app/views/admin/runners/show.html.haml index 5c4a7026f50..22351397b9a 100644 --- a/app/views/admin/runners/show.html.haml +++ b/app/views/admin/runners/show.html.haml @@ -5,4 +5,4 @@ - page_title title - add_to_breadcrumbs _('Runners'), admin_runners_path -#js-admin-runner-show{ data: {runner_id: @runner.id} } +#js-admin-runner-show{ data: {runner_id: @runner.id, runners_path: admin_runners_path} } diff --git a/app/views/admin/sessions/_new_base.html.haml b/app/views/admin/sessions/_new_base.html.haml index c9b002a4dd2..65eb1358b40 100644 --- a/app/views/admin/sessions/_new_base.html.haml +++ b/app/views/admin/sessions/_new_base.html.haml @@ -4,4 +4,4 @@ = password_field_tag 'user[password]', nil, class: 'form-control', autocomplete: 'current-password', required: true, title: _('This field is required.'), data: { qa_selector: 'password_field' } .submit-container.move-submit-down - = submit_tag _('Enter Admin Mode'), class: 'gl-button btn btn-success', data: { qa_selector: 'enter_admin_mode_button' } + = submit_tag _('Enter Admin Mode'), class: 'gl-button btn btn-confirm', data: { qa_selector: 'enter_admin_mode_button' } diff --git a/app/views/admin/sessions/_signin_box.html.haml b/app/views/admin/sessions/_signin_box.html.haml index ab7eb8c79dc..9372bae14c3 100644 --- a/app/views/admin/sessions/_signin_box.html.haml +++ b/app/views/admin/sessions/_signin_box.html.haml @@ -14,6 +14,6 @@ = render_if_exists 'devise/sessions/new_smartcard' - if allow_admin_mode_password_authentication_for_web? - .login-box.tab-pane{ id: 'login-pane', role: 'tabpanel', class: active_when(!any_form_based_providers_enabled?) } + .login-box.tab-pane.gl-p-5{ id: 'login-pane', role: 'tabpanel', class: active_when(!any_form_based_providers_enabled?) } .login-body = render 'admin/sessions/new_base' diff --git a/app/views/admin/sessions/_two_factor_otp.html.haml b/app/views/admin/sessions/_two_factor_otp.html.haml index 3fe6e20a367..40ba79d1a65 100644 --- a/app/views/admin/sessions/_two_factor_otp.html.haml +++ b/app/views/admin/sessions/_two_factor_otp.html.haml @@ -6,4 +6,4 @@ = _("Enter the code from the two-factor app on your mobile device. If you've lost your device, you may enter one of your recovery codes.") .submit-container.move-submit-down - = submit_tag 'Verify code', class: 'gl-button btn btn-success' + = submit_tag 'Verify code', class: 'gl-button btn btn-confirm' diff --git a/app/views/admin/sessions/new.html.haml b/app/views/admin/sessions/new.html.haml index 67c607270a5..7d07b49c98e 100644 --- a/app/views/admin/sessions/new.html.haml +++ b/app/views/admin/sessions/new.html.haml @@ -8,7 +8,7 @@ - if any_form_based_providers_enabled? = render 'devise/shared/tabs_ldap', show_password_form: allow_admin_mode_password_authentication_for_web?, render_signup_link: false - else - = render 'devise/shared/tabs_normal', tab_title: _('Enter Admin Mode'), render_signup_link: false + = render 'devise/shared/tab_single', tab_title: page_title .tab-content - if allow_admin_mode_password_authentication_for_web? || ldap_sign_in_enabled? || crowd_enabled? = render 'admin/sessions/signin_box' diff --git a/app/views/admin/sessions/two_factor.html.haml b/app/views/admin/sessions/two_factor.html.haml index 531ab206157..3f915846dd8 100644 --- a/app/views/admin/sessions/two_factor.html.haml +++ b/app/views/admin/sessions/two_factor.html.haml @@ -5,9 +5,9 @@ .col-md-5.new-session-forms-container .login-page #signin-container - = render 'devise/shared/tabs_normal', tab_title: _('Enter Admin Mode'), render_signup_link: false + = render 'devise/shared/tab_single', tab_title: _('Enter Admin Mode') .tab-content - .login-box.tab-pane.active{ id: 'login-pane', role: 'tabpanel' } + .login-box.tab-pane.gl-p-5.active{ id: 'login-pane', role: 'tabpanel' } .login-body - if current_user.two_factor_otp_enabled? = render 'admin/sessions/two_factor_otp' diff --git a/app/views/admin/topics/_form.html.haml b/app/views/admin/topics/_form.html.haml index 50ef375dd35..9b9d97950cc 100644 --- a/app/views/admin/topics/_form.html.haml +++ b/app/views/admin/topics/_form.html.haml @@ -3,13 +3,20 @@ .form-group = f.label :name do - = _("Topic name") - = f.text_field :name, placeholder: _('My topic'), class: 'form-control input-lg', data: { qa_selector: 'topic_name_field' }, + = _("Topic slug (name)") + = f.text_field :name, placeholder: _('my-topic'), class: 'form-control input-lg', data: { qa_selector: 'topic_name_field' }, required: true, title: _('Please fill in a name for your topic.'), autofocus: true .form-group + = f.label :title do + = _("Topic title") + = f.text_field :title, placeholder: _('My topic'), class: 'form-control input-lg', data: { qa_selector: 'topic_title_field' }, + required: true, + title: _('Please fill in a title for your topic.') + + .form-group = f.label :description, _("Description") = render layout: 'shared/md_preview', locals: { url: preview_markdown_admin_topics_path, referenced_users: false } do = render 'shared/zen', f: f, attr: :description, diff --git a/app/views/admin/topics/_topic.html.haml b/app/views/admin/topics/_topic.html.haml index 959e7ab31fc..462943263df 100644 --- a/app/views/admin/topics/_topic.html.haml +++ b/app/views/admin/topics/_topic.html.haml @@ -1,4 +1,5 @@ - topic = local_assigns.fetch(:topic) +- title = topic.title || topic.name %li.topic-row.gl-py-3.gl-align-items-center{ class: 'gl-display-flex!', data: { qa_selector: 'topic_row_content' } } .avatar-container.rect-avatar.s40.gl-flex-shrink-0 @@ -6,7 +7,9 @@ .gl-min-w-0.gl-flex-grow-1 .title - = link_to topic.name, topic_explore_projects_path(topic_name: topic.name) + = link_to title, topic_explore_projects_path(topic_name: topic.name) + %div + = topic.name .stats.gl-text-gray-500.gl-flex-shrink-0.gl-display-none.gl-sm-display-flex %span.gl-ml-5.has-tooltip{ title: n_('%d project', '%d projects', topic.total_projects_count) % topic.total_projects_count } diff --git a/app/views/admin/users/_users.html.haml b/app/views/admin/users/_users.html.haml index 86391b980c0..a7ed7b8c052 100644 --- a/app/views/admin/users/_users.html.haml +++ b/app/views/admin/users/_users.html.haml @@ -1,8 +1,8 @@ - if registration_features_can_be_prompted? = render Pajamas::AlertComponent.new(variant: :tip, alert_class: 'gl-my-5', - dismissible: false) do - .gl-alert-body + dismissible: false) do |c| + = c.body do = render 'shared/registration_features_discovery_message', feature_title: s_('RegistrationFeatures|send emails to users') .top-area |