From 564050ec0ff4bd642e7d1963b185403042af5696 Mon Sep 17 00:00:00 2001 From: James Ramsay Date: Tue, 24 Apr 2018 12:51:39 +0200 Subject: Enable LFS setting UI for Masters and Owners LFS can be enabled and disabled per project using the API by Masters and Owners, but the UI is only available to Admins. The interface and API should be consistent. LFS can also be enabled and disabled per group using the API by Owners, but the UI is only available to Admins. This interface should also be consistent. Additionally removes an unneeded check if 2FA interface, since the interface is only available to Owners. Closes #33320 --- app/helpers/projects_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/helpers') diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 801e624e1de..eb81dc2de43 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -442,7 +442,7 @@ module ProjectsHelper visibilityHelpPath: help_page_path('public_access/public_access'), registryAvailable: Gitlab.config.registry.enabled, registryHelpPath: help_page_path('user/project/container_registry'), - lfsAvailable: Gitlab.config.lfs.enabled && current_user.admin?, + lfsAvailable: Gitlab.config.lfs.enabled, lfsHelpPath: help_page_path('workflow/lfs/manage_large_binaries_with_git_lfs') } -- cgit v1.2.3 From d224b59a769de823e868b115b4631e0cd2d8bb09 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Thu, 26 Apr 2018 15:12:39 -0500 Subject: update webpack manifest integration to recognize multi-chunk entrypoints --- app/helpers/webpack_helper.rb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index 8bcced70d63..8f0a3b5b190 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -1,8 +1,8 @@ -require 'webpack/rails/manifest' +require 'gitlab/webpack/manifest' module WebpackHelper def webpack_bundle_tag(bundle, force_same_domain: false) - javascript_include_tag(*gitlab_webpack_asset_paths(bundle, force_same_domain: force_same_domain)) + javascript_include_tag(*entrypoint_paths(bundle, force_same_domain: force_same_domain)) end def webpack_controller_bundle_tags @@ -18,23 +18,22 @@ module WebpackHelper until route.empty? begin - asset_paths = gitlab_webpack_asset_paths("pages.#{route.join('.')}", extension: 'js') + asset_paths = entrypoint_paths("pages.#{route.join('.')}", extension: 'js') bundles.unshift(*asset_paths) - rescue Webpack::Rails::Manifest::EntryPointMissingError + rescue Gitlab::Webpack::Manifest::AssetMissingError # no bundle exists for this path end route.pop end - javascript_include_tag(*bundles) + javascript_include_tag(*bundles.uniq) end - # override webpack-rails gem helper until changes can make it upstream - def gitlab_webpack_asset_paths(source, extension: nil, force_same_domain: false) + def entrypoint_paths(source, extension: nil, force_same_domain: false) return "" unless source.present? - paths = Webpack::Rails::Manifest.asset_paths(source) + paths = Gitlab::Webpack::Manifest.entrypoint_paths(source) if extension paths.select! { |p| p.ends_with? ".#{extension}" } end -- cgit v1.2.3 From 94a9c60eb9b557498849f62b136fcdc49e1d406f Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Fri, 27 Apr 2018 13:00:00 -0500 Subject: combine ancestor entrypoints into child entrypoints instead of importing bundles for each --- app/helpers/webpack_helper.rb | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index 8f0a3b5b190..2f556559c6b 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -6,7 +6,7 @@ module WebpackHelper end def webpack_controller_bundle_tags - bundles = [] + chunks = [] action = case controller.action_name when 'create' then 'new' @@ -15,19 +15,16 @@ module WebpackHelper end route = [*controller.controller_path.split('/'), action].compact + entrypoint = "pages.#{route.join('.')}" - until route.empty? - begin - asset_paths = entrypoint_paths("pages.#{route.join('.')}", extension: 'js') - bundles.unshift(*asset_paths) - rescue Gitlab::Webpack::Manifest::AssetMissingError - # no bundle exists for this path - end - - route.pop + begin + chunks = entrypoint_paths(entrypoint, extension: 'js') + rescue Gitlab::Webpack::Manifest::AssetMissingError + # no bundle exists for this path + chunks = entrypoint_paths("default", extension: 'js') end - javascript_include_tag(*bundles.uniq) + javascript_include_tag(*chunks) end def entrypoint_paths(source, extension: nil, force_same_domain: false) -- cgit v1.2.3 From b2d90ea1fb16ec4db441c86262191a093401b962 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Fri, 27 Apr 2018 17:09:05 -0500 Subject: ensure parent entrypoint is loaded if direct one is unavailable --- app/helpers/webpack_helper.rb | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index 2f556559c6b..30cd8c90008 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -15,12 +15,18 @@ module WebpackHelper end route = [*controller.controller_path.split('/'), action].compact - entrypoint = "pages.#{route.join('.')}" - begin - chunks = entrypoint_paths(entrypoint, extension: 'js') - rescue Gitlab::Webpack::Manifest::AssetMissingError - # no bundle exists for this path + until chunks.any? || route.empty? + entrypoint = "pages.#{route.join('.')}" + begin + chunks = entrypoint_paths(entrypoint, extension: 'js') + rescue Gitlab::Webpack::Manifest::AssetMissingError + # no bundle exists for this path + end + route.pop + end + + if chunks.empty? chunks = entrypoint_paths("default", extension: 'js') end -- cgit v1.2.3 From 9b33e3d36fcd46072b9fe83f1121fb0fd87c0fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20Reigel=20=28=20=F0=9F=8C=B4=20may=202nd=20-=20may?= =?UTF-8?q?=209th=20=F0=9F=8C=B4=20=29?= Date: Wed, 2 May 2018 08:08:16 +0000 Subject: Display and revoke active sessions --- app/helpers/active_sessions_helper.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 app/helpers/active_sessions_helper.rb (limited to 'app/helpers') diff --git a/app/helpers/active_sessions_helper.rb b/app/helpers/active_sessions_helper.rb new file mode 100644 index 00000000000..97b6dac67c5 --- /dev/null +++ b/app/helpers/active_sessions_helper.rb @@ -0,0 +1,23 @@ +module ActiveSessionsHelper + # Maps a device type as defined in `ActiveSession` to an svg icon name and + # outputs the icon html. + # + # see `DeviceDetector::Device::DEVICE_NAMES` about the available device types + def active_session_device_type_icon(active_session) + icon_name = + case active_session.device_type + when 'smartphone', 'feature phone', 'phablet' + 'mobile' + when 'tablet' + 'tablet' + when 'tv', 'smart display', 'camera', 'portable media player', 'console' + 'media' + when 'car browser' + 'car' + else + 'monitor-o' + end + + sprite_icon(icon_name, size: 16, css_class: 'prepend-top-2') + end +end -- cgit v1.2.3 From 9328c75e1a8a9ea8c08bd33ac875ac2ce46cbbad Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Thu, 3 May 2018 11:59:03 -0500 Subject: remove force_same_domain option from webpack helpers --- app/helpers/webpack_helper.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index 30cd8c90008..dfdbc0f8a77 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -1,8 +1,8 @@ require 'gitlab/webpack/manifest' module WebpackHelper - def webpack_bundle_tag(bundle, force_same_domain: false) - javascript_include_tag(*entrypoint_paths(bundle, force_same_domain: force_same_domain)) + def webpack_bundle_tag(bundle) + javascript_include_tag(*entrypoint_paths(bundle)) end def webpack_controller_bundle_tags @@ -33,7 +33,7 @@ module WebpackHelper javascript_include_tag(*chunks) end - def entrypoint_paths(source, extension: nil, force_same_domain: false) + def entrypoint_paths(source, extension: nil) return "" unless source.present? paths = Gitlab::Webpack::Manifest.entrypoint_paths(source) @@ -41,11 +41,9 @@ module WebpackHelper paths.select! { |p| p.ends_with? ".#{extension}" } end - unless force_same_domain - force_host = webpack_public_host - if force_host - paths.map! { |p| "#{force_host}#{p}" } - end + force_host = webpack_public_host + if force_host + paths.map! { |p| "#{force_host}#{p}" } end paths -- cgit v1.2.3 From b3734ec8112f53d1b60cce66e806967a0954b301 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Thu, 3 May 2018 15:13:35 -0500 Subject: prevent duplicate chunks from being loaded in webpack_helper --- app/helpers/webpack_helper.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index dfdbc0f8a77..01264f53a40 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -33,7 +33,7 @@ module WebpackHelper javascript_include_tag(*chunks) end - def entrypoint_paths(source, extension: nil) + def entrypoint_paths(source, extension: nil, exclude_duplicates: true) return "" unless source.present? paths = Gitlab::Webpack::Manifest.entrypoint_paths(source) @@ -46,7 +46,14 @@ module WebpackHelper paths.map! { |p| "#{force_host}#{p}" } end - paths + if exclude_duplicates + @used_paths ||= [] + new_paths = paths - @used_paths + @used_paths += new_paths + new_paths + else + paths + end end def webpack_public_host -- cgit v1.2.3 From 3d6d0a09b65f032bbe1bd5ad4736dd764195bbe1 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Tue, 24 Apr 2018 18:28:04 +0200 Subject: Store application wide terms This allows admins to define terms in the application settings. Every time the terms are adjusted, a new version is stored and becomes the 'active' version. This allows tracking which specific version was accepted by a user. --- app/helpers/application_settings_helper.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'app/helpers') diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 3fbb32c5229..1bf98d550b0 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -248,7 +248,9 @@ module ApplicationSettingsHelper :user_default_external, :user_oauth_applications, :version_check_enabled, - :allow_local_requests_from_hooks_and_services + :allow_local_requests_from_hooks_and_services, + :enforce_terms, + :terms ] end end -- cgit v1.2.3 From 17b25bd263edaae70d5dae5fb035f5c28f9bb0cd Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Wed, 25 Apr 2018 16:54:26 +0200 Subject: Make the user dropdown reusable We will reuse the the dropdown, but exclude some menu items based on permissions. So moving the menu to a partial, and adding checks for each menu item here. --- app/helpers/users_helper.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'app/helpers') diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 01af68088df..517268175e6 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -23,9 +23,31 @@ module UsersHelper profile_tabs.include?(tab) end + def current_user_menu_items + @current_user_menu_items ||= get_current_user_menu_items + end + + def current_user_menu?(item) + current_user_menu_items.include?(item) + end + private def get_profile_tabs [:activity, :groups, :contributed, :projects, :snippets] end + + def get_current_user_menu_items + items = [:help, :sign_out] + + if can?(current_user, :read_user, current_user) + items << :profile + end + + if can?(current_user, :update_user, current_user) + items << :settings + end + + items + end end -- cgit v1.2.3 From 10aa55a770c2985c22c92d17b8a7ea90b0a09085 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Fri, 27 Apr 2018 14:56:50 +0200 Subject: Allow a user to accept/decline terms When a user accepts, we store this in the agreements to keep track of which terms they accepted. We also update the flag on the user. --- app/helpers/users_helper.rb | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 517268175e6..e803cd3a8d8 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -38,13 +38,24 @@ module UsersHelper end def get_current_user_menu_items - items = [:help, :sign_out] + items = [] - if can?(current_user, :read_user, current_user) + items << :sign_out if current_user + + # TODO: Remove these conditions when the permissions are prevented in + # https://gitlab.com/gitlab-org/gitlab-ce/issues/45849 + terms_not_enforced = !Gitlab::CurrentSettings + .current_application_settings + .enforce_terms? + required_terms_accepted = terms_not_enforced || current_user.terms_accepted? + + items << :help if required_terms_accepted + + if can?(current_user, :read_user, current_user) && required_terms_accepted items << :profile end - if can?(current_user, :update_user, current_user) + if can?(current_user, :update_user, current_user) && required_terms_accepted items << :settings end -- cgit v1.2.3 From 5c2078838bb9de710f9025513c4b6ec664bba313 Mon Sep 17 00:00:00 2001 From: Mario de la Ossa Date: Thu, 26 Apr 2018 13:53:13 -0600 Subject: Backport of 4084-epics-username-autocomplete --- app/helpers/application_helper.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'app/helpers') diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 228c8d2e8f9..0069d1468b7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -332,4 +332,17 @@ module ApplicationHelper _('You are on a read-only GitLab instance.') end + + def autocomplete_data_sources(object, noteable_type) + return {} unless object && noteable_type + + { + members: members_project_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]), + issues: issues_project_autocomplete_sources_path(object), + merge_requests: merge_requests_project_autocomplete_sources_path(object), + labels: labels_project_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]), + milestones: milestones_project_autocomplete_sources_path(object), + commands: commands_project_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]) + } + end end -- cgit v1.2.3 From 1ef9e9c2aaaffb202f09bf6a245a01bfb5516b6e Mon Sep 17 00:00:00 2001 From: Dylan Griffith Date: Tue, 10 Apr 2018 11:28:21 +1000 Subject: Inline runner_path and runners_path helpers These were just shorthands for project_... and they will be confusing when introducing group runners so we should not have them (#10244) --- app/helpers/gitlab_routing_helper.rb | 8 -------- 1 file changed, 8 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb index 40073f714ee..61e12b0f31e 100644 --- a/app/helpers/gitlab_routing_helper.rb +++ b/app/helpers/gitlab_routing_helper.rb @@ -19,14 +19,6 @@ module GitlabRoutingHelper project_commits_path(project, ref_name, *args) end - def runners_path(project, *args) - project_runners_path(project, *args) - end - - def runner_path(runner, *args) - project_runner_path(@project, runner, *args) - end - def environment_path(environment, *args) project_environment_path(environment.project, environment, *args) end -- cgit v1.2.3 From 961255b107370a1350f91d0835cf0e849d237f7d Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Thu, 3 May 2018 15:19:21 +0100 Subject: Adds remote mirror table migration --- app/helpers/application_settings_helper.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app/helpers') diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 1bf98d550b0..b948e431882 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -250,7 +250,8 @@ module ApplicationSettingsHelper :version_check_enabled, :allow_local_requests_from_hooks_and_services, :enforce_terms, - :terms + :terms, + :mirror_available ] end end -- cgit v1.2.3 From d6cd6e9dc69e7a1440dbc8c5b1c15489a68ed51b Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Mon, 7 May 2018 11:19:54 -0500 Subject: add webpack_ prefix to entrypoint paths helper --- app/helpers/webpack_helper.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'app/helpers') diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index 01264f53a40..e12e4ba70e9 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -2,7 +2,7 @@ require 'gitlab/webpack/manifest' module WebpackHelper def webpack_bundle_tag(bundle) - javascript_include_tag(*entrypoint_paths(bundle)) + javascript_include_tag(*webpack_entrypoint_paths(bundle)) end def webpack_controller_bundle_tags @@ -19,7 +19,7 @@ module WebpackHelper until chunks.any? || route.empty? entrypoint = "pages.#{route.join('.')}" begin - chunks = entrypoint_paths(entrypoint, extension: 'js') + chunks = webpack_entrypoint_paths(entrypoint, extension: 'js') rescue Gitlab::Webpack::Manifest::AssetMissingError # no bundle exists for this path end @@ -27,13 +27,13 @@ module WebpackHelper end if chunks.empty? - chunks = entrypoint_paths("default", extension: 'js') + chunks = webpack_entrypoint_paths("default", extension: 'js') end javascript_include_tag(*chunks) end - def entrypoint_paths(source, extension: nil, exclude_duplicates: true) + def webpack_entrypoint_paths(source, extension: nil, exclude_duplicates: true) return "" unless source.present? paths = Gitlab::Webpack::Manifest.entrypoint_paths(source) -- cgit v1.2.3 From a9496c27c9bb2876b9d94bfbe33f252a931caa8f Mon Sep 17 00:00:00 2001 From: Dennis Tang Date: Mon, 7 May 2018 18:06:02 +0000 Subject: Resolve "Inform users of up to $500 offer for GCP account" --- app/helpers/clusters_helper.rb | 8 ++++++++ app/helpers/user_callouts_helper.rb | 5 +++++ 2 files changed, 13 insertions(+) (limited to 'app/helpers') diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb index 7e4eb06b99d..c24d340d184 100644 --- a/app/helpers/clusters_helper.rb +++ b/app/helpers/clusters_helper.rb @@ -2,4 +2,12 @@ module ClustersHelper def has_multiple_clusters?(project) false end + + def render_gcp_signup_offer + return unless show_gcp_signup_offer? + + content_tag :section, class: 'no-animate expanded' do + render 'projects/clusters/gcp_signup_offer_banner' + end + end end diff --git a/app/helpers/user_callouts_helper.rb b/app/helpers/user_callouts_helper.rb index 36abfaf19a5..da5fe25c07d 100644 --- a/app/helpers/user_callouts_helper.rb +++ b/app/helpers/user_callouts_helper.rb @@ -1,11 +1,16 @@ module UserCalloutsHelper GKE_CLUSTER_INTEGRATION = 'gke_cluster_integration'.freeze + GCP_SIGNUP_OFFER = 'gcp_signup_offer'.freeze def show_gke_cluster_integration_callout?(project) can?(current_user, :create_cluster, project) && !user_dismissed?(GKE_CLUSTER_INTEGRATION) end + def show_gcp_signup_offer? + !user_dismissed?(GCP_SIGNUP_OFFER) + end + private def user_dismissed?(feature_name) -- cgit v1.2.3