* Configure Delete Channel functionality * Add specs * Remove unnecessary variable * Address PR review comments * Revert optimization of any_admin? method * Implement @any_admin? properly * Fix markup to fix the styling Co-authored-by: rhymes <rhymes@hey.com>
58 lines
1.7 KiB
Ruby
58 lines
1.7 KiB
Ruby
module Admin
|
|
class ChatChannelsController < Admin::ApplicationController
|
|
layout "admin"
|
|
|
|
def index
|
|
@q = ChatChannel.where(channel_type: "invite_only").includes(:users).ransack(params[:q])
|
|
@group_chat_channels = @q.result.page(params[:page]).per(50)
|
|
end
|
|
|
|
def create
|
|
ChatChannels::CreateWithUsers.call(
|
|
users: users_by_param,
|
|
channel_type: "invite_only",
|
|
contrived_name: chat_channel_params[:channel_name],
|
|
membership_role: "mod",
|
|
)
|
|
redirect_back(fallback_location: "/admin/chat_channels")
|
|
end
|
|
|
|
def update
|
|
@chat_channel = ChatChannel.find(params[:id])
|
|
@chat_channel.invite_users(users: users_by_param)
|
|
redirect_back(fallback_location: "/admin/chat_channels")
|
|
end
|
|
|
|
def remove_user
|
|
@chat_channel = ChatChannel.find(params[:id])
|
|
@chat_channel.remove_user(user_by_param)
|
|
redirect_back(fallback_location: "/admin/chat_channels")
|
|
end
|
|
|
|
def destroy
|
|
@chat_channel = ChatChannel.find(params[:id])
|
|
if @chat_channel.users.count.zero?
|
|
@chat_channel.destroy
|
|
flash[:success] = "Channel was successfully deleted."
|
|
else
|
|
flash[:alert] = "Channel NOT deleted, because it still has users."
|
|
end
|
|
redirect_back(fallback_location: "/admin/chat_channels")
|
|
end
|
|
|
|
private
|
|
|
|
def users_by_param
|
|
User.where(username: chat_channel_params[:usernames_string].downcase.delete(" ").split(","))
|
|
end
|
|
|
|
def user_by_param
|
|
User.find_by(username: chat_channel_params[:username_string])
|
|
end
|
|
|
|
def chat_channel_params
|
|
allowed_params = %i[usernames_string channel_name username_string]
|
|
params.require(:chat_channel).permit(allowed_params)
|
|
end
|
|
end
|
|
end
|