703 lines
32 KiB
Ruby
703 lines
32 KiB
Ruby
class GreetingCardsController < ApplicationController
|
|
helper Admin::GreetingCardsHelper
|
|
include Admin::GreetingCardsHelper
|
|
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 => 'greeting_card').first
|
|
referer_url = read_more_page ? "/#{I18n.locale}#{read_more_page.url}" : "/#{I18n.locale}/greeting_cards"
|
|
module_app = ModuleApp.where(:key => "greeting_card").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
|
|
greeting_card_record = GreetingCardRecord.new
|
|
locale = I18n.locale
|
|
category_ids = categories.collect{|v| v.id.to_s}
|
|
default_setting = GreetingCardSetting.first
|
|
default_setting = GreetingCardSetting.create() if default_setting.nil?
|
|
greeting_card_settings_map = GreetingCardCategorySetting.where(:category_id.in=> category_ids).map{|s| [s.category_id.to_s, s]}.to_h
|
|
greeting_card_settings = category_ids.map do |category_id|
|
|
if greeting_card_settings_map.has_key?(category_id)
|
|
greeting_card_settings_map[category_id]
|
|
else
|
|
default_setting
|
|
end
|
|
end
|
|
tmp_
|
|
first_category_id = category_ids.first
|
|
greeting_card_setting = greeting_card_settings[0]
|
|
@default_greeting_card_setting = default_setting
|
|
all_fields = cal_form_from_setting(greeting_card_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(greeting_card_settings,categories,token_tag,referer_url, OrbitHelper.params[:id])
|
|
email_regex = @default_greeting_card_setting.get_email_regex(true)
|
|
{
|
|
'fields' => all_fields,
|
|
'extras'=>{
|
|
'switch_form' => switch_form,
|
|
'email_regex' => email_regex
|
|
}
|
|
}
|
|
else
|
|
data_count = OrbitHelper.widget_data_count.to_i
|
|
if data_count != 0
|
|
greeting_card_records = GreetingCardRecord.where(situation: 'is_published').page(1).per(data_count)
|
|
else
|
|
greeting_card_records = GreetingCardRecord.where(situation: 'is_published')
|
|
end
|
|
greeting_card_index_page = OrbitHelper.widget_more_url rescue nil
|
|
greeting_card_records = greeting_card_records.collect do |v|
|
|
url = ((greeting_card_index_page+"?item=#{v.id}") rescue "javascript:alert('#{t('greeting_card.no_index_page')}')")
|
|
{'td'=> [
|
|
{'content' =>v.category.title},
|
|
{'content' => link_to(v.title,"#{url}",title: v.title)}
|
|
]
|
|
}
|
|
end
|
|
{
|
|
'greeting_card_records' => greeting_card_records,
|
|
'th' => [{'td'=>t('categories')},{'td'=>t('title')}],
|
|
'extras' => {'more_title'=>I18n.t('greeting_card.more_title'),
|
|
'more_href'=>greeting_card_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=='greeting_card'}.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('greeting_card.widget.index')
|
|
@layout_type = 'index'
|
|
elsif value[locale] == t('greeting_card.is_published')
|
|
@layout_type = 'published_index'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
def initialize
|
|
super
|
|
@app_title = 'greeting_card'
|
|
self.request = OrbitHelper.request
|
|
end
|
|
def show
|
|
greeting_card_record = GreetingCardRecord.where(id: @params['item']).first
|
|
greeting_card_setting = GreetingCardCategorySetting.enabled.where(category_id: greeting_card_record.category_id.to_s).first
|
|
greeting_card_setting = GreetingCardSetting.first if greeting_card_setting.nil?
|
|
{'greeting_card_record' => greeting_card_record,'layout_type'=>'show','greeting_card_setting'=>greeting_card_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 => "greeting_card").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}
|
|
default_setting = GreetingCardSetting.first
|
|
default_setting = GreetingCardSetting.create() if default_setting.nil?
|
|
greeting_card_settings_map = GreetingCardCategorySetting.where(:category_id.in=> category_ids).map{|s| [s.category_id.to_s, s]}.to_h
|
|
greeting_card_settings = category_ids.map do |category_id|
|
|
if greeting_card_settings_map.has_key?(category_id)
|
|
greeting_card_settings_map[category_id]
|
|
else
|
|
default_setting
|
|
end
|
|
end
|
|
first_category_id = category_ids.first
|
|
greeting_card_setting = greeting_card_settings[0]
|
|
@default_greeting_card_setting = default_setting
|
|
csrf_value = OrbitHelper.request.session[:_csrf_token] || SecureRandom.base64(32)
|
|
token_tag = hidden_field_tag('authenticity_token',csrf_value)
|
|
switch_form = cal_switch_form(greeting_card_settings,categories,token_tag,referer_url, @params[:id])
|
|
tags = module_app.tags
|
|
greeting_card_record = GreetingCardRecord.new(id: nil)
|
|
email_regex = @default_greeting_card_setting.get_email_regex(true)
|
|
{
|
|
'layout_type' => 'index',
|
|
'greeting_card_record' => greeting_card_record,
|
|
'categories' => categories,
|
|
'tags' => tags,
|
|
'module_app' => module_app,
|
|
'switch_form' => switch_form,
|
|
'greeting_card_setting' => greeting_card_setting,
|
|
'default_greeting_card_setting' => @default_greeting_card_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
|
|
if page_data_count != 0
|
|
greeting_card_records = GreetingCardRecord.where(situation: 'is_published').page(page_number).per(page_data_count)
|
|
else
|
|
greeting_card_records = GreetingCardRecord.where(situation: 'is_published')
|
|
end
|
|
{
|
|
'layout_type' => 'published_index',
|
|
'greeting_card_records' => greeting_card_records,
|
|
'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?
|
|
@greeting_card_record = GreetingCardRecord.where(id: temp_params[:id]).first
|
|
if @greeting_card_record.nil?
|
|
render_404 and return
|
|
end
|
|
else
|
|
@greeting_card_record = GreetingCardRecord.new(:ip=>request.remote_ip)
|
|
end
|
|
new_record = @greeting_card_record.new_record?
|
|
all_to_save = []
|
|
greeting_card_setting = GreetingCardCategorySetting.enabled.where(category_id: params['greeting_card_record']['category_id']).first
|
|
override_sort_number = nil
|
|
if greeting_card_setting && greeting_card_setting.use_default
|
|
override_sort_number = greeting_card_setting.default_sort_number
|
|
greeting_card_setting = nil
|
|
end
|
|
if greeting_card_setting.nil?
|
|
greeting_card_setting = GreetingCardSetting.first
|
|
greeting_card_setting = GreetingCardSetting.create() if greeting_card_setting.nil?
|
|
end
|
|
@greeting_card_setting = greeting_card_setting
|
|
@must_verify_email = greeting_card_setting.must_verify_email && new_record
|
|
if @must_verify_email
|
|
only_email = true
|
|
@greeting_card_record.is_hidden = true
|
|
else
|
|
only_email = false
|
|
check_fields = greeting_card_setting.default_setting.select{|k,v| v}.keys & greeting_card_setting.default_setting_required.select{|k,v| v}.keys - GreetingCardSetting::No_required
|
|
unless new_record
|
|
@greeting_card_record.is_hidden = false
|
|
check_fields.delete('mail')
|
|
end
|
|
flag = true
|
|
check_fields.each do |f|
|
|
next if f == 'greeting_card_category_id' || f == 'recaptcha'
|
|
if temp_params[f].blank?
|
|
puts "field = #{f} is empty"
|
|
flag = false
|
|
break
|
|
end
|
|
end
|
|
end
|
|
custom_values = temp_params[:custom_values]
|
|
custom_values = {} if custom_values.nil?
|
|
if flag
|
|
check_custom_fields = greeting_card_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 = greeting_card_setting.get_email_regex
|
|
unless only_email
|
|
greeting_card_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,GreetingCardImage.new(file: file,greeting_card_record_id: @greeting_card_record.id)]]
|
|
else
|
|
all_to_save += [[k,GreetingCardFile.new(file: file,greeting_card_record_id: @greeting_card_record.id)]]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
flag = !greeting_card_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 = GreetingCardSetting.get_disp_fields_infos(true, greeting_card_setting, true, override_sort_number, true)
|
|
@usage_rule = greeting_card_setting.usage_rule
|
|
if temp_params['mail'].blank?
|
|
temp_params = temp_params.merge({
|
|
situation: GreetingCardTicketStatus::DefaultKeys[1]
|
|
})
|
|
end
|
|
@greeting_card_record.update_attributes(temp_params)
|
|
if @must_verify_email
|
|
referer_url = "#{params[:referer_url]}?id=#{@greeting_card_record.id}"
|
|
else
|
|
referer_url = nil
|
|
end
|
|
if (greeting_card_setting.validate_enable || @must_verify_email) && GreetingCardSafeEmail.where(:email=> @greeting_card_record.sender_mail).count == 0
|
|
build_verification_email(@greeting_card_record, referer_url)
|
|
elsif @must_verify_email
|
|
redirect_to referer_url and return
|
|
else
|
|
@greeting_card_record.update(:situation => GreetingCardTicketStatus::DefaultKeys[1])
|
|
build_email(@greeting_card_record)
|
|
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 = GreetingCardAcknowledgement.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
|
|
@greeting_card_record = GreetingCardRecord.where(:id=>params[:id]).first
|
|
if @greeting_card_record.nil?
|
|
render_404 and return
|
|
elsif @greeting_card_record.situation != GreetingCardTicketStatus::DefaultKeys[0]
|
|
@already_verify = true
|
|
else
|
|
@already_verify = false
|
|
@greeting_card_record.update(:situation => GreetingCardTicketStatus::DefaultKeys[1])
|
|
GreetingCardSafeEmail.create(:email=> @greeting_card_record.sender_mail)
|
|
build_email(@greeting_card_record)
|
|
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.sender_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/greeting_cards/verify_email/#{email_er.id}"
|
|
verify_link = "<a title=\"#{t('greeting_card.verify_link')}\" href=\"#{verify_url}\" target=\"_blank\">#{verify_url}</a>"
|
|
if referer_url
|
|
referer_url = host_url + referer_url
|
|
referer_link = "<a title=\"#{I18n.t('greeting_card.go_to_form')}\" href=\"#{referer_url}\" target=\"_blank\">#{referer_url}</a>"
|
|
else
|
|
referer_link = nil
|
|
end
|
|
mail_subject = mail_from+": #{t('greeting_card.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=>'greeting_cards/email_verification',
|
|
:template_data=>{
|
|
"validation_email_content" => @greeting_card_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)
|
|
site = current_site rescue Site.first
|
|
host_url = Site.first.root_url rescue "http://"
|
|
if host_url == "http://"
|
|
host_url = request.protocol + request.host_with_port
|
|
end
|
|
locale = site.default_locale
|
|
email_er.build_email(site, host_url, current_user, @module_app, locale)
|
|
end
|
|
|
|
def create_params
|
|
params.require(:greeting_card_record).permit!
|
|
end
|
|
private
|
|
def cal_card_html(greeting_card_images)
|
|
field_name = "greeting_card_record[card]"
|
|
greeting_card_images_html = "<div class=\"card_images_wrapper row\">"
|
|
greeting_card_images.each do |image|
|
|
img_url = image.file.url
|
|
next if img_url.blank?
|
|
greeting_card_images_html += "<div class=\"col-md-4\"><img src=\"#{img_url}\" title=\"#{image.description}\" /><input name=\"#{field_name}\" type=\"radio\" value=\"#{image.id}\"></div>"
|
|
end
|
|
greeting_card_images_html += "</div>"
|
|
greeting_card_images_html
|
|
end
|
|
def cal_form_from_setting(greeting_card_setting,categories,show_categories=false,filter_fields=nil)
|
|
is_cat_record = (greeting_card_setting.class == GreetingCardCategorySetting)
|
|
override_sort_number = nil
|
|
greeting_card_images = []
|
|
if is_cat_record
|
|
category_id = greeting_card_setting.category_id
|
|
greeting_card_images = @default_greeting_card_setting.greeting_card_images.to_a + greeting_card_setting.greeting_card_images.to_a
|
|
if greeting_card_setting.use_default
|
|
override_sort_number = greeting_card_setting.default_sort_number
|
|
if override_sort_number.blank?
|
|
override_sort_number = nil
|
|
elsif @default_fields
|
|
all_fields = @default_fields.sort_by{|h| override_sort_number[h['field']].to_i}
|
|
all_fields.each do |f1|
|
|
if f1['field'] == 'card'
|
|
f1['content'] = cal_card_html(greeting_card_images)
|
|
end
|
|
end
|
|
return all_fields
|
|
end
|
|
greeting_card_setting = @default_greeting_card_setting
|
|
is_cat_record = false
|
|
elsif greeting_card_setting.default_sort_number.blank?
|
|
greeting_card_setting = @default_greeting_card_setting
|
|
is_cat_record = false
|
|
end
|
|
else
|
|
category_id = (categories[0].id.to_s rescue '')
|
|
greeting_card_images = greeting_card_setting.greeting_card_images.to_a
|
|
end
|
|
tmp_greeting_card_cat_id = (is_cat_record ? greeting_card_setting.id.to_s : '')
|
|
disp_fields_infos = GreetingCardSetting.get_disp_fields_infos(true, greeting_card_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.greeting_card_record'
|
|
all_fields = []
|
|
set_input_name_for_greeting_card("greeting_card_record")
|
|
has_greeting_card_category_id = false
|
|
if greeting_card_setting.must_verify_email && @greeting_card_record.nil?
|
|
field = "mail"
|
|
field_name = "greeting_card_record[#{field}]"
|
|
id = field_name
|
|
required = true
|
|
placeholder = @default_greeting_card_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'] = greeting_card_label(id, @default_greeting_card_setting.field_name("#{field}"),required.to_s)
|
|
all_fields << f1
|
|
|
|
field = "recaptcha"
|
|
id = "greeting_card_rucaptcha"
|
|
f1 = {'style_html'=>''}
|
|
f1['content'] = "#{gotcha_error(:espeak=>true)}#{gotcha(id: id)}"
|
|
f1['field'] = field
|
|
f1['label'] = greeting_card_label(id, @default_greeting_card_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('greeting_card.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 = greeting_card_setting.custom_fields[k]
|
|
if v
|
|
field_name = info['trans']
|
|
if field_name.present?
|
|
id = "#{get_input_name_for_greeting_card}[custom_values][#{k}]"
|
|
all_fields << {'field'=>field,'label'=>greeting_card_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_greeting_card_cat_id)
|
|
k = field[8+tmp_greeting_card_cat_id.length..-1]
|
|
v = greeting_card_setting.custom_fields[k]
|
|
if v
|
|
field_name = info['trans']
|
|
if field_name.present?
|
|
id = "#{get_input_name_for_greeting_card}[custom_values][#{k}]"
|
|
all_fields << {'field'=>field,'label'=>greeting_card_label(id, v['field'][I18n.locale],v['required']),'content'=>show_on_front(k,v)}
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if field == 'greeting_card_category_id'
|
|
has_greeting_card_category_id = true
|
|
if show_categories || greeting_card_setting.default_setting[field]
|
|
if categories.count > 1
|
|
id = "greeting_card_record[category_id]"
|
|
all_fields << {'field'=>field,'style_html'=>'','label'=>greeting_card_label(id, @default_greeting_card_setting.field_name("greeting_card_category_id"),'true'),'content'=>select_tag('greeting_card_record[category_id]', options_for_select(categories.collect{|t| [ t.title, t.id ]}))}
|
|
else
|
|
all_fields << {'field'=>field,'style_html'=>'','label'=>greeting_card_label(nil, @default_greeting_card_setting.field_name("greeting_card_category_id"),'true'),'content'=>"<span>#{(categories[0].title rescue '')}</span>"+hidden_field_tag('greeting_card_record[category_id]', (categories[0].id.to_s rescue ''))}
|
|
end
|
|
else
|
|
all_fields << {'field'=>field,'style_html'=>'display: none;','label'=>'','content'=>hidden_field_tag('greeting_card_record[category_id]', (categories[0].id.to_s rescue ''))}
|
|
end
|
|
else
|
|
if greeting_card_setting.default_setting[field] || field == "usage_rule"
|
|
required = greeting_card_setting.is_required(field)
|
|
f1 = {'style_html'=>''}
|
|
field_name = "greeting_card_record[#{field}]"
|
|
placeholder = @default_greeting_card_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 'sender_mail', 'recipients'
|
|
if @greeting_card_record
|
|
f1['content'] = @greeting_card_record.send(field)
|
|
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 'greetings'
|
|
f1['content'] = text_field_tag(field_name,nil,placeholder: placeholder,required: required)
|
|
when 'card'
|
|
f1['content'] = cal_card_html(greeting_card_images)
|
|
f1['inner_style_html'] = "max-width: unset; width: 76%;"
|
|
when 'sending_time'
|
|
f1['content'] = "<div class=\"default_picker\">#{text_field_tag(field_name,nil,placeholder: placeholder,data: {format: 'yyyy/MM/dd hh:mm'},required: required)}</div>"
|
|
when 'recaptcha'
|
|
id = "greeting_card_rucaptcha"
|
|
f1['content'] = "#{gotcha_error(:espeak=>true)}#{gotcha(id: id)}"
|
|
when 'usage_rule'
|
|
next if greeting_card_setting.usage_rule.blank?
|
|
f1['content'] = greeting_card_setting.usage_rule
|
|
when 'agree_show'
|
|
f1['content'] = check_box_tag(field_name, "1", false, {required: required})
|
|
when 'agree_usage'
|
|
f1['content'] = check_box_tag(field_name, "1", false, {required: required})
|
|
end
|
|
f1['field'] = field
|
|
f1['label'] = greeting_card_label(id, @default_greeting_card_setting.field_name("#{field}"),required.to_s)
|
|
all_fields << f1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if @greeting_card_record
|
|
all_fields << {'field'=>'greeting_card_record_id','style_html'=>'display: none;','label'=>'','content'=>hidden_field_tag('greeting_card_record[id]', @greeting_card_record.id)}
|
|
end
|
|
end
|
|
unless has_greeting_card_category_id
|
|
all_fields << {'field'=>'greeting_card_category_id','style_html'=>'display: none;','label'=>'','content'=>hidden_field_tag('greeting_card_record[category_id]', category_id)}
|
|
end
|
|
unless is_cat_record
|
|
@default_fields = all_fields
|
|
end
|
|
all_fields
|
|
end
|
|
def cal_html(fields,token_tag,form_id,referer_url,greeting_card_setting,is_hidden=true)
|
|
form_url = "/#{I18n.locale.to_s}/greeting_cards"
|
|
submit_tag = submit_tag(t('submit'), :class=> 'btn btn-primary', :id => 'button-mail')
|
|
close_tag = button_tag(t('cancel'), type: 'reset', :class=> 'btn')
|
|
multi_col_class = (greeting_card_setting.title_layout>0 rescue false) ? ' multi-col' : ' single-col'
|
|
col_class = (greeting_card_setting.title_layout==1 rescue false) ? ' col-sm-6' : ''
|
|
tmp = fields.collect do |field|
|
|
style_html = field['style_html']
|
|
inner_style_html = field['inner_style_html']
|
|
label = field['label']
|
|
content = field['content']
|
|
"<div class=\"control-group#{col_class}\" style=\"#{style_html}\">
|
|
#{label}
|
|
<div class=\"controls\" style=\"#{inner_style_html}\">
|
|
#{content}
|
|
</div>
|
|
</div>"
|
|
end.join
|
|
preview_btn = "<div style=\"text-align: center;\"><a href=\"javascript:;\" class=\"btn btn-primary preview-card\">#{I18n.t('greeting_card.preview')}</a></div>"
|
|
preview_section = "<div class=\"preview-card-section\"></div>"
|
|
"<form id=\"#{form_id}\" action=\"#{form_url}\" enctype=\"multipart/form-data\" method=\"post\" class=\"form-horizontal greeting_card_form#{multi_col_class}\" accept-charset=\"UTF-8\" style=\"#{is_hidden ? 'display: none;' : ''}\">
|
|
#{token_tag}
|
|
<div data-level=\"0\" data-list=\"fields\">
|
|
#{tmp}
|
|
#{preview_btn}
|
|
#{preview_section}
|
|
</div>
|
|
<div class=\"form-actions\">
|
|
<input type=\"hidden\" name=\"referer_url\" value=\"#{referer_url}\">
|
|
#{submit_tag}
|
|
#{close_tag}
|
|
</div>
|
|
</form>"
|
|
end
|
|
def script_text
|
|
"<script type=\"text/javascript\">
|
|
$(document).ready(function(){
|
|
$('select[name=\"greeting_card_record[category_id]\"]').change(function(){
|
|
var category_id = $(this).val()
|
|
$(this).parents('.greeting_card-question').eq(0).find('select[name=\"greeting_card_record[category_id]\"]').val(category_id)
|
|
var id
|
|
if ($('form#'+category_id).length != 0){
|
|
id = category_id
|
|
}
|
|
else{
|
|
id = 'greeting_card-default-form'
|
|
}
|
|
if (id != $(this).parents('form').eq(0).attr('id')){
|
|
var self = $(this)
|
|
var old_controls = self.parents('form').eq(0).find('.control-group')
|
|
var old_inputs = old_controls.children('label').map(function(){
|
|
return $.trim($(this).text().replace(/\\\*/g,''));
|
|
}).get()
|
|
var new_controls = self.parents('.greeting_card-question').eq(0).find('form#'+id).find('.control-group')
|
|
var new_inputs = new_controls.children('label').map(function(){
|
|
return $.trim($(this).text().replace(/\\\*/g,''));
|
|
}).get()
|
|
$(new_inputs).each(function(i,v){
|
|
var i0 = old_inputs.indexOf(v)
|
|
if (i0 != -1 && new_controls.eq(i).find('select#greeting_card_record_category_id').length==0){
|
|
var new_ = new_controls.eq(i).find('.controls').eq(0),
|
|
old_ = old_controls.eq(i0).find('.controls').eq(0),
|
|
new_input = new_.find('input, select'),
|
|
old_input = old_.find('input, select');
|
|
if(new_input.length != 0 && old_input.length != 0){
|
|
if(new_input.length == old_input.length){
|
|
var old_clone = old_.clone();
|
|
old_clone.find('input, select').attr('name', new_input.attr('name'));
|
|
old_clone.replaceAll(new_);
|
|
}
|
|
}
|
|
}
|
|
})
|
|
self.parents('.greeting_card-question').eq(0).find('form').hide()
|
|
self.parents('.greeting_card-question').eq(0).find('form#'+id).show()
|
|
}
|
|
})
|
|
})
|
|
</script>"
|
|
end
|
|
def cal_switch_form(greeting_card_settings,categories,token_tag,referer_url, greeting_card_record_id)
|
|
switch_form = ''
|
|
default_idx = 0
|
|
if greeting_card_record_id.present?
|
|
@greeting_card_record = GreetingCardRecord.where(:id=> greeting_card_record_id).first
|
|
if @greeting_card_record && !(@greeting_card_record.is_hidden)
|
|
@greeting_card_record = nil
|
|
end
|
|
if @greeting_card_record
|
|
GreetingCardSafeEmail.create(:email=> @greeting_card_record.sender_mail) if GreetingCardSafeEmail.where(:email=> @greeting_card_record.sender_mail).count == 0
|
|
greeting_card_settings = GreetingCardCategorySetting.enabled.where(:category_id=> @greeting_card_record.category_id).to_a
|
|
if greeting_card_settings.blank?
|
|
return switch_form
|
|
end
|
|
end
|
|
else
|
|
@greeting_card_record = nil
|
|
end
|
|
if categories.count != 0
|
|
default_idx = greeting_card_settings[1..-1].to_a.map{|a| a.category_id.to_s}.index(categories[0].id.to_s)
|
|
default_idx = default_idx.nil? ? 0 : default_idx + 1
|
|
end
|
|
@default_greeting_card_setting ||= GreetingCardSetting.first
|
|
collected_fields_var = "var collected_fields = "
|
|
collected_fields = []
|
|
img_objs_var = "var card_img_objs = "
|
|
img_objs = []
|
|
default_layout_design = GreetingCardLayoutDesign.where(:category_id=> nil).first
|
|
switch_form = script_text + greeting_card_settings.collect.with_index do |greeting_card_setting,i|
|
|
category_id = categories[i].id.to_s
|
|
layout_design = GreetingCardLayoutDesign.where(:category_id=> category_id).first
|
|
if layout_design.nil?
|
|
if default_layout_design.nil?
|
|
next
|
|
else
|
|
layout_design = default_layout_design
|
|
end
|
|
end
|
|
collected_fields << layout_design.preserved_keys
|
|
img_objs << layout_design.img_objs.values
|
|
fields = cal_form_from_setting(greeting_card_setting,categories,true)
|
|
is_hidden = (i != default_idx)
|
|
cal_html(fields,token_tag,category_id,referer_url,greeting_card_setting,is_hidden)
|
|
end.join
|
|
collected_fields_var += collected_fields.to_json
|
|
img_objs_var += img_objs.to_json
|
|
img_objs_var = "<script type=\"text/javascript\">\n#{collected_fields_var};\n#{img_objs_var};\n</script>"
|
|
switch_form + img_objs_var
|
|
end
|
|
end |