discourse/app/models/group_user.rb
Sam Saffron 6dd4bc7d57 FEATURE: support group owner, capable of controlling group membership
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
2015-11-10 00:56:57 +11:00

75 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
#