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