mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 00:05:50 +08:00
6dd4bc7d57
Group owners are regular users that can add or remove users to a group The Admin UX allows admins to appoint group owners The public group UX will display group owners first and unlock UI to add and remove members Group owners can only be appointed on non automatic groups Group owners may not appoint another group owner
76 lines
2.1 KiB
Ruby
76 lines
2.1 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
|
|
# owner :boolean default(FALSE), 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
|
|
#
|