93 lines
2.5 KiB
Ruby
93 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
class NotificationsController < ApplicationController
|
|
before_action :set_receipts, only: [:index, :show, :mark_read, :mark_unread]
|
|
before_action :set_notification, only: [:show, :mark_read, :mark_unread]
|
|
before_action :set_receipt, only: [:show, :mark_read, :mark_unread]
|
|
|
|
def index
|
|
@notifications = current_user.mailbox.notifications
|
|
|
|
respond_to do |format|
|
|
format.html
|
|
format.json do
|
|
render json: @notifications.map do |notification|
|
|
receipt = @receipts.find_by(notification_id: notification.id)
|
|
notification.as_json.merge(is_read: receipt.is_read)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def show
|
|
@receipt.update(is_read: true)
|
|
respond_to do |format|
|
|
format.html
|
|
format.json do
|
|
render json: @notification.as_json.merge(
|
|
is_read: @receipt.is_read
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
def mark_read
|
|
@receipt.update(is_read: true)
|
|
respond_to do |format|
|
|
format.js
|
|
format.json do
|
|
render json: @notification.as_json.merge(
|
|
is_read: @receipt.is_read
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
def mark_unread
|
|
@receipt.update(is_read: false)
|
|
respond_to do |format|
|
|
format.js
|
|
format.json do
|
|
render json: @notification.as_json.merge(
|
|
is_read: @receipt.is_read
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
def unsubscribe
|
|
# TODO will a logged out user be unsubscribed after logging in?
|
|
# need to use devise stored_url or whatever
|
|
if current_user.nil?
|
|
flash[:notice] = 'Continue to unsubscribe from emails by logging in.'
|
|
return redirect_to "#{sign_in_path}?redirect_to=#{unsubscribe_notifications_path}"
|
|
end
|
|
|
|
if current_user.emails_allowed == false
|
|
return redirect_to edit_user_path(current_user), notice: 'You were already unsubscribed from emails.'
|
|
end
|
|
|
|
current_user.emails_allowed = false
|
|
success = current_user.save
|
|
|
|
if success
|
|
redirect_to edit_user_path(current_user), notice: 'You will no longer receive emails from Metamaps.'
|
|
else
|
|
flash[:alert] = 'Sorry, something went wrong. You have not been unsubscribed from emails.'
|
|
redirect_to edit_user_path(current_user)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def set_receipts
|
|
@receipts = current_user.mailboxer_notification_receipts
|
|
end
|
|
|
|
def set_notification
|
|
@notification = current_user.mailbox.notifications.find_by(id: params[:id])
|
|
end
|
|
|
|
def set_receipt
|
|
@receipt = @receipts.find_by(notification_id: params[:id])
|
|
end
|
|
end
|