module Alchemy # # == Sending Messages: # # To send Messages via contact forms you can create your form fields in the config.yml # # === Example: # # Make an Element with this options inside your @elements.yml file: # # - name: contactform # contents: # - name: mail_to # type: EssenceText # - name: subject # type: EssenceText # - name: mail_from # type: EssenceText # - name: success_page # type: EssenceSelect # # The fields +mail_to+, +mail_from+, +subject+ and +success_page+ are recommended. # The +Alchemy::MessagesController+ uses them to send your mails. So your customer has full controll of these values inside his contactform element. # # Then make a page layout for your contact page in the +page_layouts.yml+ file: # # - name: contact # unique: true # cache: false # elements: [pageheading, heading, contactform] # autogenerate: [contactform] # # Disabling the page caching is stronlgy recommended! # # The editor view for your element should have this layout: # # <%= render_essence_editor_by_name(element, 'mail_from') %> # <%= render_essence_editor_by_name(element, 'mail_to') %> # <%= render_essence_editor_by_name(element, 'subject') %> # <%= page_selector(element, 'success_page', page_attribute: :urlname) %> # # Please have a look at the +alchemy/config/config.yml+ file for further Message settings. # class MessagesController < Alchemy::BaseController before_filter :get_page, except: :create helper 'alchemy/pages' def index #:nodoc: redirect_to show_page_path( urlname: @page.urlname, locale: prefix_locale? ? @page.language_code : nil ) end def new #:nodoc: @message = Message.new render template: 'alchemy/pages/show' end def create #:nodoc: @message = Message.new(params[:message]) @message.ip = request.remote_ip @element = Element.find_by(id: @message.contact_form_id) if @element.nil? raise ActiveRecord::RecordNotFound, "Contact form id not found. Please pass the :contact_form_id in a hidden field. Example: <%= f.hidden_field :contact_form_id, value: element.id %>" end @page = @element.page @root_page = @page.get_language_root if @message.valid? Messages.contact_form_mail(@message, mail_to, mail_from, subject).deliver redirect_to_success_page else render template: 'alchemy/pages/show' end end private def mailer_config Alchemy::Config.get(:mailer) end def mail_to @element.ingredient(:mail_to) || mailer_config['mail_to'] end def mail_from @element.ingredient(:mail_from) || mailer_config['mail_from'] end def subject @element.ingredient(:subject) || mailer_config['subject'] end def redirect_to_success_page flash[:notice] = Alchemy.t(:success, scope: 'contactform.messages') if @element.ingredient(:success_page) urlname = @element.ingredient(:success_page) elsif mailer_config['forward_to_page'] && mailer_config['mail_success_page'] urlname = Page.find_by(urlname: mailer_config['mail_success_page']).urlname else urlname = Language.current_root_page.urlname end redirect_to show_page_path( urlname: urlname, locale: prefix_locale? ? Language.current.code : nil ) end def get_page @page = Language.current.pages.find_by(page_layout: mailer_config['page_layout_name']) if @page.blank? raise "Page for page_layout #{mailer_config['page_layout_name']} not found" end @root_page = @page.get_language_root end end end