class AsksController < ApplicationController
helper Admin::AsksHelper
include Admin::AsksHelper
include ActionView::Helpers::FormHelper
include ActionView::Helpers::FormOptionsHelper
helper ActionView::Helpers::UrlHelper
include ActionController::RequestForgeryProtection
include RuCaptcha::ViewHelpers
FrontendMethods = ["thank", "sorry", "see_email"]
def widget
subpart = OrbitHelper.get_current_widget
case subpart.widget_type
when /.*_form/
read_more_page = Page.where(id: subpart.read_more_page_id).first || Page.where(:module => 'ask').first
referer_url = read_more_page ? "/#{I18n.locale}#{read_more_page.url}" : "/#{I18n.locale}/asks"
module_app = ModuleApp.where(:key => "ask").first
if OrbitHelper.widget_categories.include?('all')
categories = module_app.categories.enabled
else
categories = Category.where(:id.in=>OrbitHelper.widget_categories).enabled
end
unless Category.respond_to?(:sorted)
if (module_app.asc rescue true)
categories = categories.sort_by{|category| (category.sort_number.to_i rescue category.id)}
else
categories = categories.sort_by{|category| (-category.sort_number.to_i rescue category.id)}
end
end
tags = module_app.tags
ask_question = AskQuestion.new
locale = I18n.locale
category_ids = categories.collect{|v| v.id.to_s}
ask_settings = AskCategorySetting.enabled.where(:category_id.in=> category_ids).to_a
first_category_id = category_ids.first
ask_setting = ask_settings.select{|a| a.category_id == first_category_id}.first
if ask_settings.count != categories.count
ask_settings = [AskSetting.first]+ask_settings
end
if ask_setting.nil?
ask_setting = AskSetting.first
@default_ask_setting = ask_setting
else
@default_ask_setting = AskSetting.first
end
all_fields = cal_form_from_setting(ask_setting,categories)
request = OrbitHelper.request
csrf_value = OrbitHelper.request.session[:_csrf_token] || SecureRandom.base64(32)
token_tag = hidden_field_tag('authenticity_token',csrf_value)
switch_form = cal_switch_form(ask_settings,categories,token_tag,referer_url, OrbitHelper.params[:id])
email_regex = @default_ask_setting.get_email_regex(true)
{
'fields' => all_fields,
'extras'=>{
'switch_form' => switch_form,
'email_regex' => email_regex
}
}
when /.*_pub.*/
data_count = OrbitHelper.widget_data_count.to_i
category_ids = OrbitHelper.widget_categories || []
if category_ids.blank?
module_app = ModuleApp.where(:key => "ask").first
category_ids = module_app.categories.enabled.pluck(:id)
end
default_ask_setting = AskSetting.first
ask_settings_info = category_ids.map do |category_id|
ask_setting = AskCategorySetting.enabled.where(category_id: category_id.to_s).first
ask_setting = default_ask_setting if ask_setting.nil?
custom_fields = ask_setting.custom_fields.map do |k,field_info|
options = nil
multiple = false
ext_type = 0
case field_info["type"]
when "select", "radio_button", "checkbox"
multiple = (field_info["type"] == "checkbox")
options = field_info[:options].map do |i, opt_vals|
opt_val = opt_vals[I18n.locale]
if opt_val.blank?
opt_val = opt_vals.values.select{|s| s.present?}
end
[i, opt_val]
end.to_h
when "file", "image"
ext_type = 1
when "date"
ext_type = 2
end
[k, {
options: options,
multiple: multiple,
ext_type: ext_type
}]
end
if custom_fields.present?
sort_number = ask_setting.get_cache_sort_number
custom_fields = custom_fields.sort_by do |k, v|
if k.start_with?('default@')
sort_number[k]
else
sort_number["custom@#{ask_setting.id}@#{k}"]
end
end
end
[category_id,
{
setting: ask_setting,
custom_fields: custom_fields.to_h
}
]
end.to_h
ask_questions = AskQuestion.where(:situation => 'is_published', :category_id.in => category_ids)
if data_count != 0
ask_questions = ask_questions.page(1).per(data_count)
end
ask_index_page = OrbitHelper.widget_more_url rescue nil
ask_questions = ask_questions.collect do |v|
url = ((ask_index_page+"?item=#{v.id}") rescue "javascript:alert('#{t('ask.no_index_page')}')")
category_id = v.category_id.to_s
extra_info = ask_settings_info[category_id]
d = {
"category_id" => category_id,
"link_url" => link_to(v.title,"#{url}",title: v.title),
"identity" => v[:identity],
"title" => v.title,
"name" => v.name,
"sex" => v.sex,
"content" => v.content,
"category" => v.category.title
}
ext_fields = [
{
"fk" => "ask-sex-#{v.sex}",
"fv" => ""
}
]
if extra_info.present? && extra_info[:custom_fields].present?
ext_fields += extra_info[:custom_fields].map do |k, field_opt|
fv = v.custom_values[k]
if fv.present?
options = field_opt[:options]
if options
if field_opt[:multiple]
fv = fv.values rescue []
else
fv = Array(fv)
end
fv = fv.map{|vv| options[vv]}.join("
").html_safe
else
case field_opt[:ext_type]
when 1 # file, image
fv = "#{fv[0]}".html_safe
when 2 # date
fv = fv["datetime"].values[0].values rescue []
if fv.count == 2
fv = fv[0].to_s.gsub('-', '/') + " ~ " + fv[1].to_s.gsub('-', '/')
else
fv = fv[0].to_s.gsub('-', '/')
end
end
end
end
{
"fk"=> "ask-q-#{k}",
"fv"=> fv
}
end
end
d["ext_fields"] = ext_fields
d
end
{
'ask_questions' => ask_questions,
'extras' => {'more_title'=>I18n.t('ask.more_title'),
'more_href'=>ask_index_page}
}
else
data_count = OrbitHelper.widget_data_count.to_i
category_ids = OrbitHelper.widget_categories || []
if category_ids.blank?
module_app = ModuleApp.where(:key => "ask").first
category_ids = module_app.categories.enabled.pluck(:id)
end
ask_questions = AskQuestion.where(:situation => 'is_published', :category_id.in => category_ids)
if data_count != 0
ask_questions = ask_questions.page(1).per(data_count)
end
ask_index_page = OrbitHelper.widget_more_url rescue nil
ask_questions = ask_questions.collect do |v|
url = ((ask_index_page+"?item=#{v.id}") rescue "javascript:alert('#{t('ask.no_index_page')}')")
{'td'=> [
{'content' =>v.category.title},
{'content' => link_to(v.title,"#{url}",title: v.title)}
]
}
end
{
'ask_questions' => ask_questions,
'th' => [{'td'=>t('categories')},{'td'=>t('title')}],
'extras' => {'more_title'=>I18n.t('ask.more_title'),
'more_href'=>ask_index_page}
}
end
end
def get_layout_type
@params = OrbitHelper.params
page = Page.where(url:@params['url']).first
@layout_type = 'index'
if page.methods.include? 'select_option_items'.to_sym
ModuleApp.all.select{|tmp| tmp.key.to_s=='ask'}.each do |modile_app|
@show_option_items = modile_app.show_option_items rescue nil
end
page.select_option_items.each do |select_option_item|
if !(@show_option_items.nil?) && select_option_item.field_name == @show_option_items.keys.first.to_s
value = YAML.load(select_option_item.value)
I18n.with_locale(:en) do
if value[locale] == t('ask.widget.index')
@layout_type = 'index'
elsif value[locale] == t('ask.is_published')
@layout_type = 'published_index'
end
end
end
end
end
end
def initialize
super
@app_title = 'ask'
self.request = OrbitHelper.request
end
def show
ask_question = AskQuestion.where(id: @params['item']).first
ask_setting = AskCategorySetting.enabled.where(category_id: ask_question.category_id.to_s).first
ask_setting = AskSetting.first if ask_setting.nil?
{'ask_question' => ask_question,'layout_type'=>'show','ask_setting'=>ask_setting}
end
def index
@params = OrbitHelper.params
referer_url = OrbitHelper.request.path
if @params['item'].to_s.empty?
get_layout_type
else
@layout_type = 'show'
end
if @layout_type == 'index'
module_app = ModuleApp.where(:key => "ask").first
if OrbitHelper.page_categories.include? 'all'
categories = module_app.categories.enabled
else
categories = Category.where(:id.in=>OrbitHelper.page_categories).enabled
end
unless Category.respond_to?(:sorted)
if (module_app.asc rescue true)
categories = categories.sort_by{|category| (category.sort_number.to_i rescue category.id)}
else
categories = categories.sort_by{|category| (-category.sort_number.to_i rescue category.id)}
end
end
category_ids = categories.collect{|v| v.id.to_s}
ask_settings = AskCategorySetting.enabled.where(:category_id.in=> category_ids).to_a
first_category_id = category_ids.first
ask_setting = ask_settings.select{|a| a.category_id == first_category_id}.first
if ask_settings.count != categories.count
ask_settings = [AskSetting.first]+ask_settings
end
if ask_setting.nil?
ask_setting = AskSetting.first
ask_setting = AskSetting.create() if ask_setting.nil?
@default_ask_setting = ask_setting
else
@default_ask_setting = AskSetting.first
end
csrf_value = OrbitHelper.request.session[:_csrf_token] || SecureRandom.base64(32)
token_tag = hidden_field_tag('authenticity_token',csrf_value)
switch_form = cal_switch_form(ask_settings,categories,token_tag,referer_url, @params[:id])
tags = module_app.tags
ask_question = AskQuestion.new(id: nil)
email_regex = @default_ask_setting.get_email_regex(true)
{
'layout_type' => 'index',
'ask_question' => ask_question,
'categories' => categories,
'tags' => tags,
'module_app' => module_app,
'switch_form' => switch_form,
'ask_setting' => ask_setting,
'default_ask_setting' => @default_ask_setting,
'email_regex' => email_regex
}
elsif @layout_type == 'published_index'
page_number = OrbitHelper.page_number.to_i
page_number = 1 if page_number == 0
page_data_count = OrbitHelper.page_data_count.to_i
category_ids = OrbitHelper.page_categories || []
if category_ids.blank?
module_app = ModuleApp.where(:key => "ask").first
category_ids = module_app.categories.enabled.pluck(:id)
end
default_ask_setting = AskSetting.first
ask_settings_info = category_ids.map do |category_id|
ask_setting = AskCategorySetting.enabled.where(category_id: category_id.to_s).first
ask_setting = default_ask_setting if ask_setting.nil?
custom_fields = ask_setting.custom_fields.map do |k,field_info|
options = nil
multiple = false
ext_type = 0
case field_info["type"]
when "select", "radio_button", "checkbox"
multiple = (field_info["type"] == "checkbox")
options = field_info[:options].map do |i, opt_vals|
opt_val = opt_vals[I18n.locale]
if opt_val.blank?
opt_val = opt_vals.values.select{|s| s.present?}
end
[i, opt_val]
end.to_h
when "file", "image"
ext_type = 1
when "date"
ext_type = 2
end
[k, {
options: options,
multiple: multiple,
ext_type: ext_type
}]
end
if custom_fields.present?
sort_number = ask_setting.get_cache_sort_number
custom_fields = custom_fields.sort_by do |k, v|
if k.start_with?('default@')
sort_number[k]
else
sort_number["custom@#{ask_setting.id}@#{k}"]
end
end
end
[category_id,
{
setting: ask_setting,
custom_fields: custom_fields.to_h
}
]
end.to_h
ask_questions = AskQuestion.where(:situation => 'is_published', :category_id.in => category_ids)
if page_data_count != 0
ask_questions = ask_questions.page(1).per(page_data_count)
end
{
'layout_type' => 'published_index',
'ask_questions' => ask_questions,
'ask_settings_info' => ask_settings_info,
'url' => @params['url']
}
else
show
end
end
def create
if !params[:referer_url].blank? && !params[:referer_url].to_s.start_with?("/")
render :file => "#{Rails.root}/app/views/errors/403.html", :layout => false, :status => 403 and return
end
temp_params = create_params
if temp_params[:id].present?
@ask_question = AskQuestion.where(id: temp_params[:id]).first
if @ask_question.nil?
render_404 and return
end
else
@ask_question = AskQuestion.new(:ip=>request.remote_ip)
end
new_record = @ask_question.new_record?
all_to_save = []
ask_setting = AskCategorySetting.enabled.where(category_id: params['ask_question']['category_id']).first
override_sort_number = nil
if ask_setting && ask_setting.use_default
override_sort_number = ask_setting.default_sort_number
ask_setting = nil
end
if ask_setting.nil?
ask_setting = AskSetting.first
ask_setting = AskSetting.create() if ask_setting.nil?
end
@ask_setting = ask_setting
@must_verify_email = ask_setting.must_verify_email && new_record
if @must_verify_email
only_email = true
@ask_question.is_hidden = true
else
only_email = false
check_fields = ask_setting.default_setting.select{|k,v| v}.keys & ask_setting.default_setting_required.select{|k,v| v}.keys - AskSetting::No_required
unless new_record
@ask_question.is_hidden = false
check_fields.delete('mail')
end
flag = true
check_fields.each do |f|
next if f == 'ask_category_id' || f == 'recaptcha'
if temp_params[f].blank?
flag = false
break
end
end
end
custom_values = temp_params[:custom_values]
custom_values = {} if custom_values.nil?
if flag
check_custom_fields = ask_setting.custom_fields.select{|k,v| v["required"] == 'true' }
if check_custom_fields.count != 0
check_custom_fields.each do |k,v|
next if v['type'] == 'instructions'
tmp = custom_values[k]
v_type = v['type']
is_date = false
if v_type == "checkbox"
tmp = tmp.values rescue []
elsif v_type == 'date'
is_date = true
tmp = tmp["datetime"].values[0].values rescue []
end
if tmp.present?
if is_date && v["range_flag"] == 'true'
if (tmp.class != Array) || (tmp.select{|v| v.blank?}.count != 0)
flag = false
break
end
end
else
flag = false
break
end
end
end
end
if !flag && !only_email
redirect_to "#{params[:referer_url]}?method=sorry" and return
end
email_regex = ask_setting.get_email_regex
unless only_email
ask_setting.custom_fields.select{|k,v| v['type']=='file' || v['type']=='image'}.each do |k,v|
file = custom_values[k]
if !file.blank?
if v['type']=='image'
all_to_save += [[k,AskImage.new(file: file,ask_question_id: @ask_question.id)]]
else
all_to_save += [[k,AskFile.new(file: file,ask_question_id: @ask_question.id)]]
end
end
end
end
flag = !ask_setting.default_setting['recaptcha'] || gotcha_valid?
if flag && !only_email
all_to_save.each do |to_save|
flag = flag && to_save[1].save
custom_values[to_save[0]] = [custom_values[to_save[0]].original_filename ,to_save[1].file.url]
end
end
if (email_regex ? ::Regexp.new(email_regex).match(temp_params["mail"].to_s) : true) && flag
@disp_fields_infos = AskSetting.get_disp_fields_infos(true, ask_setting, true, override_sort_number, true)
@usage_rule = ask_setting.usage_rule
if temp_params['mail'].blank?
temp_params = temp_params.merge({
situation: AskTicketStatus::DefaultKeys[1]
})
end
@ask_question.update_attributes(temp_params)
if @must_verify_email
referer_url = "#{params[:referer_url]}?id=#{@ask_question.id}"
else
referer_url = nil
end
if @must_verify_email || (ask_setting.validate_enable && AskSafeEmail.where(:email=> @ask_question.mail).count == 0)
build_verification_email(@ask_question, referer_url)
else
@ask_question.update(:situation => AskTicketStatus::DefaultKeys[1])
build_email(@ask_question)
end
if @must_verify_email
redirect_to "#{params[:referer_url]}?method=see_email"
else
redirect_to "#{params[:referer_url]}?method=thank"
end
else
redirect_to "#{params[:referer_url]}?method=sorry"
end
end
def thank
acknowledgement = AskAcknowledgement.last
{
"acknowledgement" => acknowledgement
}
end
def sorry
{}
end
def see_email
end
def render_404
render :file => "#{Rails.root}/app/views/errors/404", :layout => false, :status => :not_found, :formats => [:html]
end
def verify_email
@ask_question = AskQuestion.where(:id=>params[:id]).first
if @ask_question.nil?
render_404 and return
elsif @ask_question.situation != AskTicketStatus::DefaultKeys[0]
@already_verify = true
else
@already_verify = false
@ask_question.update(:situation => AskTicketStatus::DefaultKeys[1])
AskSafeEmail.create(:email=> @ask_question.mail)
build_email(@ask_question)
end
end
def build_verification_email(email_er, referer_url)
email = Email.new
email.save
email_er.email_id = email.id
email_er.save
group_mail = email_er.mail
manager_emails = email_er.reviewer_emails
mail_sentdate = DateTime.now
site = current_site rescue Site.first
mail_from = site.title_translations[site.default_locale]
host_url = Site.first.root_url rescue "http://"
if host_url == "http://"
host_url = request.protocol + request.host_with_port
end
verify_url = "#{host_url}/#{I18n.locale}/xhr/asks/verify_email/#{email_er.id}"
verify_link = "#{verify_url}"
if referer_url
referer_url = host_url + referer_url
referer_link = "#{referer_url}"
else
referer_link = nil
end
mail_subject = mail_from+": #{t('ask.email_verification_notification')}"
email_er.email.update_attributes(
:mail_lang=> site.default_locale,
:create_user=>(current_user rescue nil),
:mail_sentdate=>mail_sentdate,
:module_app=>@module_app,
:mail_to=>group_mail,
:mail_subject=>mail_subject,
:template=>'asks/email_verification',
:template_data=>{
"validation_email_content" => @ask_setting.validation_email_content,
"verify_link" => verify_link,
"referer_link" => referer_link,
"site_host" => host_url
},
:mail_reply_to => (manager_emails.empty? ? nil : manager_emails)
)
# email_er.email.deliver
end
def build_email(email_er)
email = Email.new
email.save
email_er.email_id = email.id
email_er.save
group_mail = email_er.mail
manager_emails = email_er.reviewer_emails
mail_sentdate = DateTime.now
site = current_site rescue Site.first
mail_from = site.title_translations[site.default_locale]
host_url = Site.first.root_url rescue "http://"
if host_url == "http://"
host_url = request.protocol + request.host_with_port
end
mail_subject = mail_from+" #{t('ask.new_question')}:"
email_er.email.update_attributes(
:mail_lang=> site.default_locale,
:create_user=>(current_user rescue nil),
:mail_sentdate=>mail_sentdate,
:module_app=>@module_app,
:mail_to=>group_mail,
:mail_subject=>mail_subject,
:template=>'asks/email',
:template_data=>{
# "title" => email_er.title,
"name" => email_er.name,
"identity" => email_er[:identity],
"mail" => email_er.mail,
"phone" => email_er.phone,
# "fax" => email_er.fax,
# "content" => email_er.content
"appointment" => email_er.appointment,
"disp_fields_infos" => @disp_fields_infos,
"ask_question_id" => email_er.id.to_s,
"site_host" => host_url,
"usage_rule" => @usage_rule
},
:mail_reply_to => (manager_emails.empty? ? nil : manager_emails)
)
if !manager_emails.empty?
Email.new(
:mail_lang=> site.default_locale,
:create_user=>(current_user rescue nil),
:mail_sentdate=>mail_sentdate,
:module_app=>@module_app,
:mail_to=>manager_emails,
:mail_subject=>mail_subject+" #{group_mail}",
:template=>'asks/email',
:template_data=>{
# "title" => email_er.title,
"name" => email_er.name,
"identity" => email_er[:identity],
"mail" => email_er.mail,
"phone" => email_er.phone,
# "fax" => email_er.fax,
# "content" => email_er.content
"appointment" => email_er.appointment,
"disp_fields_infos" => @disp_fields_infos,
"ask_question_id" => email_er.id.to_s,
"site_host" => host_url,
"usage_rule" => @usage_rule,
"edit_url" => "#{host_url}/#{site.default_locale}/admin/asks/#{email_er.id}/edit"
}
).save
end
# email_er.email.deliver
end
def create_params
params.require(:ask_question).permit!
end
private
def cal_form_from_setting(ask_setting,categories,show_categories=false,filter_fields=nil)
is_cat_record = (ask_setting.class == AskCategorySetting)
override_sort_number = nil
if is_cat_record
category_id = ask_setting.category_id
if ask_setting.use_default
override_sort_number = ask_setting.default_sort_number
ask_setting = @default_ask_setting
if @default_fields
return @default_fields.sort_by{|h| override_sort_number[h['field']].to_i}
end
is_cat_record = false
end
else
category_id = (categories[0].id.to_s rescue '')
end
tmp_ask_cat_id = (is_cat_record ? ask_setting.id.to_s : '')
disp_fields_infos = AskSetting.get_disp_fields_infos(true, ask_setting, true, override_sort_number, true)
if filter_fields
disp_fields_infos = disp_fields_infos.select{|field, info| filter_fields.include?(field)}
end
# tmp = 'mongoid.attributes.ask_question'
all_fields = []
set_input_name_for_ask("ask_question")
has_ask_category_id = false
if ask_setting.must_verify_email && @ask_question.nil?
field = "mail"
field_name = "ask_question[#{field}]"
id = field_name
required = true
placeholder = @default_ask_setting.prompt_word(field)
f1 = {'style_html'=>''}
f1['content'] = text_field_tag(field_name,nil,data: (required ? {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"} : {}),required: required,placeholder: placeholder)
f1['field'] = field
f1['label'] = ask_label(id, @default_ask_setting.field_name("#{field}"),required.to_s)
all_fields << f1
field = "recaptcha"
id = "ask_rucaptcha"
f1 = {'style_html'=>''}
f1['content'] = "#{gotcha_error(:espeak=>true)}#{gotcha(id: id)}"
f1['field'] = field
f1['label'] = ask_label(id, @default_ask_setting.field_name("#{field}"),required.to_s)
all_fields << f1
all_fields << {'field'=>'must_verify_email','style_html'=>'display: block; text-align: center;','label'=>'','content'=> I18n.t('ask.must_verify_email')}
else
disp_fields_infos.each do |field, info|
if field.start_with?("default@")
k = is_cat_record ? field : field[8..-1]
v = ask_setting.custom_fields[k]
if v
field_name = info['trans']
if field_name.present?
id = "#{get_input_name_for_ask}[custom_values][#{k}]"
all_fields << {'field'=>field,'label'=>ask_label(id, field_name, v['required']),'content'=>show_on_front(k,v)}
end
end
elsif field.start_with?("custom@") && is_cat_record
if field.include?(tmp_ask_cat_id)
k = field[8+tmp_ask_cat_id.length..-1]
v = ask_setting.custom_fields[k]
if v
field_name = info['trans']
if field_name.present?
id = "#{get_input_name_for_ask}[custom_values][#{k}]"
all_fields << {'field'=>field,'label'=>ask_label(id, v['field'][I18n.locale],v['required']),'content'=>show_on_front(k,v)}
end
end
end
else
if field == 'ask_category_id'
has_ask_category_id = true
if show_categories || ask_setting.default_setting[field]
if categories.count > 1
id = "ask_question[category_id]"
all_fields << {'field'=>field,'style_html'=>'','label'=>ask_label(id, @default_ask_setting.field_name("ask_category_id"),'true'),'content'=>select_tag('ask_question[category_id]', options_for_select(categories.collect{|t| [ t.title, t.id ]}))}
else
all_fields << {'field'=>field,'style_html'=>'','label'=>ask_label(nil, @default_ask_setting.field_name("ask_category_id"),'true'),'content'=>"#{(categories[0].title rescue '')}"+hidden_field_tag('ask_question[category_id]', (categories[0].id.to_s rescue ''))}
end
else
all_fields << {'field'=>field,'style_html'=>'display: none;','label'=>'','content'=>hidden_field_tag('ask_question[category_id]', (categories[0].id.to_s rescue ''))}
end
else
if ask_setting.default_setting[field] || field == "usage_rule"
required = ask_setting.is_required(field)
f1 = {'style_html'=>''}
field_name = "ask_question[#{field}]"
placeholder = @default_ask_setting.prompt_word(field)
id = field_name
case field
when 'title'
f1['content'] = text_field_tag(field_name,nil,placeholder: placeholder,required: required)
when 'name'
f1['content'] = text_field_tag(field_name,nil,data: (required ? {"fv-validation" => "required;", "fv-messages" => "必填欄位;"} : {}),required: required,placeholder: placeholder)
when 'sex'
id += "_male"
f1['content'] = "
"
when 'mail'
if @ask_question
f1['content'] = @ask_question.mail
else
f1['content'] = text_field_tag(field_name,nil,data: (required ? {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"} : {}),required: required,placeholder: placeholder)
end
when 'phone'
f1['content'] = text_field_tag(field_name,nil,placeholder: placeholder,required: required)
when 'appointment'
if @appointment_idx.nil?
@appointment_idx = 0
else
@appointment_idx += 1
end
id = "ask_question_appointment_#{@appointment_idx}"
f1['content'] = "