Merge pull request #364 from warpc/195-new_design_for_projects

[issue #195] Owner removed from list of collaborators when editing list
This commit is contained in:
Vladimir Sharshov 2012-03-30 16:22:56 -07:00
commit e2dfaa1f56
4 changed files with 18 additions and 10 deletions

View File

@ -34,7 +34,9 @@ class CollaboratorsController < ApplicationController
role = params['user'][user_id] role = params['user'][user_id]
if relation = @project.relations.find_by_object_id_and_object_type(user_id, 'User') 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 else
relation = @project.relations.build(:object_id => user_id, :object_type => 'User', :role => role) relation = @project.relations.build(:object_id => user_id, :object_type => 'User', :role => role)
relation.save relation.save
@ -44,7 +46,9 @@ class CollaboratorsController < ApplicationController
params['group'].keys.each { |group_id| params['group'].keys.each { |group_id|
role = params['group'][group_id] role = params['group'][group_id]
if relation = @project.relations.find_by_object_id_and_object_type(group_id, 'Group') 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 else
relation = @project.relations.build(:object_id => user_id, :object_type => 'Group', :role => role) relation = @project.relations.build(:object_id => user_id, :object_type => 'Group', :role => role)
relation.save relation.save
@ -71,13 +75,14 @@ class CollaboratorsController < ApplicationController
all_group_ids << group_id if params['group_remove'][group_id] == ["1"] all_group_ids << group_id if params['group_remove'][group_id] == ["1"]
} if params['group_remove'] } if params['group_remove']
all_user_ids.each do |user_id| all_user_ids.each do |user_id|
u = User.find(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 end
all_group_ids.each do |group_id| all_group_ids.each do |group_id|
g = Group.find(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 end
redirect_to edit_project_collaborators_path(@project) + "##{params['user_remove'].present? ? 'users' : 'groups'}" redirect_to edit_project_collaborators_path(@project) + "##{params['user_remove'].present? ? 'users' : 'groups'}"
@ -126,10 +131,12 @@ class CollaboratorsController < ApplicationController
def find_users def find_users
@users = @project.collaborators.order('uname')#User.all @users = @project.collaborators.order('uname')#User.all
@users = @users.without(@project.owner_id) if @project.owner_type == 'User'
end end
def find_groups def find_groups
@groups = @project.groups.order('uname')#Group.all @groups = @project.groups.order('uname')#Group.all
@groups = @groups.without(@project.owner_id) if @project.owner_type == 'Group'
end end
def authorize_collaborators def authorize_collaborators

View File

@ -18,6 +18,7 @@ class Group < ActiveRecord::Base
validate { errors.add(:uname, :taken) if User.where('uname LIKE ?', uname).present? } validate { errors.add(:uname, :taken) if User.where('uname LIKE ?', uname).present? }
scope :search_order, order("CHAR_LENGTH(uname) ASC") 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 :search, lambda {|q| where("uname ILIKE ?", "%#{q.strip}%")}
scope :opened, where('1=1') scope :opened, where('1=1')
scope :by_owner, lambda {|owner| where(:owner_id => owner.id)} scope :by_owner, lambda {|owner| where(:owner_id => owner.id)}

View File

@ -48,6 +48,7 @@ class User < ActiveRecord::Base
attr_accessor :login attr_accessor :login
scope :search_order, order("CHAR_LENGTH(uname) ASC") 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 :search, lambda {|q| where("uname ILIKE ?", "%#{q.strip}%")}
scope :opened, where('1=1') scope :opened, where('1=1')
scope :banned, where(:role => 'banned') scope :banned, where(:role => 'banned')

View File

@ -17,8 +17,8 @@ ActiveRecord::Schema.define(:version => 20120329182602) do
t.integer "user_id", :null => false t.integer "user_id", :null => false
t.string "kind" t.string "kind"
t.text "data" t.text "data"
t.datetime "created_at" t.datetime "created_at", :null => false
t.datetime "updated_at" t.datetime "updated_at", :null => false
end end
create_table "arches", :force => true do |t| create_table "arches", :force => true do |t|
@ -268,11 +268,11 @@ ActiveRecord::Schema.define(:version => 20120329182602) do
t.text "description" t.text "description"
t.string "ancestry" t.string "ancestry"
t.boolean "has_issues", :default => true t.boolean "has_issues", :default => true
t.boolean "has_wiki", :default => false
t.string "srpm_file_name" t.string "srpm_file_name"
t.string "srpm_content_type" t.string "srpm_content_type"
t.integer "srpm_file_size" t.integer "srpm_file_size"
t.datetime "srpm_updated_at" t.datetime "srpm_updated_at"
t.boolean "has_wiki", :default => false
t.string "default_branch", :default => "master" t.string "default_branch", :default => "master"
t.boolean "is_rpm", :default => true t.boolean "is_rpm", :default => true
end end
@ -292,7 +292,6 @@ ActiveRecord::Schema.define(:version => 20120329182602) do
end end
add_index "register_requests", ["email"], :name => "index_register_requests_on_email", :unique => true, :case_sensitive => false add_index "register_requests", ["email"], :name => "index_register_requests_on_email", :unique => true, :case_sensitive => false
add_index "register_requests", ["token"], :name => "index_register_requests_on_token", :unique => true, :case_sensitive => false
create_table "relations", :force => true do |t| create_table "relations", :force => true do |t|
t.integer "object_id" t.integer "object_id"
@ -351,16 +350,16 @@ ActiveRecord::Schema.define(:version => 20120329182602) do
t.string "name" t.string "name"
t.string "email", :default => "", :null => false t.string "email", :default => "", :null => false
t.string "encrypted_password", :limit => 128, :default => "", :null => false t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "password_salt", :default => "", :null => false
t.string "reset_password_token" t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.text "ssh_key"
t.string "uname" t.string "uname"
t.string "role" t.string "role"
t.string "language", :default => "en" t.string "language", :default => "en"
t.integer "own_projects_count", :default => 0, :null => false t.integer "own_projects_count", :default => 0, :null => false
t.datetime "reset_password_sent_at"
t.text "professional_experience" t.text "professional_experience"
t.string "site" t.string "site"
t.string "company" t.string "company"