summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-11-05 16:41:29 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-11-05 16:41:29 +0200
commitd78b6ce4cc01ac5da52246c149f57de456b904ae (patch)
tree3f55226230ff46d27485578999179f8cd801f05e
parentf9b66aecddb248dcd501419e0ee94fd69fab4de3 (diff)
downloadgitlab-ce-d78b6ce4cc01ac5da52246c149f57de456b904ae.tar.gz
New feature: Ability to leave project
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-rw-r--r--app/controllers/projects/team_members_controller.rb11
-rw-r--r--app/models/project.rb6
-rw-r--r--app/models/user.rb5
-rw-r--r--app/views/dashboard/projects.html.haml9
-rw-r--r--config/routes.rb1
5 files changed, 29 insertions, 3 deletions
diff --git a/app/controllers/projects/team_members_controller.rb b/app/controllers/projects/team_members_controller.rb
index b4b318fa59e..2c40b3c75f2 100644
--- a/app/controllers/projects/team_members_controller.rb
+++ b/app/controllers/projects/team_members_controller.rb
@@ -1,6 +1,6 @@
class Projects::TeamMembersController < Projects::ApplicationController
# Authorize
- before_filter :authorize_admin_project!
+ before_filter :authorize_admin_project!, except: :leave
layout "project_settings"
@@ -45,6 +45,15 @@ class Projects::TeamMembersController < Projects::ApplicationController
end
end
+ def leave
+ project.users_projects.find_by_user_id(current_user).destroy
+
+ respond_to do |format|
+ format.html { redirect_to :back }
+ format.js { render nothing: true }
+ end
+ end
+
def apply_import
giver = Project.find(params[:source_project_id])
status = @project.team.import(giver)
diff --git a/app/models/project.rb b/app/models/project.rb
index 6b8e54d5b22..b5dc2490359 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -317,7 +317,7 @@ class Project < ActiveRecord::Base
mrs = self.merge_requests.opened.by_branch(branch_name).all
# Update code for merge requests between project and project fork
mrs += self.fork_merge_requests.opened.by_branch(branch_name).all
-
+
mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked }
# Close merge requests
@@ -447,4 +447,8 @@ class Project < ActiveRecord::Base
order('id DESC').limit(100).
update_all(updated_at: Time.now)
end
+
+ def project_member(user)
+ users_projects.where(user_id: user).first
+ end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index df14cf34e85..7ef3b3f9e1a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -394,4 +394,9 @@ class User < ActiveRecord::Base
self
end
+
+ def can_leave_project?(project)
+ project.namespace != namespace &&
+ project.project_member(self)
+ end
end
diff --git a/app/views/dashboard/projects.html.haml b/app/views/dashboard/projects.html.haml
index 785eb613334..904ac2d00a2 100644
--- a/app/views/dashboard/projects.html.haml
+++ b/app/views/dashboard/projects.html.haml
@@ -54,7 +54,7 @@
.span9
%ul.bordered-list.my-projects.top-list
- @projects.each do |project|
- %li
+ %li.my-project-row
%h4.project-title
= link_to project_path(project), class: dom_class(project) do
= project.name_with_namespace
@@ -63,6 +63,12 @@
= public_icon
Public
+ - if current_user.can_leave_project?(project)
+ .pull-right
+ = 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
+ %i.icon-signout
+ Leave
+
- if project.forked_from_project
%small.pull-right
%i.icon-code-fork
@@ -80,6 +86,7 @@
%span.light Last activity:
%span.date= project_last_activity(project)
+
- if @projects.blank?
%li
%h3.nothing_here_message There are no projects here.
diff --git a/config/routes.rb b/config/routes.rb
index 8f1758394b6..58bbd2b650e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -288,6 +288,7 @@ Gitlab::Application.routes.draw do
resources :team_members, except: [:index, :edit], constraints: { id: /[a-zA-Z.\/0-9_\-#%+]+/ } do
collection do
+ delete :leave
# Used for import team
# from another project