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 @@ +
+
+ <%= render 'shared/back_link' %> + +

<%= t("proposal_notifications.new.title") %>

+ +
+

+ Este mensaje se enviará al usuario <%= @receiver.name %> +

+
+ + <%= form_for [@receiver, @direct_message] do |f| %> + <%= render "shared/errors", resource: @direct_message %> + + <%= f.label :title, t("proposal_notifications.new.title_label") %> + <%= f.text_field :title, label: false %> + + <%= f.label :body, t("proposal_notifications.new.body_label") %> + <%= f.text_area :body, label: false, rows: "3" %> + +
+ <%= f.submit t("proposal_notifications.new.submit_button"), class: "button expanded" %> +
+ <% end %> +
+
diff --git a/app/views/direct_messages/show.html.erb b/app/views/direct_messages/show.html.erb new file mode 100644 index 000000000..81303c494 --- /dev/null +++ b/app/views/direct_messages/show.html.erb @@ -0,0 +1,5 @@ +
+

<%= @direct_message.title %>

+

<%= @direct_message.body %>

+

<%= @direct_message.receiver.name %>

+
\ No newline at end of file diff --git a/app/views/mailer/direct_message.html.erb b/app/views/mailer/direct_message.html.erb new file mode 100644 index 000000000..fd1e45acc --- /dev/null +++ b/app/views/mailer/direct_message.html.erb @@ -0,0 +1,9 @@ + +

+ <%= @direct_message.title %> +

+ +

+ <%= @direct_message.body %> +

+ \ No newline at end of file diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 563b145dd..be62aef5d 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -10,6 +10,8 @@ <% end %> +

<%= link_to "Enviar un mensaje privado", new_user_direct_message_path(@user) %>

+ <% if @user.public_activity || @authorized_current_user %>