Commit 0815098d3af16444645d161cde3ef5150b2fd75d

Authored by Dmitriy Zaporozhets
1 parent dcea1913

Admin can transfer project to any namespace

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/assets/stylesheets/common.scss
... ... @@ -358,3 +358,33 @@ table {
358 358 background: #555;
359 359 color: #BBB;
360 360 }
  361 +
  362 +.ajax-users-select {
  363 + width: 400px;
  364 +
  365 + &.input-large {
  366 + width: 210px;
  367 + }
  368 +}
  369 +
  370 +.user-result {
  371 + .user-image {
  372 + float: left;
  373 + }
  374 + .user-name {
  375 + }
  376 + .user-username {
  377 + color: #999;
  378 + }
  379 +}
  380 +
  381 +.namespace-result {
  382 + .namespace-kind {
  383 + color: #AAA;
  384 + font-weight: normal;
  385 + }
  386 + .namespace-path {
  387 + margin-left: 10px;
  388 + font-weight: bolder;
  389 + }
  390 +}
... ...
app/assets/stylesheets/selects.scss
1   -.ajax-users-select {
2   - width: 400px;
3   -
4   - &.input-large {
5   - width: 210px;
6   - }
7   -}
8   -
9   -.user-result {
10   - .user-image {
11   - float: left;
12   - }
13   - .user-name {
14   - }
15   - .user-username {
16   - color: #999;
17   - }
18   -}
19   -
20 1 /** Chosen.js selectbox style override **/
21 2 .chosen-container {
22 3 min-width: 100px;
... ...
app/controllers/admin/projects_controller.rb
1 1 class Admin::ProjectsController < Admin::ApplicationController
2   - before_filter :project, only: [:edit, :show, :update, :destroy, :team_update]
  2 + before_filter :project, only: [:show, :transfer]
  3 + before_filter :group, only: [:show, :transfer]
  4 + before_filter :repository, only: [:show, :transfer]
3 5  
4 6 def index
5 7 owner_id = params[:owner_id]
... ... @@ -14,8 +16,16 @@ class Admin::ProjectsController &lt; Admin::ApplicationController
14 16 end
15 17  
16 18 def show
17   - @repository = @project.repository
18   - @group = @project.group
  19 + end
  20 +
  21 + def transfer
  22 + result = ::Projects::TransferContext.new(@project, current_user, project: params).execute(:admin)
  23 +
  24 + if result
  25 + redirect_to [:admin, @project]
  26 + else
  27 + render :show
  28 + end
19 29 end
20 30  
21 31 protected
... ... @@ -26,4 +36,12 @@ class Admin::ProjectsController &lt; Admin::ApplicationController
26 36 @project = Project.find_with_namespace(id)
27 37 @project || render_404
28 38 end
  39 +
  40 + def group
  41 + @group ||= project.group
  42 + end
  43 +
  44 + def repository
  45 + @repository ||= project.repository
  46 + end
29 47 end
... ...
app/models/namespace.rb
... ... @@ -87,4 +87,8 @@ class Namespace &lt; ActiveRecord::Base
87 87 def send_update_instructions
88 88 projects.each(&:send_move_instructions)
89 89 end
  90 +
  91 + def kind
  92 + type == 'Group' ? 'group' : 'user'
  93 + end
90 94 end
... ...
app/views/admin/projects/show.html.haml
... ... @@ -74,6 +74,23 @@
74 74 %span.cgreen
75 75 %i.icon-lock
76 76 Private
  77 + .ui-box
  78 + .title
  79 + Transfer project
  80 + .ui-box-body
  81 + = form_for @project, url: transfer_admin_project_path(@project), method: :put do |f|
  82 + .control-group
  83 + = f.label :namespace_id, "Namespace"
  84 + .controls
  85 + = namespace_select_tag :namespace_id, selected: params[:namespace_id], class: 'input-large'
  86 +
  87 + .control-group
  88 + .controls
  89 + = f.submit 'Transfer', class: 'btn btn-primary'
  90 +
  91 +
  92 +
  93 +
77 94 .span6
78 95 - if @group
79 96 .ui-box
... ...
config/routes.rb
... ... @@ -89,7 +89,13 @@ Gitlab::Application.routes.draw do
89 89 resources :broadcast_messages, only: [:index, :create, :destroy]
90 90 resource :logs, only: [:show]
91 91 resource :background_jobs, controller: 'background_jobs', only: [:show]
92   - resources :projects, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ }, only: [:index, :show]
  92 +
  93 + resources :projects, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ }, only: [:index, :show] do
  94 + member do
  95 + put :transfer
  96 + end
  97 + end
  98 +
93 99 root to: "dashboard#index"
94 100 end
95 101  
... ...