mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 09:17:30 +08:00
75 lines
2.0 KiB
Ruby
75 lines
2.0 KiB
Ruby
class GroupUser < ActiveRecord::Base
|
|
belongs_to :group, counter_cache: "user_count"
|
|
belongs_to :user
|
|
|
|
after_save :update_title
|
|
after_destroy :remove_title
|
|
|
|
after_save :set_primary_group
|
|
after_destroy :remove_primary_group
|
|
|
|
after_save :grant_trust_level
|
|
|
|
protected
|
|
|
|
def set_primary_group
|
|
if group.primary_group
|
|
self.class.exec_sql("UPDATE users
|
|
SET primary_group_id = :id
|
|
WHERE id = :user_id",
|
|
id: group.id, user_id: user_id)
|
|
end
|
|
end
|
|
|
|
def remove_primary_group
|
|
self.class.exec_sql("UPDATE users
|
|
SET primary_group_id = NULL
|
|
WHERE id = :user_id AND primary_group_id = :id",
|
|
id: group.id, user_id: user_id)
|
|
|
|
end
|
|
|
|
def remove_title
|
|
if group.title.present?
|
|
self.class.exec_sql("UPDATE users SET title = NULL
|
|
WHERE title = :title AND id = :id",
|
|
id: user_id,
|
|
title: group.title)
|
|
end
|
|
end
|
|
|
|
def update_title
|
|
if group.title.present?
|
|
self.class.exec_sql("UPDATE users SET title = :title
|
|
WHERE (title IS NULL OR title = '') AND id = :id",
|
|
id: user_id,
|
|
title: group.title)
|
|
end
|
|
end
|
|
|
|
def grant_trust_level
|
|
return if group.grant_trust_level.nil?
|
|
if user.trust_level < group.grant_trust_level
|
|
user.change_trust_level!(group.grant_trust_level)
|
|
user.trust_level_locked = true
|
|
user.save
|
|
end
|
|
end
|
|
end
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: group_users
|
|
#
|
|
# id :integer not null, primary key
|
|
# group_id :integer not null
|
|
# user_id :integer not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_group_users_on_group_id_and_user_id (group_id,user_id) UNIQUE
|
|
# index_group_users_on_user_id_and_group_id (user_id,group_id) UNIQUE
|
|
#
|