formily 0.0.5.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +156 -0
- data/LICENSE.txt +21 -0
- data/README.md +84 -0
- data/Rakefile +1 -0
- data/app/assets/fonts/formily-icon.eot +0 -0
- data/app/assets/fonts/formily-icon.svg +26 -0
- data/app/assets/fonts/formily-icon.ttf +0 -0
- data/app/assets/fonts/formily-icon.woff +0 -0
- data/app/assets/fonts/formily-icon.woff2 +0 -0
- data/app/assets/images/blank_file.png +0 -0
- data/app/assets/images/formily_spin.gif +0 -0
- data/app/assets/javascripts/formily.js +5 -0
- data/app/assets/javascripts/formily/base/ajax_reloader.js +24 -0
- data/app/assets/javascripts/formily/base/buttons.js +160 -0
- data/app/assets/javascripts/formily/base/form_response.js +28 -0
- data/app/assets/javascripts/formily/base/local_time.js +9 -0
- data/app/assets/javascripts/formily/editor.js +46 -0
- data/app/assets/javascripts/formily/editor/editor_buttons.js +186 -0
- data/app/assets/javascripts/formily/editor/form_preview.js +53 -0
- data/app/assets/javascripts/formily/editor/input_model.js +76 -0
- data/app/assets/javascripts/formily/editor/input_on_change.js +83 -0
- data/app/assets/javascripts/formily/editor/related_fields.js +76 -0
- data/app/assets/javascripts/formily/form.js +22 -0
- data/app/assets/javascripts/formily/formily_editor.js +329 -0
- data/app/assets/javascripts/formily/formily_modal.js +104 -0
- data/app/assets/javascripts/formily/formily_url.js.erb +26 -0
- data/app/assets/javascripts/formily/inputs/conditioned.js +4 -0
- data/app/assets/javascripts/formily/inputs/conditioned/checkbox.js +73 -0
- data/app/assets/javascripts/formily/inputs/conditioned/option.js +82 -0
- data/app/assets/javascripts/formily/inputs/conditioned/radio.js +160 -0
- data/app/assets/javascripts/formily/inputs/date_time.js +25 -0
- data/app/assets/javascripts/formily/inputs/input_tab.js +18 -0
- data/app/assets/javascripts/formily/inputs/location.js +39 -0
- data/app/assets/javascripts/formily/inputs/multi_file.js +228 -0
- data/app/assets/javascripts/formily/lib/jquery.datetimepicker.full.min.js +2 -0
- data/app/assets/javascripts/formily/lib/modernizr.js +8 -0
- data/app/assets/javascripts/formily/lib/strftime.min.js +12 -0
- data/app/assets/javascripts/formily/lib/tag-it.min.js +17 -0
- data/app/assets/javascripts/formily/mobile.js +10 -0
- data/app/assets/javascripts/formily_app.js +15 -0
- data/app/assets/javascripts/formily_iframe.js +11 -0
- data/app/assets/stylesheets/formily.scss +14 -0
- data/app/assets/stylesheets/formily/base/fonts.scss +65 -0
- data/app/assets/stylesheets/formily/base/layout.scss +66 -0
- data/app/assets/stylesheets/formily/base/links.css +7 -0
- data/app/assets/stylesheets/formily/base/ui-dialog.scss +129 -0
- data/app/assets/stylesheets/formily/editor.scss +25 -0
- data/app/assets/stylesheets/formily/editor/inputs_group_list.css +14 -0
- data/app/assets/stylesheets/formily/editor/inputs_list.css +97 -0
- data/app/assets/stylesheets/formily/editor/related_modal.scss +49 -0
- data/app/assets/stylesheets/formily/formily_editor.scss +53 -0
- data/app/assets/stylesheets/formily/formily_modal.scss +2 -0
- data/app/assets/stylesheets/formily/foundation_fix.scss +140 -0
- data/app/assets/stylesheets/formily/inputs/date_time.scss +8 -0
- data/app/assets/stylesheets/formily/inputs/multi_file.scss +111 -0
- data/app/assets/stylesheets/formily/jquery.datetimepicker.min.css +1 -0
- data/app/assets/stylesheets/formily/lib/jquery.tagit.css +69 -0
- data/app/assets/stylesheets/formily/modal/content.scss +36 -0
- data/app/assets/stylesheets/formily/modal/iframe.scss +29 -0
- data/app/assets/stylesheets/formily_iframe.scss +64 -0
- data/app/assets/stylesheets/foundation_formily.scss +20 -0
- data/app/controllers/formily/file_controller.rb +17 -0
- data/app/controllers/formily/form_types_controller.rb +46 -0
- data/app/controllers/formily/formilyable_controller.rb +98 -0
- data/app/controllers/formily/forms_controller.rb +133 -0
- data/app/controllers/formily/iframe/forms_controller.rb +28 -0
- data/app/controllers/formily/inputs_controller.rb +113 -0
- data/app/controllers/formily/submit_data_controller.rb +151 -0
- data/app/controllers/formily_controller.rb +22 -0
- data/app/helpers/formily_helper.rb +17 -0
- data/app/models/formily/checkbox_input.rb +8 -0
- data/app/models/formily/checkbox_input_group.rb +14 -0
- data/app/models/formily/date_time_input.rb +19 -0
- data/app/models/formily/file.rb +14 -0
- data/app/models/formily/form.rb +41 -0
- data/app/models/formily/form_type.rb +10 -0
- data/app/models/formily/formilyable_form.rb +18 -0
- data/app/models/formily/input.rb +124 -0
- data/app/models/formily/input_value.rb +23 -0
- data/app/models/formily/multiple_file_input.rb +18 -0
- data/app/models/formily/option_input.rb +8 -0
- data/app/models/formily/options_input_group.rb +14 -0
- data/app/models/formily/radio_input.rb +12 -0
- data/app/models/formily/radio_input_group.rb +14 -0
- data/app/models/formily/static_text.rb +8 -0
- data/app/models/formily/submit.rb +47 -0
- data/app/models/formily/text_input.rb +8 -0
- data/app/models/formily/textarea_input.rb +8 -0
- data/app/views/formily/data/_forms_table.html.haml +19 -0
- data/app/views/formily/data/_many_tables.html.erb +3 -0
- data/app/views/formily/data/_table.html.erb +33 -0
- data/app/views/formily/data/submit_data_table.html.haml +32 -0
- data/app/views/formily/editor/_default_value.haml +18 -0
- data/app/views/formily/editor/_editor.haml +18 -0
- data/app/views/formily/editor/_modal.haml +197 -0
- data/app/views/formily/editor/partial/_group.haml +41 -0
- data/app/views/formily/editor/partial/_group_input.haml +36 -0
- data/app/views/formily/editor/partial/_input.haml +35 -0
- data/app/views/formily/editor/partial/_input_fieldset.haml +12 -0
- data/app/views/formily/form_types/_form.haml +9 -0
- data/app/views/formily/form_types/edit.haml +6 -0
- data/app/views/formily/form_types/index.haml +24 -0
- data/app/views/formily/form_types/new.haml +6 -0
- data/app/views/formily/formilyable/index.haml +67 -0
- data/app/views/formily/formilyable/new.haml +37 -0
- data/app/views/formily/forms/_form.haml +34 -0
- data/app/views/formily/forms/_preview.haml +16 -0
- data/app/views/formily/forms/edit.haml +5 -0
- data/app/views/formily/forms/index.haml +40 -0
- data/app/views/formily/forms/new.haml +5 -0
- data/app/views/formily/forms/reload_formily_table.haml +4 -0
- data/app/views/formily/forms/show.haml +1 -0
- data/app/views/formily/helpers/_iframe_formily_modal.html.haml +3 -0
- data/app/views/formily/helpers/_related_forms.html.haml +12 -0
- data/app/views/formily/helpers/_related_forms_tr.html.haml +28 -0
- data/app/views/formily/iframe/forms/show.haml +1 -0
- data/app/views/formily/inputs/_group.haml +40 -0
- data/app/views/formily/inputs/_group_input.haml +36 -0
- data/app/views/formily/inputs/_input.haml +35 -0
- data/app/views/formily/inputs/_input_fieldset.haml +12 -0
- data/app/views/formily/inputs/render_input_html.haml +7 -0
- data/app/views/formily/partial/_form.haml +37 -0
- data/app/views/formily/partial/inputs/_checkbox_input.haml +18 -0
- data/app/views/formily/partial/inputs/_checkbox_input_group.haml +36 -0
- data/app/views/formily/partial/inputs/_conditioned_fields.haml +36 -0
- data/app/views/formily/partial/inputs/_date_time_input.haml +15 -0
- data/app/views/formily/partial/inputs/_file_input.haml +20 -0
- data/app/views/formily/partial/inputs/_file_preview.haml +14 -0
- data/app/views/formily/partial/inputs/_input.haml +1 -0
- data/app/views/formily/partial/inputs/_multiple_file_input.haml +25 -0
- data/app/views/formily/partial/inputs/_options_input_group.haml +77 -0
- data/app/views/formily/partial/inputs/_radio_input_group.haml +41 -0
- data/app/views/formily/partial/inputs/_static_text.haml +11 -0
- data/app/views/formily/partial/inputs/_text_input.haml +19 -0
- data/app/views/formily/partial/inputs/_textarea_input.haml +19 -0
- data/app/views/formily/submit_data/submit.html.erb +5 -0
- data/app/views/formily/submit_data/submit.json.jbuilder +5 -0
- data/app/views/layouts/formily_iframe.haml +16 -0
- data/config/routes.rb +41 -0
- data/formily.gemspec +41 -0
- data/lib/formily.rb +37 -0
- data/lib/formily/config.rb +72 -0
- data/lib/formily/engine.rb +12 -0
- data/lib/formily/helpers/view_helper.rb +114 -0
- data/lib/formily/relation.rb +26 -0
- data/lib/formily/relation/formily_methods.rb +30 -0
- data/lib/formily/relation/has_many_methods.rb +16 -0
- data/lib/formily/submitted_data_table.rb +74 -0
- data/lib/formily/version.rb +4 -0
- data/lib/generators/formily/install/install_generator.rb +43 -0
- data/lib/generators/formily/install/templates/create_formily_data.rb +28 -0
- data/lib/generators/formily/install/templates/create_formily_files.rb +13 -0
- data/lib/generators/formily/install/templates/create_formily_form_types.rb +12 -0
- data/lib/generators/formily/install/templates/create_formily_forms.rb +16 -0
- data/lib/generators/formily/install/templates/create_formily_inputs.rb +24 -0
- data/lib/generators/formily/install/templates/create_formilyable_forms.rb +17 -0
- data/lib/generators/formily/install/templates/formily.rb +21 -0
- data/lib/generators/formily/views/views_generator.rb +11 -0
- metadata +350 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'formily/submitted_data_table'
|
|
4
|
+
|
|
5
|
+
class Formily::SubmitDataController < FormilyController
|
|
6
|
+
|
|
7
|
+
before_action :set_layout, only: [:submitted_data, :data_table]
|
|
8
|
+
|
|
9
|
+
# On formily form submit
|
|
10
|
+
def submit
|
|
11
|
+
submit = Formily::Submit.find_by(id: params[:submit_id])
|
|
12
|
+
inputs_ids = []
|
|
13
|
+
@form_id = params[:form_id]
|
|
14
|
+
@resource_id = params[:resource_id]
|
|
15
|
+
@resource_type = params[:resource_type]
|
|
16
|
+
|
|
17
|
+
@save_and_close = params[:save_and_close].present?
|
|
18
|
+
|
|
19
|
+
if params[:formily_inputs].present?
|
|
20
|
+
|
|
21
|
+
params[:formily_inputs].each do |key, value|
|
|
22
|
+
if value.is_a?(Hash)
|
|
23
|
+
value.each do |k, v|
|
|
24
|
+
inputs_ids << k
|
|
25
|
+
iv = submit.input_values.find_or_create_by(input_id: k)
|
|
26
|
+
|
|
27
|
+
if v.is_a?(Array)
|
|
28
|
+
v.each do |av|
|
|
29
|
+
f = iv.attach.build(input_value_id: iv.id)
|
|
30
|
+
f.file = av
|
|
31
|
+
f.save
|
|
32
|
+
iv.input_value = f.file.original_filename
|
|
33
|
+
end
|
|
34
|
+
elsif v.respond_to?('original_filename')# Detect file
|
|
35
|
+
f = iv.attach.build(input_value_id: iv.id)
|
|
36
|
+
f.file = v
|
|
37
|
+
f.save
|
|
38
|
+
iv.input_value = f.file.original_filename
|
|
39
|
+
else
|
|
40
|
+
iv.input_value = v
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if @save_and_close
|
|
44
|
+
iv.save
|
|
45
|
+
else
|
|
46
|
+
if iv.input_value.blank?
|
|
47
|
+
iv.destroy
|
|
48
|
+
else
|
|
49
|
+
iv.save
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
inputs_ids << key
|
|
55
|
+
iv = submit.input_values.find_or_create_by(input_id: key)
|
|
56
|
+
|
|
57
|
+
if value.is_a?(Array)
|
|
58
|
+
value.each do |av|
|
|
59
|
+
f = iv.attach.build(input_value_id: iv.id)
|
|
60
|
+
f.file = av
|
|
61
|
+
f.save
|
|
62
|
+
iv.input_value = f.file.original_filename
|
|
63
|
+
end
|
|
64
|
+
elsif value.respond_to?('original_filename')# Detect file
|
|
65
|
+
f = iv.attach.build(input_value_id: iv.id)
|
|
66
|
+
f.file = value
|
|
67
|
+
f.save
|
|
68
|
+
iv.input_value = f.file.original_filename
|
|
69
|
+
else
|
|
70
|
+
iv.input_value = value
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if @save_and_close
|
|
74
|
+
iv.save
|
|
75
|
+
else
|
|
76
|
+
if iv.input_value.blank?
|
|
77
|
+
iv.destroy
|
|
78
|
+
else
|
|
79
|
+
iv.save
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
submit.input_values.where.not(input_id: inputs_ids).each do |iv|
|
|
89
|
+
iv.destroy if iv.attach.count == 0 # don't remove files
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
if @save_and_close
|
|
93
|
+
submit.update_column(:state, 1)
|
|
94
|
+
else
|
|
95
|
+
submit.update_column(:state, 2)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def upload_file
|
|
101
|
+
submit = Formily::Submit.find(params[:submit_id])
|
|
102
|
+
iv = submit.input_values.find_or_create_by(input_id: params[:input_id], input_value: 'file')
|
|
103
|
+
f = iv.attach.build(input_value_id: iv.id)
|
|
104
|
+
f.file = params[:file]
|
|
105
|
+
f.save
|
|
106
|
+
|
|
107
|
+
render json: {file_id: f.id}, status: :ok
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def submitted_data
|
|
111
|
+
model = params[:model_name].safe_constantize
|
|
112
|
+
model = model.find(params[:model_id])
|
|
113
|
+
ids = model.formily_forms.pluck(:form_id)
|
|
114
|
+
|
|
115
|
+
@forms = Formily::Form.where(id: ids)
|
|
116
|
+
@model_name = params[:model_name]
|
|
117
|
+
@model_id = params[:model_id]
|
|
118
|
+
|
|
119
|
+
render partial: formily_partial_path('data/forms_table')
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def data_table
|
|
123
|
+
if params[:model_name] && params[:model_id]
|
|
124
|
+
model = params[:model_name].safe_constantize
|
|
125
|
+
model = model.find(params[:model_id])
|
|
126
|
+
@res = model
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
@form = Formily::Form.find(params[:form_id])
|
|
130
|
+
@not_manage = true
|
|
131
|
+
@page_name = @form.title
|
|
132
|
+
@data_table = Formily::SubmittedDataTable.new(@form, @res)
|
|
133
|
+
|
|
134
|
+
respond_to do |format|
|
|
135
|
+
format.html { render formily_partial_path('data/submit_data_table') }
|
|
136
|
+
format.csv { send_data @data_table.to_csv, filename: "#{@form.id}_#{@form.title.parameterize.underscore}.csv" }
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
private
|
|
141
|
+
def set_layout
|
|
142
|
+
if params[:iframe]
|
|
143
|
+
@iframe = true
|
|
144
|
+
Formily::SubmitDataController.layout("#{Formily.config.editor.css_style}_formily")
|
|
145
|
+
else
|
|
146
|
+
@iframe = false
|
|
147
|
+
Formily::SubmitDataController.layout(ApplicationController.new.send(:_layout).virtual_path.split('/').last)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class FormilyController < ActionController::Base
|
|
3
|
+
|
|
4
|
+
# Prevent CSRF attacks by raising an exception.
|
|
5
|
+
# For APIs, you may want to use :null_session instead.
|
|
6
|
+
protect_from_forgery with: :exception
|
|
7
|
+
before_filter :set_paper_trail_whodunnit
|
|
8
|
+
|
|
9
|
+
layout :formily_layout
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
def authenticate
|
|
13
|
+
authenticate_or_request_with_http_basic do |username, password|
|
|
14
|
+
username == 'admin' && password == '123456'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def formily_layout
|
|
19
|
+
ApplicationController.new.send(:_layout).virtual_path.split('/').last
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module FormilyHelper
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def submit_title(form_title, submit)
|
|
5
|
+
title = form_title
|
|
6
|
+
|
|
7
|
+
if submit && submit.input_values.count > 0
|
|
8
|
+
title += ' ' + submit.created_at.utc.to_i.to_s
|
|
9
|
+
user_name = User.find_by(id: submit.versions.last.whodunnit.to_i).to_s
|
|
10
|
+
user_name = 'User' if user_name.blank?
|
|
11
|
+
title += ' by ' + user_name
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
title
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class Formily::CheckboxInputGroup < Formily::Input
|
|
3
|
+
|
|
4
|
+
has_many :inputs, foreign_key: :group_input_id, class_name: 'Formily::CheckboxInput'
|
|
5
|
+
|
|
6
|
+
def editor_type
|
|
7
|
+
'checkbox group'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def input_type
|
|
11
|
+
'Formily::CheckboxInput'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class Formily::DateTimeInput < Formily::Input
|
|
3
|
+
|
|
4
|
+
def editor_type
|
|
5
|
+
'datetime'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def get_value_from_submit(submit)
|
|
9
|
+
val = submit.input_values.where(input_id: self.id).pluck(:input_value).first || '' rescue ''
|
|
10
|
+
|
|
11
|
+
if val.blank?
|
|
12
|
+
self.default_value || ''
|
|
13
|
+
else
|
|
14
|
+
val
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class Formily::File < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
self.table_name = 'formily_files'
|
|
5
|
+
|
|
6
|
+
has_paper_trail
|
|
7
|
+
|
|
8
|
+
has_attached_file :file,
|
|
9
|
+
path: Formily.config.paperclip.path,
|
|
10
|
+
url: Formily.config.paperclip.url,
|
|
11
|
+
use_timestamp: Formily.config.paperclip.use_timestamp
|
|
12
|
+
validates_attachment_content_type :file, content_type: /\A.*\z/
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class Formily::Form < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
after_destroy :delete_data
|
|
5
|
+
before_create :set_default
|
|
6
|
+
|
|
7
|
+
self.table_name = 'formily_forms'
|
|
8
|
+
|
|
9
|
+
has_paper_trail
|
|
10
|
+
|
|
11
|
+
belongs_to :form_type, foreign_key: :form_type_id, class_name: 'Formily::FormType'
|
|
12
|
+
has_many :inputs, foreign_key: :form_id, class_name: 'Formily::Input'
|
|
13
|
+
has_many :submits, foreign_key: :form_id, class_name: 'Formily::Submit'
|
|
14
|
+
|
|
15
|
+
def form_inputs
|
|
16
|
+
self.inputs.where('group_input_id IS NULL')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_submits(obj, user_id)
|
|
20
|
+
Formily::Submit.where(form_id: self.id, resource_id: obj.id,
|
|
21
|
+
user_id: user_id, resource_type: obj.class.name).order(created_at: :desc)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def response_url(*args)
|
|
25
|
+
'#response'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def delete_data
|
|
31
|
+
self.inputs.destroy_all
|
|
32
|
+
self.submits.destroy_all
|
|
33
|
+
Formily::FormilyableForm.where(form_id: self.id).destroy_all
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def set_default
|
|
37
|
+
self.is_deleted = false if self.is_deleted.nil?
|
|
38
|
+
true # Fix
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class Formily::FormilyableForm < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
self.table_name = 'formilyable_forms'
|
|
5
|
+
|
|
6
|
+
has_paper_trail
|
|
7
|
+
|
|
8
|
+
belongs_to :formilyable, polymorphic: true
|
|
9
|
+
belongs_to :form, foreign_key: :form_id, class_name: 'Formily::Form'
|
|
10
|
+
|
|
11
|
+
validates_uniqueness_of :form_id, :scope => [:formilyable_id, :formilyable_type]
|
|
12
|
+
validates :form_id, :formilyable_id, :formilyable_type, presence: true
|
|
13
|
+
|
|
14
|
+
def formily_title
|
|
15
|
+
self.formilyable_type.safe_constantize.find(self.formilyable_id).formily_title rescue ''
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
class Formily::Input < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
after_destroy :delete_data
|
|
5
|
+
before_create :set_default
|
|
6
|
+
|
|
7
|
+
self.table_name = 'formily_inputs'
|
|
8
|
+
|
|
9
|
+
has_paper_trail
|
|
10
|
+
|
|
11
|
+
has_many :data, foreign_key: :input_id, class_name: 'Formily::InputValue'
|
|
12
|
+
belongs_to :form, foreign_key: :form_id, class_name: 'Formily::Form'
|
|
13
|
+
# Query fix relation
|
|
14
|
+
has_many :inputs, foreign_key: :group_input_id, class_name: 'Formily::Input'
|
|
15
|
+
belongs_to :group_input, foreign_key: :group_input_id, class_name: 'Formily::Input'
|
|
16
|
+
|
|
17
|
+
default_scope ->{ order(:field_order) }
|
|
18
|
+
|
|
19
|
+
def render_attributes
|
|
20
|
+
tag_attr = JSON.parse(self.tag_attributes) rescue {}
|
|
21
|
+
|
|
22
|
+
if tag_attr['formily_conditioned'].present?
|
|
23
|
+
tag_attr.delete('formily_conditioned')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
tag_attr.map{|k, v| "#{k}=\"#{v}\""}.join(' ').html_safe
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def render_attributes_hash
|
|
30
|
+
JSON.parse(self.tag_attributes).except('formily_conditioned') rescue {}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def conditioned_tag
|
|
34
|
+
tag_attr = JSON.parse(self.tag_attributes) rescue {}
|
|
35
|
+
|
|
36
|
+
if tag_attr['formily_conditioned'].present?
|
|
37
|
+
tag_attr['formily_conditioned']
|
|
38
|
+
else
|
|
39
|
+
''
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def partial_path
|
|
44
|
+
'formily/partial/inputs/' + self.class.name.demodulize.underscore
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def to_html
|
|
48
|
+
"<label>#{self.label}<input type=\"text\" name=\"formily_inputs[#{self.name}]\"/></label>"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def editor_type
|
|
52
|
+
'input'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def get_value_from_submit(submit, controller = nil)
|
|
56
|
+
val = if submit.present?
|
|
57
|
+
submit.input_values.where(input_id: self.id).pluck(:input_value).first || nil rescue nil
|
|
58
|
+
else
|
|
59
|
+
nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
get_default_value(val, controller)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def get_default_value(val, controller)
|
|
67
|
+
|
|
68
|
+
if val.blank?
|
|
69
|
+
if self.default_value.present?
|
|
70
|
+
|
|
71
|
+
case self.default_value
|
|
72
|
+
|
|
73
|
+
when 'Date'
|
|
74
|
+
DateTime.now.strftime('%Y/%m/%d')
|
|
75
|
+
when 'DateTime'
|
|
76
|
+
DateTime.now.strftime('%Y/%m/%d %H:%M')
|
|
77
|
+
when 'current_user_name'
|
|
78
|
+
controller.current_user.name rescue ''
|
|
79
|
+
when 'device_location'
|
|
80
|
+
'device_location'
|
|
81
|
+
when 'related_value'
|
|
82
|
+
tag_attr = JSON.parse(self.tag_attributes) rescue {}
|
|
83
|
+
val_arr = tag_attr['data-related'].split('.')
|
|
84
|
+
|
|
85
|
+
@obj_rel = if val_arr.first =~ /->/
|
|
86
|
+
m = val_arr.first.sub(/.*?->/, '').safe_constantize
|
|
87
|
+
user_id = controller.instance_variable_get('@user_id')
|
|
88
|
+
if user_id
|
|
89
|
+
m.find(user_id)
|
|
90
|
+
else
|
|
91
|
+
m.order('RANDOM()').first rescue nil
|
|
92
|
+
end
|
|
93
|
+
else
|
|
94
|
+
m = controller.instance_variable_get('@obj_rel')
|
|
95
|
+
m || val_arr.first.safe_constantize
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
val_arr[1..-1].inject(@obj_rel){|obj, t| obj.send(t) } rescue ''
|
|
99
|
+
|
|
100
|
+
else
|
|
101
|
+
self.default_value
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
else
|
|
105
|
+
self.tag_attributes =~ /"readonly":"readonly"/ ? self.label : val
|
|
106
|
+
end
|
|
107
|
+
else
|
|
108
|
+
val
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
private
|
|
113
|
+
|
|
114
|
+
def delete_data
|
|
115
|
+
self.inputs.destroy_all
|
|
116
|
+
self.data.destroy_all
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def set_default
|
|
120
|
+
self.is_deleted = false if self.is_deleted.nil?
|
|
121
|
+
true # Fix
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|