Use resourceful route for message reply

This commit is contained in:
Anton Khorev 2025-01-02 11:41:43 +03:00
parent 7286ad027c
commit 0016c6f4b1
9 changed files with 128 additions and 107 deletions

View file

@ -0,0 +1,50 @@
module Messages
class RepliesController < ApplicationController
layout "site"
before_action :authorize_web
before_action :set_locale
authorize_resource :class => Message
before_action :check_database_readable
before_action :check_database_writable
allow_thirdparty_images
# Allow the user to reply to another message.
def new
message = Message.find(params[:message_id])
if message.recipient == current_user
message.update(:message_read => true)
@message = Message.new(
:recipient => message.sender,
:title => "Re: #{message.title.sub(/^Re:\s*/, '')}",
:body => "On #{message.sent_on} #{message.sender.display_name} wrote:\n\n#{message.body.gsub(/^/, '> ')}"
)
@title = @message.title
render "messages/new"
elsif message.sender == current_user
@message = Message.new(
:recipient => message.recipient,
:title => "Re: #{message.title.sub(/^Re:\s*/, '')}",
:body => "On #{message.sent_on} #{message.sender.display_name} wrote:\n\n#{message.body.gsub(/^/, '> ')}"
)
@title = @message.title
render "messages/new"
else
flash[:notice] = t ".wrong_user", :user => current_user.display_name
redirect_to login_path(:referer => request.fullpath)
end
rescue ActiveRecord::RecordNotFound
@title = t "messages.no_such_message.title"
render "messages/no_such_message", :status => :not_found
end
end
end

View file

@ -10,7 +10,7 @@ class MessagesController < ApplicationController
before_action :lookup_user, :only => [:new, :create]
before_action :check_database_readable
before_action :check_database_writable, :only => [:new, :create, :reply, :mark, :destroy]
before_action :check_database_writable, :only => [:new, :create, :mark, :destroy]
allow_thirdparty_images :only => [:new, :create, :show]
@ -73,41 +73,6 @@ class MessagesController < ApplicationController
render :action => "no_such_message", :status => :not_found
end
# Allow the user to reply to another message.
def reply
message = Message.find(params[:message_id])
if message.recipient == current_user
message.update(:message_read => true)
@message = Message.new(
:recipient => message.sender,
:title => "Re: #{message.title.sub(/^Re:\s*/, '')}",
:body => "On #{message.sent_on} #{message.sender.display_name} wrote:\n\n#{message.body.gsub(/^/, '> ')}"
)
@title = @message.title
render :action => "new"
elsif message.sender == current_user
@message = Message.new(
:recipient => message.recipient,
:title => "Re: #{message.title.sub(/^Re:\s*/, '')}",
:body => "On #{message.sent_on} #{message.sender.display_name} wrote:\n\n#{message.body.gsub(/^/, '> ')}"
)
@title = @message.title
render :action => "new"
else
flash[:notice] = t ".wrong_user", :user => current_user.display_name
redirect_to login_path(:referer => request.fullpath)
end
rescue ActiveRecord::RecordNotFound
@title = t "messages.no_such_message.title"
render :action => "no_such_message", :status => :not_found
end
# Set the message as being read or unread.
def mark
@message = current_user.messages.unscope(:where => :muted).find(params[:message_id])