Commit 94f8b51cb39ccad5dc5031688c4b87a93227fe1b

Authored by Dmitriy Zaporozhets
2 parents b813a488 d78b6ce4

Merge branch 'feature/leave_project' of /home/git/repositories/gitlab/gitlabhq

app/controllers/projects/team_members_controller.rb
1 class Projects::TeamMembersController < Projects::ApplicationController 1 class Projects::TeamMembersController < Projects::ApplicationController
2 # Authorize 2 # Authorize
3 - before_filter :authorize_admin_project! 3 + before_filter :authorize_admin_project!, except: :leave
4 4
5 layout "project_settings" 5 layout "project_settings"
6 6
@@ -45,6 +45,15 @@ class Projects::TeamMembersController &lt; Projects::ApplicationController @@ -45,6 +45,15 @@ class Projects::TeamMembersController &lt; Projects::ApplicationController
45 end 45 end
46 end 46 end
47 47
  48 + def leave
  49 + project.users_projects.find_by_user_id(current_user).destroy
  50 +
  51 + respond_to do |format|
  52 + format.html { redirect_to :back }
  53 + format.js { render nothing: true }
  54 + end
  55 + end
  56 +
48 def apply_import 57 def apply_import
49 giver = Project.find(params[:source_project_id]) 58 giver = Project.find(params[:source_project_id])
50 status = @project.team.import(giver) 59 status = @project.team.import(giver)
app/models/project.rb
@@ -317,7 +317,7 @@ class Project &lt; ActiveRecord::Base @@ -317,7 +317,7 @@ class Project &lt; ActiveRecord::Base
317 mrs = self.merge_requests.opened.by_branch(branch_name).all 317 mrs = self.merge_requests.opened.by_branch(branch_name).all
318 # Update code for merge requests between project and project fork 318 # Update code for merge requests between project and project fork
319 mrs += self.fork_merge_requests.opened.by_branch(branch_name).all 319 mrs += self.fork_merge_requests.opened.by_branch(branch_name).all
320 - 320 +
321 mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked } 321 mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked }
322 322
323 # Close merge requests 323 # Close merge requests
@@ -447,4 +447,8 @@ class Project &lt; ActiveRecord::Base @@ -447,4 +447,8 @@ class Project &lt; ActiveRecord::Base
447 order('id DESC').limit(100). 447 order('id DESC').limit(100).
448 update_all(updated_at: Time.now) 448 update_all(updated_at: Time.now)
449 end 449 end
  450 +
  451 + def project_member(user)
  452 + users_projects.where(user_id: user).first
  453 + end
450 end 454 end
app/models/user.rb
@@ -395,4 +395,9 @@ class User &lt; ActiveRecord::Base @@ -395,4 +395,9 @@ class User &lt; ActiveRecord::Base
395 395
396 self 396 self
397 end 397 end
  398 +
  399 + def can_leave_project?(project)
  400 + project.namespace != namespace &&
  401 + project.project_member(self)
  402 + end
398 end 403 end
app/views/dashboard/projects.html.haml
@@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
54 .span9 54 .span9
55 %ul.bordered-list.my-projects.top-list 55 %ul.bordered-list.my-projects.top-list
56 - @projects.each do |project| 56 - @projects.each do |project|
57 - %li 57 + %li.my-project-row
58 %h4.project-title 58 %h4.project-title
59 = link_to project_path(project), class: dom_class(project) do 59 = link_to project_path(project), class: dom_class(project) do
60 = project.name_with_namespace 60 = project.name_with_namespace
@@ -63,6 +63,12 @@ @@ -63,6 +63,12 @@
63 = public_icon 63 = public_icon
64 Public 64 Public
65 65
  66 + - if current_user.can_leave_project?(project)
  67 + .pull-right
  68 + = link_to leave_project_team_members_path(project), confirm: "Leave project?", method: :delete, remote: true, class: "btn-tiny btn remove-row", title: 'Leave project' do
  69 + %i.icon-signout
  70 + Leave
  71 +
66 - if project.forked_from_project 72 - if project.forked_from_project
67 %small.pull-right 73 %small.pull-right
68 %i.icon-code-fork 74 %i.icon-code-fork
@@ -80,6 +86,7 @@ @@ -80,6 +86,7 @@
80 %span.light Last activity: 86 %span.light Last activity:
81 %span.date= project_last_activity(project) 87 %span.date= project_last_activity(project)
82 88
  89 +
83 - if @projects.blank? 90 - if @projects.blank?
84 %li 91 %li
85 %h3.nothing_here_message There are no projects here. 92 %h3.nothing_here_message There are no projects here.
config/routes.rb
@@ -288,6 +288,7 @@ Gitlab::Application.routes.draw do @@ -288,6 +288,7 @@ Gitlab::Application.routes.draw do
288 288
289 resources :team_members, except: [:index, :edit], constraints: { id: /[a-zA-Z.\/0-9_\-#%+]+/ } do 289 resources :team_members, except: [:index, :edit], constraints: { id: /[a-zA-Z.\/0-9_\-#%+]+/ } do
290 collection do 290 collection do
  291 + delete :leave
291 292
292 # Used for import team 293 # Used for import team
293 # from another project 294 # from another project