diff options
author | Jose Ivan Vargas <jvargas@gitlab.com> | 2017-05-09 10:09:20 -0500 |
---|---|---|
committer | Jose Ivan Vargas <jvargas@gitlab.com> | 2017-05-22 12:55:01 -0500 |
commit | 42604d4c33e6098ba696d464c9a7b3d16656bf54 (patch) | |
tree | 49ce5e49ff2778ed6b996cdadf1f19d98b288782 /app | |
parent | 18a6d9c5326bc2b90a1f0cc8664d638a39885924 (diff) | |
download | gitlab-ce-42604d4c33e6098ba696d464c9a7b3d16656bf54.tar.gz |
Prevent project transfer if a new group is not selected
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/dispatcher.js | 4 | ||||
-rw-r--r-- | app/assets/javascripts/project_edit.js | 16 | ||||
-rw-r--r-- | app/services/projects/transfer_service.rb | 7 | ||||
-rw-r--r-- | app/views/projects/edit.html.haml | 10 |
4 files changed, 32 insertions, 5 deletions
diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js index a27abee5431..2112342aebe 100644 --- a/app/assets/javascripts/dispatcher.js +++ b/app/assets/javascripts/dispatcher.js @@ -40,6 +40,7 @@ import Group from './group'; import GroupName from './group_name'; import GroupsList from './groups_list'; import ProjectsList from './projects_list'; +import ProjectEdit from './project_edit'; import MiniPipelineGraph from './mini_pipeline_graph_dropdown'; import BlobLinePermalinkUpdater from './blob/blob_line_permalink_updater'; import Landing from './landing'; @@ -264,6 +265,9 @@ import ShortcutsBlob from './shortcuts_blob'; new BlobViewer(); } break; + case 'projects:edit': + new ProjectEdit(); + break; case 'projects:pipelines:builds': case 'projects:pipelines:failures': case 'projects:pipelines:show': diff --git a/app/assets/javascripts/project_edit.js b/app/assets/javascripts/project_edit.js new file mode 100644 index 00000000000..042ec8e4494 --- /dev/null +++ b/app/assets/javascripts/project_edit.js @@ -0,0 +1,16 @@ +export default class ProjectEdit { + constructor() { + this.transferForm = $('.js-project-transfer-form'); + this.selectNamespace = $('.js-project-transfer-form').find('.select2'); + + this.selectNamespaceChangedWrapper = this.selectNamespaceChanged.bind(this); + this.selectNamespace.on('change', this.selectNamespaceChangedWrapper); + this.selectNamespaceChanged(); + } + + selectNamespaceChanged() { + const selectedNamespaceValue = this.selectNamespace.val(); + + this.transferForm.find(':submit').prop('disabled', !selectedNamespaceValue); + } +} diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index da6e6acd4a7..a5e5d713ebd 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -15,7 +15,12 @@ module Projects if allowed_transfer?(current_user, project, new_namespace) transfer(project, new_namespace) else - project.errors.add(:new_namespace, 'is invalid') + error_message = if new_namespace.blank? + 'Please select a namespace to transfer the project to' + else + 'Transfer failed, please contact an admin' + end + project.errors.add(:new_namespace, error_message) false end rescue Projects::TransferService::TransferError => ex diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index dd27e0866de..435d5f4aa87 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -246,14 +246,16 @@ .row.prepend-top-default .col-lg-3 %h4.prepend-top-0.danger-title - Transfer project + Transfer project to new group + %p.append-bottom-0 + Please select the group you want to transfer this project to in the dropdown to the right. .col-lg-9 - = form_for([@project.namespace.becomes(Namespace), @project], url: transfer_namespace_project_path(@project.namespace, @project), method: :put, remote: true) do |f| + = form_for([@project.namespace.becomes(Namespace), @project], url: transfer_namespace_project_path(@project.namespace, @project), method: :put, remote: true, html: { class: 'js-project-transfer-form' } ) do |f| .form-group = label_tag :new_namespace_id, nil, class: 'label-light' do - %span Namespace + %span Select namespace to transfer to .form-group - = select_tag :new_namespace_id, namespaces_options(@project.namespace_id), { prompt: 'Choose a project namespace', class: 'select2' } + = select_tag :new_namespace_id, namespaces_options(nil), include_blank: true, class: 'select2' %ul %li Be careful. Changing the project's namespace can have unintended side effects. %li You can only transfer the project to namespaces you manage. |