You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.5 KiB

  1. # frozen_string_literal: true
  2. class Admin::AnnouncementsController < Admin::BaseController
  3. before_action :set_announcements, only: :index
  4. before_action :set_announcement, except: [:index, :new, :create]
  5. def index
  6. authorize :announcement, :index?
  7. end
  8. def new
  9. authorize :announcement, :create?
  10. @announcement = Announcement.new
  11. end
  12. def create
  13. authorize :announcement, :create?
  14. @announcement = Announcement.new(resource_params)
  15. if @announcement.save
  16. log_action :create, @announcement
  17. redirect_to admin_announcements_path
  18. else
  19. render :new
  20. end
  21. end
  22. def edit
  23. authorize :announcement, :update?
  24. end
  25. def update
  26. authorize :announcement, :update?
  27. if @announcement.update(resource_params)
  28. log_action :update, @announcement
  29. redirect_to admin_announcements_path
  30. else
  31. render :edit
  32. end
  33. end
  34. def destroy
  35. authorize :announcement, :destroy?
  36. @announcement.destroy!
  37. log_action :destroy, @announcement
  38. redirect_to admin_announcements_path
  39. end
  40. private
  41. def set_announcements
  42. @announcements = AnnouncementFilter.new(filter_params).results.page(params[:page])
  43. end
  44. def set_announcement
  45. @announcement = Announcement.find(params[:id])
  46. end
  47. def filter_params
  48. params.slice(*AnnouncementFilter::KEYS).permit(*AnnouncementFilter::KEYS)
  49. end
  50. def resource_params
  51. params.require(:announcement).permit(:text, :scheduled_at, :starts_at, :ends_at, :all_day)
  52. end
  53. end