From 46cdc6f182b5182327ee6f9f194f43566f172e38 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Lopez Date: Fri, 2 Dec 2016 20:01:41 -0600 Subject: [PATCH 1/7] Changed the settings gear to a tab based on the design on issue #23007 (https://gitlab.com/gitlab-org/gitlab-ce/issues/23007) Corrected tests, added helpers and finders --- app/assets/javascripts/dispatcher.js.es6 | 14 ++--- .../javascripts/member_expiration_date.js | 10 +++- .../projects/deploy_keys_controller.rb | 4 ++ .../projects/group_links_controller.rb | 5 +- app/controllers/projects/hooks_controller.rb | 2 + .../projects/pipelines_settings_controller.rb | 9 +-- .../projects/project_members_controller.rb | 11 ++-- .../projects/protected_branches_controller.rb | 27 ++++----- app/controllers/projects/refs_controller.rb | 2 +- .../projects/runners_controller.rb | 14 +++++ .../projects/services_controller.rb | 2 +- .../projects/triggers_controller.rb | 3 +- .../projects/variables_controller.rb | 2 +- app/finders/project_members_finder.rb | 13 ++++ app/helpers/projects_helper.rb | 4 +- app/helpers/protected_branches_helper.rb | 13 ++++ app/views/layouts/nav/_project.html.haml | 28 ++++----- .../projects/deploy_keys/index.html.haml | 4 ++ app/views/projects/edit.html.haml | 3 + .../{index.html.haml => _index.html.haml} | 6 +- app/views/projects/hooks/index.html.haml | 5 ++ .../{show.html.haml => _show.html.haml} | 6 +- .../projects/project_members/index.html.haml | 5 ++ .../_create_protected_branch.html.haml | 2 +- .../{index.html.haml => _index.html.haml} | 8 +-- .../_protected_branch.html.haml | 2 +- app/views/projects/runners/index.html.haml | 60 ++++++++++++------- .../{index.html.haml => _index.html.haml} | 1 - app/views/projects/settings/_head.html.haml | 28 +++++++++ .../{index.html.haml => _index.html.haml} | 6 +- .../{index.html.haml => _index.html.haml} | 7 +-- ...ttings-gear-in-projects-etc-with-a-tab.yml | 4 ++ features/project/active_tab.feature | 16 ++--- features/steps/project/active_tab.rb | 24 ++++---- features/steps/shared/project_tab.rb | 6 +- spec/features/projects/badges/list_spec.rb | 2 +- spec/features/projects/group_links_spec.rb | 2 +- .../members/user_requests_access_spec.rb | 8 +-- .../access_control_ce_spec.rb | 8 +-- spec/features/protected_branches_spec.rb | 14 ++--- spec/features/variables_spec.rb | 2 +- 41 files changed, 241 insertions(+), 151 deletions(-) create mode 100644 app/finders/project_members_finder.rb create mode 100644 app/helpers/protected_branches_helper.rb rename app/views/projects/group_links/{index.html.haml => _index.html.haml} (94%) rename app/views/projects/pipelines_settings/{show.html.haml => _show.html.haml} (97%) rename app/views/projects/protected_branches/{index.html.haml => _index.html.haml} (86%) rename app/views/projects/services/{index.html.haml => _index.html.haml} (97%) create mode 100644 app/views/projects/settings/_head.html.haml rename app/views/projects/triggers/{index.html.haml => _index.html.haml} (96%) rename app/views/projects/variables/{index.html.haml => _index.html.haml} (74%) create mode 100644 changelogs/unreleased/23007-replace-settings-gear-in-projects-etc-with-a-tab.yml diff --git a/app/assets/javascripts/dispatcher.js.es6 b/app/assets/javascripts/dispatcher.js.es6 index 1e259a16f068..27f2b05ad2f4 100644 --- a/app/assets/javascripts/dispatcher.js.es6 +++ b/app/assets/javascripts/dispatcher.js.es6 @@ -194,14 +194,16 @@ new NotificationsDropdown(); break; case 'groups:group_members:index': - new gl.MemberExpirationDate(); + new gl.MemberExpirationDate('.js-access-expiration-date-groups'); new gl.Members(); new UsersSelect(); break; case 'projects:project_members:index': new gl.MemberExpirationDate(); + new gl.MemberExpirationDate('.js-access-expiration-date-groups'); new gl.Members(); new UsersSelect(); + new GroupsSelect(); break; case 'groups:new': case 'groups:edit': @@ -244,18 +246,14 @@ case 'projects:artifacts:browse': new BuildArtifacts(); break; - case 'projects:group_links:index': - new gl.MemberExpirationDate(); - new GroupsSelect(); - break; case 'search:show': new Search(); break; - case 'projects:protected_branches:index': + case 'projects:deploy_keys:index': new gl.ProtectedBranchCreate(); new gl.ProtectedBranchEditList(); break; - case 'projects:variables:index': + case 'projects:runners:index': new gl.ProjectVariables(); break; } @@ -327,11 +325,9 @@ case 'forks': case 'milestones': case 'project_members': - case 'deploy_keys': case 'builds': case 'hooks': case 'services': - case 'protected_branches': shortcut_handler = new ShortcutsNavigation(); } } diff --git a/app/assets/javascripts/member_expiration_date.js b/app/assets/javascripts/member_expiration_date.js index 7741cd297933..fded0881343c 100644 --- a/app/assets/javascripts/member_expiration_date.js +++ b/app/assets/javascripts/member_expiration_date.js @@ -5,12 +5,16 @@ // `js-clear-input` element, then show that element when there is a value in the // datepicker, and make clicking on that element clear the field. // - gl.MemberExpirationDate = function() { + gl.MemberExpirationDate = function(newSelector) { function toggleClearInput() { $(this).closest('.clearable-input').toggleClass('has-value', $(this).val() !== ''); } - var inputs = $('.js-access-expiration-date'); + var selector = '.js-access-expiration-date'; + if (typeof newSelector !== 'undefined' && newSelector !== '') { + selector = newSelector; + } + var inputs = $(selector); inputs.datepicker({ dateFormat: 'yy-mm-dd', @@ -24,7 +28,7 @@ inputs.next('.js-clear-input').on('click', function(event) { event.preventDefault(); - var input = $(this).closest('.clearable-input').find('.js-access-expiration-date'); + var input = $(this).closest('.clearable-input').find(selector); input.datepicker('setDate', null) .trigger('change'); toggleClearInput.call(input); diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index 529e0aa2d33e..c575c8dfc6ec 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -1,4 +1,5 @@ class Projects::DeployKeysController < Projects::ApplicationController + include ProtectedBranchesHelper respond_to :html # Authorize @@ -8,7 +9,10 @@ class Projects::DeployKeysController < Projects::ApplicationController def index @key = DeployKey.new + @protected_branch = @project.protected_branches.new + @protected_branches = @project.protected_branches.order(:name).page(params[:page]) set_index_vars + load_gon_index(@project) end def new diff --git a/app/controllers/projects/group_links_controller.rb b/app/controllers/projects/group_links_controller.rb index 9eaf26a0dbf9..7eef31fe86cf 100644 --- a/app/controllers/projects/group_links_controller.rb +++ b/app/controllers/projects/group_links_controller.rb @@ -4,10 +4,7 @@ class Projects::GroupLinksController < Projects::ApplicationController before_action :authorize_admin_project_member!, only: [:update] def index - @group_links = project.project_group_links.all - - @skip_groups = @group_links.pluck(:group_id) - @skip_groups << project.namespace_id unless project.personal? + redirect_to namespace_project_project_members_path(@project.namespace, @project) end def create diff --git a/app/controllers/projects/hooks_controller.rb b/app/controllers/projects/hooks_controller.rb index 0ae8ff98009a..c2173a54b9ee 100644 --- a/app/controllers/projects/hooks_controller.rb +++ b/app/controllers/projects/hooks_controller.rb @@ -9,6 +9,8 @@ class Projects::HooksController < Projects::ApplicationController def index @hooks = @project.hooks @hook = ProjectHook.new + + @services = @project.find_or_initialize_services end def create diff --git a/app/controllers/projects/pipelines_settings_controller.rb b/app/controllers/projects/pipelines_settings_controller.rb index 53ce23221edf..c7eb459e3d07 100644 --- a/app/controllers/projects/pipelines_settings_controller.rb +++ b/app/controllers/projects/pipelines_settings_controller.rb @@ -2,14 +2,7 @@ class Projects::PipelinesSettingsController < Projects::ApplicationController before_action :authorize_admin_pipeline! def show - @ref = params[:ref] || @project.default_branch || 'master' - - @badges = [Gitlab::Badge::Build::Status, - Gitlab::Badge::Coverage::Report] - - @badges.map! do |badge| - badge.new(@project, @ref).metadata - end + redirect_to namespace_project_runners_path(@project.namespace, @project) end def update diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index 3aec6f18e27a..b7e1383075fa 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -12,6 +12,12 @@ def index @project_members = @project.project_members @project_members = @project_members.non_invite unless can?(current_user, :admin_project, @project) + # Group links + @group_links = @project.project_group_links.all + + @skip_groups = @group_links.pluck(:group_id) + @skip_groups << @project.namespace_id unless @project.personal? + group = @project.group if group @@ -19,10 +25,7 @@ def index # invitee, it would make the following query return 0 rows since a NULL # user_id would be present in the subquery # See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values - # FIXME: This whole logic should be moved to a finder! - non_null_user_ids = @project_members.where.not(user_id: nil).select(:user_id) - group_members = group.group_members.where.not(user_id: non_null_user_ids) - group_members = group_members.non_invite unless can?(current_user, :admin_group, @group) + group_members = ProjectMembersFinder.new(@project_members, group).execute(current_user) end if params[:search].present? diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index 9a438d5512c7..bb1cda7eb95d 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -1,4 +1,5 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController + include ProtectedBranchesHelper # Authorize before_action :require_non_empty_project before_action :authorize_admin_project! @@ -8,17 +9,16 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController layout "project_settings" def index - @protected_branch = @project.protected_branches.new - load_gon_index + redirect_to namespace_project_deploy_keys_path(@project.namespace, @project) end def create @protected_branch = ::ProtectedBranches::CreateService.new(@project, current_user, protected_branch_params).execute if @protected_branch.persisted? - redirect_to namespace_project_protected_branches_path(@project.namespace, @project) + redirect_to_protected_branches else load_protected_branches - load_gon_index + load_gon_index(@project) render :index end end @@ -45,7 +45,7 @@ def destroy @protected_branch.destroy respond_to do |format| - format.html { redirect_to namespace_project_protected_branches_path } + format.html { redirect_to redirect_to_protected_branches } format.js { head :ok } end end @@ -66,15 +66,12 @@ def load_protected_branches @protected_branches = @project.protected_branches.order(:name).page(params[:page]) end - def access_levels_options - { - push_access_levels: ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, - merge_access_levels: ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } - } - end - - def load_gon_index - params = { open_branches: @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } - gon.push(params.merge(access_levels_options)) + def redirect_to_protected_branches + if Rails.application.routes.recognize_path(request.referer)[:controller] == 'projects/deploy_keys' + path = namespace_project_protected_branches_path(@project.namespace, @project) + else + path = namespace_project_deploy_keys_path(@project.namespace, @project) + end + redirect_to path end end diff --git a/app/controllers/projects/refs_controller.rb b/app/controllers/projects/refs_controller.rb index 3602b3d5e58d..0555d58a6d6c 100644 --- a/app/controllers/projects/refs_controller.rb +++ b/app/controllers/projects/refs_controller.rb @@ -25,7 +25,7 @@ def switch when "graphs_commits" commits_namespace_project_graph_path(@project.namespace, @project, @id) when "badges" - namespace_project_pipelines_settings_path(@project.namespace, @project, ref: @id) + namespace_project_runners_path(@project.namespace, @project, ref: @id) else namespace_project_commits_path(@project.namespace, @project, @id) end diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb index 53c36635efe1..0d51b6c0692d 100644 --- a/app/controllers/projects/runners_controller.rb +++ b/app/controllers/projects/runners_controller.rb @@ -10,6 +10,20 @@ def index assignable_for(project).ordered.page(params[:page]).per(20) @shared_runners = Ci::Runner.shared.active @shared_runners_count = @shared_runners.count(:all) + # Variables + @variable = Ci::Variable.new + # Triggers + @triggers = project.triggers + @trigger = Ci::Trigger.new + # Pipelines settings + @ref = params[:ref] || @project.default_branch || 'master' + + @badges = [Gitlab::Badge::Build::Status, + Gitlab::Badge::Coverage::Report] + + @badges.map! do |badge| + badge.new(@project, @ref).metadata + end end def edit diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index 30c2a5d99827..c6500ed409be 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -10,7 +10,7 @@ class Projects::ServicesController < Projects::ApplicationController layout "project_settings" def index - @services = @project.find_or_initialize_services + redirect_to namespace_project_hooks_path(@project.namespace, @project) end def edit diff --git a/app/controllers/projects/triggers_controller.rb b/app/controllers/projects/triggers_controller.rb index 92359745cec8..5000463f1290 100644 --- a/app/controllers/projects/triggers_controller.rb +++ b/app/controllers/projects/triggers_controller.rb @@ -4,8 +4,7 @@ class Projects::TriggersController < Projects::ApplicationController layout 'project_settings' def index - @triggers = project.triggers - @trigger = Ci::Trigger.new + redirect_to namespace_project_runners_path(@project.namespace, @project) end def create diff --git a/app/controllers/projects/variables_controller.rb b/app/controllers/projects/variables_controller.rb index 6f0687293907..27cd69ae48fc 100644 --- a/app/controllers/projects/variables_controller.rb +++ b/app/controllers/projects/variables_controller.rb @@ -4,7 +4,7 @@ class Projects::VariablesController < Projects::ApplicationController layout 'project_settings' def index - @variable = Ci::Variable.new + redirect_to namespace_project_runners_path(@project.namespace, @project) end def show diff --git a/app/finders/project_members_finder.rb b/app/finders/project_members_finder.rb new file mode 100644 index 000000000000..10f9403a8189 --- /dev/null +++ b/app/finders/project_members_finder.rb @@ -0,0 +1,13 @@ +class ProjectMembersFinder < Projects::ApplicationController + def initialize(project_members, project_group) + @project_members = project_members + @project_group = project_group + end + + def execute(current_user) + non_null_user_ids = @project_members.where.not(user_id: nil).select(:user_id) + group_members = @project_group.group_members.where.not(user_id: non_null_user_ids) + group_members = group_members.non_invite unless can?(current_user, :admin_group, @project_group) + group_members + end +end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index d2177f683a1a..661519df2887 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -187,9 +187,7 @@ def get_project_nav_tabs(project, current_user) nav_tabs << :environments end - if can?(current_user, :admin_project, project) - nav_tabs << :settings - end + nav_tabs << :settings if can?(current_user, :read_project_member, project) nav_tabs << :team diff --git a/app/helpers/protected_branches_helper.rb b/app/helpers/protected_branches_helper.rb new file mode 100644 index 000000000000..7f476807996f --- /dev/null +++ b/app/helpers/protected_branches_helper.rb @@ -0,0 +1,13 @@ +module ProtectedBranchesHelper + def access_levels_options + { + push_access_levels: ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, + merge_access_levels: ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } + } + end + + def load_gon_index(project) + params = { open_branches: project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } + gon.push(params.merge(access_levels_options)) + end +end diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 904d11c2cf4d..60bdfcae8cb7 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -1,19 +1,4 @@ -- if current_user - .controls - .dropdown.project-settings-dropdown - %a.dropdown-new.btn.btn-default#project-settings-button{href: '#', 'data-toggle' => 'dropdown'} - = icon('cog') - = icon('caret-down') - %ul.dropdown-menu.dropdown-menu-align-right - - can_edit = can?(current_user, :admin_project, @project) - - = render 'layouts/nav/project_settings', can_edit: can_edit - - - if can_edit - %li.divider - %li - = link_to edit_project_path(@project) do - Edit Project +- can_edit = can?(current_user, :admin_project, @project) .scrolling-tabs-container{ class: nav_control_class } .fade-left @@ -82,6 +67,17 @@ %span Snippets + - if project_nav_tab? :settings + = nav_link(path: ['projects#edit', 'project_members#index', 'hooks#index', 'deploy_keys#index', 'runners#index']) do + - if can_edit + = link_to edit_project_path(@project), title: 'Settings', class: 'shortcuts-tree' do + %span + Settings + - else + = link_to namespace_project_project_members_path(@project.namespace, @project), title: 'Settings', class: 'shortcuts-tree' do + %span + Settings + -# Global shortcut to network page for compatibility - if project_nav_tab? :network %li.hidden diff --git a/app/views/projects/deploy_keys/index.html.haml b/app/views/projects/deploy_keys/index.html.haml index 04fbb37d93fa..eb4f58a694f6 100644 --- a/app/views/projects/deploy_keys/index.html.haml +++ b/app/views/projects/deploy_keys/index.html.haml @@ -1,4 +1,5 @@ - page_title "Deploy Keys" += render "projects/settings/head" .row.prepend-top-default .col-lg-3.profile-settings-sidebar @@ -34,3 +35,6 @@ Public deploy keys available to any project (#{@available_public_keys.size}) %ul.well-list = render @available_public_keys + +%hr + = render 'projects/protected_branches/index' diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 38e7fc4279ca..5e4744104331 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -1,3 +1,6 @@ +- page_title "Settings" += render "projects/settings/head" + .project-edit-container .row.prepend-top-default .col-lg-3.profile-settings-sidebar diff --git a/app/views/projects/group_links/index.html.haml b/app/views/projects/group_links/_index.html.haml similarity index 94% rename from app/views/projects/group_links/index.html.haml rename to app/views/projects/group_links/_index.html.haml index 1b0dbbb8111a..8949fef4e240 100644 --- a/app/views/projects/group_links/index.html.haml +++ b/app/views/projects/group_links/_index.html.haml @@ -1,5 +1,5 @@ -- page_title "Groups" -.row.prepend-top-default + +.row.prepend-top-default.project-groups .col-lg-3.settings-sidebar %h4.prepend-top-0 Share project with other groups @@ -20,7 +20,7 @@ .form-group = label_tag :expires_at, 'Access expiration date', class: 'label-light' .clearable-input - = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Select access expiration date' + = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date-groups', placeholder: 'Select access expiration date', id:'group-expiration' %i.clear-icon.js-clear-input .help-block On this date, all users in the group will automatically lose access to this project. diff --git a/app/views/projects/hooks/index.html.haml b/app/views/projects/hooks/index.html.haml index 8faad351463a..fd99cb857b97 100644 --- a/app/views/projects/hooks/index.html.haml +++ b/app/views/projects/hooks/index.html.haml @@ -1 +1,6 @@ += render "projects/settings/head" = render 'shared/web_hooks/form', hook: @hook, hooks: @hooks, url_components: [@project.namespace.becomes(Namespace), @project] + +%hr + += render "projects/services/index" diff --git a/app/views/projects/pipelines_settings/show.html.haml b/app/views/projects/pipelines_settings/_show.html.haml similarity index 97% rename from app/views/projects/pipelines_settings/show.html.haml rename to app/views/projects/pipelines_settings/_show.html.haml index 1f698558bce5..4a01c9f099d4 100644 --- a/app/views/projects/pipelines_settings/show.html.haml +++ b/app/views/projects/pipelines_settings/_show.html.haml @@ -1,9 +1,8 @@ -- page_title "CI/CD Pipelines" .row.prepend-top-default .col-lg-3.profile-settings-sidebar %h4.prepend-top-0 - = page_title + CI/CD Pipelines .col-lg-9 = form_for @project, url: namespace_project_pipelines_settings_path(@project.namespace.becomes(Namespace), @project) do |f| %fieldset.builds-feature @@ -93,6 +92,5 @@ = f.submit 'Save changes', class: "btn btn-save" %hr - .row.prepend-top-default - = render partial: 'badge', collection: @badges + = render partial: 'projects/pipelines_settings/badge', collection: @badges diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 4f1cec20f857..f328bfe13b5a 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -1,4 +1,5 @@ - page_title "Members" += render "projects/settings/head" .project-members-page.prepend-top-default %h4.project-members-title.clearfix @@ -27,3 +28,7 @@ = render 'team', members: @project_members = paginate @project_members, theme: "gitlab" + +- if can?(current_user, :admin_project, @project) + %hr + = render "projects/group_links/index" diff --git a/app/views/projects/protected_branches/_create_protected_branch.html.haml b/app/views/projects/protected_branches/_create_protected_branch.html.haml index e95a3b1b4c36..b8e885b4d9a7 100644 --- a/app/views/projects/protected_branches/_create_protected_branch.html.haml +++ b/app/views/projects/protected_branches/_create_protected_branch.html.haml @@ -10,7 +10,7 @@ = f.label :name, class: 'col-md-2 text-right' do Branch: .col-md-10 - = render partial: "dropdown", locals: { f: f } + = render partial: "projects/protected_branches/dropdown", locals: { f: f } .help-block = link_to 'Wildcards', help_page_path('user/project/protected_branches', anchor: 'wildcard-protected-branches') such as diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/_index.html.haml similarity index 86% rename from app/views/projects/protected_branches/index.html.haml rename to app/views/projects/protected_branches/_index.html.haml index 42e9bdbd30eb..642a32a09909 100644 --- a/app/views/projects/protected_branches/index.html.haml +++ b/app/views/projects/protected_branches/_index.html.haml @@ -1,11 +1,11 @@ -- page_title "Protected branches" + - content_for :page_specific_javascripts do = page_specific_javascript_tag('protected_branches/protected_branches_bundle.js') .row.prepend-top-default.append-bottom-default .col-lg-3 %h4.prepend-top-0 - = page_title + Protected Branches %p Keep stable branches secure and force developers to use merge requests. %p.prepend-top-20 By default, protected branches are designed to: @@ -17,6 +17,6 @@ %p.append-bottom-0 Read more about #{link_to "protected branches", help_page_path("user/project/protected_branches"), class: "underlined-link"} and #{link_to "project permissions", help_page_path("user/permissions"), class: "underlined-link"}. .col-lg-9 - if can? current_user, :admin_project, @project - = render 'create_protected_branch' + = render 'projects/protected_branches/create_protected_branch' - = render "branches_list" + = render "projects/protected_branches/branches_list" diff --git a/app/views/projects/protected_branches/_protected_branch.html.haml b/app/views/projects/protected_branches/_protected_branch.html.haml index 0193800dedfd..b2a6b8469a35 100644 --- a/app/views/projects/protected_branches/_protected_branch.html.haml +++ b/app/views/projects/protected_branches/_protected_branch.html.haml @@ -14,7 +14,7 @@ - else (branch was removed from repository) - = render partial: 'update_protected_branch', locals: { protected_branch: protected_branch } + = render partial: 'projects/protected_branches/update_protected_branch', locals: { protected_branch: protected_branch } - if can_admin_project %td diff --git a/app/views/projects/runners/index.html.haml b/app/views/projects/runners/index.html.haml index 92957470070c..5baa7bb10235 100644 --- a/app/views/projects/runners/index.html.haml +++ b/app/views/projects/runners/index.html.haml @@ -1,27 +1,43 @@ - page_title "Runners" += render "projects/settings/head" + +.row.prepend-top-default.append-bottom-default + .col-lg-3 + %h4.prepend-top-0 + Runners + .col-lg-9 + .light.prepend-top-default + %p + A 'Runner' is a process which runs a build. + You can setup as many Runners as you need. + %br + Runners can be placed on separate users, servers, and even on your local machine. + + %p Each Runner can be in one of the following states: + %div + %ul + %li + %span.label.label-success active + \- Runner is active and can process any new builds + %li + %span.label.label-danger paused + \- Runner is paused and will not receive any new builds + + %hr + + %p.lead To start serving your builds you can either add specific Runners to your project or use shared Runners + .row + .col-sm-6 + = render 'specific_runners' + .col-sm-6 + = render 'shared_runners' -.light.prepend-top-default - %p - A 'Runner' is a process which runs a build. - You can setup as many Runners as you need. - %br - Runners can be placed on separate users, servers, and even on your local machine. - - %p Each Runner can be in one of the following states: - %div - %ul - %li - %span.label.label-success active - \- Runner is active and can process any new builds - %li - %span.label.label-danger paused - \- Runner is paused and will not receive any new builds %hr + = render 'projects/variables/index' -%p.lead To start serving your builds you can either add specific Runners to your project or use shared Runners -.row - .col-sm-6 - = render 'specific_runners' - .col-sm-6 - = render 'shared_runners' +%hr + = render 'projects/triggers/index' + +%hr + = render 'projects/pipelines_settings/show' diff --git a/app/views/projects/services/index.html.haml b/app/views/projects/services/_index.html.haml similarity index 97% rename from app/views/projects/services/index.html.haml rename to app/views/projects/services/_index.html.haml index 66fd3029dc9a..e62994bec355 100644 --- a/app/views/projects/services/index.html.haml +++ b/app/views/projects/services/_index.html.haml @@ -1,4 +1,3 @@ -- page_title "Services" .row.prepend-top-default.append-bottom-default .col-lg-3 diff --git a/app/views/projects/settings/_head.html.haml b/app/views/projects/settings/_head.html.haml new file mode 100644 index 000000000000..e3bf4caceb55 --- /dev/null +++ b/app/views/projects/settings/_head.html.haml @@ -0,0 +1,28 @@ += content_for :sub_nav do + .scrolling-tabs-container.sub-nav-scroll + = render 'shared/nav_scroll' + .nav-links.sub-nav.scrolling-tabs + %ul{ class: (container_class) } + - can_edit = can?(current_user, :admin_project, @project) + -if can_edit + = nav_link(path: 'projects#edit') do + = link_to edit_project_path(@project), title: 'General' do + %span + General + = nav_link(path: 'project_members#index') do + = link_to namespace_project_project_members_path(@project.namespace, @project), title: 'Community' do + %span + Members + -if can_edit + = nav_link(path: 'hooks#index') do + = link_to namespace_project_hooks_path(@project.namespace, @project), title: 'Connections' do + %span + Integrations + = nav_link(path: 'deploy_keys#index') do + = link_to namespace_project_deploy_keys_path(@project.namespace, @project), title: 'Permissions' do + %span + Repository + = nav_link(path: 'runners#index') do + = link_to namespace_project_runners_path(@project.namespace, @project), title: 'Automation' do + %span + Automation / CI diff --git a/app/views/projects/triggers/index.html.haml b/app/views/projects/triggers/_index.html.haml similarity index 96% rename from app/views/projects/triggers/index.html.haml rename to app/views/projects/triggers/_index.html.haml index 6e5dd1b196dd..98b8714eaa96 100644 --- a/app/views/projects/triggers/index.html.haml +++ b/app/views/projects/triggers/_index.html.haml @@ -1,9 +1,7 @@ -- page_title "Triggers" - .row.prepend-top-default.append-bottom-default .col-lg-3 %h4.prepend-top-0 - = page_title + Triggers %p.prepend-top-20 Triggers can force a specific branch or tag to get rebuilt with an API call. %p.append-bottom-0 @@ -25,7 +23,7 @@ %th %strong Last used %th - = render partial: 'trigger', collection: @triggers, as: :trigger + = render partial: 'projects/triggers/trigger', collection: @triggers, as: :trigger - else %p.settings-message.text-center.append-bottom-default No triggers have been created yet. Add one using the button below. diff --git a/app/views/projects/variables/index.html.haml b/app/views/projects/variables/_index.html.haml similarity index 74% rename from app/views/projects/variables/index.html.haml rename to app/views/projects/variables/_index.html.haml index 393037001318..de9920c4ea98 100644 --- a/app/views/projects/variables/index.html.haml +++ b/app/views/projects/variables/_index.html.haml @@ -1,12 +1,11 @@ -- page_title "Variables" .row.prepend-top-default.append-bottom-default .col-lg-3 - = render "content" + = render "projects/variables/content" .col-lg-9 %h5.prepend-top-0 Add a variable - = render "form", btn_text: "Add new variable" + = render "projects/variables/form", btn_text: "Add new variable" %hr %h5.prepend-top-0 Your variables (#{@project.variables.size}) @@ -14,5 +13,5 @@ %p.settings-message.text-center.append-bottom-0 No variables found, add one with the form above. - else - = render "table" + = render "projects/variables/table" %button.btn.btn-info.js-btn-toggle-reveal-values{"data-status" => 'hidden'} Reveal Values diff --git a/changelogs/unreleased/23007-replace-settings-gear-in-projects-etc-with-a-tab.yml b/changelogs/unreleased/23007-replace-settings-gear-in-projects-etc-with-a-tab.yml new file mode 100644 index 000000000000..a6db7a0ea62a --- /dev/null +++ b/changelogs/unreleased/23007-replace-settings-gear-in-projects-etc-with-a-tab.yml @@ -0,0 +1,4 @@ +--- +title: Replaced the settings gear button with a tab and corresponding subtabs +merge_request: +author: diff --git a/features/project/active_tab.feature b/features/project/active_tab.feature index 57dda9c2234f..cde196a37a83 100644 --- a/features/project/active_tab.feature +++ b/features/project/active_tab.feature @@ -41,22 +41,22 @@ Feature: Project Active Tab Scenario: On Project Settings/Hooks Given I visit my project's settings page - And I click the "Hooks" tab - Then the active sub nav should be Hooks - And no other sub navs should be active + And I click the "Integrations" tab + Then the active sub tab should be Integrations + And no other sub tabs should be active And the active main tab should be Settings Scenario: On Project Settings/Deploy Keys Given I visit my project's settings page - And I click the "Deploy Keys" tab - Then the active sub nav should be Deploy Keys - And no other sub navs should be active + And I click the "Repository" tab + Then the active sub tab should be Repository + And no other sub tabs should be active And the active main tab should be Settings Scenario: On Project Members Given I visit my project's members page - Then the active sub nav should be Members - And no other sub navs should be active + Then the active sub tab should be Members + And no other sub tabs should be active And the active main tab should be Settings # Sub Tabs: Repository diff --git a/features/steps/project/active_tab.rb b/features/steps/project/active_tab.rb index 582250328594..aad195b31107 100644 --- a/features/steps/project/active_tab.rb +++ b/features/steps/project/active_tab.rb @@ -27,24 +27,28 @@ class Spinach::Features::ProjectActiveTab < Spinach::FeatureSteps end end - step 'I click the "Hooks" tab' do - click_link('Webhooks') + step 'I click the "Integrations" tab' do + page.within '.sub-nav' do + click_link('Integrations') + end end - step 'I click the "Deploy Keys" tab' do - click_link('Deploy Keys') + step 'I click the "Repository" tab' do + page.within '.sub-nav' do + click_link('Repository') + end end - step 'the active sub nav should be Members' do - ensure_active_sub_nav('Members') + step 'the active sub tab should be Members' do + ensure_active_sub_tab('Members') end - step 'the active sub nav should be Hooks' do - ensure_active_sub_nav('Webhooks') + step 'the active sub tab should be Integrations' do + ensure_active_sub_tab('Integrations') end - step 'the active sub nav should be Deploy Keys' do - ensure_active_sub_nav('Deploy Keys') + step 'the active sub tab should be Repository' do + ensure_active_sub_tab('Repository') end # Sub Tabs: Commits diff --git a/features/steps/shared/project_tab.rb b/features/steps/shared/project_tab.rb index d6024212601f..cdc89e3a67d3 100644 --- a/features/steps/shared/project_tab.rb +++ b/features/steps/shared/project_tab.rb @@ -20,8 +20,8 @@ module SharedProjectTab ensure_active_main_tab('Issues') end - step 'the active main tab should be Members' do - ensure_active_main_tab('Members') + step 'the active sub tab should be Members' do + ensure_active_sub_tab('Members') end step 'the active main tab should be Merge Requests' do @@ -37,7 +37,7 @@ module SharedProjectTab end step 'the active main tab should be Settings' do - expect(page).to have_selector('.layout-nav .nav-links > li.active', count: 0) + ensure_active_main_tab('Settings') end step 'the active main tab should be Activity' do diff --git a/spec/features/projects/badges/list_spec.rb b/spec/features/projects/badges/list_spec.rb index 67a4a5d1ab13..752eeec80f10 100644 --- a/spec/features/projects/badges/list_spec.rb +++ b/spec/features/projects/badges/list_spec.rb @@ -6,7 +6,7 @@ project = create(:project) project.team << [user, :master] login_as(user) - visit namespace_project_pipelines_settings_path(project.namespace, project) + visit namespace_project_runners_path(project.namespace, project) end scenario 'user wants to see build status badge' do diff --git a/spec/features/projects/group_links_spec.rb b/spec/features/projects/group_links_spec.rb index 1a71a03fbd9f..0f8668707ff1 100644 --- a/spec/features/projects/group_links_spec.rb +++ b/spec/features/projects/group_links_spec.rb @@ -17,7 +17,7 @@ visit namespace_project_group_links_path(project.namespace, project) select2 group.id, from: '#link_group_id' - fill_in 'expires_at', with: (Time.current + 4.5.days).strftime('%Y-%m-%d') + find(:css, "#group-expiration").set((Time.current + 4.5.days).strftime('%Y-%m-%d')) page.find('body').click click_on 'Share' end diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb index 97c42bd7f017..bf0c9ec8ab8e 100644 --- a/spec/features/projects/members/user_requests_access_spec.rb +++ b/spec/features/projects/members/user_requests_access_spec.rb @@ -35,12 +35,10 @@ click_link 'Request Access' expect(project.requesters.exists?(user_id: user)).to be_truthy + click_link 'Settings' - open_project_settings_menu - click_link 'Members' - - visit namespace_project_project_members_path(project.namespace, project) - page.within('.content') do + # The settings tab takes us to members by default if we lack permissions + page.within(".content") do expect(page).not_to have_content(user.name) end end diff --git a/spec/features/protected_branches/access_control_ce_spec.rb b/spec/features/protected_branches/access_control_ce_spec.rb index 395c61a47438..7f0c6de1d3ee 100644 --- a/spec/features/protected_branches/access_control_ce_spec.rb +++ b/spec/features/protected_branches/access_control_ce_spec.rb @@ -1,7 +1,7 @@ RSpec.shared_examples "protected branches > access control > CE" do ProtectedBranch::PushAccessLevel.human_access_levels.each do |(access_type_id, access_type_name)| it "allows creating protected branches that #{access_type_name} can push to" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('master') within('.new_protected_branch') do allowed_to_push_button = find(".js-allowed-to-push") @@ -18,7 +18,7 @@ end it "allows updating protected branches so that #{access_type_name} can push to them" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('master') click_on "Protect" @@ -36,7 +36,7 @@ ProtectedBranch::MergeAccessLevel.human_access_levels.each do |(access_type_id, access_type_name)| it "allows creating protected branches that #{access_type_name} can merge to" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('master') within('.new_protected_branch') do allowed_to_merge_button = find(".js-allowed-to-merge") @@ -53,7 +53,7 @@ end it "allows updating protected branches so that #{access_type_name} can merge to them" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('master') click_on "Protect" diff --git a/spec/features/protected_branches_spec.rb b/spec/features/protected_branches_spec.rb index 1a3f7b970f6c..8b32f0d0d599 100644 --- a/spec/features/protected_branches_spec.rb +++ b/spec/features/protected_branches_spec.rb @@ -17,7 +17,7 @@ def set_protected_branch_name(branch_name) describe "explicit protected branches" do it "allows creating explicit protected branches" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('some-branch') click_on "Protect" @@ -30,7 +30,7 @@ def set_protected_branch_name(branch_name) commit = create(:commit, project: project) project.repository.add_branch(user, 'some-branch', commit.id) - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('some-branch') click_on "Protect" @@ -38,7 +38,7 @@ def set_protected_branch_name(branch_name) end it "displays an error message if the named branch does not exist" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('some-branch') click_on "Protect" @@ -48,7 +48,7 @@ def set_protected_branch_name(branch_name) describe "wildcard protected branches" do it "allows creating protected branches with a wildcard" do - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('*-stable') click_on "Protect" @@ -61,7 +61,7 @@ def set_protected_branch_name(branch_name) project.repository.add_branch(user, 'production-stable', 'master') project.repository.add_branch(user, 'staging-stable', 'master') - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('*-stable') click_on "Protect" @@ -73,11 +73,11 @@ def set_protected_branch_name(branch_name) project.repository.add_branch(user, 'staging-stable', 'master') project.repository.add_branch(user, 'development', 'master') - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) set_protected_branch_name('*-stable') click_on "Protect" - visit namespace_project_protected_branches_path(project.namespace, project) + visit namespace_project_deploy_keys_path(project.namespace, project) click_on "2 matching branches" within(".protected-branches-list") do diff --git a/spec/features/variables_spec.rb b/spec/features/variables_spec.rb index ff30ffd78206..fa7b90dfd480 100644 --- a/spec/features/variables_spec.rb +++ b/spec/features/variables_spec.rb @@ -10,7 +10,7 @@ project.team << [user, :master] project.variables << variable - visit namespace_project_variables_path(project.namespace, project) + visit namespace_project_runners_path(project.namespace, project) end it 'shows list of variables' do -- GitLab From 314ec191cd8fda83c4cbcc4538d387d67545722b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20Vargas=20L=C3=B3pez?= Date: Wed, 14 Dec 2016 16:27:39 -0600 Subject: [PATCH 2/7] Fixed project members view with a more columnised design --- app/assets/stylesheets/pages/members.scss | 14 +++++++++-- .../_new_project_member.html.haml | 9 ++++--- .../projects/project_members/_team.html.haml | 5 ++++ .../projects/project_members/index.html.haml | 25 ++++++++++++------- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index 36ee5d17211a..ad21c502f04e 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -99,6 +99,7 @@ @media (min-width: $screen-sm-min) { width: 350px; + margin-bottom: 2px; } &.input-short { @@ -115,8 +116,8 @@ .member-search-btn { position: absolute; - right: 4px; - top: 0; + right: 4px; //right:0; + top: -2px; height: 35px; padding-left: 10px; padding-right: 10px; @@ -129,3 +130,12 @@ right: 160px; } } + + +@media (min-width: $screen-sm-min) { + .member-search-form { + .form-group { + display: block; + } + } +} diff --git a/app/views/projects/project_members/_new_project_member.html.haml b/app/views/projects/project_members/_new_project_member.html.haml index 79dcd7a6ee9a..28e7419cc952 100644 --- a/app/views/projects/project_members/_new_project_member.html.haml +++ b/app/views/projects/project_members/_new_project_member.html.haml @@ -1,17 +1,17 @@ = form_for @project_member, as: :project_member, url: namespace_project_project_members_path(@project.namespace, @project), html: { class: 'users-project-form' } do |f| .row - .col-md-4.col-lg-6 + .col-md-5.col-lg-5 = users_select_tag(:user_ids, multiple: true, class: "input-clamp", scope: :all, email_user: true) .help-block.append-bottom-10 Search for users by name, username, or email, or invite new ones using their email address. - .col-md-3.col-lg-2 + .col-md-2.col-lg-2 = select_tag :access_level, options_for_select(ProjectMember.access_level_roles, @project_member.access_level), class: "form-control project-access-select" .help-block.append-bottom-10 = link_to "Read more", help_page_path("user/permissions"), class: "vlink" about role permissions - .col-md-3.col-lg-2 + .col-md-2 .clearable-input = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Expiration date' %i.clear-icon.js-clear-input @@ -20,3 +20,6 @@ .col-md-2 = f.submit "Add to project", class: "btn btn-create btn-block" + + .col-md-1 + = link_to "Import", import_namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-default hidden-xs pull-right", title: "Import members from another project" diff --git a/app/views/projects/project_members/_team.html.haml b/app/views/projects/project_members/_team.html.haml index c1e894d8f40f..7995cce5fd6e 100644 --- a/app/views/projects/project_members/_team.html.haml +++ b/app/views/projects/project_members/_team.html.haml @@ -3,5 +3,10 @@ Users with access to %strong #{@project.name} %span.badge= @project_members.total_count + = form_tag namespace_project_project_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do + .form-group + = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } + %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } + = icon("search") %ul.content-list = render partial: 'shared/members/member', collection: members, as: :member diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index f328bfe13b5a..8eece7d50135 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -1,18 +1,25 @@ - page_title "Members" = render "projects/settings/head" -.project-members-page.prepend-top-default - %h4.project-members-title.clearfix - Members - = link_to "Import", import_namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-default pull-right hidden-xs", title: "Import members from another project" - - if can?(current_user, :admin_project_member, @project) - .project-members-new.append-bottom-default - %p.clearfix +.row.prepend-top-default.append-bottom-default + .col-lg-3 + %h4.prepend-top-0 + Members + - if can?(current_user, :admin_project_member, @project) + %p Add new user to %strong= @project.name - = render "new_project_member" + .col-lg-9 + .light.prepend-top-default + - if can?(current_user, :admin_project_member, @project) + = render "new_project_member" - = render 'shared/members/requests', membership_source: @project, requesters: @requesters + = render 'shared/members/requests', membership_source: @project, requesters: @requesters + .append-bottom-default.clearfix + %h5.member.existing-title + Existing users and groups + - if @group_links.any? + = render 'groups', group_links: @group_links .append-bottom-default.clearfix %h5.member.existing-title -- GitLab From 12ab39a416f9784afb54b23f1fa9bdf97b0ee220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20Vargas=20L=C3=B3pez?= Date: Wed, 14 Dec 2016 18:19:29 -0600 Subject: [PATCH 3/7] Added UX improvements on the project members tab --- app/assets/stylesheets/pages/members.scss | 7 +++++++ .../projects/project_members/_new_project_member.html.haml | 2 +- app/views/projects/project_members/index.html.haml | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index ad21c502f04e..c83f34007bc1 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -131,6 +131,13 @@ } } +.gl-pagination{ + border-top: none; +} + +hr{ + border-top-color: $gray-darkest; +} @media (min-width: $screen-sm-min) { .member-search-form { diff --git a/app/views/projects/project_members/_new_project_member.html.haml b/app/views/projects/project_members/_new_project_member.html.haml index 28e7419cc952..b8291ebee3a9 100644 --- a/app/views/projects/project_members/_new_project_member.html.haml +++ b/app/views/projects/project_members/_new_project_member.html.haml @@ -22,4 +22,4 @@ = f.submit "Add to project", class: "btn btn-create btn-block" .col-md-1 - = link_to "Import", import_namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-default hidden-xs pull-right", title: "Import members from another project" + = link_to "Import", import_namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-default hidden-xs hidden-sm pull-right", title: "Import members from another project" diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 8eece7d50135..f328159326b2 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -5,6 +5,7 @@ .col-lg-3 %h4.prepend-top-0 Members + = link_to "Import", import_namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-default hidden-xs visible-sm pull-right", title: "Import members from another project" - if can?(current_user, :admin_project_member, @project) %p Add new user to -- GitLab From 9898972244f8465facf1133a165cc58ec71906b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20Vargas=20L=C3=B3pez?= Date: Mon, 19 Dec 2016 09:20:41 -0600 Subject: [PATCH 4/7] Add new controllers per tab on the settings page Added corresponding routes Pending to add the view content to each index partial --- .../settings/automations_controller.rb | 9 +++++ .../projects/settings/general_controller.rb | 9 +++++ .../settings/integrations_controller.rb | 9 +++++ .../projects/settings/members_controller.rb | 9 +++++ .../settings/repository_controller.rb | 9 +++++ app/views/layouts/nav/_project.html.haml | 12 +++++-- app/views/projects/settings/_head.html.haml | 35 +++++++++++++------ .../settings/automations/show.html.haml | 5 +++ .../projects/settings/general/show.html.haml | 5 +++ .../settings/integrations/show.html.haml | 5 +++ .../projects/settings/members/show.html.haml | 5 +++ .../settings/repository/show.html.haml | 5 +++ config/routes/project.rb | 8 +++++ 13 files changed, 112 insertions(+), 13 deletions(-) create mode 100644 app/controllers/projects/settings/automations_controller.rb create mode 100644 app/controllers/projects/settings/general_controller.rb create mode 100644 app/controllers/projects/settings/integrations_controller.rb create mode 100644 app/controllers/projects/settings/members_controller.rb create mode 100644 app/controllers/projects/settings/repository_controller.rb create mode 100644 app/views/projects/settings/automations/show.html.haml create mode 100644 app/views/projects/settings/general/show.html.haml create mode 100644 app/views/projects/settings/integrations/show.html.haml create mode 100644 app/views/projects/settings/members/show.html.haml create mode 100644 app/views/projects/settings/repository/show.html.haml diff --git a/app/controllers/projects/settings/automations_controller.rb b/app/controllers/projects/settings/automations_controller.rb new file mode 100644 index 000000000000..f64d2ec2d6ba --- /dev/null +++ b/app/controllers/projects/settings/automations_controller.rb @@ -0,0 +1,9 @@ +module Projects + module Settings + class AutomationsController < Projects::ApplicationController + def show + + end + end + end +end diff --git a/app/controllers/projects/settings/general_controller.rb b/app/controllers/projects/settings/general_controller.rb new file mode 100644 index 000000000000..7a81b8a79d63 --- /dev/null +++ b/app/controllers/projects/settings/general_controller.rb @@ -0,0 +1,9 @@ +module Projects + module Settings + class GeneralController < Projects::ApplicationController + def show + + end + end + end +end diff --git a/app/controllers/projects/settings/integrations_controller.rb b/app/controllers/projects/settings/integrations_controller.rb new file mode 100644 index 000000000000..40faf7deaa2d --- /dev/null +++ b/app/controllers/projects/settings/integrations_controller.rb @@ -0,0 +1,9 @@ +module Projects + module Settings + class IntegrationsController < Projects::ApplicationController + def show + + end + end + end +end diff --git a/app/controllers/projects/settings/members_controller.rb b/app/controllers/projects/settings/members_controller.rb new file mode 100644 index 000000000000..e37ec0e902d6 --- /dev/null +++ b/app/controllers/projects/settings/members_controller.rb @@ -0,0 +1,9 @@ +module Projects + module Settings + class MembersController < Projects::ApplicationController + def show + + end + end + end +end diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb new file mode 100644 index 000000000000..940e8abafdaf --- /dev/null +++ b/app/controllers/projects/settings/repository_controller.rb @@ -0,0 +1,9 @@ +module Projects + module Settings + class RepositoryController < Projects::ApplicationController + def show + + end + end + end +end diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 60bdfcae8cb7..dd503a660df1 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -68,13 +68,19 @@ Snippets - if project_nav_tab? :settings - = nav_link(path: ['projects#edit', 'project_members#index', 'hooks#index', 'deploy_keys#index', 'runners#index']) do + = nav_link(controller: [:general, :members, :integrations, :repository, :automations]) do - if can_edit - = link_to edit_project_path(@project), title: 'Settings', class: 'shortcuts-tree' do + = link_to namespace_project_settings_general_path, title: 'Settings', class: 'shortcuts-tree' do + %span + Settings + -#= link_to namespace_project_settings_general(@project), title: 'Settings', class: 'shortcuts-tree' do %span Settings - else - = link_to namespace_project_project_members_path(@project.namespace, @project), title: 'Settings', class: 'shortcuts-tree' do + = link_to namespace_project_settings_members, title: 'Settings', class: 'shortcuts-tree' do + %span + Settings + -#= link_to namespace_project_settings_members(@project.namespace, @project), title: 'Settings', class: 'shortcuts-tree' do %span Settings diff --git a/app/views/projects/settings/_head.html.haml b/app/views/projects/settings/_head.html.haml index e3bf4caceb55..56a1e8542f34 100644 --- a/app/views/projects/settings/_head.html.haml +++ b/app/views/projects/settings/_head.html.haml @@ -5,24 +5,39 @@ %ul{ class: (container_class) } - can_edit = can?(current_user, :admin_project, @project) -if can_edit - = nav_link(path: 'projects#edit') do - = link_to edit_project_path(@project), title: 'General' do + = nav_link(controller: :general) do + = link_to namespace_project_settings_general_path, title: 'General' do %span General - = nav_link(path: 'project_members#index') do - = link_to namespace_project_project_members_path(@project.namespace, @project), title: 'Community' do + -#= link_to namespace_project_settings_general(@project), title: 'General' do + %span + General + = nav_link(controller: :members) do + = link_to namespace_project_settings_members_path, title: 'Members' do + %span + Members + -#= link_to namespace_project_settings_members(@project.namespace, @project), title: 'Members' do %span Members -if can_edit - = nav_link(path: 'hooks#index') do - = link_to namespace_project_hooks_path(@project.namespace, @project), title: 'Connections' do + = nav_link(controller: :integrations) do + = link_to namespace_project_settings_integrations_path, title: 'Integrations' do + %span + Integrations + -#= link_to namespace_project_settings_integrations(@project.namespace, @project), title: 'Integrations' do %span Integrations - = nav_link(path: 'deploy_keys#index') do - = link_to namespace_project_deploy_keys_path(@project.namespace, @project), title: 'Permissions' do + = nav_link(controller: :repository) do + = link_to namespace_project_settings_repository_path, title: 'Repository' do + %span + Repository + -#= link_to namespace_project_settings_repository(@project.namespace, @project), title: 'Repository' do %span Repository - = nav_link(path: 'runners#index') do - = link_to namespace_project_runners_path(@project.namespace, @project), title: 'Automation' do + -#= nav_link(controller: :automations) do + = link_to namespace_project_settings_automations, title: 'Automations / CI' do + %span + Automation / CI + -#= link_to namespace_project_settings_automations(@project.namespace, @project), title: 'Automations / CI' do %span Automation / CI diff --git a/app/views/projects/settings/automations/show.html.haml b/app/views/projects/settings/automations/show.html.haml new file mode 100644 index 000000000000..30924e1734b1 --- /dev/null +++ b/app/views/projects/settings/automations/show.html.haml @@ -0,0 +1,5 @@ +- page_title "Automation / CI" += render "projects/settings/head" + +%h1 + Automations Settings diff --git a/app/views/projects/settings/general/show.html.haml b/app/views/projects/settings/general/show.html.haml new file mode 100644 index 000000000000..6479acdf6707 --- /dev/null +++ b/app/views/projects/settings/general/show.html.haml @@ -0,0 +1,5 @@ +- page_title "General" += render "projects/settings/head" + +%h1 + General Settings diff --git a/app/views/projects/settings/integrations/show.html.haml b/app/views/projects/settings/integrations/show.html.haml new file mode 100644 index 000000000000..32e8abb353da --- /dev/null +++ b/app/views/projects/settings/integrations/show.html.haml @@ -0,0 +1,5 @@ +- page_title "Integrations" += render "projects/settings/head" + +%h1 + Integrations Settings diff --git a/app/views/projects/settings/members/show.html.haml b/app/views/projects/settings/members/show.html.haml new file mode 100644 index 000000000000..c3ad826383da --- /dev/null +++ b/app/views/projects/settings/members/show.html.haml @@ -0,0 +1,5 @@ +- page_title "Members" += render "projects/settings/head" + +%h1 + Members Settings diff --git a/app/views/projects/settings/repository/show.html.haml b/app/views/projects/settings/repository/show.html.haml new file mode 100644 index 000000000000..a9ec870d7ce1 --- /dev/null +++ b/app/views/projects/settings/repository/show.html.haml @@ -0,0 +1,5 @@ +- page_title "Repository" += render "projects/settings/head" + +%h1 + Repository Settings diff --git a/config/routes/project.rb b/config/routes/project.rb index e17d6bae10c0..08e14cecd5fb 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -275,6 +275,14 @@ end end + namespace :settings do + resource :general, controller: :general, only: [:show] + resource :members, only: [:show] + resource :integrations, only: [:show] + resource :repository, controller: :repository, only: [:show] + resource :automations, only: [:show] + end + resources :todos, only: [:create] resources :uploads, only: [:create] do -- GitLab From a8a9e67ebeffac7223213ed2b64904d111af1eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20Vargas=20L=C3=B3pez?= Date: Mon, 19 Dec 2016 13:10:18 -0600 Subject: [PATCH 5/7] Tabs that now render their content: - General - Members - Integrations Pending: - Repository - Automation / CI --- .../settings/integrations_controller.rb | 3 ++ .../projects/settings/members_controller.rb | 48 ++++++++++++++++++- .../settings/repository_controller.rb | 18 +++++++ app/helpers/gitlab_routing_helper.rb | 17 +++++++ app/views/layouts/nav/_project.html.haml | 10 +--- .../{edit.html.haml => _edit.html.haml} | 5 +- .../{index.html.haml => _index.html.haml} | 5 +- .../{index.html.haml => _index.html.haml} | 1 - .../{index.html.haml => _index.html.haml} | 7 +-- .../_branches_list.html.haml | 2 +- app/views/projects/settings/_head.html.haml | 27 +++-------- .../projects/settings/general/show.html.haml | 5 +- .../settings/integrations/show.html.haml | 3 +- .../projects/settings/members/show.html.haml | 3 +- .../settings/repository/show.html.haml | 3 +- 15 files changed, 104 insertions(+), 53 deletions(-) rename app/views/projects/{edit.html.haml => _edit.html.haml} (99%) rename app/views/projects/deploy_keys/{index.html.haml => _index.html.haml} (94%) rename app/views/projects/hooks/{index.html.haml => _index.html.haml} (83%) rename app/views/projects/project_members/{index.html.haml => _index.html.haml} (91%) diff --git a/app/controllers/projects/settings/integrations_controller.rb b/app/controllers/projects/settings/integrations_controller.rb index 40faf7deaa2d..eaa403f94ab9 100644 --- a/app/controllers/projects/settings/integrations_controller.rb +++ b/app/controllers/projects/settings/integrations_controller.rb @@ -2,7 +2,10 @@ module Projects module Settings class IntegrationsController < Projects::ApplicationController def show + @hooks = @project.hooks + @hook = ProjectHook.new + @services = @project.find_or_initialize_services end end end diff --git a/app/controllers/projects/settings/members_controller.rb b/app/controllers/projects/settings/members_controller.rb index e37ec0e902d6..caa703d5cca2 100644 --- a/app/controllers/projects/settings/members_controller.rb +++ b/app/controllers/projects/settings/members_controller.rb @@ -1,8 +1,54 @@ module Projects module Settings class MembersController < Projects::ApplicationController + include MembershipActions + include SortingHelper + def show - + @sort = params[:sort].presence || sort_value_name + @group_links = @project.project_group_links + + @project_members = @project.project_members + @project_members = @project_members.non_invite unless can?(current_user, :admin_project, @project) + + # Group links + @group_links = @project.project_group_links.all + + @skip_groups = @group_links.pluck(:group_id) + @skip_groups << @project.namespace_id unless @project.personal? + + group = @project.group + + if group + # We need `.where.not(user_id: nil)` here otherwise when a group has an + # invitee, it would make the following query return 0 rows since a NULL + # user_id would be present in the subquery + # See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values + group_members = ProjectMembersFinder.new(@project_members, group).execute(current_user) + end + + if params[:search].present? + user_ids = @project.users.search(params[:search]).select(:id) + @project_members = @project_members.where(user_id: user_ids) + + if group_members + user_ids = group.users.search(params[:search]).select(:id) + group_members = group_members.where(user_id: user_ids) + end + + @group_links = @project.project_group_links.where(group_id: @project.invited_groups.search(params[:search]).select(:id)) + end + + wheres = ["members.id IN (#{@project_members.select(:id).to_sql})"] + wheres << "members.id IN (#{group_members.select(:id).to_sql})" if group_members + + @project_members = Member. + where(wheres.join(' OR ')). + sort(@sort). + page(params[:page]) + + @requesters = AccessRequestsFinder.new(@project).execute(current_user) + @project_member = @project.project_members.new end end end diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 940e8abafdaf..75d99d27d1d5 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -1,8 +1,26 @@ module Projects module Settings class RepositoryController < Projects::ApplicationController + include ProtectedBranchesHelper + def show + @key = DeployKey.new + @protected_branch = @project.protected_branches.new + @protected_branches = @project.protected_branches.order(:name).page(params[:page]) + set_index_vars + load_gon_index(@project) + end + + def set_index_vars + @enabled_keys ||= @project.deploy_keys + + @available_keys ||= current_user.accessible_deploy_keys - @enabled_keys + @available_project_keys ||= current_user.project_deploy_keys - @enabled_keys + @available_public_keys ||= DeployKey.are_public - @enabled_keys + # Public keys that are already used by another accessible project are already + # in @available_project_keys. + @available_public_keys -= @available_project_keys end end end diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb index 99db73c9ee04..c721eda7247a 100644 --- a/app/helpers/gitlab_routing_helper.rb +++ b/app/helpers/gitlab_routing_helper.rb @@ -206,4 +206,21 @@ def artifacts_action_path(path, project, build) file_namespace_project_build_artifacts_path(*args) end end + + # Settings + def project_settings_general_path(project, *args) + namespace_project_settings_general_path(project.namespace, project, *args) + end + def project_settings_members_path(project, *args) + namespace_project_settings_members_path(project.namespace, project, *args) + end + def project_settings_integrations_path(project, *args) + namespace_project_settings_integrations_path(project.namespace, project, *args) + end + def project_settings_repository_path(project, *args) + namespace_project_settings_repository_path(project.namespace, project, *args) + end + def project_settings_automations_path(project, *args) + namespace_project_settings_automations_path(project.namespace, project, *args) + end end diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index dd503a660df1..0e1535cb7f78 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -70,17 +70,11 @@ - if project_nav_tab? :settings = nav_link(controller: [:general, :members, :integrations, :repository, :automations]) do - if can_edit - = link_to namespace_project_settings_general_path, title: 'Settings', class: 'shortcuts-tree' do - %span - Settings - -#= link_to namespace_project_settings_general(@project), title: 'Settings', class: 'shortcuts-tree' do + = link_to project_settings_general_path(@project), title: 'Settings', class: 'shortcuts-tree' do %span Settings - else - = link_to namespace_project_settings_members, title: 'Settings', class: 'shortcuts-tree' do - %span - Settings - -#= link_to namespace_project_settings_members(@project.namespace, @project), title: 'Settings', class: 'shortcuts-tree' do + = link_to project_settings_members_path(@path), title: 'Settings', class: 'shortcuts-tree' do %span Settings diff --git a/app/views/projects/edit.html.haml b/app/views/projects/_edit.html.haml similarity index 99% rename from app/views/projects/edit.html.haml rename to app/views/projects/_edit.html.haml index 5e4744104331..0eca88eff0e4 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/_edit.html.haml @@ -1,6 +1,3 @@ -- page_title "Settings" -= render "projects/settings/head" - .project-edit-container .row.prepend-top-default .col-lg-3.profile-settings-sidebar @@ -115,7 +112,7 @@ %span.descr Enable Container Registry for this project = link_to icon('question-circle'), help_page_path('user/project/container_registry'), target: '_blank' - = render 'merge_request_settings', form: f + = render 'projects/merge_request_settings', form: f %hr %fieldset.features.append-bottom-default diff --git a/app/views/projects/deploy_keys/index.html.haml b/app/views/projects/deploy_keys/_index.html.haml similarity index 94% rename from app/views/projects/deploy_keys/index.html.haml rename to app/views/projects/deploy_keys/_index.html.haml index eb4f58a694f6..d74f8678560e 100644 --- a/app/views/projects/deploy_keys/index.html.haml +++ b/app/views/projects/deploy_keys/_index.html.haml @@ -1,6 +1,3 @@ -- page_title "Deploy Keys" -= render "projects/settings/head" - .row.prepend-top-default .col-lg-3.profile-settings-sidebar %h4.prepend-top-0 @@ -10,7 +7,7 @@ .col-lg-9 %h5.prepend-top-0 Create a new deploy key for this project - = render "form" + = render "projects/deploy_keys/form" .col-lg-9.col-lg-offset-3 %hr .col-lg-9.col-lg-offset-3.append-bottom-default.deploy-keys diff --git a/app/views/projects/hooks/index.html.haml b/app/views/projects/hooks/_index.html.haml similarity index 83% rename from app/views/projects/hooks/index.html.haml rename to app/views/projects/hooks/_index.html.haml index fd99cb857b97..76cc9b3cf2b8 100644 --- a/app/views/projects/hooks/index.html.haml +++ b/app/views/projects/hooks/_index.html.haml @@ -1,4 +1,3 @@ -= render "projects/settings/head" = render 'shared/web_hooks/form', hook: @hook, hooks: @hooks, url_components: [@project.namespace.becomes(Namespace), @project] %hr diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/_index.html.haml similarity index 91% rename from app/views/projects/project_members/index.html.haml rename to app/views/projects/project_members/_index.html.haml index f328159326b2..4db70efe7cdc 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/_index.html.haml @@ -1,6 +1,3 @@ -- page_title "Members" -= render "projects/settings/head" - .row.prepend-top-default.append-bottom-default .col-lg-3 %h4.prepend-top-0 @@ -13,7 +10,7 @@ .col-lg-9 .light.prepend-top-default - if can?(current_user, :admin_project_member, @project) - = render "new_project_member" + = render "projects/project_members/new_project_member" = render 'shared/members/requests', membership_source: @project, requesters: @requesters .append-bottom-default.clearfix @@ -34,7 +31,7 @@ - if @group_links.any? = render 'groups', group_links: @group_links - = render 'team', members: @project_members + = render 'projects/project_members/team', members: @project_members = paginate @project_members, theme: "gitlab" - if can?(current_user, :admin_project, @project) diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml index 04b19a8c5a73..92564bc1f64d 100644 --- a/app/views/projects/protected_branches/_branches_list.html.haml +++ b/app/views/projects/protected_branches/_branches_list.html.haml @@ -23,6 +23,6 @@ - if can_admin_project %th %tbody - = render partial: @protected_branches, locals: { can_admin_project: can_admin_project } + = render 'projects/protected_branches/protected_branch', locals: { can_admin_project: can_admin_project, protected_branch: @protected_branches } = paginate @protected_branches, theme: 'gitlab' diff --git a/app/views/projects/settings/_head.html.haml b/app/views/projects/settings/_head.html.haml index 56a1e8542f34..aa4aa24b769b 100644 --- a/app/views/projects/settings/_head.html.haml +++ b/app/views/projects/settings/_head.html.haml @@ -6,38 +6,23 @@ - can_edit = can?(current_user, :admin_project, @project) -if can_edit = nav_link(controller: :general) do - = link_to namespace_project_settings_general_path, title: 'General' do - %span - General - -#= link_to namespace_project_settings_general(@project), title: 'General' do + = link_to project_settings_general_path(@project), title: 'General' do %span General = nav_link(controller: :members) do - = link_to namespace_project_settings_members_path, title: 'Members' do - %span - Members - -#= link_to namespace_project_settings_members(@project.namespace, @project), title: 'Members' do + = link_to project_settings_members_path(@project), title: 'Members' do %span Members -if can_edit = nav_link(controller: :integrations) do - = link_to namespace_project_settings_integrations_path, title: 'Integrations' do - %span - Integrations - -#= link_to namespace_project_settings_integrations(@project.namespace, @project), title: 'Integrations' do + = link_to project_settings_integrations_path(@project), title: 'Integrations' do %span Integrations = nav_link(controller: :repository) do - = link_to namespace_project_settings_repository_path, title: 'Repository' do - %span - Repository - -#= link_to namespace_project_settings_repository(@project.namespace, @project), title: 'Repository' do + = link_to project_settings_repository_path(@project), title: 'Repository' do %span Repository - -#= nav_link(controller: :automations) do - = link_to namespace_project_settings_automations, title: 'Automations / CI' do - %span - Automation / CI - -#= link_to namespace_project_settings_automations(@project.namespace, @project), title: 'Automations / CI' do + = nav_link(controller: :automations) do + = link_to project_settings_automations_path(@project), title: 'Automations / CI' do %span Automation / CI diff --git a/app/views/projects/settings/general/show.html.haml b/app/views/projects/settings/general/show.html.haml index 6479acdf6707..80ea6481620c 100644 --- a/app/views/projects/settings/general/show.html.haml +++ b/app/views/projects/settings/general/show.html.haml @@ -1,5 +1,6 @@ - page_title "General" = render "projects/settings/head" -%h1 - General Settings += render "projects/edit" + += render 'shared/confirm_modal', phrase: @project.path diff --git a/app/views/projects/settings/integrations/show.html.haml b/app/views/projects/settings/integrations/show.html.haml index 32e8abb353da..52705e863a95 100644 --- a/app/views/projects/settings/integrations/show.html.haml +++ b/app/views/projects/settings/integrations/show.html.haml @@ -1,5 +1,4 @@ - page_title "Integrations" = render "projects/settings/head" -%h1 - Integrations Settings += render "projects/hooks/index" diff --git a/app/views/projects/settings/members/show.html.haml b/app/views/projects/settings/members/show.html.haml index c3ad826383da..d84d6ff0c28e 100644 --- a/app/views/projects/settings/members/show.html.haml +++ b/app/views/projects/settings/members/show.html.haml @@ -1,5 +1,4 @@ - page_title "Members" = render "projects/settings/head" -%h1 - Members Settings += render "projects/project_members/index" diff --git a/app/views/projects/settings/repository/show.html.haml b/app/views/projects/settings/repository/show.html.haml index a9ec870d7ce1..0eaf5bff708a 100644 --- a/app/views/projects/settings/repository/show.html.haml +++ b/app/views/projects/settings/repository/show.html.haml @@ -1,5 +1,4 @@ - page_title "Repository" = render "projects/settings/head" -%h1 - Repository Settings += render "projects/deploy_keys/index" -- GitLab From 288d1c61b973ca22a1e066e417408bd602cb6028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20Vargas=20L=C3=B3pez?= Date: Mon, 19 Dec 2016 13:44:55 -0600 Subject: [PATCH 6/7] Adjusted design of the project members tab --- app/assets/stylesheets/pages/members.scss | 4 ---- .../projects/project_members/_index.html.haml | 22 ++++++------------- .../projects/project_members/_team.html.haml | 1 + 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index c83f34007bc1..5aa25c338ada 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -125,10 +125,6 @@ background: transparent; border: 0; outline: 0; - - @media (min-width: $screen-sm-min) { - right: 160px; - } } .gl-pagination{ diff --git a/app/views/projects/project_members/_index.html.haml b/app/views/projects/project_members/_index.html.haml index 4db70efe7cdc..38996a8fa25b 100644 --- a/app/views/projects/project_members/_index.html.haml +++ b/app/views/projects/project_members/_index.html.haml @@ -1,5 +1,5 @@ -.row.prepend-top-default.append-bottom-default - .col-lg-3 +.row.prepend-top-default + .col-lg-3.settings-sidebar %h4.prepend-top-0 Members = link_to "Import", import_namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-default hidden-xs visible-sm pull-right", title: "Import members from another project" @@ -19,20 +19,12 @@ - if @group_links.any? = render 'groups', group_links: @group_links - .append-bottom-default.clearfix - %h5.member.existing-title - Existing users and groups - = form_tag namespace_project_project_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do - .form-group - = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } - = icon("search") - = render 'shared/members/sort_dropdown' - - if @group_links.any? - = render 'groups', group_links: @group_links + .append-bottom-default.clearfix + - if @group_links.any? + = render 'groups', group_links: @group_links - = render 'projects/project_members/team', members: @project_members - = paginate @project_members, theme: "gitlab" + = render 'projects/project_members/team', members: @project_members + = paginate @project_members, theme: "gitlab" - if can?(current_user, :admin_project, @project) %hr diff --git a/app/views/projects/project_members/_team.html.haml b/app/views/projects/project_members/_team.html.haml index 7995cce5fd6e..65ec95dc580b 100644 --- a/app/views/projects/project_members/_team.html.haml +++ b/app/views/projects/project_members/_team.html.haml @@ -8,5 +8,6 @@ = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } = icon("search") + = render 'shared/members/sort_dropdown' %ul.content-list = render partial: 'shared/members/member', collection: members, as: :member -- GitLab From a6a81c22a61581d5fabf1066a259e84ecec5b806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20Vargas=20L=C3=B3pez?= Date: Mon, 19 Dec 2016 16:26:59 -0600 Subject: [PATCH 7/7] All tabs now render their content properly using their respective controllers Changed all redirects from edit_project_path to project_settings_general_path also tested the functionality of the general settings tab --- app/controllers/projects/avatars_controller.rb | 2 +- .../settings/automations_controller.rb | 18 ++++++++++++++++++ app/controllers/projects_controller.rb | 16 ++++++++-------- app/views/admin/projects/show.html.haml | 2 +- .../projects/_customize_workflow.html.haml | 2 +- .../_branches_list.html.haml | 2 +- .../{index.html.haml => _index.html.haml} | 7 ++----- .../settings/automations/show.html.haml | 3 +-- app/views/projects/triggers/_index.html.haml | 2 +- 9 files changed, 34 insertions(+), 20 deletions(-) rename app/views/projects/runners/{index.html.haml => _index.html.haml} (88%) diff --git a/app/controllers/projects/avatars_controller.rb b/app/controllers/projects/avatars_controller.rb index 537886870761..4d9007fb1472 100644 --- a/app/controllers/projects/avatars_controller.rb +++ b/app/controllers/projects/avatars_controller.rb @@ -21,6 +21,6 @@ def destroy @project.save - redirect_to edit_project_path(@project) + redirect_to project_settings_general_path(@project) end end diff --git a/app/controllers/projects/settings/automations_controller.rb b/app/controllers/projects/settings/automations_controller.rb index f64d2ec2d6ba..da76ed840523 100644 --- a/app/controllers/projects/settings/automations_controller.rb +++ b/app/controllers/projects/settings/automations_controller.rb @@ -2,7 +2,25 @@ module Projects module Settings class AutomationsController < Projects::ApplicationController def show + @project_runners = project.runners.ordered + @assignable_runners = current_user.ci_authorized_runners. + assignable_for(project).ordered.page(params[:page]).per(20) + @shared_runners = Ci::Runner.shared.active + @shared_runners_count = @shared_runners.count(:all) + # Variables + @variable = Ci::Variable.new + # Triggers + @triggers = project.triggers + @trigger = Ci::Trigger.new + # Pipelines settings + @ref = params[:ref] || @project.default_branch || 'master' + @badges = [Gitlab::Badge::Build::Status, + Gitlab::Badge::Coverage::Report] + + @badges.map! do |badge| + badge.new(@project, @ref).metadata + end end end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index d5ee503c44c6..0a7d38df02a0 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -23,7 +23,7 @@ def new end def edit - render 'edit' + redirect_to project_settings_general_path(@project) end def create @@ -52,7 +52,7 @@ def update flash[:notice] = "Project '#{@project.name}' was successfully updated." format.html do redirect_to( - edit_project_path(@project), + project_settings_general_path(@project), notice: "Project '#{@project.name}' was successfully updated." ) end @@ -124,7 +124,7 @@ def destroy redirect_to dashboard_projects_path rescue Projects::DestroyService::DestroyError => ex - redirect_to edit_project_path(@project), alert: ex.message + redirect_to project_settings_general_path(@project), alert: ex.message end def new_issue_address @@ -163,7 +163,7 @@ def housekeeping ) rescue ::Projects::HousekeepingService::LeaseTaken => ex redirect_to( - edit_project_path(@project), + project_settings_general_path(@project), alert: ex.to_s ) end @@ -172,7 +172,7 @@ def export @project.add_export_job(current_user: current_user) redirect_to( - edit_project_path(@project), + project_settings_general_path(@project), notice: "Project export started. A download link will be sent by email." ) end @@ -184,7 +184,7 @@ def download_export send_file export_project_path, disposition: 'attachment' else redirect_to( - edit_project_path(@project), + project_settings_general_path(@project), alert: "Project export link has expired. Please generate a new export from your project settings." ) end @@ -196,7 +196,7 @@ def remove_export else flash[:alert] = "Project export could not be deleted." end - redirect_to(edit_project_path(@project)) + redirect_to(project_settings_general_path(@project)) end def generate_new_export @@ -204,7 +204,7 @@ def generate_new_export export else redirect_to( - edit_project_path(@project), + project_settings_general_path(@project), alert: "Project export could not be deleted." ) end diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml index 6c7c3c48604a..24cb44dd2e78 100644 --- a/app/views/admin/projects/show.html.haml +++ b/app/views/admin/projects/show.html.haml @@ -1,7 +1,7 @@ - page_title @project.name_with_namespace, "Projects" %h3.page-title Project: #{@project.name_with_namespace} - = link_to edit_project_path(@project), class: "btn btn-nr pull-right" do + = link_to project_settings_general_path(@project), class: "btn btn-nr pull-right" do %i.fa.fa-pencil-square-o Edit %hr diff --git a/app/views/projects/_customize_workflow.html.haml b/app/views/projects/_customize_workflow.html.haml index d2c1e943db11..dae6c3cdd371 100644 --- a/app/views/projects/_customize_workflow.html.haml +++ b/app/views/projects/_customize_workflow.html.haml @@ -5,4 +5,4 @@ %p Get started with GitLab by enabling features that work best for your project. From issues and wikis, to merge requests and builds, GitLab can help manage your workflow from idea to production! - if can?(current_user, :admin_project, @project) - = link_to "Get started", edit_project_path(@project), class: "btn btn-success" + = link_to "Get started", project_settings_general_path(@project), class: "btn btn-success" diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml index 92564bc1f64d..cf0db9438657 100644 --- a/app/views/projects/protected_branches/_branches_list.html.haml +++ b/app/views/projects/protected_branches/_branches_list.html.haml @@ -23,6 +23,6 @@ - if can_admin_project %th %tbody - = render 'projects/protected_branches/protected_branch', locals: { can_admin_project: can_admin_project, protected_branch: @protected_branches } + = render partial: 'projects/protected_branches/protected_branch', collection: @protected_branches, locals: { can_admin_project: can_admin_project} = paginate @protected_branches, theme: 'gitlab' diff --git a/app/views/projects/runners/index.html.haml b/app/views/projects/runners/_index.html.haml similarity index 88% rename from app/views/projects/runners/index.html.haml rename to app/views/projects/runners/_index.html.haml index 5baa7bb10235..f3492ae7e347 100644 --- a/app/views/projects/runners/index.html.haml +++ b/app/views/projects/runners/_index.html.haml @@ -1,6 +1,3 @@ -- page_title "Runners" -= render "projects/settings/head" - .row.prepend-top-default.append-bottom-default .col-lg-3 %h4.prepend-top-0 @@ -28,9 +25,9 @@ %p.lead To start serving your builds you can either add specific Runners to your project or use shared Runners .row .col-sm-6 - = render 'specific_runners' + = render 'projects/runners/specific_runners' .col-sm-6 - = render 'shared_runners' + = render 'projects/runners/shared_runners' %hr diff --git a/app/views/projects/settings/automations/show.html.haml b/app/views/projects/settings/automations/show.html.haml index 30924e1734b1..1fd11cca7420 100644 --- a/app/views/projects/settings/automations/show.html.haml +++ b/app/views/projects/settings/automations/show.html.haml @@ -1,5 +1,4 @@ - page_title "Automation / CI" = render "projects/settings/head" -%h1 - Automations Settings += render "projects/runners/index" diff --git a/app/views/projects/triggers/_index.html.haml b/app/views/projects/triggers/_index.html.haml index 98b8714eaa96..b23de9ccf531 100644 --- a/app/views/projects/triggers/_index.html.haml +++ b/app/views/projects/triggers/_index.html.haml @@ -28,7 +28,7 @@ %p.settings-message.text-center.append-bottom-default No triggers have been created yet. Add one using the button below. - = form_for @trigger, url: url_for(controller: 'projects/triggers', action: 'create') do |f| + = form_for @trigger, url: url_for(controller: '/projects/triggers', action: 'create') do |f| = f.submit "Add trigger", class: 'btn btn-success' .panel-footer -- GitLab