From 2afa5fcb52b6cec89872fe0794cba651f3ef3c86 Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Fri, 29 May 2015 16:23:36 +0200
Subject: [PATCH] Add ability to leave project

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
---
 .../projects/project_members_controller.rb           |  6 +++++-
 app/helpers/projects_helper.rb                       | 12 ++++++++++++
 app/views/projects/_aside.html.haml                  | 12 ++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb
index d7fbc979067..b110de11013 100644
--- a/app/controllers/projects/project_members_controller.rb
+++ b/app/controllers/projects/project_members_controller.rb
@@ -73,10 +73,14 @@ class Projects::ProjectMembersController < Projects::ApplicationController
   end
 
   def leave
+    if @project.namespace == current_user.namespace
+      return redirect_to(:back, alert: 'You can not leave your own project. Transfer or delete the project.')
+    end
+
     @project.project_members.find_by(user_id: current_user).destroy
 
     respond_to do |format|
-      format.html { redirect_to :back }
+      format.html { redirect_to dashboard_path }
       format.js { render nothing: true }
     end
   end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index f8df39d236a..94ce6646634 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -294,4 +294,16 @@ module ProjectsHelper
       nil
     end
   end
+
+  def user_max_access_in_project(user, project)
+    level = project.team.max_member_access(user)
+
+    if level
+      Gitlab::Access.options_with_owner.key(level)
+    end
+  end
+
+  def leave_project_message(project)
+    "Are you sure you want to leave \"#{project.name}\" project?"
+  end
 end
diff --git a/app/views/projects/_aside.html.haml b/app/views/projects/_aside.html.haml
index 000a40b466d..9c2ff8f8402 100644
--- a/app/views/projects/_aside.html.haml
+++ b/app/views/projects/_aside.html.haml
@@ -94,3 +94,15 @@
         = icon("exclamation-triangle fw")
         Archived project!
       %p Repository is read-only
+
+  - if current_user
+    - access = user_max_access_in_project(current_user, @project)
+    - if access
+      .light-well.light.prepend-top-20
+        %small
+          You have #{access} access to this project.
+          - if @project.project_member_by_id(current_user)
+            %br
+            = link_to leave_namespace_project_project_members_path(@project.namespace, @project),
+              data: { confirm: leave_project_message(@project) }, method: :delete, title: 'Leave project' do
+              Leave this project
-- 
2.30.9