forgottn/collegetrack_portal

View on GitHub
app/controllers/email_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class EmailController < ApplicationController

  before_filter :ensure_sign_in
  include SalesforceClient

  def new
    # Set filter values for _filter partial
    @filter_values = get_filter_values
  end

  def create
    # Create message with Mail object
    @message = Mail.new(msg_header)
    @message.html_part = msg_body
    @message.header["X-Bcc"] = @message.bcc

    # add attachments to message from file system
    current_user.add_attachments = files_param
    current_user.attachments.each do |attachment|
      @message.add_file attachment.path
    end

    # Clean up the current attachments
    current_user.clean_up_files

    email_handler and return
  end

  def email_handler
    if params['user_action'] == "Send"
      flash[:notice] = "Message sent successfully"
      begin
        gmail_encoded.deliver
      rescue
        true
      end
    else
      flash[:notice] = "Draft saved in Gmail account"
      gmail_encoded.create_draft
    end

    render json: { success: true, status: 'redirect', to: new_email_url }.to_json
  end

  def delete
    flash[:notice] = "Message has been deleted"
    redirect_to new_email_path
  end

  def email_list
    filters = params[:filters]
    render json: generate_email(filters).to_json
  end

  def user_list
    user_list = User.selectize
    render json: user_list
  end

  private

    def files_param
      params.require(:email).fetch(:files, {}).try(:permit!).values
    end

    def msg_header
      params[:email].select { |k,v| /to|cc|bcc|subject/ === k }
    end

    def msg_body
      content = params[:email][:body]
      Mail::Part.new do
        content_type 'text/html; charset=UTF-8'
        body content
      end
    end

    def gmail_encoded
      # Setup Gmail client
      Gmail.client_id = ENV['GOOGLE_ID']
      Gmail.client_secret = ENV['GOOGLE_SECRET']
      Gmail.refresh_token = current_user.refresh_token

      # Encode the Mail object into Gmail raw message
      raw = Base64.urlsafe_encode64 @message.to_s.sub("X-Bcc", "bcc")
      Gmail::Message.new(raw: raw)
    end

end