diff --git a/app/controllers/direct_messages_controller.rb b/app/controllers/direct_messages_controller.rb new file mode 100644 index 000000000..bcac487cd --- /dev/null +++ b/app/controllers/direct_messages_controller.rb @@ -0,0 +1,35 @@ +class DirectMessagesController < ApplicationController + skip_authorization_check + + def new + @receiver = User.find(params[:user_id]) + @direct_message = DirectMessage.new(receiver: @receiver) + end + + def create + @sender = current_user + @receiver = User.find(params[:user_id]) + + @direct_message = DirectMessage.new(parsed_params) + if @direct_message.save + Mailer.direct_message(@direct_message).deliver_later + redirect_to [@receiver, @direct_message], notice: I18n.t("flash.actions.create.direct_message") + else + render :new + end + end + + def show + @direct_message = DirectMessage.find(params[:id]) + end + + private + + def direct_message_params + params.require(:direct_message).permit(:title, :body) + end + + def parsed_params + direct_message_params.merge(sender: @sender, receiver: @receiver) + end +end \ No newline at end of file diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb index 447daabc4..2a81c4bfe 100644 --- a/app/mailers/mailer.rb +++ b/app/mailers/mailer.rb @@ -50,6 +50,15 @@ class Mailer < ApplicationMailer end end + def direct_message(direct_message) + @direct_message = direct_message + @receiver = @direct_message.receiver + + with_user(@receiver) do + mail(to: @receiver.email, subject: "Has recibido un nuevo mensaje privado") + end + end + private def with_user(user, &block) diff --git a/app/models/direct_message.rb b/app/models/direct_message.rb new file mode 100644 index 000000000..32cf6ac58 --- /dev/null +++ b/app/models/direct_message.rb @@ -0,0 +1,4 @@ +class DirectMessage < ActiveRecord::Base + belongs_to :sender, class_name: 'User', foreign_key: 'sender_id' + belongs_to :receiver, class_name: 'User', foreign_key: 'receiver_id' +end diff --git a/app/models/user.rb b/app/models/user.rb index 4839d3ced..243781cb3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -23,6 +23,7 @@ class User < ActiveRecord::Base has_many :spending_proposals, foreign_key: :author_id has_many :failed_census_calls has_many :notifications + has_many :direct_messages belongs_to :geozone validates :username, presence: true, if: :username_required? diff --git a/app/views/direct_messages/new.html.erb b/app/views/direct_messages/new.html.erb new file mode 100644 index 000000000..02e074af5 --- /dev/null +++ b/app/views/direct_messages/new.html.erb @@ -0,0 +1,27 @@ +
+ Este mensaje se enviará al usuario <%= @receiver.name %> +
+<%= @direct_message.title %>
+<%= @direct_message.body %>
+<%= @direct_message.receiver.name %>
++ <%= @direct_message.body %> +
+<%= link_to "Enviar un mensaje privado", new_user_direct_message_path(@user) %>
+ <% if @user.public_activity || @authorized_current_user %>