docbrown/app/controllers/admin/badges_controller.rb

69 lines
1.6 KiB
Ruby

module Admin
class BadgesController < Admin::ApplicationController
layout "admin"
def index
@badges = Badge.all
end
def new
@badge = Badge.new
end
def edit
@badge = Badge.find(params[:id])
end
def create
@badge = Badge.new(badge_params)
if @badge.save
flash[:success] = "Badge has been created!"
redirect_to admin_badges_path
else
flash[:danger] = @badge.errors_as_sentence
render new_admin_badge_path
end
end
def update
@badge = Badge.find(params[:id])
if @badge.update(badge_params)
flash[:success] = "Badge has been updated!"
redirect_to admin_badges_path
else
flash[:danger] = @badge.errors_as_sentence
render :edit
end
end
def award_badges
raise ArgumentError, "Please choose a badge to award" if permitted_params[:badge].blank?
usernames = permitted_params[:usernames].downcase.split(/\s*,\s*/)
message = permitted_params[:message_markdown].presence || "Congrats!"
BadgeAchievements::BadgeAwardWorker.perform_async(usernames, permitted_params[:badge], message)
flash[:success] = "Badges are being rewarded. The task will finish shortly."
redirect_to admin_badges_path
rescue ArgumentError => e
flash[:danger] = e.message
redirect_to admin_badges_path
end
def award
@badge = Badge.all
end
private
def badge_params
params.require(:badge).permit(:title, :slug, :description, :badge_image)
end
def permitted_params
params.permit(:usernames, :badge, :message_markdown)
end
end
end