diff --git a/app/controllers/admin/asks_controller.rb b/app/controllers/admin/asks_controller.rb index 0dfdb12..662181a 100644 --- a/app/controllers/admin/asks_controller.rb +++ b/app/controllers/admin/asks_controller.rb @@ -124,6 +124,7 @@ class Admin::AsksController < OrbitAdminController Tag.find(tag).name_translations{} end def category_setting + @default_ask_setting = AskSetting.first @categories = @module_app.categories @category_ids = @categories.pluck(:id) @category_titles = @categories.pluck(:title).collect{|v| v[I18n.locale]} @@ -387,7 +388,7 @@ class Admin::AsksController < OrbitAdminController def ask_setting_params(ask_setting,collection_name) param = params.require(collection_name).permit! param_clone = param.clone - param_clone['default_setting'].each { |k, v| param_clone['default_setting'][k] = (v == 'true'? true : false) } + 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.delete('custom_fields') custom_fields = ask_setting['custom_fields'].clone params_custom_fields = (params.require(collection_name).require('custom_fields') rescue {}) diff --git a/app/controllers/asks_controller.rb b/app/controllers/asks_controller.rb index 5c5e140..f9502a5 100644 --- a/app/controllers/asks_controller.rb +++ b/app/controllers/asks_controller.rb @@ -25,6 +25,9 @@ class AsksController < ActionController::Base 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 defalt_fields = cal_form_from_setting(ask_setting,categories) request = OrbitHelper.request @@ -125,12 +128,15 @@ class AsksController < ActionController::Base 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) tags = module_app.tags - ask_question = AskQuestion.new + ask_question = AskQuestion.new(id: nil) { 'layout_type' => 'index', 'ask_question' => ask_question, @@ -138,7 +144,8 @@ class AsksController < ActionController::Base 'tags' => tags, 'module_app' => module_app, 'switch_form' => switch_form, - 'ask_setting' => ask_setting + 'ask_setting' => ask_setting, + 'default_ask_setting' => @default_ask_setting } elsif @layout_type == 'published_index' page_number = OrbitHelper.page_number.to_i @@ -252,33 +259,33 @@ class AsksController < ActionController::Base defalt_fields = [{'style_html'=>'','label'=>ask_label(t('title'),'true'),'content'=>text_field_tag('ask_question[title]',nil,placeholder: t('title'),required: true)}] if show_categories || ask_setting.default_setting['ask_category_id'] if categories.count > 1 - defalt_fields = defalt_fields + [{'style_html'=>'','label'=>ask_label(t("#{tmp}.ask_category_id"),'true'),'content'=>select_tag('ask_question[category_id]', options_for_select(categories.collect{|t| [ t.title, t.id ]}))}] + defalt_fields = defalt_fields + [{'style_html'=>'','label'=>ask_label(@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 - defalt_fields = defalt_fields + [{'style_html'=>'','label'=>ask_label(t("#{tmp}.ask_category_id"),'true'),'content'=>"#{(categories[0].title rescue '')}"+hidden_field_tag('ask_question[category_id]', (categories[0].id.to_s rescue ''))}] + defalt_fields = defalt_fields + [{'style_html'=>'','label'=>ask_label(@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 defalt_fields = defalt_fields + [{'style_html'=>'display: none;','label'=>'','content'=>hidden_field_tag('ask_question[category_id]', (categories[0].id.to_s rescue ''))}] end defalt_fields = defalt_fields + ['name','sex','mail','phone','appointment'].select{|v| ask_setting.default_setting[v]}.collect do |field| required = ['phone','appointment'].exclude?(field) ? 'true' : 'false' - f1 = {'style_html'=>'','label'=>ask_label(t("#{tmp}.#{field}"),required)} + f1 = {'style_html'=>'','label'=>ask_label(@default_ask_setting.field_name("#{field}"),required)} 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:t("#{tmp}.#{field}")) + f1['content'] = text_field_tag(field_name,nil,data: {"fv-validation" => "required;", "fv-messages" => "必填欄位;"},required: true,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:t("#{tmp}.#{field}")) + 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}")) when 'phone' - f1['content'] = text_field_tag(field_name,nil,placeholder:t("#{tmp}.#{field}")) + f1['content'] = text_field_tag(field_name,nil,placeholder:@default_ask_setting.field_name("#{field}")) when 'appointment' - f1['content'] = "
#{text_field_tag(field_name,nil,placeholder:t("#{tmp}.#{field}"))}
" + f1['content'] = "
#{text_field_tag(field_name,nil,placeholder:@default_ask_setting.field_name("#{field}"))}
" end f1 end @@ -337,18 +344,19 @@ class AsksController < ActionController::Base 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.find('label').map(function(){ + var old_inputs = old_controls.children('label').map(function(){ return $.trim($(this).text().replace(/\\\*/g,'')); }).get() var new_controls = self.parents('.ask-question').eq(0).find('form#'+id).find('.control-group') - var new_inputs = new_controls.find('label').map(function(){ + 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#ask_question_category_id').length==0){ - new_controls.eq(i).find('.controls').eq(0).before(old_controls.eq(i0).find('.controls').clone()) - new_controls.eq(i).find('.controls').eq(-1).remove() + var new_ = new_controls.eq(i).find('.controls').eq(0), + old_ = old_controls.eq(i0).find('.controls').eq(0); + old_.clone().replaceAll(new_); } }) self.parents('.ask-question').eq(0).find('form').hide() diff --git a/app/helpers/admin/asks_helper.rb b/app/helpers/admin/asks_helper.rb index 31eb728..67a4795 100644 --- a/app/helpers/admin/asks_helper.rb +++ b/app/helpers/admin/asks_helper.rb @@ -207,7 +207,7 @@ module Admin::AsksHelper file_path = value[1] rescue nil file_required = v['required']=='true' ? 'required="required"' : '' readonly ? "#{file_value}" : "
" when 'image' diff --git a/app/models/ask_category_setting.rb b/app/models/ask_category_setting.rb index 7acfba8..efb2d38 100644 --- a/app/models/ask_category_setting.rb +++ b/app/models/ask_category_setting.rb @@ -22,7 +22,21 @@ class AskCategorySetting tmp = super tmp.select{|k,v| v['delete'] != true} end + def field_name(k,locale=I18n.locale.to_s) + (self.default_setting_field_name[k]&&self.default_setting_field_name[k][locale]) ? self.default_setting_field_name[k][locale] : self.default_field_name(k,locale) + end + + def default_field_name(k,locale=I18n.locale.to_s) + I18n.with_locale(locale){(['agree_show','agree_usage'].include?(k.to_s) ? I18n.t("ask.#{k}_checkbox") : I18n.t("mongoid.attributes.ask_question.#{k}"))} + end + + def field_name_translations(k) + I18n.available_locales.map{|v| [v.to_s,self.field_name(k,v.to_s)]}.to_h + end + 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_field_name, type: Hash,default: {} + field :custom_fields, type: Hash,default: {} field :usage_rule field :category_id diff --git a/app/models/ask_setting.rb b/app/models/ask_setting.rb index f0c4ca1..3565268 100644 --- a/app/models/ask_setting.rb +++ b/app/models/ask_setting.rb @@ -22,7 +22,21 @@ class AskSetting tmp = super tmp.select{|k,v| v['delete'] != true} end + def field_name(k,locale=I18n.locale.to_s) + (self.default_setting_field_name[k]&&self.default_setting_field_name[k][locale]) ? self.default_setting_field_name[k][locale] : self.default_field_name(k,locale) + end + + def default_field_name(k,locale=I18n.locale.to_s) + I18n.with_locale(locale){(['agree_show','agree_usage'].include?(k.to_s) ? I18n.t("ask.#{k}_checkbox") : I18n.t("mongoid.attributes.ask_question.#{k}"))} + end + + def field_name_translations(k) + I18n.available_locales.map{|v| [v.to_s,self.field_name(k,v.to_s)]}.to_h + end + 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_field_name, type: Hash,default: {} + field :custom_fields, type: Hash,default: {} field :usage_rule end diff --git a/app/views/admin/asks/_ask_setting.html.erb b/app/views/admin/asks/_ask_setting.html.erb index 9c65fc4..6bf13b5 100644 --- a/app/views/admin/asks/_ask_setting.html.erb +++ b/app/views/admin/asks/_ask_setting.html.erb @@ -90,7 +90,10 @@ border-top: 0.1em solid #099700; } - +<% tmp_get_input_name = get_input_name + form_type = tmp_get_input_name.split('[')[0] + set_input_name("#{form_type}") +%>
@@ -101,19 +104,30 @@ + <% if form_type=='ask_setting' %> + + <% end %> <% ask_setting.default_setting.each do |k,v| %> + <% if form_type=='ask_setting' %> + + <% end %> <% end %> + <% set_input_name(tmp_get_input_name) %>
<%= t('ask.whether_open') %> + <%= t('ask.field_name') %> +
- <%= ['agree_show','agree_usage'].include?(k.to_s) ? t("ask.#{k}_checkbox") : t("mongoid.attributes.ask_question.#{k}") %> + <%= tmp = (form_type=='ask_setting' ? ask_setting.default_field_name(k) : @default_ask_setting.field_name(k)) %> - <%= f.select "default_setting[#{k}]",[[t('yes'),'true'],[t('no'),false]] ,selected: v %> + <%= select_tag "#{get_input_name}[default_setting][#{k}]",options_for_select([[t('yes'),'true'],[t('no'),false]],v) %> + <%= multiple_lang_tag(nil,'text_field',"default_setting_field_name][#{k}",ask_setting.field_name_translations(k),{placeholder: tmp}) %> +
<%= t("ask.usage_rule") %> diff --git a/app/views/asks/index.html.erb b/app/views/asks/index.html.erb index 70659ca..0e924b9 100644 --- a/app/views/asks/index.html.erb +++ b/app/views/asks/index.html.erb @@ -6,6 +6,7 @@ @switch_form = data["switch_form"] ask_setting = data["ask_setting"] set_input_name('ask_question') + @default_ask_setting = data['default_ask_setting'] %> <% if data['layout_type'] != 'index' %> <%= render template: "asks/#{data['layout_type']}",:locals => { :data => data, :ask_setting => ask_setting } %> @@ -64,7 +65,7 @@ <%= stylesheet_link_tag "custom_field" %> <%# stylesheet_link_tag "jquery-ui-timepicker-addon" %>