From 6ef3eef0052f55a39ebe5f3197bc84d383946889 Mon Sep 17 00:00:00 2001 From: Andre Bernardes Date: Thu, 3 Jul 2014 18:09:53 -0300 Subject: [PATCH] Creating new EmailContact model for sending work assignment notifications. --- plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb | 24 ++++++++++++------------ plugins/work_assignment/lib/ext/email_contact.rb | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/work_assignment/lib/ext/person.rb | 7 +++++++ plugins/work_assignment/views/work_assignment_plugin_cms/send_email.html.erb | 8 ++++---- 4 files changed, 81 insertions(+), 16 deletions(-) create mode 100644 plugins/work_assignment/lib/ext/email_contact.rb create mode 100644 plugins/work_assignment/lib/ext/person.rb diff --git a/plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb b/plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb index e2c6f83..6be6e7b 100644 --- a/plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb +++ b/plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb @@ -43,27 +43,27 @@ class WorkAssignmentPluginCmsController < CmsController @parent = check_parent(params[:id]) @files_id_list = params[:files_id] @target = ['',@parent.url[:profile], @parent.url[:page]].join('/') - @contact + @email_contact if request.post? && params[:confirm] == 'true' @files_paths = [] - @files_id_list = params[:self_files_id] + @files_string = params[:self_files_id] + @files_id_list = @files_string.split(' ') @files_id_list.each do |file_id| @file = environment.articles.find_by_id(file_id) - @real_file_url = "http://#{@file.url[:host]}:#{@file.url[:port]}/ #{@file.url[:profile]}/#{@file.path}" + @real_file_url = "http://#{@file.url[:host]}:#{@file.url[:port]}/#{@file.url[:profile]}/#{@file.path}" @files_paths << @real_file_url - unless params[:contact][:message].include? "#{@real_file_url}" - params[:contact][:message] += "
Clique aqui para acessar o arquivo ou acesse pela URL:
" - params[:contact][:message] += "
#{@real_file_url}" + unless params[:email_contact][:message].include? "#{@real_file_url}" + params[:email_contact][:message] += "
Clique aqui para acessar o arquivo ou acesse pela URL:
" + params[:email_contact][:message] += "
#{@real_file_url}" end end @message = "AVISO: O aluno deve imprimir este email e entrega-lo na secretaria como comprovante do envio!" - unless params[:contact][:message].include? "#{@message}" - params[:contact][:message] += "

#{@message}" + unless params[:email_contact][:message].include? "#{@message}" + params[:email_contact][:message] += "

#{@message}" end - - @contact = user.build_contact(profile, params[:contact]) - if @contact.deliver + @email_contact = user.build_email_contact(params[:email_contact]) + if @email_contact.deliver session[:notice] = _('Contact successfully sent') redirect_to @target else @@ -79,7 +79,7 @@ class WorkAssignmentPluginCmsController < CmsController redirect_to :action => 'index' end else - @contact = user.build_contact(profile) + @email_contact = user.build_email_contact() end end diff --git a/plugins/work_assignment/lib/ext/email_contact.rb b/plugins/work_assignment/lib/ext/email_contact.rb new file mode 100644 index 0000000..4abb642 --- /dev/null +++ b/plugins/work_assignment/lib/ext/email_contact.rb @@ -0,0 +1,58 @@ +class EmailContact + + include ActiveModel::Validations + + def initialize(attributes = nil) + if attributes + attributes.each do |attr,value| + self.send("#{attr}=", value) + end + end + end + + attr_accessor :name + attr_accessor :subject + attr_accessor :message + attr_accessor :email + attr_accessor :receive_a_copy + attr_accessor :reciever + attr_accessor :sender + + N_('Subject'); N_('Message'); N_('e-Mail'); N_('Name') + + validates_presence_of :subject, :email, :message, :name + validates_format_of :email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda {|o| !o.email.blank?}) + + def deliver + return false unless self.valid? + EmailContact::EmailSender.notification(self).deliver + end + + class EmailSender < ActionMailer::Base + def notification(email_contact) + @name = email_contact.name + @email = email_contact.email + @message = email_contact.message + @target = email_contact.reciever + + options = { + content_type: 'text/html', + to: email_contact.reciever, + reply_to: email_contact.email, + subject: email_contact.subject, + from: "#{email_contact.name} <#{email_contact.email}>" + } + + if email_contact.sender + options.merge!('X-Noosfero-Sender' => email_contact.sender.identifier) + end + + if email_contact.receive_a_copy + options.merge!(cc: "#{email_contact.name} <#{email_contact.email}>") + end + + mail(options) + end + end + +end diff --git a/plugins/work_assignment/lib/ext/person.rb b/plugins/work_assignment/lib/ext/person.rb new file mode 100644 index 0000000..0eb64c3 --- /dev/null +++ b/plugins/work_assignment/lib/ext/person.rb @@ -0,0 +1,7 @@ +require_dependency 'person' + +class Person + def build_email_contact(params = {}) + EmailContact.new(params.merge(:name => name, :email => email, :sender => self)) + end +end \ No newline at end of file diff --git a/plugins/work_assignment/views/work_assignment_plugin_cms/send_email.html.erb b/plugins/work_assignment/views/work_assignment_plugin_cms/send_email.html.erb index 3f854b5..d4ef2ee 100644 --- a/plugins/work_assignment/views/work_assignment_plugin_cms/send_email.html.erb +++ b/plugins/work_assignment/views/work_assignment_plugin_cms/send_email.html.erb @@ -1,20 +1,20 @@ -<%= error_messages_for 'contact' %> +<%= error_messages_for 'email_contact' %> -<%=labelled_form_for :contact do |f| %> +<%=labelled_form_for :email_contact do |f| %> <%= hidden_field_tag(:confirm, 'false') %> <%= hidden_field_tag(:self_files_id, @files_id_list) %> <%= required_fields_message %> <%= required f.text_field(:subject) %> - <%# required f.text_field(:dest) %> + <%= required f.text_field(:reciever) %> <%= required f.text_field(:name) %> <%= render :file => 'shared/tiny_mce' %> <%= required f.text_area(:message, :class => 'mceEditor') %> - <%= labelled_form_field check_box(:contact, :receive_a_copy) + _('I want to receive a copy of the message in my e-mail.'), '' %> + <%= labelled_form_field check_box(:email_contact, :receive_a_copy) + _('I want to receive a copy of the message in my e-mail.'), '' %> <%= submit_button(:send, _('Send'), :onclick => "$('confirm').value = 'true'") %> <%= submit_button(:cancel, _('Cancel'), :onclick =>"$('confirm').value = 'false'") %> -- libgit2 0.21.2