Module: ProjectsHelper
- Includes:
- CompareHelper, Gitlab::Allowable, Gitlab::Utils::StrongMemoize
- Included in:
- GitlabRoutingHelper, MergeRequestWidgetEntity
- Defined in:
- app/helpers/projects_helper.rb
Instance Method Summary collapse
- #able_to_see_forks_count?(project, user) ⇒ Boolean
- #able_to_see_issues?(project, user) ⇒ Boolean
- #able_to_see_merge_requests?(project, user) ⇒ Boolean
-
#any_projects?(projects) ⇒ Boolean
Returns true if any projects are present.
- #author_content_tag(author, opts = {}) ⇒ Object
- #autodeploy_flash_notice(branch_name) ⇒ Object
- #badge_count(number) ⇒ Object
- #branch_rules_path ⇒ Object
- #can_admin_associated_clusters?(project) ⇒ Boolean
- #can_admin_project_member?(project) ⇒ Boolean
- #can_change_visibility_level?(project, current_user) ⇒ Boolean
- #can_disable_emails?(project, current_user) ⇒ Boolean
- #can_push_code? ⇒ Boolean
- #can_view_branch_rules? ⇒ Boolean
- #clusters_deprecation_alert_message ⇒ Object
-
#delete_confirm_phrase(project) ⇒ Object
Returns the confirm phrase the user needs to type in order to delete the project.
- #directory? ⇒ Boolean
- #error_tracking_setting_project_json ⇒ Object
- #explore_projects_tab? ⇒ Boolean
- #external_classification_label_help_message ⇒ Object
- #fork_button_data_attributes(project) ⇒ Object
- #grafana_integration_enabled? ⇒ Boolean
- #grafana_integration_masked_token ⇒ Object
- #grafana_integration_url ⇒ Object
- #http_clone_url_to_repo(project) ⇒ Object
- #import_from_bitbucket_message ⇒ Object
- #import_from_gitlab_message ⇒ Object
- #inactive_project_deletion_date(project) ⇒ Object
- #last_pipeline_from_status_cache(project) ⇒ Object
- #last_push_event ⇒ Object
- #link_to_autodeploy_doc ⇒ Object
- #link_to_member(project, author, opts = {}, &block) ⇒ Object
- #link_to_member_avatar(author, opts = {}) ⇒ Object
- #link_to_project(project) ⇒ Object
- #load_pipeline_status(projects) ⇒ Object
- #localized_project_human_access(access) ⇒ Object
- #membership_locked? ⇒ Boolean
- #no_password_message ⇒ Object
- #project_can_be_shared? ⇒ Boolean
- #project_classes(project) ⇒ Object
- #project_coverage_chart_data_attributes(daily_coverage_options, ref) ⇒ Object
- #project_incident_management_setting ⇒ Object
- #project_license_name(project) ⇒ Object
- #project_list_cache_key(project, pipeline_status: true) ⇒ Object
- #project_permissions_panel_data(project) ⇒ Object
- #project_title(project) ⇒ Object
- #push_to_create_project_command(user = current_user) ⇒ Object
- #remote_mirror_setting_enabled? ⇒ Boolean
- #remove_fork_project_confirm_json(project, remove_form_id) ⇒ Object
- #remove_fork_project_description_message(project) ⇒ Object
- #remove_fork_project_warning_message(project) ⇒ Object
- #remove_project_message(project) ⇒ Object
- #show_auto_devops_implicitly_enabled_banner?(project, user) ⇒ Boolean
- #show_clusters_alert?(project) ⇒ Boolean
- #show_count?(disabled: false, compact_mode: false) ⇒ Boolean
- #show_inactive_project_deletion_banner?(project) ⇒ Boolean
- #show_mobile_devops_project_promo?(project) ⇒ Boolean
- #show_no_password_message? ⇒ Boolean
- #show_no_ssh_key_message? ⇒ Boolean
- #show_projects?(projects, params) ⇒ Boolean
- #show_terraform_banner?(project) ⇒ Boolean
- #show_xcode_link?(project = @project) ⇒ Boolean
- #ssh_clone_url_to_repo(project) ⇒ Object
- #transfer_project_message(project) ⇒ Object
- #visibility_level_content(project, css_class: nil, icon_css_class: nil) ⇒ Object
- #visible_fork_source(project) ⇒ Object
- #vue_fork_divergence_data(project, ref) ⇒ Object
- #xcode_uri_to_repo(project = @project) ⇒ Object
Methods included from Gitlab::Allowable
Methods included from CompareHelper
#create_mr_button?, #create_mr_path, #project_compare_selector_data, #target_projects
Instance Method Details
#able_to_see_forks_count?(project, user) ⇒ Boolean
455 456 457 |
# File 'app/helpers/projects_helper.rb', line 455 def able_to_see_forks_count?(project, user) project.forking_enabled? && can?(user, :read_code, project) end |
#able_to_see_issues?(project, user) ⇒ Boolean
447 448 449 |
# File 'app/helpers/projects_helper.rb', line 447 def able_to_see_issues?(project, user) project.issues_enabled? && can?(user, :read_issue, project) end |
#able_to_see_merge_requests?(project, user) ⇒ Boolean
451 452 453 |
# File 'app/helpers/projects_helper.rb', line 451 def able_to_see_merge_requests?(project, user) project.merge_requests_enabled? && can?(user, :read_merge_request, project) end |
#any_projects?(projects) ⇒ Boolean
Returns true if any projects are present.
If the relation has a LIMIT applied we’ll cast the relation to an Array since repeated any? checks would otherwise result in multiple COUNT queries being executed.
If no limit is applied we’ll just issue a COUNT since the result set could be too large to load into memory.
292 293 294 295 296 297 298 299 300 |
# File 'app/helpers/projects_helper.rb', line 292 def any_projects?(projects) return projects.any? if projects.is_a?(Array) if projects.limit_value projects.to_a.any? else projects.except(:offset).any? end end |
#author_content_tag(author, opts = {}) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'app/helpers/projects_helper.rb', line 38 def (, opts = {}) default_opts = { author_class: 'author', tooltip: false, by_username: false } opts = default_opts.merge(opts) has_tooltip = !opts[:by_username] && opts[:tooltip] username = opts[:by_username] ? .to_reference : .name = { class: [opts[:author_class]] } if has_tooltip [:title] = .to_reference [:data] = { placement: 'top' } [:class] << 'has-tooltip' end # NOTE: ActionView::Helpers::TagHelper#content_tag HTML escapes username content_tag(:span, username, ) end |
#autodeploy_flash_notice(branch_name) ⇒ Object
193 194 195 196 |
# File 'app/helpers/projects_helper.rb', line 193 def autodeploy_flash_notice(branch_name) html_escape(_("Branch %{branch_name} was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}")) % { branch_name: tag.strong(truncate(sanitize(branch_name))), link_to_autodeploy_doc: link_to_autodeploy_doc } end |
#badge_count(number) ⇒ Object
523 524 525 |
# File 'app/helpers/projects_helper.rb', line 523 def badge_count(number) format_cached_count(1000, number) end |
#branch_rules_path ⇒ Object
551 552 553 |
# File 'app/helpers/projects_helper.rb', line 551 def branch_rules_path project_settings_repository_path(@project, anchor: 'js-branch-rules') end |
#can_admin_associated_clusters?(project) ⇒ Boolean
547 548 549 |
# File 'app/helpers/projects_helper.rb', line 547 def can_admin_associated_clusters?(project) can_admin_project_clusters?(project) || can_admin_group_clusters?(project) end |
#can_admin_project_member?(project) ⇒ Boolean
364 365 366 |
# File 'app/helpers/projects_helper.rb', line 364 def can_admin_project_member?(project) Ability.allowed?(current_user, :admin_project_member, project) && !membership_locked? end |
#can_change_visibility_level?(project, current_user) ⇒ Boolean
175 176 177 |
# File 'app/helpers/projects_helper.rb', line 175 def can_change_visibility_level?(project, current_user) can?(current_user, :change_visibility_level, project) end |
#can_disable_emails?(project, current_user) ⇒ Boolean
179 180 181 182 183 |
# File 'app/helpers/projects_helper.rb', line 179 def can_disable_emails?(project, current_user) return false if project.group&.emails_disabled? can?(current_user, :set_emails_disabled, project) end |
#can_push_code? ⇒ Boolean
543 544 545 |
# File 'app/helpers/projects_helper.rb', line 543 def can_push_code? current_user&.can?(:push_code, @project) end |
#can_view_branch_rules? ⇒ Boolean
539 540 541 |
# File 'app/helpers/projects_helper.rb', line 539 def can_view_branch_rules? can?(current_user, :maintainer_access, @project) end |
#clusters_deprecation_alert_message ⇒ Object
501 502 503 504 505 506 507 |
# File 'app/helpers/projects_helper.rb', line 501 def if has_active_license? s_('ClusterIntegration|The certificate-based Kubernetes integration is deprecated and will be removed in the future. You should %{linkStart}migrate to the GitLab agent for Kubernetes%{linkEnd}. For more information, see the %{deprecationLinkStart}deprecation epic%{deprecationLinkEnd}, or contact GitLab support.') else s_('ClusterIntegration|The certificate-based Kubernetes integration is deprecated and will be removed in the future. You should %{linkStart}migrate to the GitLab agent for Kubernetes%{linkEnd}. For more information, see the %{deprecationLinkStart}deprecation epic%{deprecationLinkEnd}.') end end |
#delete_confirm_phrase(project) ⇒ Object
Returns the confirm phrase the user needs to type in order to delete the project
Thus the phrase should include the namespace to make it very clear to the user which project is subject to deletion. Relevant issue: gitlab.com/gitlab-org/gitlab/-/issues/343591
443 444 445 |
# File 'app/helpers/projects_helper.rb', line 443 def delete_confirm_phrase(project) project.path_with_namespace end |
#directory? ⇒ Boolean
350 351 352 |
# File 'app/helpers/projects_helper.rb', line 350 def directory? @path.present? end |
#error_tracking_setting_project_json ⇒ Object
335 336 337 338 339 340 341 342 343 344 345 346 347 348 |
# File 'app/helpers/projects_helper.rb', line 335 def error_tracking_setting_project_json setting = @project.error_tracking_setting return if setting.blank? || setting.project_slug.blank? || setting.organization_slug.blank? { sentry_project_id: setting.sentry_project_id, name: setting.project_name, organization_name: setting.organization_name, organization_slug: setting.organization_slug, slug: setting.project_slug }.to_json end |
#explore_projects_tab? ⇒ Boolean
325 326 327 328 329 |
# File 'app/helpers/projects_helper.rb', line 325 def explore_projects_tab? current_page?(explore_projects_path) || current_page?(trending_explore_projects_path) || current_page?(starred_explore_projects_path) end |
#external_classification_label_help_message ⇒ Object
354 355 356 357 358 359 360 361 362 |
# File 'app/helpers/projects_helper.rb', line 354 def default_label = ::Gitlab::CurrentSettings.current_application_settings . s_( "ExternalAuthorizationService|When no classification label is set the "\ "default label `%{default_label}` will be used." ) % { default_label: default_label } end |
#fork_button_data_attributes(project) ⇒ Object
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 |
# File 'app/helpers/projects_helper.rb', line 459 def (project) return unless current_user if current_user.already_forked?(project) && current_user.forkable_namespaces.size < 2 user_fork_url = namespace_project_path(current_user, current_user.fork_of(project)) end { forks_count: project.forks_count, project_full_path: project.full_path, project_forks_url: project_forks_path(project), user_fork_url: user_fork_url, new_fork_url: new_project_fork_path(project), can_read_code: can?(current_user, :read_code, project).to_s, can_fork_project: can?(current_user, :fork_project, project).to_s, can_create_fork: can?(current_user, :create_fork).to_s } end |
#grafana_integration_enabled? ⇒ Boolean
384 385 386 |
# File 'app/helpers/projects_helper.rb', line 384 def grafana_integration_enabled? @project.grafana_integration&.enabled? end |
#grafana_integration_masked_token ⇒ Object
380 381 382 |
# File 'app/helpers/projects_helper.rb', line 380 def grafana_integration_masked_token @project.grafana_integration&.masked_token end |
#grafana_integration_url ⇒ Object
376 377 378 |
# File 'app/helpers/projects_helper.rb', line 376 def grafana_integration_url @project.grafana_integration&.grafana_url end |
#http_clone_url_to_repo(project) ⇒ Object
531 532 533 |
# File 'app/helpers/projects_helper.rb', line 531 def http_clone_url_to_repo(project) project.http_url_to_repo end |
#import_from_bitbucket_message ⇒ Object
478 479 480 |
# File 'app/helpers/projects_helper.rb', line 478 def ('Bitbucket', help_page_path("integration/bitbucket")) end |
#import_from_gitlab_message ⇒ Object
482 483 484 |
# File 'app/helpers/projects_helper.rb', line 482 def ('GitLab.com', help_page_path("integration/gitlab")) end |
#inactive_project_deletion_date(project) ⇒ Object
493 494 495 |
# File 'app/helpers/projects_helper.rb', line 493 def inactive_project_deletion_date(project) Gitlab::InactiveProjectsDeletionWarningTracker.new(project.id).scheduled_deletion_date end |
#last_pipeline_from_status_cache(project) ⇒ Object
224 225 226 227 228 229 230 231 232 233 234 |
# File 'app/helpers/projects_helper.rb', line 224 def last_pipeline_from_status_cache(project) if Feature.enabled?(:last_pipeline_from_pipeline_status, project) pipeline_status = project.pipeline_status return unless pipeline_status.has_status? # commits have far more attributes than id, but last_pipeline only requires sha return Commit.from_hash({ id: pipeline_status.sha }, project).last_pipeline end project.last_pipeline end |
#last_push_event ⇒ Object
185 186 187 |
# File 'app/helpers/projects_helper.rb', line 185 def last_push_event current_user&.recent_push(@project) end |
#link_to_autodeploy_doc ⇒ Object
189 190 191 |
# File 'app/helpers/projects_helper.rb', line 189 def link_to_autodeploy_doc link_to _('About auto deploy'), help_page_path('topics/autodevops/stages.md', anchor: 'auto-deploy'), target: '_blank', rel: 'noopener' end |
#link_to_member(project, author, opts = {}, &block) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'app/helpers/projects_helper.rb', line 57 def link_to_member(project, , opts = {}, &block) default_opts = { avatar: true, name: true, title: ":name" } opts = default_opts.merge(opts) return "(deleted)" unless data_attrs = { user_id: .id, username: .username, name: .name } inject_classes = ["author-link", opts[:extra_class]] if opts[:name] inject_classes.concat(["js-user-link", opts[:mobile_classes]]) else inject_classes.append("has-tooltip") end inject_classes = inject_classes.compact.join(" ") = [] # Build avatar image tag << link_to_member_avatar(, opts) if opts[:avatar] # Build name span tag << (, opts) if opts[:name] << capture(&block) if block = .join.html_safe if opts[:name] link_to(, user_path(), class: inject_classes, data: data_attrs).html_safe else title = opts[:title].sub(":name", sanitize(.name)) link_to(, user_path(), class: inject_classes, title: title, data: { container: 'body', qa_selector: 'assignee_link' }).html_safe end end |
#link_to_member_avatar(author, opts = {}) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'app/helpers/projects_helper.rb', line 26 def link_to_member_avatar(, opts = {}) default_opts = { size: 16 } opts = default_opts.merge(opts) classes = %W[avatar avatar-inline s#{opts[:size]}] classes << opts[:avatar_class] if opts[:avatar_class] avatar = avatar_icon_for_user(, opts[:size]) image_tag(avatar, width: opts[:size], class: classes, alt: '') end |
#link_to_project(project) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'app/helpers/projects_helper.rb', line 13 def link_to_project(project) link_to namespace_project_path(namespace_id: project.namespace, id: project), title: h(project.name), class: 'gl-link' do title = content_tag(:span, project.name, class: 'project-name') if project.namespace namespace = content_tag(:span, "#{project.namespace.human_name} / ", class: 'namespace-name') title = namespace + title end title end end |
#load_pipeline_status(projects) ⇒ Object
219 220 221 222 |
# File 'app/helpers/projects_helper.rb', line 219 def load_pipeline_status(projects) Gitlab::Cache::Ci::ProjectPipelineStatus .load_in_batch_for_projects(projects) end |
#localized_project_human_access(access) ⇒ Object
519 520 521 |
# File 'app/helpers/projects_helper.rb', line 519 def localized_project_human_access(access) localized_access_names[access] || Gitlab::Access.human_access(access) end |
#membership_locked? ⇒ Boolean
372 373 374 |
# File 'app/helpers/projects_helper.rb', line 372 def membership_locked? false end |
#no_password_message ⇒ Object
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 |
# File 'app/helpers/projects_helper.rb', line 262 def push_pull_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('topics/git/terminology', anchor: 'pull-and-push') } clone_with_https_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('gitlab-basics/start-using-git', anchor: 'clone-with-https') } set_password_link_start = '<a href="%{url}">'.html_safe % { url: edit_profile_password_path } set_up_pat_link_start = '<a href="%{url}">'.html_safe % { url: profile_personal_access_tokens_path } = if current_user.require_password_creation_for_git? _('Your account is authenticated with SSO or SAML. To %{push_pull_link_start}push and pull%{link_end} over %{protocol} with Git using this account, you must %{set_password_link_start}set a password%{link_end} or %{set_up_pat_link_start}set up a Personal Access Token%{link_end} to use instead of a password. For more information, see %{clone_with_https_link_start}Clone with HTTPS%{link_end}.') else _('Your account is authenticated with SSO or SAML. To %{push_pull_link_start}push and pull%{link_end} over %{protocol} with Git using this account, you must %{set_up_pat_link_start}set up a Personal Access Token%{link_end} to use instead of a password. For more information, see %{clone_with_https_link_start}Clone with HTTPS%{link_end}.') end html_escape() % { push_pull_link_start: push_pull_link_start, protocol: gitlab_config.protocol.upcase, clone_with_https_link_start: clone_with_https_link_start, set_password_link_start: set_password_link_start, set_up_pat_link_start: set_up_pat_link_start, link_end: '</a>'.html_safe } end |
#project_can_be_shared? ⇒ Boolean
368 369 370 |
# File 'app/helpers/projects_helper.rb', line 368 def project_can_be_shared? !membership_locked? || @project.allowed_to_share_with_group? end |
#project_classes(project) ⇒ Object
432 433 434 435 436 |
# File 'app/helpers/projects_helper.rb', line 432 def project_classes(project) return "project-highlight-puc" if project.warn_about_potentially_unwanted_characters? "" end |
#project_coverage_chart_data_attributes(daily_coverage_options, ref) ⇒ Object
509 510 511 512 513 514 515 516 517 |
# File 'app/helpers/projects_helper.rb', line 509 def project_coverage_chart_data_attributes(, ref) { graph_endpoint: "#{[:graph_api_path]}?#{[:base_params].to_query}", graph_start_date: [:base_params][:start_date].strftime('%b %d'), graph_end_date: [:base_params][:end_date].strftime('%b %d'), graph_ref: ref.to_s, graph_csv_path: "#{[:download_path]}?#{[:base_params].to_query}" } end |
#project_incident_management_setting ⇒ Object
8 9 10 11 |
# File 'app/helpers/projects_helper.rb', line 8 def project_incident_management_setting @project_incident_management_setting ||= @project.incident_management_setting || @project.build_incident_management_setting end |
#project_license_name(project) ⇒ Object
388 389 390 391 392 393 394 395 396 397 |
# File 'app/helpers/projects_helper.rb', line 388 def project_license_name(project) key = "project:#{project.id}:license_name" Gitlab::SafeRequestStore.fetch(key) { project.repository.license&.name } rescue GRPC::Unavailable, GRPC::DeadlineExceeded, Gitlab::Git::CommandError => e Gitlab::ErrorTracking.track_exception(e) Gitlab::SafeRequestStore[key] = nil nil end |
#project_list_cache_key(project, pipeline_status: true) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'app/helpers/projects_helper.rb', line 198 def project_list_cache_key(project, pipeline_status: true) key = [ project.star_count, project.route.cache_key, project.cache_key, project.last_activity_date, controller.controller_name, controller.action_name, Gitlab::CurrentSettings.cache_key, "cross-project:#{can?(current_user, :read_cross_project)}", max_project_member_access_cache_key(project), pipeline_status, Gitlab::I18n.locale, 'v2.6' ] key << pipeline_status_cache_key(project.pipeline_status) if pipeline_status && project.pipeline_status.has_status? key end |
#project_permissions_panel_data(project) ⇒ Object
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 |
# File 'app/helpers/projects_helper.rb', line 403 def (project) { packagesAvailable: ::Gitlab.config.packages.enabled, packagesHelpPath: help_page_path('user/packages/index'), currentSettings: (project), canAddCatalogResource: can_add_catalog_resource?(project), canChangeVisibilityLevel: can_change_visibility_level?(project, current_user), canDisableEmails: can_disable_emails?(project, current_user), allowedVisibilityOptions: project_allowed_visibility_levels(project), visibilityHelpPath: help_page_path('user/public_access'), registryAvailable: Gitlab.config.registry.enabled, registryHelpPath: help_page_path('user/packages/container_registry/index'), lfsAvailable: Gitlab.config.lfs.enabled, lfsHelpPath: help_page_path('topics/git/lfs/index'), lfsObjectsExist: project.lfs_objects.exists?, lfsObjectsRemovalHelpPath: help_page_path('topics/git/lfs/index', anchor: 'removing-objects-from-lfs'), pagesAvailable: Gitlab.config.pages.enabled, pagesAccessControlEnabled: Gitlab.config.pages.access_control, pagesAccessControlForced: ::Gitlab::Pages.access_control_is_forced?, pagesHelpPath: help_page_path('user/project/pages/introduction', anchor: 'gitlab-pages-access-control'), issuesHelpPath: help_page_path('user/project/issues/index'), membersPagePath: project_project_members_path(project), environmentsHelpPath: help_page_path('ci/environments/index'), featureFlagsHelpPath: help_page_path('operations/feature_flags'), releasesHelpPath: help_page_path('user/project/releases/index'), infrastructureHelpPath: help_page_path('user/infrastructure/index') } end |
#project_title(project) ⇒ Object
95 96 97 98 99 100 101 102 103 |
# File 'app/helpers/projects_helper.rb', line 95 def project_title(project) namespace_link = (project) project_link = (project) namespace_link = (namespace_link) unless project.group project_link = project_link "#{namespace_link} #{project_link}".html_safe end |
#push_to_create_project_command(user = current_user) ⇒ Object
306 307 308 309 310 311 312 313 314 315 |
# File 'app/helpers/projects_helper.rb', line 306 def push_to_create_project_command(user = current_user) repository_url = if Gitlab::CurrentSettings.current_application_settings.enabled_git_access_protocol == 'http' user_url(user) else Gitlab.config.gitlab_shell.ssh_path_prefix + user.username end "git push --set-upstream #{repository_url}/$(git rev-parse --show-toplevel | xargs basename).git $(git rev-parse --abbrev-ref HEAD)" end |
#remote_mirror_setting_enabled? ⇒ Boolean
527 528 529 |
# File 'app/helpers/projects_helper.rb', line 527 def remote_mirror_setting_enabled? false end |
#remove_fork_project_confirm_json(project, remove_form_id) ⇒ Object
162 163 164 165 166 167 168 169 |
# File 'app/helpers/projects_helper.rb', line 162 def remove_fork_project_confirm_json(project, remove_form_id) { remove_form_id: remove_form_id, button_text: _('Remove fork relationship'), confirm_danger_message: (project), phrase: @project.path } end |
#remove_fork_project_description_message(project) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'app/helpers/projects_helper.rb', line 115 def (project) source = visible_fork_source(project) if source msg = _('This will remove the fork relationship between this project and %{fork_source}.') % { fork_source: link_to(source.full_name, project_path(source)) } msg.html_safe else _('This will remove the fork relationship between this project and other projects in the fork network.') end end |
#remove_fork_project_warning_message(project) ⇒ Object
157 158 159 160 |
# File 'app/helpers/projects_helper.rb', line 157 def (project) _("You are going to remove the fork relationship from %{project_full_name}. Are you ABSOLUTELY sure?") % { project_full_name: project.full_name } end |
#remove_project_message(project) ⇒ Object
105 106 107 108 |
# File 'app/helpers/projects_helper.rb', line 105 def (project) _("You are going to delete %{project_full_name}. Deleted projects CANNOT be restored! Are you ABSOLUTELY sure?") % { project_full_name: project.full_name } end |
#show_auto_devops_implicitly_enabled_banner?(project, user) ⇒ Boolean
248 249 250 251 252 |
# File 'app/helpers/projects_helper.rb', line 248 def (project, user) return false unless (project, user) ["hide_auto_devops_implicitly_enabled_banner_#{project.id}".to_sym].blank? end |
#show_clusters_alert?(project) ⇒ Boolean
497 498 499 |
# File 'app/helpers/projects_helper.rb', line 497 def show_clusters_alert?(project) Gitlab.com? && can_admin_associated_clusters?(project) end |
#show_count?(disabled: false, compact_mode: false) ⇒ Boolean
331 332 333 |
# File 'app/helpers/projects_helper.rb', line 331 def show_count?(disabled: false, compact_mode: false) !disabled && !compact_mode end |
#show_inactive_project_deletion_banner?(project) ⇒ Boolean
486 487 488 489 490 491 |
# File 'app/helpers/projects_helper.rb', line 486 def (project) return false unless project.present? && project.saved? return false unless delete_inactive_projects? project.inactive? end |
#show_mobile_devops_project_promo?(project) ⇒ Boolean
254 255 256 257 258 259 260 |
# File 'app/helpers/projects_helper.rb', line 254 def show_mobile_devops_project_promo?(project) return false unless ::Feature.enabled?(:mobile_devops_projects_promo, project) return false unless (project.project_setting.target_platforms & ::ProjectSetting::ALLOWED_TARGET_PLATFORMS).any? ["hide_mobile_devops_promo_#{project.id}".to_sym].blank? end |
#show_no_password_message? ⇒ Boolean
243 244 245 246 |
# File 'app/helpers/projects_helper.rb', line 243 def [:hide_no_password_message].blank? && !current_user.hide_no_password && current_user.require_extra_setup_for_git_auth? end |
#show_no_ssh_key_message? ⇒ Boolean
236 237 238 239 240 241 |
# File 'app/helpers/projects_helper.rb', line 236 def Gitlab::CurrentSettings. && [:hide_no_ssh_message].blank? && !current_user.hide_no_ssh_key && current_user.require_ssh_key? end |
#show_projects?(projects, params) ⇒ Boolean
302 303 304 |
# File 'app/helpers/projects_helper.rb', line 302 def show_projects?(projects, params) !!(params[:personal] || params[:name] || params[:language] || any_projects?(projects)) end |
#show_terraform_banner?(project) ⇒ Boolean
399 400 401 |
# File 'app/helpers/projects_helper.rb', line 399 def (project) Feature.enabled?(:show_terraform_banner, type: :ops) && project.repository_languages.with_programming_language('HCL').exists? && project.terraform_states.empty? end |
#show_xcode_link?(project = @project) ⇒ Boolean
317 318 319 |
# File 'app/helpers/projects_helper.rb', line 317 def show_xcode_link?(project = @project) browser.platform.mac? && project.repository.xcode_project? end |
#ssh_clone_url_to_repo(project) ⇒ Object
535 536 537 |
# File 'app/helpers/projects_helper.rb', line 535 def ssh_clone_url_to_repo(project) project.ssh_url_to_repo end |
#transfer_project_message(project) ⇒ Object
110 111 112 113 |
# File 'app/helpers/projects_helper.rb', line 110 def (project) _("You are going to transfer %{project_full_name} to another namespace. Are you ABSOLUTELY sure?") % { project_full_name: project.full_name } end |
#visibility_level_content(project, css_class: nil, icon_css_class: nil) ⇒ Object
555 556 557 558 559 560 561 562 563 564 565 566 567 |
# File 'app/helpers/projects_helper.rb', line 555 def visibility_level_content(project, css_class: nil, icon_css_class: nil) if project.created_and_owned_by_banned_user? && Feature.enabled?(:hide_projects_of_banned_users) return hidden_resource_icon(project, css_class: css_class) end title = visibility_icon_description(project) container_class = ['has-tooltip', css_class].compact.join(' ') data = { container: 'body', placement: 'top' } content_tag(:span, class: container_class, data: data, title: title) do visibility_level_icon(project.visibility_level, options: { class: icon_css_class }) end end |
#visible_fork_source(project) ⇒ Object
171 172 173 |
# File 'app/helpers/projects_helper.rb', line 171 def visible_fork_source(project) project.fork_source if project.fork_source && can?(current_user, :read_project, project.fork_source) end |
#vue_fork_divergence_data(project, ref) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'app/helpers/projects_helper.rb', line 128 def vue_fork_divergence_data(project, ref) source_project = visible_fork_source(project) return {} unless source_project source_default_branch = source_project.default_branch merge_request = MergeRequest.opened .from_project(project).of_projects(source_project.id).from_source_branches(ref).first { project_path: project.full_path, selected_branch: ref, source_name: source_project.full_name, source_path: project_path(source_project), source_default_branch: source_default_branch, can_sync_branch: can_sync_branch?(project, ref).to_s, ahead_compare_path: project_compare_path( project, from: source_default_branch, to: ref, from_project_id: source_project.id ), create_mr_path: create_merge_request_path(project, source_project, ref, merge_request), view_mr_path: merge_request && project_merge_request_path(source_project, merge_request), behind_compare_path: project_compare_path( source_project, from: ref, to: source_default_branch, from_project_id: project.id ) } end |
#xcode_uri_to_repo(project = @project) ⇒ Object
321 322 323 |
# File 'app/helpers/projects_helper.rb', line 321 def xcode_uri_to_repo(project = @project) "xcode://clone?repo=#{CGI.escape(default_url_to_repo(project))}" end |