diff options
| author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-03-25 10:47:22 +0200 |
|---|---|---|
| committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-03-25 10:47:22 +0200 |
| commit | 1fb99264a99e5fbe03b9ccef42ac8c4f07575d8c (patch) | |
| tree | e84328e6dd36b4cc5d1cde893e1712ff3cba89b0 /app/contexts | |
| parent | 850881a2ef2d89b7eb045f408bf9c8803094e6cf (diff) | |
| download | gitlab-ce-1fb99264a99e5fbe03b9ccef42ac8c4f07575d8c.tar.gz | |
Use TransferContext for project
Diffstat (limited to 'app/contexts')
| -rw-r--r-- | app/contexts/projects/transfer_context.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/app/contexts/projects/transfer_context.rb b/app/contexts/projects/transfer_context.rb new file mode 100644 index 00000000000..aed396a5da5 --- /dev/null +++ b/app/contexts/projects/transfer_context.rb @@ -0,0 +1,27 @@ +module Projects + class TransferContext < BaseContext + def execute(role = :default) + namespace_id = params[:project].delete(:namespace_id) + allowed_transfer = can?(current_user, :change_namespace, project) || role == :admin + + if allowed_transfer && namespace_id.present? + if namespace_id == Namespace.global_id + if project.namespace.present? + # Transfer to global namespace from anyone + project.transfer(nil) + end + elsif namespace_id.to_i != project.namespace_id + # Transfer to someone namespace + namespace = Namespace.find(namespace_id) + project.transfer(namespace) + end + end + + rescue ProjectTransferService::TransferError => ex + project.reload + project.errors.add(:namespace_id, ex.message) + false + end + end +end + |
