diff --git a/app/controllers/collaborators_controller.rb b/app/controllers/collaborators_controller.rb index a149b06b9..ac237350a 100644 --- a/app/controllers/collaborators_controller.rb +++ b/app/controllers/collaborators_controller.rb @@ -34,7 +34,9 @@ class CollaboratorsController < ApplicationController role = params['user'][user_id] if relation = @project.relations.find_by_object_id_and_object_type(user_id, 'User') - relation.update_attribute(:role, role) + unless @project.owner_type == 'User' and @project.owner_id.to_i == user_id.to_i + relation.update_attribute(:role, role) + end else relation = @project.relations.build(:object_id => user_id, :object_type => 'User', :role => role) relation.save @@ -44,7 +46,9 @@ class CollaboratorsController < ApplicationController params['group'].keys.each { |group_id| role = params['group'][group_id] if relation = @project.relations.find_by_object_id_and_object_type(group_id, 'Group') - relation.update_attribute(:role, role) + unless @project.owner_type == 'Group' and @project.owner_id.to_i == group_id.to_i + relation.update_attribute(:role, role) + end else relation = @project.relations.build(:object_id => user_id, :object_type => 'Group', :role => role) relation.save @@ -71,13 +75,14 @@ class CollaboratorsController < ApplicationController all_group_ids << group_id if params['group_remove'][group_id] == ["1"] } if params['group_remove'] + all_user_ids.each do |user_id| u = User.find(user_id) - Relation.by_object(u).by_target(@project).each {|r| r.destroy} + Relation.by_object(u).by_target(@project).each {|r| r.destroy} unless u.id == @project.owner_id and @project.owner_type == 'User' end all_group_ids.each do |group_id| g = Group.find(group_id) - Relation.by_object(g).by_target(@project).each {|r| r.destroy} + Relation.by_object(g).by_target(@project).each {|r| r.destroy} unless g.id == @project.owner_id and @project.owner_type == 'Group' end redirect_to edit_project_collaborators_path(@project) + "##{params['user_remove'].present? ? 'users' : 'groups'}" @@ -126,10 +131,12 @@ class CollaboratorsController < ApplicationController def find_users @users = @project.collaborators.order('uname')#User.all + @users = @users.without(@project.owner_id) if @project.owner_type == 'User' end def find_groups @groups = @project.groups.order('uname')#Group.all + @groups = @groups.without(@project.owner_id) if @project.owner_type == 'Group' end def authorize_collaborators diff --git a/app/models/group.rb b/app/models/group.rb index ecbd13e52..b0a46de38 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -18,6 +18,7 @@ class Group < ActiveRecord::Base validate { errors.add(:uname, :taken) if User.where('uname LIKE ?', uname).present? } scope :search_order, order("CHAR_LENGTH(uname) ASC") + scope :without, lambda {|a| where("groups.id NOT IN (?)", a)} scope :search, lambda {|q| where("uname ILIKE ?", "%#{q.strip}%")} scope :opened, where('1=1') scope :by_owner, lambda {|owner| where(:owner_id => owner.id)} diff --git a/app/models/user.rb b/app/models/user.rb index 3a186dd99..463264110 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -48,6 +48,7 @@ class User < ActiveRecord::Base attr_accessor :login scope :search_order, order("CHAR_LENGTH(uname) ASC") + scope :without, lambda {|a| where("users.id NOT IN (?)", a)} scope :search, lambda {|q| where("uname ILIKE ?", "%#{q.strip}%")} scope :opened, where('1=1') scope :banned, where(:role => 'banned')