add file and image type for custom field
This commit is contained in:
parent
fa7d56437d
commit
8b3361360b
|
@ -17,4 +17,12 @@ input[type=checkbox]:focus {
|
||||||
.ask-question .control-group{
|
.ask-question .control-group{
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.file-selector,.ask-question .controls >.file-selector{
|
||||||
|
display: inline-flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.filename{
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
|
@ -98,8 +98,32 @@ class Admin::AsksController < OrbitAdminController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
locale = I18n.locale
|
locale = I18n.locale
|
||||||
ask_question_param = params.require(:ask_question).permit!
|
temp_params = params.require(:ask_question).permit!
|
||||||
@ask_question.update_attributes(ask_question_param)
|
|
||||||
|
all_to_save = []
|
||||||
|
ask_setting = AskSetting.first
|
||||||
|
ask_setting = AskSetting.create() if ask_setting.nil?
|
||||||
|
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?
|
||||||
|
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
|
||||||
|
else
|
||||||
|
temp_params['custom_values'][k] = @ask_question.custom_values[k]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
flag = @ask_question.save
|
||||||
|
if flag
|
||||||
|
all_to_save.each do |to_save|
|
||||||
|
flag = flag && to_save[1].save
|
||||||
|
temp_params['custom_values'][to_save[0]] = [temp_params['custom_values'][to_save[0]].original_filename ,to_save[1].file.url]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@ask_question.update_attributes(temp_params)
|
||||||
if @ask_question.send_email?
|
if @ask_question.send_email?
|
||||||
build_email(@ask_question)
|
build_email(@ask_question)
|
||||||
end
|
end
|
||||||
|
|
|
@ -118,7 +118,6 @@ class AsksController < ActionController::Base
|
||||||
end
|
end
|
||||||
def show
|
def show
|
||||||
ask_question = AskQuestion.where(id: @params['item']).first
|
ask_question = AskQuestion.where(id: @params['item']).first
|
||||||
puts ask_question.inspect
|
|
||||||
{'ask_question' => ask_question,'layout_type'=>'show'}
|
{'ask_question' => ask_question,'layout_type'=>'show'}
|
||||||
end
|
end
|
||||||
def index
|
def index
|
||||||
|
@ -161,8 +160,30 @@ class AsksController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@ask_question = AskQuestion.new(create_params)
|
@ask_question = AskQuestion.new()
|
||||||
if (gotcha_valid? || !AskSetting.first.default_setting['recaptcha'])&& @ask_question.save
|
temp_params = create_params
|
||||||
|
all_to_save = []
|
||||||
|
ask_setting = AskSetting.first
|
||||||
|
ask_setting = AskSetting.create() if ask_setting.nil?
|
||||||
|
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?
|
||||||
|
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
|
||||||
|
flag =(gotcha_valid? || !AskSetting.first.default_setting['recaptcha']) && @ask_question.save
|
||||||
|
if flag
|
||||||
|
all_to_save.each do |to_save|
|
||||||
|
flag = flag && to_save[1].save
|
||||||
|
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
|
||||||
|
@ask_question.update_attributes(temp_params)
|
||||||
build_email(@ask_question)
|
build_email(@ask_question)
|
||||||
redirect_to "#{params[:referer_url]}/?method=thank"
|
redirect_to "#{params[:referer_url]}/?method=thank"
|
||||||
else
|
else
|
||||||
|
|
|
@ -147,6 +147,22 @@ module Admin::AsksHelper
|
||||||
readonly ? value.collect{|k1,v1| Array(v['options'])[v1.to_i][1][I18n.locale]}.join(', ') : Array(v['options']).select{|index1,option| option['disabled'] != 'true'}.collect do |index1,option|
|
readonly ? value.collect{|k1,v1| Array(v['options'])[v1.to_i][1][I18n.locale]}.join(', ') : Array(v['options']).select{|index1,option| option['disabled'] != 'true'}.collect do |index1,option|
|
||||||
"#{check_box_tag("#{field_name}[#{index1}]",index1,value[index1]==index1)}#{option[I18n.locale]}"
|
"#{check_box_tag("#{field_name}[#{index1}]",index1,value[index1]==index1)}#{option[I18n.locale]}"
|
||||||
end.join
|
end.join
|
||||||
|
when 'file'
|
||||||
|
file_value = value[0] rescue nil
|
||||||
|
file_path = value[1] rescue nil
|
||||||
|
file_required = v['required']=='true' ? 'required="required"' : ''
|
||||||
|
readonly ? "<a href=\"#{file_path}\" title=\"file\">#{file_value}</a>" : "<div class=\"file-selector\"><label class=\"ui-button\">
|
||||||
|
<input data-src=\"#{file_path}\" style=\"position: absolute;width:0.00000001em;\" class=\"upload\" name=\"#{field_name}\" #{file_required} type=\"file\" value=\"#{file_value}\"/>
|
||||||
|
<i class=\"fa fa-file\"></i> #{t('ask.upload_file')}
|
||||||
|
</label><div class=\"filename\"></div></div>"
|
||||||
|
when 'image'
|
||||||
|
file_value = value[0] rescue nil
|
||||||
|
file_path = value[1] rescue nil
|
||||||
|
file_required = v['required']=='true' ? 'required="required"' : ''
|
||||||
|
readonly ? "<img src=\"#{file_path}\" alt=\"#{file_value}\">" : "<div class=\"file-selector\"><label class=\"ui-button\">
|
||||||
|
<input data-image-src=\"#{file_path}\" style=\"position: absolute;width:0.00000001em;\" accept=\"image/*\" class=\"upload\" name=\"#{field_name}\" #{file_required} type=\"file\" value=\"#{file_value}\"/>
|
||||||
|
<i class=\"fa fa-photo\"></i> #{t('ask.upload_image')}
|
||||||
|
</label><div class=\"filename\"></div></div>"
|
||||||
end
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
debug [e.inspect,e.backtrace]
|
debug [e.inspect,e.backtrace]
|
||||||
|
@ -154,7 +170,7 @@ module Admin::AsksHelper
|
||||||
end
|
end
|
||||||
def custom_field_block(k,v={})
|
def custom_field_block(k,v={})
|
||||||
set_input_name('ask_setting[custom_fields]')
|
set_input_name('ask_setting[custom_fields]')
|
||||||
markups = LIST[:markups].select{|k,v| k != 'member_relationship' && k != 'address'}.collect{|key,val| [t("lists.markups."+key),key]}
|
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')})
|
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)'})
|
field_select_tag = field_select_tag(k,'type',markups,v['type'],{:onchange=>'check_available_setting_block(this)'})
|
||||||
key = hidden_field_tag "ask_setting[custom_fields][#{k}][key]",k,{'class' => 'key'}
|
key = hidden_field_tag "ask_setting[custom_fields][#{k}][key]",k,{'class' => 'key'}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AskFile
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
|
mount_uploader :file, AssetUploader
|
||||||
|
field :ask_question_id
|
||||||
|
end
|
|
@ -0,0 +1,9 @@
|
||||||
|
class AskImage
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
|
mount_uploader :file, AskImageUploader
|
||||||
|
|
||||||
|
field :ask_question_id
|
||||||
|
field :album_crops,default: []
|
||||||
|
end
|
|
@ -0,0 +1,71 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
module CarrierWave
|
||||||
|
module Uploader
|
||||||
|
module Versions
|
||||||
|
def store_dir
|
||||||
|
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class AskImageUploader < CarrierWave::Uploader::Base
|
||||||
|
# Include RMagick or ImageScience support:
|
||||||
|
# include CarrierWave::RMagick
|
||||||
|
# include CarrierWave::ImageScience
|
||||||
|
include CarrierWave::MiniMagick
|
||||||
|
# Choose what kind of storage to use for this uploader:
|
||||||
|
# storage :file
|
||||||
|
# storage :s3
|
||||||
|
|
||||||
|
# Override the directory where uploaded files will be stored.
|
||||||
|
# This is a sensible default for uploaders that are meant to be mounted:
|
||||||
|
def store_dir
|
||||||
|
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
||||||
|
end
|
||||||
|
def get_org_url
|
||||||
|
if have_crop?
|
||||||
|
model.file.resized.url
|
||||||
|
else
|
||||||
|
model.file.url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
def fix_exif_rotation
|
||||||
|
manipulate! do |img|
|
||||||
|
img.tap(&:auto_orient)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
process :optimize
|
||||||
|
|
||||||
|
version :thumb do
|
||||||
|
process :pad_process => [200,200]
|
||||||
|
end
|
||||||
|
|
||||||
|
version :theater do
|
||||||
|
process :limit_process => [1920, 1080]
|
||||||
|
end
|
||||||
|
version :mobile do
|
||||||
|
process :limit_process => [1152, 768]
|
||||||
|
end
|
||||||
|
|
||||||
|
def optimize (*arg)
|
||||||
|
manipulate! do |img|
|
||||||
|
return img unless img.mime_type.match /image\/jpeg/
|
||||||
|
img.strip
|
||||||
|
img.combine_options do |c|
|
||||||
|
c.quality "90"
|
||||||
|
c.depth "24"
|
||||||
|
c.interlace "plane"
|
||||||
|
end
|
||||||
|
img
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def limit_process(w,h)
|
||||||
|
resize_to_limit(w,h)
|
||||||
|
end
|
||||||
|
def pad_process (w,h)
|
||||||
|
resize_and_pad(w, h, :transparent, 'Center')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -18,6 +18,26 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('input:file').change(function(e){
|
||||||
|
var fileName = e.target.files[0].name;
|
||||||
|
$(this).parents(".file-selector").eq(0).find('.filename').html(fileName);
|
||||||
|
})
|
||||||
|
$('input:file').each(function(i,v){
|
||||||
|
|
||||||
|
var filename = $(v).attr('value')
|
||||||
|
if (filename){
|
||||||
|
if ($(v).attr('data-image-src')){
|
||||||
|
$(v).parents(".file-selector").eq(0).find('.filename').html("<img src=\""+$(v).attr('data-image-src')+"\">"+filename);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$(v).parents(".file-selector").eq(0).find('.filename').html("<a href=\""+$(v).attr('data-src')+"\">"+filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
<div class="input-area">
|
<div class="input-area">
|
||||||
<div id="ask-asks">
|
<div id="ask-asks">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= form_for @ask_question, url: @url, html: { class: 'form-horizontal main-forms previewable' } do |f| %>
|
<%= form_for @ask_question, url: @url, html: { class: 'form-horizontal main-forms previewable',multipart: true } do |f| %>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<%= render :partial => 'form', locals: {f: f} %>
|
<%= render :partial => 'form', locals: {f: f} %>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -67,6 +67,12 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var datepicker_fn = $.fn.datepicker
|
var datepicker_fn = $.fn.datepicker
|
||||||
var datepicker = $.datepicker
|
var datepicker = $.datepicker
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('input:file').change(function(e){
|
||||||
|
var fileName = e.target.files[0].name;
|
||||||
|
$(this).parents(".file-selector").eq(0).find('.filename').html(fileName);
|
||||||
|
})
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
<%# javascript_include_tag "lib/bootstrap-datetimepicker" %>
|
<%# javascript_include_tag "lib/bootstrap-datetimepicker" %>
|
||||||
<%# javascript_include_tag "jquery.ui.datepicker.monthyearpicker" %>
|
<%# javascript_include_tag "jquery.ui.datepicker.monthyearpicker" %>
|
||||||
|
@ -74,7 +80,7 @@
|
||||||
<%= javascript_include_tag 'validator' %>
|
<%= javascript_include_tag 'validator' %>
|
||||||
<link href="/assets/ask/ask.css" media="screen" rel="stylesheet">
|
<link href="/assets/ask/ask.css" media="screen" rel="stylesheet">
|
||||||
<div id="new-ask-question" class="ask-question">
|
<div id="new-ask-question" class="ask-question">
|
||||||
<%= form_for @ask_question, url: asks_path, html: {class: 'form-horizontal'} do |f| %>
|
<%= form_for @ask_question, url: asks_path, html: {class: 'form-horizontal',multipart: true} do |f| %>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<%= f.label nil,t('title'), class: 'control-label required' %>
|
<%= f.label nil,t('title'), class: 'control-label required' %>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
|
|
@ -2,6 +2,10 @@ en:
|
||||||
situation: Situation
|
situation: Situation
|
||||||
sex: Sex
|
sex: Sex
|
||||||
ask:
|
ask:
|
||||||
|
file_field: File Field
|
||||||
|
image_field: Image Field
|
||||||
|
upload_file: Upload File
|
||||||
|
upload_image: Upload Image
|
||||||
no_index_page: There are no page for ask module created at site struture.
|
no_index_page: There are no page for ask module created at site struture.
|
||||||
thank_text: We will reply as soon as posible,thank you.
|
thank_text: We will reply as soon as posible,thank you.
|
||||||
is_waiting: Pending
|
is_waiting: Pending
|
||||||
|
|
|
@ -8,6 +8,10 @@ zh_tw:
|
||||||
errors:
|
errors:
|
||||||
verification_failed: 驗證碼錯誤
|
verification_failed: 驗證碼錯誤
|
||||||
ask:
|
ask:
|
||||||
|
file_field: 檔案欄位
|
||||||
|
image_field: 照片欄位
|
||||||
|
upload_file: 上傳檔案
|
||||||
|
upload_image: 上傳圖片
|
||||||
no_index_page: 前台頁面尚未被建立,請前往網站架構設定,謝謝。
|
no_index_page: 前台頁面尚未被建立,請前往網站架構設定,謝謝。
|
||||||
thank_text: 我們已經收到您的預約,期待您的蒞臨,謝謝
|
thank_text: 我們已經收到您的預約,期待您的蒞臨,謝謝
|
||||||
is_waiting: 待處理
|
is_waiting: 待處理
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div id="new-ask-question" class="ask-question">
|
<div id="new-ask-question" class="ask-question">
|
||||||
<form action="{{form_url}}" method="post" class="form-horizontal" accept-charset="UTF-8">
|
<form action="{{form_url}}" enctype="multipart/form-data" method="post" class="form-horizontal" accept-charset="UTF-8">
|
||||||
{{token_tag}}
|
{{token_tag}}
|
||||||
<div data-level="0" data-list="fields">
|
<div data-level="0" data-list="fields">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
|
|
Loading…
Reference in New Issue