Commit e292d7c17b48182f7f8df20d93b92e8ba9e98ce6

Authored by Dmitriy Zaporozhets
1 parent ff35b37f

Make transfer action in project controller

app/contexts/projects/update_context.rb
1 module Projects 1 module Projects
2 class UpdateContext < BaseContext 2 class UpdateContext < BaseContext
3 def execute(role = :default) 3 def execute(role = :default)
4 - namespace_id = params[:project].delete(:namespace_id) 4 + params[:project].delete(:namespace_id)
5 params[:project].delete(:public) unless can?(current_user, :change_public_mode, project) 5 params[:project].delete(:public) unless can?(current_user, :change_public_mode, project)
6 -  
7 - allowed_transfer = can?(current_user, :change_namespace, project) || role == :admin  
8 -  
9 - if allowed_transfer && namespace_id.present?  
10 - if namespace_id == Namespace.global_id  
11 - if project.namespace.present?  
12 - # Transfer to global namespace from anyone  
13 - project.transfer(nil)  
14 - end  
15 - elsif namespace_id.to_i != project.namespace_id  
16 - # Transfer to someone namespace  
17 - namespace = Namespace.find(namespace_id)  
18 - project.transfer(namespace)  
19 - end  
20 - end  
21 -  
22 project.update_attributes(params[:project], as: role) 6 project.update_attributes(params[:project], as: role)
23 end 7 end
24 end 8 end
app/controllers/projects_controller.rb
@@ -4,7 +4,7 @@ class ProjectsController &lt; ProjectResourceController @@ -4,7 +4,7 @@ class ProjectsController &lt; ProjectResourceController
4 4
5 # Authorize 5 # Authorize
6 before_filter :authorize_read_project!, except: [:index, :new, :create] 6 before_filter :authorize_read_project!, except: [:index, :new, :create]
7 - before_filter :authorize_admin_project!, only: [:edit, :update, :destroy] 7 + before_filter :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer]
8 before_filter :require_non_empty_project, only: [:blob, :tree, :graph] 8 before_filter :require_non_empty_project, only: [:blob, :tree, :graph]
9 9
10 layout 'application', only: [:new, :create] 10 layout 'application', only: [:new, :create]
@@ -45,10 +45,10 @@ class ProjectsController &lt; ProjectResourceController @@ -45,10 +45,10 @@ class ProjectsController &lt; ProjectResourceController
45 format.js 45 format.js
46 end 46 end
47 end 47 end
  48 + end
48 49
49 - rescue Project::TransferError => ex  
50 - @error = ex  
51 - render :update_failed 50 + def transfer
  51 + ::Projects::TransferContext.new(project, current_user, params).execute
52 end 52 end
53 53
54 def show 54 def show
app/models/project.rb
@@ -26,8 +26,6 @@ class Project &lt; ActiveRecord::Base @@ -26,8 +26,6 @@ class Project &lt; ActiveRecord::Base
26 include Gitlab::ShellAdapter 26 include Gitlab::ShellAdapter
27 extend Enumerize 27 extend Enumerize
28 28
29 - class TransferError < StandardError; end  
30 -  
31 attr_accessible :name, :path, :description, :default_branch, :issues_tracker, 29 attr_accessible :name, :path, :description, :default_branch, :issues_tracker,
32 :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, 30 :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id,
33 :wiki_enabled, :public, :import_url, as: [:default, :admin] 31 :wiki_enabled, :public, :import_url, as: [:default, :admin]
app/views/projects/_form.html.haml
@@ -107,8 +107,9 @@ @@ -107,8 +107,9 @@
107 - if can?(current_user, :change_namespace, @project) 107 - if can?(current_user, :change_namespace, @project)
108 .ui-box.ui-box-danger 108 .ui-box.ui-box-danger
109 %h5.title Transfer project 109 %h5.title Transfer project
  110 + .errors-holder
110 .form-holder 111 .form-holder
111 - = form_for(@project, remote: true, html: { class: 'transfer-project' }) do |f| 112 + = form_for(@project, url: transfer_project_path(@project), remote: true, html: { class: 'transfer-project' }) do |f|
112 .control-group 113 .control-group
113 = f.label :namespace_id do 114 = f.label :namespace_id do
114 %span Namespace 115 %span Namespace
app/views/projects/update_failed.js.haml
@@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
1 -:plain  
2 - $(".save-project-loader").replaceWith(errorMessage('#{escape_javascript(@error.message)}'));  
config/routes.rb
@@ -167,6 +167,10 @@ Gitlab::Application.routes.draw do @@ -167,6 +167,10 @@ Gitlab::Application.routes.draw do
167 # Project Area 167 # Project Area
168 # 168 #
169 resources :projects, constraints: { id: /(?:[a-zA-Z.0-9_\-]+\/)?[a-zA-Z.0-9_\-]+/ }, except: [:new, :create, :index], path: "/" do 169 resources :projects, constraints: { id: /(?:[a-zA-Z.0-9_\-]+\/)?[a-zA-Z.0-9_\-]+/ }, except: [:new, :create, :index], path: "/" do
  170 + member do
  171 + put :transfer
  172 + end
  173 +
170 resources :blob, only: [:show], constraints: {id: /.+/} 174 resources :blob, only: [:show], constraints: {id: /.+/}
171 resources :tree, only: [:show], constraints: {id: /.+/, format: /(html|js)/ } 175 resources :tree, only: [:show], constraints: {id: /.+/, format: /(html|js)/ }
172 resources :edit_tree, only: [:show, :update], constraints: {id: /.+/}, path: 'edit' 176 resources :edit_tree, only: [:show, :update], constraints: {id: /.+/}, path: 'edit'