Add contact form
This commit is contained in:
parent
41815cfb1c
commit
bad107ffae
5 changed files with 201 additions and 0 deletions
12
app/assets/stylesheets/new_design/contact.scss
Normal file
12
app/assets/stylesheets/new_design/contact.scss
Normal file
|
@ -0,0 +1,12 @@
|
|||
$default-space: 15px;
|
||||
$contact-padding: $default-space * 2;
|
||||
|
||||
#contact-form {
|
||||
width: 1040px;
|
||||
margin: 0 auto;
|
||||
padding-top: $contact-padding;
|
||||
|
||||
.description {
|
||||
padding-bottom: $contact-padding;
|
||||
}
|
||||
}
|
74
app/controllers/support_controller.rb
Normal file
74
app/controllers/support_controller.rb
Normal file
|
@ -0,0 +1,74 @@
|
|||
class SupportController < ApplicationController
|
||||
layout "new_application"
|
||||
|
||||
def index
|
||||
setup_context
|
||||
end
|
||||
|
||||
def create
|
||||
if direct_message? && create_commentaire
|
||||
flash.notice = "Votre message a été envoyé sur la messagerie de votre dossier."
|
||||
|
||||
redirect_to users_dossier_recapitulatif_path(dossier)
|
||||
elsif create_conversation
|
||||
flash.notice = "Votre message a été envoyé."
|
||||
|
||||
redirect_to root_path
|
||||
else
|
||||
setup_context
|
||||
flash.now.alert = "Une erreur est survenue. Vous pouvez nous contactez à #{CONTACT_EMAIL}."
|
||||
|
||||
render :index
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def setup_context
|
||||
@dossier_id = dossier&.id
|
||||
@tags = params[:tags]
|
||||
@options = Helpscout::FormAdapter::OPTIONS
|
||||
end
|
||||
|
||||
def create_conversation
|
||||
Helpscout::FormAdapter.new(
|
||||
subject: params[:subject],
|
||||
email: email,
|
||||
text: params[:text],
|
||||
file: params[:file],
|
||||
dossier_id: dossier&.id,
|
||||
browser: browser_name,
|
||||
tags: tags
|
||||
).send_form
|
||||
end
|
||||
|
||||
def create_commentaire
|
||||
dossier.commentaires.create(
|
||||
email: email,
|
||||
file: params[:file],
|
||||
body: "[#{params[:subject]}]<br><br>#{params[:text]}"
|
||||
)
|
||||
end
|
||||
|
||||
def tags
|
||||
[params[:tags], params[:type]].flatten.compact
|
||||
end
|
||||
|
||||
def browser_name
|
||||
if browser.known?
|
||||
"#{browser.name} #{browser.version} (#{browser.platform.name})"
|
||||
end
|
||||
end
|
||||
|
||||
def direct_message?
|
||||
user_signed_in? && params[:type] == Helpscout::FormAdapter::TYPE_INSTRUCTION && dossier.present?
|
||||
end
|
||||
|
||||
def dossier
|
||||
@dossier ||= current_user&.dossiers&.find_by(id: params[:dossier_id])
|
||||
end
|
||||
|
||||
def email
|
||||
logged_user ? logged_user.email : params[:email]
|
||||
end
|
||||
end
|
48
app/views/support/index.html.haml
Normal file
48
app/views/support/index.html.haml
Normal file
|
@ -0,0 +1,48 @@
|
|||
- content_for(:title, 'Contact')
|
||||
|
||||
#contact-form
|
||||
.container
|
||||
%h1.new-h1 Contact
|
||||
|
||||
.description
|
||||
Contactez-nous via ce formulaire et nous vous répondrons dans les plus brefs délais.
|
||||
Pensez bien à nous donner le plus d'informations possible pour que nous puissions vous aider au mieux.
|
||||
|
||||
= form_tag contact_path, method: :post, multipart: true, class: 'form' do |f|
|
||||
- if !logged_in?
|
||||
.contact-champ
|
||||
= label_tag :email do
|
||||
Email
|
||||
%span.mandatory *
|
||||
= text_field_tag :email, '', required: true
|
||||
|
||||
.contact-champ
|
||||
= label_tag :type do
|
||||
Votre problème
|
||||
%span.mandatory *
|
||||
= select_tag :type, options_for_select(@options)
|
||||
|
||||
.contact-champ
|
||||
= label_tag :dossier_id, 'Numéro du dossier concerné'
|
||||
= text_field_tag :dossier_id, @dossier_id
|
||||
|
||||
.contact-champ
|
||||
= label_tag :subject do
|
||||
Sujet
|
||||
%span.mandatory *
|
||||
= text_field_tag :subject, '', required: true
|
||||
|
||||
.contact-champ
|
||||
= label_tag :text do
|
||||
Message
|
||||
%span.mandatory *
|
||||
= text_area_tag :text, '', rows: 6, required: true
|
||||
|
||||
.contact-champ
|
||||
= label_tag :text, 'Pièce jointe'
|
||||
= file_field_tag :file
|
||||
|
||||
= hidden_field_tag :tags, @tags
|
||||
|
||||
.send-wrapper
|
||||
= button_tag 'Envoyer le message', type: :submit, class: 'button send primary'
|
|
@ -120,6 +120,9 @@ Rails.application.routes.draw do
|
|||
|
||||
get "patron" => "root#patron"
|
||||
|
||||
get "contact" => "support#index"
|
||||
post "contact" => "support#create"
|
||||
|
||||
#
|
||||
# Deprecated UI
|
||||
#
|
||||
|
|
64
spec/controllers/support_controller_spec.rb
Normal file
64
spec/controllers/support_controller_spec.rb
Normal file
|
@ -0,0 +1,64 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe SupportController, type: :controller do
|
||||
render_views
|
||||
|
||||
context 'signed in' do
|
||||
before do
|
||||
sign_in user
|
||||
end
|
||||
let(:user) { create(:user) }
|
||||
|
||||
describe "with dossier" do
|
||||
let(:user) { dossier.user }
|
||||
let(:dossier) { create(:dossier) }
|
||||
|
||||
it 'should fill dossier_id' do
|
||||
get :index, params: { dossier_id: dossier.id }
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).to include("#{dossier.id}")
|
||||
end
|
||||
|
||||
it 'should not have email field' do
|
||||
get :index
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).not_to have_content("Email *")
|
||||
end
|
||||
end
|
||||
|
||||
describe "with dossier" do
|
||||
let(:tag) { 'yolo' }
|
||||
|
||||
it 'should fill tags' do
|
||||
get :index, params: { tags: [tag] }
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).to include(tag)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'signed out' do
|
||||
describe "with dossier" do
|
||||
it 'should have email field' do
|
||||
get :index
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).to have_content("Email *")
|
||||
end
|
||||
end
|
||||
|
||||
describe "with dossier" do
|
||||
let(:tag) { 'yolo' }
|
||||
|
||||
it 'should fill tags' do
|
||||
get :index, params: { tags: [tag] }
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).to include(tag)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue