docbrown/app/controllers/admin/badge_achievements_controller.rb
Ben Halpern 78f9bec3e7
Allow admin to declare whether to include the badge description in message (#20684)
* Allow admin to declare whether to include the badge description in badge achievement message

* Update spec/services/badges/award_spec.rb

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add proper acceptance to tests

* Tweak tests

* Switch to kwargs

* Clean up test acceptance

* Change interface

* Update spec/requests/admin/badge_achievements_spec.rb

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update app/services/badges/award.rb

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Adjust interface

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-28 11:02:58 -05:00

57 lines
1.8 KiB
Ruby

module Admin
class BadgeAchievementsController < Admin::ApplicationController
layout "admin"
def index
@q = BadgeAchievement
.includes(:badge)
.includes(:user)
.order(created_at: :desc)
.ransack(params[:q])
@badge_achievements = @q.result.page(params[:page] || 1).per(15)
end
def destroy
@badge_achievement = BadgeAchievement.find(params[:id])
if @badge_achievement.destroy
render json: { message: I18n.t("admin.badge_achievements_controller.deleted") }, status: :ok
else
render json: { error: "Something went wrong." }, status: :unprocessable_entity
end
end
def award
@all_badges = Badge.select(:title, :slug).order(title: :asc)
end
def award_badges
if permitted_params[:badge].blank?
raise ArgumentError,
I18n.t("admin.badge_achievements_controller.award")
end
usernames = permitted_params[:usernames].downcase.split(/\s*,\s*/)
include_default_description = permitted_params[:include_default_description] == "1"
message = permitted_params[:message_markdown].presence ||
I18n.t("admin.badge_achievements_controller.congrats", community: ::Settings::Community.community_name)
BadgeAchievements::BadgeAwardWorker
.perform_async(usernames,
permitted_params[:badge],
message,
include_default_description)
flash[:success] = I18n.t("admin.badge_achievements_controller.rewarded")
redirect_to admin_badge_achievements_path
rescue ArgumentError => e
flash[:danger] = e.message
redirect_to admin_badge_achievements_path
end
private
def permitted_params
params.permit(:usernames, :badge, :message_markdown, :include_default_description)
end
end
end