100 lines
2.2 KiB
Ruby
100 lines
2.2 KiB
Ruby
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||
|
|
||
|
class FormController < ApplicationController
|
||
|
|
||
|
def config
|
||
|
return if !enabled?
|
||
|
|
||
|
api_path = Rails.configuration.api_path
|
||
|
http_type = Setting.get('http_type')
|
||
|
fqdn = Setting.get('fqdn')
|
||
|
|
||
|
endpoint = "#{http_type}://#{fqdn}#{api_path}/form_submit"
|
||
|
|
||
|
config = {
|
||
|
enabled: Setting.get('form_ticket_create'),
|
||
|
endpoint: endpoint,
|
||
|
}
|
||
|
|
||
|
render json: config, status: :ok
|
||
|
end
|
||
|
|
||
|
def submit
|
||
|
return if !enabled?
|
||
|
|
||
|
# validate input
|
||
|
errors = {}
|
||
|
if !params[:name] || params[:name].empty?
|
||
|
errors['name'] = 'required'
|
||
|
end
|
||
|
if !params[:email] || params[:email].empty?
|
||
|
errors['email'] = 'required'
|
||
|
end
|
||
|
if params[:email] !~ /@/
|
||
|
errors['email'] = 'invalid'
|
||
|
end
|
||
|
if !params[:body] || params[:body].empty?
|
||
|
errors['body'] = 'required'
|
||
|
end
|
||
|
|
||
|
if errors && !errors.empty?
|
||
|
render json: {
|
||
|
errors: errors
|
||
|
}, status: :ok
|
||
|
return
|
||
|
end
|
||
|
|
||
|
name = params[:name].strip
|
||
|
email = params[:email].strip.downcase
|
||
|
|
||
|
customer = User.find_by(email: email)
|
||
|
if !customer
|
||
|
roles = Role.where( name: 'Customer' )
|
||
|
customer = User.create(
|
||
|
firstname: name,
|
||
|
lastname: '',
|
||
|
email: email,
|
||
|
password: '',
|
||
|
active: true,
|
||
|
roles: roles,
|
||
|
updated_by_id: 1,
|
||
|
created_by_id: 1,
|
||
|
)
|
||
|
end
|
||
|
|
||
|
ticket = Ticket.create(
|
||
|
group_id: 1,
|
||
|
customer_id: customer.id,
|
||
|
title: '',
|
||
|
state_id: Ticket::State.find_by( name: 'new' ).id,
|
||
|
priority_id: Ticket::Priority.find_by( name: '2 normal' ).id,
|
||
|
updated_by_id: customer.id,
|
||
|
created_by_id: customer.id,
|
||
|
)
|
||
|
|
||
|
article = Ticket::Article.create(
|
||
|
ticket_id: ticket.id,
|
||
|
type_id: Ticket::Article::Type.find_by( name: 'web' ).id,
|
||
|
sender_id: Ticket::Article::Sender.find_by( name: 'Customer' ).id,
|
||
|
body: params[:body],
|
||
|
from: email,
|
||
|
subject: '',
|
||
|
internal: false,
|
||
|
updated_by_id: customer.id,
|
||
|
created_by_id: customer.id,
|
||
|
)
|
||
|
|
||
|
result = {}
|
||
|
render json: result, status: :ok
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def enabled?
|
||
|
return true if Setting.get('form_ticket_create')
|
||
|
response_access_deny
|
||
|
false
|
||
|
end
|
||
|
|
||
|
end
|