Add basic structures for UserMute and Message muting logic

Including models, migration, controllers, views & locales.
This commit is contained in:
Gregory Igelmund 2023-12-13 13:06:28 -05:00
parent 6eb29bf6d4
commit efc61f1315
18 changed files with 346 additions and 12 deletions

View file

@ -47,7 +47,7 @@ class MessagesController < ApplicationController
render :action => "new"
elsif @message.save
flash[:notice] = t ".message_sent"
UserMailer.message_notification(@message).deliver_later
UserMailer.message_notification(@message).deliver_later if @message.notify_recipient?
redirect_to :action => :inbox
else
@title = t "messages.new.title"
@ -107,6 +107,13 @@ class MessagesController < ApplicationController
@title = t ".title"
end
# Display the list of muted messages received by the user.
def muted
@title = t ".title"
redirect_to inbox_messages_path if current_user.muted_messages.none?
end
# Set the message as being read or unread.
def mark
@message = Message.where(:recipient => current_user).or(Message.where(:sender => current_user)).find(params[:message_id])
@ -127,6 +134,23 @@ class MessagesController < ApplicationController
render :action => "no_such_message", :status => :not_found
end
# Moves message into Inbox by unsetting the muted-flag
def unmute
message = current_user.muted_messages.find(params[:message_id])
if message.unmute
flash[:notice] = t(".notice")
else
flash[:error] = t(".error")
end
if current_user.muted_messages.none?
redirect_to inbox_messages_path
else
redirect_to muted_messages_path
end
end
private
##

View file

@ -0,0 +1,45 @@
class UserMutesController < ApplicationController
include UserMethods
layout "site"
before_action :authorize_web
before_action :set_locale
authorize_resource
before_action :lookup_user, :only => [:create, :destroy]
before_action :check_database_readable
before_action :check_database_writable, :only => [:create, :destroy]
def index
@muted_users = current_user.muted_users
@title = t ".title"
redirect_to edit_account_path unless @muted_users.any?
end
def create
user_mute = current_user.mutes.build(:subject => @user)
if user_mute.save
flash[:notice] = t(".notice", :name => user_mute.subject.display_name)
else
flash[:error] = t(".error", :name => user_mute.subject.display_name, :full_message => user_mute.errors.full_messages.to_sentence.humanize)
end
redirect_back_or_to user_mutes_path(current_user)
end
def destroy
user_mute = current_user.mutes.find_by!(:subject => @user)
if user_mute.destroy
flash[:notice] = t(".notice", :name => user_mute.subject.display_name)
else
flash[:error] = t(".error")
end
redirect_back_or_to user_mutes_path(current_user)
end
end