# frozen_string_literal: true module Admin class GroupsController < BaseController before_action :set_group, except: [:index] before_action :set_accounts, only: [:show] before_action :set_filter_params def index authorize :group, :index? @groups = filtered_groups.page(params[:page]) end def show authorize :group, :index? end def update if @group.update(resource_params) redirect_to admin_group_path(@group.id), notice: I18n.t('generic.changes_saved_msg') else render action: :edit end end def destroy authorize @group, :destroy? @group.destroy! log_action :destroy, @group flash[:notice] = 'Group destroyed' redirect_to admin_groups_path end def make_me_admin GroupAccount.create(group: @group, account: current_account, role: 'admin') redirect_to admin_group_path(@group.id), notice: 'You are now an admin of this group' end private def set_group @group = Group.find(params[:id]) end def set_accounts @admins = GroupAccount.where(group: @group, role: 'admin') @mods = GroupAccount.where(group: @group, role: 'moderator') end def set_filter_params @filter_params = filter_params.to_hash.symbolize_keys end def resource_params params.require(:group).permit( :title, :description, # :slug, :tags, :is_private, :is_archived, :is_visible, :is_featured, :is_nsfw ) end def filtered_groups query = Group.order('is_featured DESC, member_count DESC') if params[:title] query = query.where("LOWER(title) LIKE LOWER(?)", "%#{params[:title]}%") end return query end def filter_params params.permit(:sort,) end end end