From e7aafff59bdd2de732ba16ae59e78b09a1251e17 Mon Sep 17 00:00:00 2001 From: Bohung Date: Tue, 12 Apr 2022 22:17:34 +0800 Subject: [PATCH] Add email validation regex setting! --- app/controllers/admin/asks_controller.rb | 1 + app/controllers/asks_controller.rb | 17 +++++++++++---- app/models/ask_setting.rb | 4 +++- app/views/admin/asks/_ask_setting.html.erb | 21 ++++++++++++++++++ app/views/admin/asks/setting.html.erb | 2 +- app/views/asks/index.html.erb | 25 ++++++++++++++++++++++ config/locales/en.yml | 3 +++ config/locales/zh_tw.yml | 3 +++ modules/ask/_ask_widget_form.html.erb | 24 +++++++++++++++++++++ 9 files changed, 94 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/asks_controller.rb b/app/controllers/admin/asks_controller.rb index 0207c36..a8a1906 100644 --- a/app/controllers/admin/asks_controller.rb +++ b/app/controllers/admin/asks_controller.rb @@ -426,6 +426,7 @@ class Admin::AsksController < OrbitAdminController 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.delete('custom_fields') + param_clone.delete('email_regex') custom_fields = ask_setting['custom_fields'].clone params_custom_fields = (params.require(collection_name).require('custom_fields') rescue {}) params_custom_fields.each do |k,v| diff --git a/app/controllers/asks_controller.rb b/app/controllers/asks_controller.rb index 2610e26..7d5239b 100644 --- a/app/controllers/asks_controller.rb +++ b/app/controllers/asks_controller.rb @@ -39,10 +39,12 @@ class AsksController < ApplicationController 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) + email_regex = @default_ask_setting.email_regex_enable ? @default_ask_setting.email_regex.gsub("\\A","^").gsub("\\z","$") : nil { 'fields' => defalt_fields, 'extras'=>{ - 'switch_form' => switch_form + 'switch_form' => switch_form, + 'email_regex' => email_regex } } else @@ -141,6 +143,7 @@ class AsksController < ApplicationController switch_form = cal_switch_form(ask_settings,categories,token_tag,referer_url) tags = module_app.tags ask_question = AskQuestion.new(id: nil) + email_regex = @default_ask_setting.email_regex_enable ? @default_ask_setting.email_regex.gsub("\\A","^").gsub("\\z","$") : nil { 'layout_type' => 'index', 'ask_question' => ask_question, @@ -149,7 +152,8 @@ class AsksController < ApplicationController 'module_app' => module_app, 'switch_form' => switch_form, 'ask_setting' => ask_setting, - 'default_ask_setting' => @default_ask_setting + 'default_ask_setting' => @default_ask_setting, + 'email_regex' => email_regex } elsif @layout_type == 'published_index' page_number = OrbitHelper.page_number.to_i @@ -178,10 +182,15 @@ class AsksController < ApplicationController temp_params = create_params all_to_save = [] ask_setting = AskCategorySetting.where(category_id: params['ask_question']['category_id']).first + email_regex = nil if ask_setting.nil? ask_setting = AskSetting.first ask_setting = AskSetting.create() if ask_setting.nil? + email_regex = ask_setting.email_regex + else + email_regex = AskSetting.first.email_regex rescue nil end + email_regex = nil if !(ask_setting.email_regex_enable) || !(ask_setting.default_setting['mail']) ask_setting.custom_fields.select{|k,v| v['type']=='file' || v['type']=='image'}.each do |k,v| file = temp_params['custom_values'][k] if !file.blank? @@ -199,7 +208,7 @@ 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 flag + if (email_regex ? ::Regexp.new(email_regex).match?(temp_params["mail"].to_s) : true) && flag @ask_question.update_attributes(temp_params) build_email(@ask_question) redirect_to "#{params[:referer_url]}?method=thank" @@ -346,7 +355,7 @@ class AsksController < ApplicationController " end.join - "
+ " #{token_tag}
#{tmp} diff --git a/app/models/ask_setting.rb b/app/models/ask_setting.rb index 594de92..9018543 100644 --- a/app/models/ask_setting.rb +++ b/app/models/ask_setting.rb @@ -35,6 +35,8 @@ class AskSetting def field_name_translations(k) I18n.available_locales.map{|v| [v.to_s,self.field_name(k,v.to_s)]}.to_h end + 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_field_name, type: Hash,default: {} @@ -49,7 +51,7 @@ class AskSetting attrs.delete(k) end end - attrs.except("_type","_id","uid","updated_at", "created_at") + attrs.except("_type","_id","uid","updated_at", "created_at", "email_regex") end def self.get_disp_fields_infos(cat=nil) ask_setting = nil diff --git a/app/views/admin/asks/_ask_setting.html.erb b/app/views/admin/asks/_ask_setting.html.erb index 237c7e3..edf1f4b 100644 --- a/app/views/admin/asks/_ask_setting.html.erb +++ b/app/views/admin/asks/_ask_setting.html.erb @@ -98,6 +98,27 @@ set_input_name("#{form_type}") %>
+ <% if @has_email_regex %> +
+
+ +
+
+ <%= f.check_box :email_regex_enable, {:id=>"email_regex_enable"} %><%= t("ask.enable") %> +
+ <%= f.text_field :email_regex, {:id=>"ask_email_regex", :style => "width: 30em;"}.merge(f.object.email_regex_enable ? {} : {:disabled=>"disabled"}) %> +
+
+ + <% end %> diff --git a/app/views/admin/asks/setting.html.erb b/app/views/admin/asks/setting.html.erb index 1521831..2e947cb 100644 --- a/app/views/admin/asks/setting.html.erb +++ b/app/views/admin/asks/setting.html.erb @@ -25,5 +25,5 @@ }) <%= form_for @ask_setting,method: 'post',url: @url,html: { class: 'form-horizontal main-forms previewable' } do |f| %> - <%= render partial: 'ask_setting',locals:{ask_setting: @ask_setting,f: f,submit_text: t('submit')} %> + <%= render partial: 'ask_setting',locals:{ask_setting: @ask_setting,f: f,submit_text: t('submit'), :@has_email_regex => true} %> <% end %> \ No newline at end of file diff --git a/app/views/asks/index.html.erb b/app/views/asks/index.html.erb index e52b37d..8f6b750 100644 --- a/app/views/asks/index.html.erb +++ b/app/views/asks/index.html.erb @@ -7,6 +7,7 @@ ask_setting = data["ask_setting"] set_input_name('ask_question') @default_ask_setting = data['default_ask_setting'] + email_regex = data['email_regex'] %> <% if data['layout_type'] != 'index' %> <%= render template: "asks/#{data['layout_type']}",:locals => { :data => data, :ask_setting => ask_setting } %> @@ -143,5 +144,29 @@ $(function(){ // } }) +$(document).ready(function(){ + var email_regex = "<%=email_regex%>"; + if(email_regex.length != 0){ + email_regex = new RegExp(email_regex); + var submit_flag = false; + $(".ask-question-form").each(function(i, form){ + var $form = $(form); + if($form.length != 0 && $form.find('#ask_question_mail').length != 0){ + $form.submit(function(){ + if(!submit_flag){ + submit_flag = true; + if(email_regex.test($form.find('#ask_question_mail').val())){ + submit_flag = false; + }else{ + alert("<%=t('ask.please_check_email_format')%>"); + submit_flag = false; + return false; + } + } + }) + } + }) + } +}) <% end %> \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 151c354..2c08be4 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2,6 +2,9 @@ en: situation: Situation sex: Sex ask: + please_check_email_format: "Please check email format!" + enable: Enable + email_regex: Email validation regex please_save: Please click "Save Order" button when you done. save_order: Save Order order_fields: Order Fields diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index aab12fc..5b2be9f 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -6,6 +6,9 @@ zh_tw: errors: verification_failed: 驗證碼錯誤 ask: + please_check_email_format: "請檢察email是否正確!" + enable: 啟用 + email_regex: Email驗證regex please_save: 調整完後, 請點選"儲存順序" save_order: 儲存順序 order_fields: 排序欄位 diff --git a/modules/ask/_ask_widget_form.html.erb b/modules/ask/_ask_widget_form.html.erb index 9682a8d..27d8ad6 100644 --- a/modules/ask/_ask_widget_form.html.erb +++ b/modules/ask/_ask_widget_form.html.erb @@ -74,5 +74,29 @@ } } }) + $(document).ready(function(){ + var email_regex = "{{email_regex}}"; + if(email_regex.length != 0){ + email_regex = new RegExp(email_regex); + var submit_flag = false; + $(".ask-question-form").each(function(i, form){ + var $form = $(form); + if($form.length != 0 && $form.find('#ask_question_mail').length != 0){ + $form.submit(function(){ + if(!submit_flag){ + submit_flag = true; + if(email_regex.test($form.find('#ask_question_mail').val())){ + submit_flag = false; + }else{ + alert("<%=t('ask.please_check_email_format')%>"); + submit_flag = false; + return false; + } + } + }) + } + }) + } + }) \ No newline at end of file