BigW Consortium Gitlab

notification_settings_controller.rb 1.31 KB
Newer Older
1 2 3 4
class NotificationSettingsController < ApplicationController
  before_action :authenticate_user!

  def create
5 6 7
    return render_404 unless can_read?(resource)

    @notification_setting = current_user.notification_settings_for(resource)
8 9 10 11 12 13 14 15 16 17 18 19 20 21
    @saved = @notification_setting.update_attributes(notification_setting_params)

    render_response
  end

  def update
    @notification_setting = current_user.notification_settings.find(params[:id])
    @saved = @notification_setting.update_attributes(notification_setting_params)

    render_response
  end

  private

22 23 24 25 26 27
  def resource
    @resource ||=
      if params[:project_id].present?
        Project.find(params[:project_id])
      elsif params[:namespace_id].present?
        Group.find(params[:namespace_id])
28 29 30 31 32 33 34 35 36 37
      end
  end

  def can_read?(resource)
    ability_name = resource.class.name.downcase
    ability_name = "read_#{ability_name}".to_sym

    can?(current_user, ability_name, resource)
  end

38 39
  def render_response
    render json: {
40
      html: view_to_html_string("shared/notifications/_button", notification_setting: @notification_setting),
41 42 43 44 45 46 47 48 49 50
      saved: @saved
    }
  end

  def notification_setting_params
    allowed_fields = NotificationSetting::EMAIL_EVENTS.dup
    allowed_fields << :level
    params.require(:notification_setting).permit(allowed_fields)
  end
end