Commit e292d7c17b48182f7f8df20d93b92e8ba9e98ce6
1 parent
ff35b37f
Exists in
master
and in
4 other branches
Make transfer action in project controller
Showing
6 changed files
with
11 additions
and
26 deletions
Show diff stats
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 < ProjectResourceController | @@ -4,7 +4,7 @@ class ProjectsController < 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 < ProjectResourceController | @@ -45,10 +45,10 @@ class ProjectsController < 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 < ActiveRecord::Base | @@ -26,8 +26,6 @@ class Project < 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
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' |