diff --git a/app/controllers/admin/asks_controller.rb b/app/controllers/admin/asks_controller.rb
index 8db0cbb..8e3897a 100644
--- a/app/controllers/admin/asks_controller.rb
+++ b/app/controllers/admin/asks_controller.rb
@@ -71,17 +71,25 @@ class Admin::AsksController < OrbitAdminController
ask_setting.update_attributes(p1)
redirect_to "/#{locale}/admin/asks"
end
+ def switch_to_default_setting
+ if AskCategorySetting.where(:id=>params[:id]).update_all(:use_default=>params[:use_default] == "true").documents[0]["nModified"] != 0
+ render :json => {success: true}
+ else
+ render :json => {success: false}
+ end
+ end
def category_setting_save
locale = I18n.locale
ask_setting = AskCategorySetting.where(category_id: params['category_id']).first
ask_setting = AskCategorySetting.create(category_id: params['category_id']) if ask_setting.nil?
p1 = ask_setting_params(ask_setting,'ask_category_setting')
- ask_setting.update_attributes(p1)
+ puts ask_setting.inspect
+ puts ["update!", p1]
+ ask_setting.update!(p1)
redirect_to "/#{locale}/admin/asks/category_setting"
end
def setting
@ask_setting = AskSetting.first
- @ask_setting = AskSetting.create() if @ask_setting.nil?
@url = setting_save_admin_asks_path
end
def get_new_setting_index
@@ -101,12 +109,11 @@ class Admin::AsksController < OrbitAdminController
def index
AskPrintSetting.create() if AskPrintSetting.first.nil?
@ask_setting = AskSetting.first
- @ask_setting = AskSetting.create() if @ask_setting.nil?
@tags = @module_app.tags
@categories = @module_app.categories.enabled.sort_by{|category| (((@module_app.asc rescue true) ? category.sort_number.to_i : -category.sort_number.to_i) rescue category.id)}
@filter_fields = filter_fields(@categories, @tags)
# 列表欄位
- @table_fields = [:situation, :category, 'title' , 'ask.name', 'ask.phone', 'ask.appointment','ask.created_at']
+ @table_fields = [:situation, :category, 'title' , 'ask.name', 'ask.phone', 'ask.appointment','ask.created_at','ask.ip']
# 列表排序
# debugger
if filter2("situation").blank? and filter2("identity").blank?
@@ -142,17 +149,9 @@ class Admin::AsksController < OrbitAdminController
@categories = current_user.approved_categories_for_module(@module_app).sort_by{|category| (((@module_app.asc rescue true) ? category.sort_number.to_i : -category.sort_number.to_i) rescue category.id)}
@category_ids = @categories.collect(&:id)
@category_titles = @categories.collect{|v| v.title}
-
- @category_added = AskCategorySetting.all.asc(:created_at)
- @category_added_ids = @category_added.pluck(:category_id)
- @category_not_add_index = @category_ids.to_enum.with_index.select{|v,i| @category_added_ids.exclude? v.to_s}.collect{|v,i| i}
- @category_not_add = @category_titles.values_at(*@category_not_add_index).zip(@category_ids.values_at(*@category_not_add_index))
-
- @category_print_added = AskCategoryPrintSetting.all.asc(:created_at)
- @category_print_added_ids = @category_print_added.pluck(:category_id)
- @category_print_not_add_index = @category_ids.to_enum.with_index.select{|v,i| @category_print_added_ids.exclude? v.to_s}.collect{|v,i| i}
- @category_print_not_add = @category_titles.values_at(*@category_print_not_add_index).zip(@category_ids.values_at(*@category_print_not_add_index))
-
+ @category_added = AskCategorySetting.all.asc(:created_at).map{|a| [a.category_id, a]}.to_h
+ @category_added_ids = @category_added.map{|k,v| k}
+ @url = category_setting_save_admin_asks_path
end
def get_category_setting_field
@default_ask_setting = AskSetting.first
@@ -294,7 +293,6 @@ class Admin::AsksController < OrbitAdminController
ask_setting = AskCategorySetting.where(category_id: params['ask_question']['category_id']).first
if ask_setting.nil?
ask_setting = AskSetting.first
- ask_setting = AskSetting.create() if ask_setting.nil?
end
if temp_params['custom_values'].nil?
temp_params['custom_values'] = {}
@@ -402,42 +400,125 @@ class Admin::AsksController < OrbitAdminController
def order_fields
@cats_relations = get_categories_info
@category_id = (params[:category] || @cats_relations[0][0] rescue nil)
- @disp_fields_infos = AskSetting.get_disp_fields_infos(@category_id)
+ @disp_fields_infos = AskSetting.get_disp_fields_infos(false,@category_id)
end
def update_order_fields
- if params[:category]
- ask_setting = AskCategorySetting.where(:category_id=>params[:category]).first
+ ask_setting = AskCategorySetting.where(:category_id=>params[:category]).first
+ use_default = ask_setting && ask_setting.use_default
+ sort_number = params[:sort_number].map{|k,v| [k,v.to_i]}.to_h
+ if params[:category].present? && !use_default
if ask_setting.nil?
default_setting = AskSetting.first
- default_setting = AskSetting.create if default_setting.nil?
ask_setting = AskCategorySetting.create(category_id: params[:category])
p1 = default_setting.get_attrs
ask_setting.update_attributes(p1)
+ ask_setting.update(:use_default => true)
end
- ask_setting.update(:sort_number=>params[:sort_number])
+ ask_setting.update(:sort_number=> sort_number)
+ default_ask_setting = AskSetting.first
+ default_sort_number = default_ask_setting.sort_number
+ ask_setting_id = ask_setting.id.to_s
+ part_sort_number = sort_number.select{|k,v| k.include?('default@')}.map{|k,v| ["custom@#{ask_setting_id}@#{k.split('@')[-1]}", v]}.to_h
+ intersect_keys = default_sort_number.keys & part_sort_number.keys
+ non_intersect_keys = part_sort_number.keys - default_sort_number.keys
+ if intersect_keys.count != 0
+ org_order = intersect_keys.map{|k| [k, default_sort_number[k]]}
+ default_sort_number = default_sort_number.merge(intersect_keys.zip(org_order.sort_by{|k, v| part_sort_number[k]}.map{|k,v| v}).to_h)
+ end
+ preserve_count = AskSetting::All_default_fields.count
+ if non_intersect_keys.count != 0
+ max_sort_number = default_sort_number.map{|k,v| v.to_i}.max.to_i
+ max_sort_number += 1
+ max_sort_number += preserve_count
+ part_sort_number = non_intersect_keys.map.with_index{|(k,v), i| [k, max_sort_number + i]}
+ default_sort_number = default_sort_number.merge(part_sort_number.to_h)
+ end
+ default_ask_setting.update(:sort_number=>default_sort_number)
else
- AskSetting.update_all(:sort_number=>params[:sort_number])
+ ask_setting = AskSetting.first
+ if use_default
+ sort_number = ask_setting.sort_number.merge(sort_number)
+ end
+ AskSetting.update_all(:sort_number=>sort_number)
+ unless use_default
+ custom_sort_number = sort_number.select{|k, v| k.include?('custom@')}
+ all_custom_sort_numbers = custom_sort_number.group_by{|k, v| k.split('@')[1]}
+ preserve_count = AskSetting::All_default_fields.count
+ all_custom_sort_numbers.each do |ask_category_setting_id, part_sort_number|
+ ask_setting = AskCategorySetting.find(ask_category_setting_id) rescue nil
+ if ask_setting
+ sort_number = ask_setting.sort_number
+ part_sort_number = part_sort_number.map{|k,v| ["default@#{k.split('@')[-1]}", v]}.to_h
+ intersect_keys = sort_number.keys & part_sort_number.keys
+ non_intersect_keys = part_sort_number.keys - sort_number.keys
+ if intersect_keys.count != 0
+ org_order = intersect_keys.map{|k| [k, sort_number[k]]}
+ sort_number = sort_number.merge(intersect_keys.zip(org_order.sort_by{|k, v| part_sort_number[k]}.map{|k,v| v}).to_h)
+ end
+ if non_intersect_keys.count != 0
+ max_sort_number = sort_number.map{|k,v| v.to_i}.max.to_i
+ max_sort_number += 1
+ max_sort_number += preserve_count
+ part_sort_number = non_intersect_keys.map.with_index{|(k,v), i| [k, max_sort_number + i]}
+ sort_number = sort_number.merge(part_sort_number.to_h)
+ end
+ ask_setting.update(:sort_number=>sort_number)
+ end
+ end
+ end
+ end
+ render :json => {:success=>true}
+ end
+ def ticket_status
+ @ticket_statuses = AskTicketStatus.all
+ if request.xhr?
+ render 'ticket_status', :layout => false
+ end
+ end
+ def get_ticket_status
+ ticket_status = AskTicketStatus.where(:id=>params[:id]).first
+ render :json => {
+ "id"=>params[:id],
+ "title_translations"=> (ticket_status ? ticket_status.get_title_translations : {})
+ }
+ end
+ def update_ticket_status
+ if params[:id].blank?
+ ticket_status = AskTicketStatus.new
+ else
+ ticket_status = AskTicketStatus.where(:id=>params[:id]).first
+ end
+ ticket_status.update_attributes(params.require(:ask_ticket_status).permit!)
+ render :json => {:success=>true}
+ end
+ def delete_ticket_status
+ ticket_status = AskTicketStatus.where(:id=>params[:id]).first
+ unless ticket_status.is_default
+ ticket_status.destroy
end
render :json => {:success=>true}
end
private
def ask_setting_params(ask_setting,collection_name)
- param = params.require(collection_name).permit!
+ param = params.require(collection_name).except("id").permit!
param_clone = param.clone
- param_clone['default_setting'].each { |k, v| param_clone['default_setting'][k] = (v == 'true'? true : false) if param_clone['default_setting'][k].class==String}
+ param_clone['default_setting'].each { |k, v| param_clone['default_setting'][k] = (v == 'true'? true : false) if param_clone['default_setting'][k].class==String}
+ param_clone['default_setting_required'].each { |k, v| param_clone['default_setting_required'][k] = (v == 'true'? true : false) if param_clone['default_setting_required'][k].class==String}
param_clone.delete('custom_fields')
param_clone.delete('email_regex')
- custom_fields = ask_setting['custom_fields'].clone
+ custom_fields = params['not_clone_attrs'] ? {} : ask_setting['custom_fields'].clone
params_custom_fields = (params.require(collection_name).require('custom_fields') rescue {})
params_custom_fields.each do |k,v|
custom_fields[k] = v
end
field_to_delete = params['delete_field'].to_s.split(',').select{|v| !v.empty?}
+ puts ["field_to_delete", field_to_delete]
+ puts ["custom_fields", custom_fields]
field_to_delete.each do |k|
if custom_fields.keys.include? k
custom_fields[k]['delete'] = true
end
end
- param_clone.merge({custom_fields: custom_fields})
+ param_clone.merge({"custom_fields"=> custom_fields})
end
end
diff --git a/app/controllers/asks_controller.rb b/app/controllers/asks_controller.rb
index ea61e7f..5508db0 100644
--- a/app/controllers/asks_controller.rb
+++ b/app/controllers/asks_controller.rb
@@ -18,15 +18,21 @@ class AsksController < ApplicationController
else
categories = Category.where(:id.in=>OrbitHelper.widget_categories).enabled
end
- categories = categories.sort_by{|category| (((module_app.asc rescue true) ? category.sort_number.to_i : -category.sort_number.to_i) rescue category.id)}
+ 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
tags = module_app.tags
ask_question = AskQuestion.new
locale = I18n.locale
- ask_settings = AskCategorySetting.where(:category_id.in=> categories.collect{|v| v.id.to_s}).to_a
+ 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
- ask_setting = AskCategorySetting.where(category_id: categories.first.id.to_s).first
if ask_setting.nil?
ask_setting = AskSetting.first
ask_setting = AskSetting.create() if ask_setting.nil?
@@ -100,7 +106,7 @@ class AsksController < ApplicationController
end
def show
ask_question = AskQuestion.where(id: @params['item']).first
- ask_setting = AskCategorySetting.where(category_id: ask_question.category_id.to_s).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
@@ -125,12 +131,18 @@ class AsksController < ApplicationController
else
categories = Category.where(:id.in=>OrbitHelper.page_categories).enabled
end
- categories = categories.sort_by{|category| (((module_app.asc rescue true) ? category.sort_number.to_i : -category.sort_number.to_i) rescue category.id)} if !(categories.include?("all"))
- ask_settings = AskCategorySetting.where(:category_id.in=> categories.collect{|v| v.id.to_s}).to_a
+ 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
+ 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
- ask_setting = AskCategorySetting.where(category_id: categories.first.id.to_s).first
if ask_setting.nil?
ask_setting = AskSetting.first
ask_setting = AskSetting.create() if ask_setting.nil?
@@ -178,10 +190,10 @@ class AsksController < ApplicationController
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
- @ask_question = AskQuestion.new()
+ @ask_question = AskQuestion.new(:ip=>request.remote_ip)
temp_params = create_params
all_to_save = []
- ask_setting = AskCategorySetting.where(category_id: params['ask_question']['category_id']).first
+ ask_setting = AskCategorySetting.enabled.where(category_id: params['ask_question']['category_id']).first
email_regex = nil
if ask_setting.nil?
ask_setting = AskSetting.first
@@ -208,7 +220,9 @@ class AsksController < ApplicationController
temp_params['custom_values'][to_save[0]] = [temp_params['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
+ 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.class == AskCategorySetting ? ask_setting.category_id : nil)
+ @usage_rule = ask_setting.usage_rule
@ask_question.update_attributes(temp_params)
build_email(@ask_question)
redirect_to "#{params[:referer_url]}?method=thank"
@@ -239,7 +253,10 @@ class AsksController < ApplicationController
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
email_er.email.update_attributes(
:mail_lang=> site.default_locale,
:create_user=>(current_user rescue nil),
@@ -256,7 +273,11 @@ class AsksController < ApplicationController
"phone" => email_er.phone,
# "fax" => email_er.fax,
# "content" => email_er.content
- "appointment" => email_er.appointment
+ "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
}
)
@@ -268,14 +289,17 @@ class AsksController < ApplicationController
end
private
def cal_form_from_setting(ask_setting,categories,show_categories=false,filter_fields=nil)
- disp_fields_infos = AskSetting.get_disp_fields_infos(ask_setting.class == AskCategorySetting ? ask_setting.category_id : nil)
+ disp_fields_infos = AskSetting.get_disp_fields_infos(true, ask_setting.class == AskCategorySetting ? ask_setting.category_id : nil)
if filter_fields
disp_fields_infos = disp_fields_infos.select{|field, info| filter_fields.include?(field)}
end
tmp = 'mongoid.attributes.ask_question'
- defalt_fields = [{'style_html'=>'','label'=>ask_label(t('title'),'true'),'content'=>text_field_tag('ask_question[title]',nil,placeholder: t('title'),required: true)}]
+ title_trans = ask_setting.field_name('title')
+ required = ask_setting.default_setting_required['title']
+ defalt_fields = [{'style_html'=>'','label'=>ask_label(title_trans, required.to_s),'content'=>text_field_tag('ask_question[title]',nil,placeholder: title_trans,required: required)}]
tmp_type = (ask_setting.class == AskSetting) ? 0 : 1
tmp_ask_cat_id = (tmp_type == 1) ? ask_setting.id.to_s : ""
+ set_input_name("ask_question")
disp_fields_infos.each do |field, info|
if field.include?("default@")
k = field[8..-1]
@@ -304,34 +328,34 @@ class AsksController < ApplicationController
end
else
if ask_setting.default_setting[field] || field == "usage_rule"
- required = ['phone','appointment'].exclude?(field) ? 'true' : 'false'
- f1 = {'style_html'=>'','label'=>ask_label(@default_ask_setting.field_name("#{field}"),required)}
+ required = ask_setting.default_setting_required[field]
+ f1 = {'style_html'=>'','label'=>ask_label(@default_ask_setting.field_name("#{field}"),required.to_s)}
field_name = "ask_question[#{field}]"
case field
when 'name'
- f1['content'] = text_field_tag(field_name,nil,data: {"fv-validation" => "required;", "fv-messages" => "必填欄位;"},required: true,placeholder:@default_ask_setting.field_name("#{field}"))
+ f1['content'] = text_field_tag(field_name,nil,data: (required ? {"fv-validation" => "required;", "fv-messages" => "必填欄位;"} : {}),required: required,placeholder:@default_ask_setting.field_name("#{field}"))
when 'sex'
f1['content'] = "
"
when 'mail'
- f1['content'] = text_field_tag(field_name,nil,data: {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"},required: true,placeholder:@default_ask_setting.field_name("#{field}"))
+ f1['content'] = text_field_tag(field_name,nil,data: (required ? {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"} : {}),required: required,placeholder:@default_ask_setting.field_name("#{field}"))
when 'phone'
- f1['content'] = text_field_tag(field_name,nil,placeholder:@default_ask_setting.field_name("#{field}"))
+ f1['content'] = text_field_tag(field_name,nil,placeholder:@default_ask_setting.field_name("#{field}"),required: required)
when 'appointment'
- f1['content'] = "
#{text_field_tag(field_name,nil,placeholder:@default_ask_setting.field_name("#{field}"))}
"
+ f1['content'] = "#{text_field_tag(field_name,nil,placeholder:@default_ask_setting.field_name("#{field}"),required: required)}
"
when 'recaptcha'
f1['content'] = "#{gotcha_error}#{gotcha}"
when 'usage_rule'
next if ask_setting.usage_rule.blank?
f1['content'] = ask_setting.usage_rule
when 'agree_show'
- f1['content'] = check_box_tag('ask_question[agree_show]')
+ f1['content'] = check_box_tag('ask_question[agree_show]', "1", false, {required: required})
when 'agree_usage'
- f1['content'] = check_box_tag('ask_question[agree_usage]')
+ f1['content'] = check_box_tag('ask_question[agree_usage]', "1", false, {required: required})
end
defalt_fields << f1
end
diff --git a/app/helpers/admin/asks_helper.rb b/app/helpers/admin/asks_helper.rb
index a18a666..2e47ad8 100644
--- a/app/helpers/admin/asks_helper.rb
+++ b/app/helpers/admin/asks_helper.rb
@@ -16,11 +16,22 @@ module Admin::AsksHelper
OrbitHelper.set_this_module_app("ask")
cats_relations = []
access_level = OrbitHelper.user_access_level?
+ include_all = false
+ cats = []
if access_level == "sub_manager"
- cats_relations = current_user.approved_categories_for_module(@module_app).map{|c| [c.id.to_s, c.title]}
+ cats = current_user.approved_categories_for_module(@module_app)
elsif access_level && access_level != "user"
cats = @module_app.categories.enabled
- cats_relations = [["",t(:all)]] + cats.map{|c| [c.id.to_s, c.title]}
+ include_all = true
+ end
+ if (@module_app.asc rescue true)
+ cats = cats.sort_by{|category| (category.sort_number.to_i rescue category.id) }
+ else
+ cats = cats.sort_by{|category| (-category.sort_number.to_i rescue category.id)}
+ end
+ cats_relations = cats.map{|c| [c.id.to_s, c.title]}
+ if include_all
+ cats_relations.insert(0, ["",t(:all)])
end
cats_relations
end
@@ -39,6 +50,38 @@ module Admin::AsksHelper
end.join.html_safe
end
end
+ def multiple_lang_show_tag(field_name, index1,field,value=nil,combine_element='',exteral_options={},sortable=false)
+ if !index1.nil?
+ all_field = (get_input_name + "[#{index1}][#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
+ else
+ all_field = (get_input_name + "[#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
+ end
+ tmp = (I18n.available_locales.collect do |locale|
+ active_flag = ((locale == I18n.locale) ? ' active' : '')
+ content_tag(:div,:class => "tab-content#{active_flag}",:id=>"#{all_field}_#{locale}") do
+ value_locale = value[locale.to_s] rescue nil
+ "#{value_locale}
".html_safe
+ end
+ end.join + create_lang_panel(all_field)).html_safe + combine_element
+
+ if sortable
+ if exteral_options['style'].nil?
+ exteral_options['style'] = 'display: flex;align-items: center;flex-wrap: nowrap;'
+ else
+ exteral_options['style'] = exteral_options['style'] + 'display: flex;align-items: center;flex-wrap: nowrap;'
+ end
+ tmp = content_tag(:div,{:class => "tab-panel border"}.merge(exteral_options)) do
+ ("" +content_tag(:div) do
+ tmp
+ end).html_safe
+ end
+ else
+ tmp = content_tag(:div,{:class => "tab-panel"}.merge(exteral_options)) do
+ tmp
+ end
+ end
+ tmp = "| #{field_name}".html_safe + ": | ".html_safe + tmp + " |
".html_safe
+ end
def multiple_lang_tag(index1,type_of_tag,field,value=nil,custom_options={},combine_element='',exteral_options={},sortable=false)
if !index1.nil?
all_field = (get_input_name + "[#{index1}][#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
@@ -170,6 +213,8 @@ module Admin::AsksHelper
case v['type']
when 'text_field'
readonly ? value : text_field_tag(field_name,value,{:required => v['required']=='true',placeholder: v['prompt_word'][I18n.locale]})
+ when 'instructions'
+ (v['instructions'][I18n.locale].html_safe rescue "")
when 'select'
prompt_hash = v['prompt_word'][I18n.locale].blank? ? {} : {prompt: v['prompt_word'][I18n.locale]}
prompt_hash.merge(:required => v['required']=='true')
@@ -221,7 +266,7 @@ module Admin::AsksHelper
file_path = value[1] rescue nil
file_required = v['required']=='true' ? 'required="required"' : ''
readonly ? "#{file_value}" : ""
when 'image'
@@ -229,7 +274,7 @@ module Admin::AsksHelper
file_path = value[1] rescue nil
file_required = v['required']=='true' ? 'required="required"' : ''
readonly ? "
" : ""
end
@@ -237,35 +282,65 @@ module Admin::AsksHelper
"#{e.inspect}
#{e.backtrace.to_yaml}"
end
end
- def custom_field_block(k,v={})
- markups = LIST[:markups].select{|k,v| k != 'member_relationship' && k != 'address'}.collect{|key,val| [t("lists.markups."+key),key]} +[[t('ask.file_field'),'file'],[t('ask.image_field'),'image']]
- multi_lang_tag = multiple_lang_tag(k,'text_field','field',v['field'],{placeholder: t('ask.field_name')})
- field_select_tag = field_select_tag(k,'type',markups,v['type'],{:onchange=>'check_available_setting_block(this)'})
- key = hidden_field_tag "#{get_input_name}[#{k}][key]",k,{'class' => 'key'}
- all_new_options = Array(v['options']).collect do |key,value|
- tmp = create_delete_button('delete_added_select_option').html_safe+hidden_field_tag("#{get_input_name}[#{k}][options][#{key}][disabled]",value['disabled'],{'class' => 'disabled_field'})
- hidden_style = value['disabled'] == 'true' ? {style: 'display:none;'} : {}
- "#{multiple_lang_tag(k,'text_field',"options][#{key}",value,{placeholder: t('ask.option_name')},tmp,hidden_style,true)}"
- end.join
- active_class = ['select','radio_button','checkbox'].include?(v['type']) ? ' active' : ''
- active_prompt_class = ['date','radio_button','checkbox'].exclude?(v['type']) ? ' active' : ''
- multi_lang_prompt_tag = "#{multiple_lang_tag(k,'text_field','prompt_word',v['prompt_word'],{placeholder: t('ask.prompt_word')})}
"
- require_ask_tag = "#{t('ask.required')}: #{field_radio_button_tag(k,'required','true',v['required']=='true')}#{t('ask.yes')}#{field_radio_button_tag(k,'required','false',v['required']!='true')}#{t('ask.no')}
"
- tmp = "#{all_new_options}
"
- field_html = "
- |
+ def custom_field_block(k,v={},show_only=false)
+ markups = LIST[:markups].select{|k,v| k != 'member_relationship' && k != 'address'}.collect{|key,val| [t("lists.markups."+key),key]} +[[t('ask.file_field'),'file'],[t('ask.image_field'),'image'],[t('ask.instructions'),'instructions']]
+ if show_only
+ multi_lang_tag = multiple_lang_show_tag(t('ask.field_name'),k,'field',v['field'])
+ require_ask_tag = " |
| #{t('ask.required')}: | #{v['required']=='true' ? t('ask.yes') : t('ask.no')} |
"
+ markups = markups.map{|k,v| [v,k]}.to_h
+ tmp = markups[v['type']]
+ tmp = markups.values[0] if tmp.nil?
+ field_select_tag = "| #{t('ask.setting_type')}: | #{tmp} |
"
+ active_prompt_class = ['date','radio_button','checkbox'].exclude?(v['type']) ? ' active' : ''
+ active_class = ['select','radio_button','checkbox'].include?(v['type']) ? ' active' : ''
+ multi_lang_prompt_tag = multiple_lang_show_tag(t('ask.prompt_word'),k,'prompt_word',v['prompt_word'])
+ field_html = "
+
+
#{multi_lang_tag}
#{require_ask_tag}
- #{field_select_tag}
+ #{field_select_tag}
#{multi_lang_prompt_tag}
- #{time_setting_block(k,v)}
- #{tmp}
- #{key}
-
-
- #{create_delete_button('delete_field_func')}
- |
- "
+ "
+ else
+ multi_lang_tag = multiple_lang_tag(k,'text_field','field',v['field'],{placeholder: t('ask.field_name')})
+ field_select_tag = field_select_tag(k,'type',markups,v['type'],{:onchange=>'check_available_setting_block(this)'})
+ key = hidden_field_tag "#{get_input_name}[#{k}][key]",k,{'class' => 'key'}
+ all_new_options = Array(v['options']).collect do |key,value|
+ tmp = create_delete_button('delete_added_select_option').html_safe+hidden_field_tag("#{get_input_name}[#{k}][options][#{key}][disabled]",value['disabled'],{'class' => 'disabled_field'})
+ hidden_style = value['disabled'] == 'true' ? {style: 'display:none;'} : {}
+ "#{multiple_lang_tag(k,'text_field',"options][#{key}",value,{placeholder: t('ask.option_name')},tmp,hidden_style,true)}"
+ end.join
+ active_class = ['select','radio_button','checkbox'].include?(v['type']) ? ' active' : ''
+ active_prompt_class = ['date','radio_button','checkbox'].exclude?(v['type']) ? ' active' : ''
+ multi_lang_prompt_tag = "#{multiple_lang_tag(k,'text_field','prompt_word',v['prompt_word'],{placeholder: t('ask.prompt_word')})}
"
+ instructions_text_area = "#{multiple_lang_tag(k,'text_area','instructions',v['instructions'],{placeholder: t('ask.prompt_word'), class: 'ckeditor'})}
"
+ require_ask_tag = "#{t('ask.required')}: #{field_radio_button_tag(k,'required','true',v['required']=='true')}#{t('ask.yes')}#{field_radio_button_tag(k,'required','false',v['required']!='true')}#{t('ask.no')}
"
+ tmp = "#{all_new_options}
"
+ field_html = "
+
+ #{multi_lang_tag}
+ #{require_ask_tag}
+ #{field_select_tag}
+ #{multi_lang_prompt_tag}
+ #{instructions_text_area}
+ #{time_setting_block(k,v)}
+ #{tmp}
+ #{key}
+ |
+
+ #{create_delete_button('delete_field_func')}
+ |
+
"
+ end
end
def create_delete_button(func_name)
""
diff --git a/app/models/ask_category_setting.rb b/app/models/ask_category_setting.rb
index 2f08f5a..56fbd9d 100644
--- a/app/models/ask_category_setting.rb
+++ b/app/models/ask_category_setting.rb
@@ -34,14 +34,15 @@ class AskCategorySetting
I18n.available_locales.map{|v| [v.to_s,self.field_name(k,v.to_s)]}.to_h
end
field :sort_number, type: Hash, default: {}
- field :default_setting, type: Hash,default: {ask_category_id: true,name: true,sex: false,mail: true,phone: false,appointment: false,recaptcha: false,agree_show: true,agree_usage: false}
+ field :default_setting, type: Hash,default: {title:true,ask_category_id: true,name: true,sex: true,mail: true,phone: true,appointment: true,recaptcha: true,agree_show: true,agree_usage: true}
+ field :default_setting_required, type: Hash,default: {title:true,ask_category_id: true,name: true,sex: true,mail: true,phone: false,appointment: false,recaptcha: true,agree_show: true,agree_usage: true}
field :default_setting_field_name, type: Hash,default: {}
-
+ field :use_default, type: Boolean, default: false
field :custom_fields, type: Hash,default: {}
field :usage_rule
field :category_id
field :title_layout, type: Integer
field :email_regex_enable, type: Boolean, default: false
field :email_regex, type: String, default: '\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z'
-
+ scope :enabled, ->{where(:use_default.ne=>true)}
end
diff --git a/app/models/ask_question.rb b/app/models/ask_question.rb
index 29aea0a..18297ec 100644
--- a/app/models/ask_question.rb
+++ b/app/models/ask_question.rb
@@ -3,9 +3,10 @@ class AskQuestion
include Mongoid::Timestamps
# include ActiveModel::Validations
include OrbitCategory::Categorizable
- include OrbitTag::Taggable
+ # include OrbitTag::Taggable
# 欄位
+ field :ip, type: String
field :name, type: String
field :identity, type: String
field :mail, type: String
@@ -46,7 +47,7 @@ class AskQuestion
end
end
email_address.uniq!
- # email_address = email_address +[self.mail] if !self.mail.blank?
+ email_address = email_address +[self.mail] if !self.mail.blank?
email_address.flatten
end
diff --git a/app/models/ask_setting.rb b/app/models/ask_setting.rb
index a750e66..f300719 100644
--- a/app/models/ask_setting.rb
+++ b/app/models/ask_setting.rb
@@ -43,12 +43,14 @@ class AskSetting
field :email_regex_enable, type: Boolean, default: false
field :email_regex, type: String, default: '\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z'
field :sort_number, type: Hash, default: {}
- field :default_setting, type: Hash,default: {ask_category_id: true,name: true,sex: false,mail: true,phone: false,appointment: false,recaptcha: false,agree_show: true,agree_usage: false}
+ field :default_setting, type: Hash,default: {title:true,ask_category_id: true,name: true,sex: true,mail: true,phone: true,appointment: true,recaptcha: true,agree_show: true,agree_usage: true}
+ field :default_setting_required, type: Hash,default: {title:true,ask_category_id: true,name: true,sex: true,mail: true,phone: false,appointment: false,recaptcha: true,agree_show: true,agree_usage: true}
field :default_setting_field_name, type: Hash,default: {}
field :custom_fields, type: Hash,default: {}
field :usage_rule
field :title_layout, type: Integer
+ field :last_ticket_key, type: Integer, default: 0
def get_attrs
attrs = self.attributes.clone
self.fields.each do |k, v|
@@ -57,20 +59,25 @@ class AskSetting
attrs.delete(k)
end
end
- attrs.except("_type","_id","uid","updated_at", "created_at", "email_regex")
+ attrs.except("_type","_id","uid","updated_at", "created_at", "email_regex", "last_ticket_key")
end
- def self.get_disp_fields_infos(cat=nil)
+ def self.get_disp_fields_infos(only_display=true, cat=nil)
ask_setting = nil
if cat.present?
- ask_setting = AskCategorySetting.where(:category_id=>cat).first
+ ask_setting = AskCategorySetting.enabled.where(:category_id=>cat).first
end
ask_setting = self.first if ask_setting.nil?
ask_setting = self.create() if ask_setting.nil?
+ default_ask_setting = ask_setting.class == self ? ask_setting : self.first
disp_fields = self::All_default_fields
disp_fields_infos = {}
locale = I18n.locale.to_s
- disp_fields[0...-4].each do |f|
- disp_fields_infos[f] = {"trans"=>ask_setting.field_name(f,locale),"sort_number"=>ask_setting.sort_number[f]}
+ tmp = disp_fields[0...-4]
+ if only_display
+ tmp = tmp.select{|f| ask_setting.default_setting[f]}
+ end
+ tmp.each do |f|
+ disp_fields_infos[f] = {"trans"=>default_ask_setting.field_name(f,locale),"sort_number"=>ask_setting.sort_number[f]}
end
tmp_locales = I18n.available_locales.map{|l| l.to_s}
tmp_locales = [locale] + (tmp_locales - [locale])
@@ -81,13 +88,13 @@ class AskSetting
end
next if trans.class != String
tmp_k = "default@#{k}"
- disp_fields_infos[tmp_k] = {"trans"=>trans,"sort_number"=>ask_setting.sort_number[tmp_k]}
+ disp_fields_infos[tmp_k] = {"trans"=>trans,"sort_number"=>ask_setting.sort_number[tmp_k],"key"=>k,"type"=>v["type"],"options"=>v["options"],"instructions"=>v["instructions"]}
end
ask_category_settings = []
if ask_setting.class == AskCategorySetting || cat.present?
ask_category_settings = []
else
- ask_category_settings = AskCategorySetting.all.to_a
+ ask_category_settings = AskCategorySetting.enabled.to_a
end
ask_category_settings.each do |c|
cat = Category.find(c.category_id)
@@ -99,20 +106,24 @@ class AskSetting
next if trans.class != String
tmp_k = "custom@#{c.id}@#{k}"
cat_title = cat.title rescue ""
- disp_fields_infos[tmp_k] = {"trans"=>"#{cat_title}-#{trans}","sort_number"=>ask_setting.sort_number[tmp_k]}
+ disp_fields_infos[tmp_k] = {"trans"=>"#{cat_title}-#{trans}","sort_number"=>ask_setting.sort_number[tmp_k],"key"=>k,"type"=>v["type"],"options"=>v["options"],"instructions"=>v["instructions"]}
end
end
- disp_fields[-4..-1].each do |f|
- disp_fields_infos[f] = {"trans"=>ask_setting.field_name(f,locale),"sort_number"=>ask_setting.sort_number[f]}
+ tmp = disp_fields[-4..-1]
+ if only_display
+ tmp = tmp.select{|f| ask_setting.default_setting[f] || f == 'usage_rule'}
end
- max_sort_number = disp_fields_infos.values.map{|h| h["sort_number"].to_i}.max
+ tmp.each do |f|
+ disp_fields_infos[f] = {"trans"=>default_ask_setting.field_name(f,locale),"sort_number"=>ask_setting.sort_number[f]}
+ end
+ max_sort_number = disp_fields_infos.values.map{|h| h["sort_number"]}.compact.max
if max_sort_number
max_sort_number = max_sort_number + 1
disp_fields_infos.each do |k,h|
if h["sort_number"].blank?
- h["sort_number"] = max_sort_number
+ h["sort_number"] = max_sort_number + h["key"].to_i
else
- h["sort_number"] = h["sort_number"].to_i
+ h["sort_number"] = h["sort_number"]
end
end
disp_fields_infos = disp_fields_infos.sort_by {|_key, value| value["sort_number"]}
diff --git a/app/models/ask_ticket_status.rb b/app/models/ask_ticket_status.rb
new file mode 100644
index 0000000..6561b6a
--- /dev/null
+++ b/app/models/ask_ticket_status.rb
@@ -0,0 +1,42 @@
+class AskTicketStatus
+ include Mongoid::Document
+ include Mongoid::Timestamps
+ DefaultKeys = ["is_waiting", "is_processed", "is_referral", "is_published"]
+ field :title, type: String, localize: true
+ field :is_default, type: Boolean, default: false # if true => cannot delete
+ field :key, type: String
+ before_create do
+ if self.key.blank?
+ can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash)
+ last_ticket_key = can_update_shared_hash ? OrbitHelper::SharedHash["ask"][:last_ticket_key] : AskSetting.pluck(:last_ticket_key)[0].to_i
+ self.key = last_ticket_key.to_s
+ AskSetting.all.inc({'last_ticket_key'=>1})
+ if can_update_shared_hash
+ OrbitHelper::SharedHash["ask"][:last_ticket_key] = last_ticket_key + 1
+ end
+ end
+ true
+ end
+ after_destroy do
+ # can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash)
+ # AskSetting.all.inc({'last_ticket_key'=>-1})
+ # if can_update_shared_hash
+ # OrbitHelper::SharedHash["ask"][:last_ticket_key] = OrbitHelper::SharedHash["ask"][:last_ticket_key] - 1
+ # end
+ end
+ def title
+ tmp = super
+ if self.is_default
+ tmp = I18n.t("ask.#{self.key}") if tmp.blank?
+ end
+ tmp
+ end
+ def get_title_translations(locales=nil)
+ locales = I18n.available_locales if locales.nil?
+ trans = {}
+ locales.each do |locale|
+ trans[locale] = I18n.with_locale(locale){self.title}
+ end
+ trans
+ end
+end
\ No newline at end of file
diff --git a/app/views/admin/asks/_ask_setting.html.erb b/app/views/admin/asks/_ask_setting.html.erb
index 4f510c5..5c7b413 100644
--- a/app/views/admin/asks/_ask_setting.html.erb
+++ b/app/views/admin/asks/_ask_setting.html.erb
@@ -43,7 +43,7 @@
.center .tab-panel{
justify-content: start;
}
- tr.custom_field {
+ tr.custom_field, tbody.custom_field {
border: 0.1em solid #8e00ff;
}
tr.custom_field > td >div {
@@ -64,23 +64,30 @@
var tmp = $(ele).val()
var parent_div = $(ele).parents('.custom_field').eq(0)
if (tmp != 'date' && tmp != 'radio_button' && tmp!='checkbox'){
- parent_div.find('.prompt_word').addClass('active')
+ parent_div.find('.prompt_word').addClass('active');
}else{
- parent_div.find('.prompt_word').removeClass('active')
+ parent_div.find('.prompt_word').removeClass('active');
}
if (tmp == 'select' || tmp == 'radio_button' || tmp=='checkbox'){
- parent_div.find('.add_new_options').addClass('active')
+ parent_div.find('.add_new_options').addClass('active');
}else{
- parent_div.find('.add_new_options').removeClass('active')
+ parent_div.find('.add_new_options').removeClass('active');
+ }
+ if (tmp == 'instructions'){
+ parent_div.find('.instructions_text_area').removeClass('hide');
+ parent_div.find('.prompt_word').removeClass('active');
+ }else{
+ parent_div.find('.instructions_text_area').addClass('hide');
+ parent_div.find('.prompt_word').addClass('active');
}
if (tmp == 'date'){
- parent_div.find('.time_setting_block').addClass('active')
+ parent_div.find('.time_setting_block').addClass('active');
}else{
- parent_div.find('.time_setting_block').removeClass('active')
+ parent_div.find('.time_setting_block').removeClass('active');
}
}
function delete_field_func(ele){
- $(ele).parents('tr').remove()
+ $(ele).parents('tr').hide()
var all_delete_field = $('.delete_field').val()
all_delete_field = all_delete_field + ',' + $(ele).parents('tr').find('.key').val()
$('.delete_field').val(all_delete_field)
@@ -113,6 +120,24 @@
set_input_name("#{form_type}")
%>