drg_cms 0.5.52.16 → 0.6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +446 -144
- data/app/assets/javascripts/drg_cms/jstree.min.js +6 -6
- data/app/assets/javascripts/drg_cms_application.js +1 -1
- data/app/assets/stylesheets/drg_cms/drg_cms.css +625 -243
- data/app/assets/stylesheets/drg_cms/jstree.css +6 -12
- data/app/assets/stylesheets/drg_cms/select-multiple.css +18 -12
- data/app/assets/stylesheets/drg_cms_cms.css +1 -1
- data/app/controllers/cmsedit_controller.rb +536 -331
- data/app/controllers/dc_application_controller.rb +380 -117
- data/app/controllers/dc_common_controller.rb +105 -14
- data/app/{controllers → controls}/browse_models_control.rb +0 -0
- data/app/controls/dc_help_control.rb +126 -0
- data/app/{controllers → controls}/dc_page_control.rb +24 -8
- data/app/controls/dc_poll_result_control.rb +88 -0
- data/app/controls/dc_report.rb +225 -0
- data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
- data/app/forms/all_options.yml +50 -9
- data/app/forms/cms_menu.yml +28 -18
- data/app/forms/dc_ad.yml +11 -22
- data/app/forms/dc_big_table.yml +1 -0
- data/app/forms/dc_big_table_value.yml +1 -0
- data/app/forms/dc_category.yml +2 -1
- data/app/forms/dc_design.yml +20 -16
- data/app/forms/dc_filter.yml +3 -6
- data/app/forms/dc_help_1.yml +109 -0
- data/app/forms/dc_journal.yml +3 -1
- data/app/forms/dc_json_ld.yml +59 -0
- data/app/forms/dc_key_value.yml +32 -0
- data/app/forms/dc_link.yml +1 -1
- data/app/forms/dc_menu.yml +2 -0
- data/app/forms/dc_menu_item.yml +2 -0
- data/app/forms/dc_page.yml +3 -5
- data/app/forms/dc_part.yml +1 -0
- data/app/forms/dc_piece.yml +1 -0
- data/app/forms/dc_poll.yml +19 -9
- data/app/forms/dc_poll_item.yml +2 -1
- data/app/forms/dc_poll_result.yml +83 -0
- data/app/forms/dc_poll_result_export.yml +35 -0
- data/app/forms/dc_seo.yml +33 -0
- data/app/forms/dc_simple_menu.yml +2 -0
- data/app/forms/dc_site.yml +4 -12
- data/app/forms/dc_user.yml +27 -11
- data/app/forms/dc_user_role.yml +3 -0
- data/app/forms/json_ld_schema.yml +168 -0
- data/app/helpers/cms_common_helper.rb +376 -0
- data/app/helpers/cms_edit_helper.rb +506 -0
- data/app/helpers/cms_helper.rb +268 -0
- data/app/helpers/cms_index_helper.rb +576 -0
- data/app/helpers/dc_application_helper.rb +183 -271
- data/app/models/concerns/dc_page_concern.rb +40 -6
- data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
- data/app/models/concerns/dc_seo_concern.rb +66 -0
- data/app/models/concerns/dc_site_concern.rb +67 -44
- data/app/models/concerns/dc_user_concern.rb +62 -21
- data/app/models/dc_design.rb +30 -18
- data/app/models/dc_filter.rb +22 -13
- data/app/models/dc_json_ld.rb +152 -0
- data/app/models/dc_key_value.rb +48 -0
- data/app/models/dc_key_value_store.rb +1 -0
- data/app/models/dc_memory.rb +8 -1
- data/app/models/dc_page.rb +0 -1
- data/app/models/dc_permission.rb +49 -9
- data/app/models/dc_policy.rb +25 -14
- data/app/models/dc_policy_role.rb +22 -11
- data/app/models/dc_poll.rb +39 -19
- data/app/models/{drgcms_form_fields/drgcms_form_fields.rb → dc_poll_result.rb} +23 -2
- data/app/models/dc_temp.rb +140 -0
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields.rb +14 -6
- data/app/models/drgcms_form_fields/action.rb +61 -0
- data/app/models/drgcms_form_fields/check_box.rb +3 -0
- data/app/models/drgcms_form_fields/comment.rb +8 -4
- data/app/models/drgcms_form_fields/date_picker.rb +11 -9
- data/app/models/drgcms_form_fields/date_select.rb +1 -1
- data/app/models/drgcms_form_fields/{date_time_picker.rb → datetime_picker.rb} +12 -10
- data/app/models/drgcms_form_fields/datetime_select.rb +1 -1
- data/app/models/drgcms_form_fields/drgcms_field.rb +55 -9
- data/app/models/drgcms_form_fields/embedded.rb +26 -16
- data/app/models/drgcms_form_fields/file_field.rb +52 -0
- data/app/models/drgcms_form_fields/file_select.rb +2 -2
- data/app/models/drgcms_form_fields/hash_field.rb +90 -0
- data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
- data/app/models/drgcms_form_fields/html_field.rb +1 -1
- data/app/models/drgcms_form_fields/link_to.rb +2 -2
- data/app/models/drgcms_form_fields/method.rb +66 -0
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +23 -14
- data/app/models/drgcms_form_fields/number_field.rb +15 -6
- data/app/models/drgcms_form_fields/radio.rb +96 -0
- data/app/models/drgcms_form_fields/readonly.rb +2 -2
- data/app/models/drgcms_form_fields/select.rb +92 -29
- data/app/models/drgcms_form_fields/text_area.rb +1 -1
- data/app/models/drgcms_form_fields/text_autocomplete.rb +29 -17
- data/app/models/drgcms_form_fields/text_field.rb +1 -1
- data/app/models/drgcms_form_fields/text_with_select.rb +6 -3
- data/app/models/drgcms_form_fields/tree_select.rb +29 -10
- data/app/{helpers → renderers}/dc_ad_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_big_menu_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_captcha_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_common_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_gallery_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_menu_renderer.rb +11 -4
- data/app/{helpers → renderers}/dc_page_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_part_renderer.rb +5 -4
- data/app/{helpers → renderers}/dc_piece_renderer.rb +1 -1
- data/app/{helpers → renderers}/dc_poll_renderer.rb +84 -48
- data/app/{helpers → renderers}/dc_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_simple_menu_renderer.rb +1 -0
- data/app/views/cmsedit/{remove_edit_stuff.js.erb → __remove_edit_stuff.js.erb} +0 -0
- data/app/views/cmsedit/{show.html.erb → __show.html.erb} +0 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +4 -25
- data/app/views/cmsedit/_form.html.erb +4 -3
- data/app/views/cmsedit/_result.html.erb +2 -3
- data/app/views/cmsedit/edit.html.erb +4 -1
- data/app/views/cmsedit/index.html.erb +7 -1
- data/app/views/cmsedit/new.html.erb +3 -1
- data/app/views/dc_common/_help.html.erb +8 -0
- data/app/views/layouts/models.html.erb +2 -1
- data/config/locales/drgcms_en.yml +26 -3
- data/config/locales/drgcms_sl.yml +31 -5
- data/config/locales/models_en.yml +66 -18
- data/config/locales/models_sl.yml +71 -20
- data/drg_cms.gemspec +3 -3
- data/lib/drg_cms.rb +63 -1
- data/lib/drg_cms/version.rb +2 -2
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +9 -2
- data/lib/tasks/database.rake +6 -56
- metadata +81 -63
- data/app/assets/stylesheets/drg_cms/__jquery-ui.css +0 -339
- data/app/helpers/application_helper.rb +0 -2
- data/app/helpers/cmsedit_helper.rb +0 -885
- data/app/models/dc_dummy.rb +0 -102
- data/test/fixtures/drg_cms_test_data.rb +0 -87
@@ -1,6 +1,5 @@
|
|
1
|
-
#coding: utf-8
|
2
1
|
#--
|
3
|
-
# Copyright (c) 2012
|
2
|
+
# Copyright (c) 2012+ Damjan Rems
|
4
3
|
#
|
5
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
6
5
|
# a copy of this software and associated documentation files (the
|
@@ -45,7 +44,12 @@ layout false
|
|
45
44
|
# JSON array [label, value, id] of first 20 documents that confirm to query.
|
46
45
|
########################################################################
|
47
46
|
def autocomplete
|
48
|
-
#
|
47
|
+
# table parameter must be defined. If not, get it from search parameter
|
48
|
+
if params['table'].nil? and params['search'].match(/\./)
|
49
|
+
name = params['search'].split('.').first
|
50
|
+
params['table'] = name.underscore
|
51
|
+
end
|
52
|
+
|
49
53
|
return render plain: t('drgcms.not_authorized') unless dc_user_can(DcPermission::CAN_VIEW)
|
50
54
|
# TODO Double check if previous line works as it should.
|
51
55
|
table = params['table'].classify.constantize
|
@@ -55,7 +59,7 @@ def autocomplete
|
|
55
59
|
a = if params['search'].match(/\./)
|
56
60
|
name, method = params['search'].split('.')
|
57
61
|
table.send(method, params['input']).inject([]) do |r,v|
|
58
|
-
r << { label: v[0], value: v[0], id: v[1].to_s }
|
62
|
+
r << { label: v[0], value: v[0], id: (v[1] || v[0]).to_s }
|
59
63
|
end
|
60
64
|
# simply search which will search and return field_name defined in params['search']
|
61
65
|
else
|
@@ -64,7 +68,7 @@ def autocomplete
|
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
67
|
-
render
|
71
|
+
render plain: a.to_json
|
68
72
|
end
|
69
73
|
|
70
74
|
########################################################################
|
@@ -88,13 +92,24 @@ end
|
|
88
92
|
##########################################################################
|
89
93
|
def toggle_edit_mode
|
90
94
|
session[:edit_mode] ||= 0
|
91
|
-
#
|
92
|
-
if session[:edit_mode] < 1
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
95
|
+
# error when not logged in
|
96
|
+
return dc_render_404 if session[:edit_mode] < 1
|
97
|
+
# if return_to_ypos parameter is present it will forward it and thus scroll to
|
98
|
+
# aproximate position it was when toggle was clicked
|
99
|
+
session[:edit_mode] = (session[:edit_mode] == 1) ? 2 : 1
|
100
|
+
uri = Rack::Utils.parse_nested_query(request.url)
|
101
|
+
# it parses only on & so first (return_to) parameter also contains url
|
102
|
+
url = uri.first.last
|
103
|
+
if (i = url.index('return_to_ypos')).to_i > 0
|
104
|
+
url = url[0,i-1]
|
105
|
+
end
|
106
|
+
# offset CMS menu
|
107
|
+
if (ypos = uri['return_to_ypos'].to_i) > 0
|
108
|
+
ypos += session[:edit_mode] == 2 ? 250 : -250
|
97
109
|
end
|
110
|
+
url << (url.match(/\?/) ? '&' : '?')
|
111
|
+
url << "return_to_ypos=#{ypos}"
|
112
|
+
redirect_to url
|
98
113
|
end
|
99
114
|
|
100
115
|
####################################################################
|
@@ -109,6 +124,8 @@ def process_login
|
|
109
124
|
if user and user.authenticate(params[:record][:password])
|
110
125
|
fill_login_data(user, params[:record][:remember_me].to_i == 1)
|
111
126
|
return redirect_to params[:return_to] || '/'
|
127
|
+
else
|
128
|
+
clear_login_data # on the safe side
|
112
129
|
end
|
113
130
|
end
|
114
131
|
flash[:error] = t('drgcms.invalid_username')
|
@@ -133,7 +150,6 @@ def login
|
|
133
150
|
if user and user.active
|
134
151
|
fill_login_data(user, true)
|
135
152
|
return redirect_to params[:return_to]
|
136
|
-
|
137
153
|
else
|
138
154
|
clear_login_data # on the safe side
|
139
155
|
end
|
@@ -149,7 +165,7 @@ end
|
|
149
165
|
def restore_from_journal
|
150
166
|
# Only administrators can perform this operation
|
151
167
|
unless dc_user_has_role('admin')
|
152
|
-
return render
|
168
|
+
return render plain: { 'msg_info' => (t ('drgcms.not_authorized')) }.to_json
|
153
169
|
end
|
154
170
|
# selected fields to hash
|
155
171
|
restore = {}
|
@@ -178,7 +194,7 @@ def restore_from_journal
|
|
178
194
|
# TODO Error checking
|
179
195
|
{ 'msg_info' => (t ('drgcms.dc_journal.restored')) }
|
180
196
|
end
|
181
|
-
render
|
197
|
+
render plain: result.to_json
|
182
198
|
end
|
183
199
|
|
184
200
|
########################################################################
|
@@ -236,8 +252,83 @@ def paste_clipboard
|
|
236
252
|
dc_render_ajax(div: 'result', value: result )
|
237
253
|
end
|
238
254
|
|
255
|
+
########################################################################
|
256
|
+
# Will add new json_ld element with blank structure into dc_json_ld field on a
|
257
|
+
# document.
|
258
|
+
########################################################################
|
259
|
+
def add_json_ld_schema
|
260
|
+
edited_document = DcJsonLd.find_document_by_ids(params[:table], params[:ids])
|
261
|
+
yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
|
262
|
+
schema_data = yaml[params[:schema]]
|
263
|
+
# Existing document
|
264
|
+
if edited_document.dc_json_lds.find_by(type: "@#{params[:schema]}")
|
265
|
+
return render json: {'msg_error' => t('helpers.help.dc_json_ld.add_error', schema: params[:schema] ) }
|
266
|
+
else
|
267
|
+
add_empty_json_ld_schema(edited_document, schema_data, params[:schema], params[:schema], yaml)
|
268
|
+
end
|
269
|
+
render json: {'reload_' => 1}
|
270
|
+
end
|
271
|
+
|
272
|
+
########################################################################
|
273
|
+
# Will provide help data
|
274
|
+
########################################################################
|
275
|
+
def help
|
276
|
+
form_name = params[:form_name] || params[:table]
|
277
|
+
@form = form_name ? YAML.load_file(dc_find_form_file(form_name)) : {}
|
278
|
+
return render json: {} if @form.nil?
|
279
|
+
|
280
|
+
help_file_name = @form['help'] || @form['extend'] || params[:form_name] || params[:table]
|
281
|
+
help_file_name = find_help_file(help_file_name)
|
282
|
+
@help = YAML.load_file(help_file_name) if help_file_name
|
283
|
+
# no auto generated help on index action
|
284
|
+
return render json: {} if params[:type] == 'index' && @help.nil?
|
285
|
+
|
286
|
+
render json: { popup: render_to_string(partial: 'help') }
|
287
|
+
end
|
288
|
+
|
239
289
|
protected
|
240
290
|
|
291
|
+
########################################################################
|
292
|
+
# Will search for help file and return it's path if found
|
293
|
+
########################################################################
|
294
|
+
def find_help_file(help_file_name)
|
295
|
+
file_name = nil
|
296
|
+
DrgCms.paths(:forms).reverse.each do |path|
|
297
|
+
f = "#{path}/help/#{help_file_name}.#{I18n.locale}"
|
298
|
+
file_name = f and break if File.exist?(f)
|
299
|
+
end
|
300
|
+
file_name
|
301
|
+
end
|
302
|
+
|
303
|
+
########################################################################
|
304
|
+
# Subroutine of add_json_ld_schema for adding one element
|
305
|
+
########################################################################
|
306
|
+
def add_empty_json_ld_schema(edited_document, schema, schema_name, schema_type, yaml) #:nodoc
|
307
|
+
data = {}
|
308
|
+
doc = DcJsonLd.new
|
309
|
+
doc.name = schema_name
|
310
|
+
doc.type = schema_type
|
311
|
+
|
312
|
+
edited_document.dc_json_lds << doc
|
313
|
+
schema.each do |element_name, element|
|
314
|
+
next if element_name == 'level' # skip level element
|
315
|
+
if yaml[element['type']]
|
316
|
+
if element['n'].to_s == '1'
|
317
|
+
# single element
|
318
|
+
doc_1 = yaml[element['type'] ]
|
319
|
+
data[element_name] = doc_1
|
320
|
+
else
|
321
|
+
# array
|
322
|
+
add_empty_json_ld_schema(doc, yaml[element['type']], element_name, element['type'], yaml)
|
323
|
+
end
|
324
|
+
else
|
325
|
+
data[element_name] = element['text']
|
326
|
+
end
|
327
|
+
end
|
328
|
+
doc.data = data.to_yaml
|
329
|
+
doc.save
|
330
|
+
end
|
331
|
+
|
241
332
|
########################################################################
|
242
333
|
# Update some anomalies in json data on paste_clipboard action.
|
243
334
|
########################################################################
|
File without changes
|
@@ -0,0 +1,126 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2021+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
######################################################################
|
25
|
+
# Controls for creating help files
|
26
|
+
######################################################################
|
27
|
+
module DcHelpControl
|
28
|
+
|
29
|
+
######################################################################
|
30
|
+
# Will fill dc_temp with help documents found in a defined project directory.
|
31
|
+
######################################################################
|
32
|
+
def project_refresh
|
33
|
+
DcTemp.clear(temp_key)
|
34
|
+
if params[:record][:select_project].present?
|
35
|
+
# far less complicated if saved to session
|
36
|
+
session[:help_project] = params[:record][:select_project]
|
37
|
+
session[:help_lang] = params[:record][:lang_1]
|
38
|
+
help_dir_name = "#{session[:help_project]}/help/"
|
39
|
+
# create help directory if not yet exists
|
40
|
+
FileUtils.mkdir(help_dir_name) unless File.exist?(help_dir_name)
|
41
|
+
Dir["#{help_dir_name}*"].each do |file_name|
|
42
|
+
lang = File.extname(file_name).sub('.','')
|
43
|
+
next unless lang == session[:help_lang]
|
44
|
+
|
45
|
+
DcTemp.new(key: temp_key,
|
46
|
+
project: session[:help_project],
|
47
|
+
form_name: File.basename(file_name,'.*'),
|
48
|
+
lang: lang,
|
49
|
+
updated_at: File.mtime(file_name)).save
|
50
|
+
end
|
51
|
+
end
|
52
|
+
render json: { url: url_for(controller: :cmsedit, table: :dc_temp, form_name: :dc_help_1) }
|
53
|
+
end
|
54
|
+
|
55
|
+
######################################################################
|
56
|
+
# Will populate fields with default values
|
57
|
+
######################################################################
|
58
|
+
def dc_new_record
|
59
|
+
@record.project = session[:help_project]
|
60
|
+
@record.lang = session[:help_lang]
|
61
|
+
end
|
62
|
+
|
63
|
+
######################################################################
|
64
|
+
# Will read data from help file
|
65
|
+
######################################################################
|
66
|
+
def dc_before_edit
|
67
|
+
file_name = "#{session[:help_project]}/help/#{@record.form_name}.#{session[:help_lang]}"
|
68
|
+
data = YAML.load_file(file_name)
|
69
|
+
@record.index = data['index']
|
70
|
+
@record.form = data['form']
|
71
|
+
flash[:warning] = "Use only in development!" unless Rails.env.development?
|
72
|
+
end
|
73
|
+
|
74
|
+
######################################################################
|
75
|
+
# Will save data to help file
|
76
|
+
######################################################################
|
77
|
+
def dc_before_save
|
78
|
+
rec = params[:record]
|
79
|
+
file_name = "#{session[:help_project]}/help/#{@record.form_name}.#{@record.lang}"
|
80
|
+
data = { 'index' => @record.index, 'form' => @record.form }
|
81
|
+
File.write(file_name, data.to_yaml)
|
82
|
+
end
|
83
|
+
|
84
|
+
######################################################################
|
85
|
+
# Will return query to report data
|
86
|
+
######################################################################
|
87
|
+
def data_filter
|
88
|
+
DcTemp.where(key: temp_key).order_by(order: 1)
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
######################################################################
|
94
|
+
# Will return choices for select project input field on a form
|
95
|
+
######################################################################
|
96
|
+
def self.choices_for_project
|
97
|
+
r = DrgCms.paths(:forms).map do |path|
|
98
|
+
path = path.to_s
|
99
|
+
a = path.split('/')
|
100
|
+
project = a[a.size - 3]
|
101
|
+
project = if project == 'app'
|
102
|
+
a[a.size - 4] + ' : ' + a.last(2).join('/')
|
103
|
+
else
|
104
|
+
project + ' : ' + a.last
|
105
|
+
end
|
106
|
+
[project, path]
|
107
|
+
end
|
108
|
+
[[I18n.t('drgcms.dc_help.project'), nil]] + r.sort
|
109
|
+
end
|
110
|
+
|
111
|
+
######################################################################
|
112
|
+
# Will return choices for selecting help file name, based on forms already
|
113
|
+
# present in forms directory.
|
114
|
+
######################################################################
|
115
|
+
def self.choices_for_form_name(session)
|
116
|
+
Dir["#{session[:help_project]}/*.yml"].map { |file_name| File.basename(file_name,'.*') }.sort
|
117
|
+
end
|
118
|
+
|
119
|
+
######################################################################
|
120
|
+
# Will return temp key for data saved in dc_temp file
|
121
|
+
######################################################################
|
122
|
+
def temp_key
|
123
|
+
"dc-help-#{session[:user_id]}"
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
@@ -31,12 +31,29 @@ module DcPageControl
|
|
31
31
|
# Called when new empty record is created
|
32
32
|
######################################################################
|
33
33
|
def dc_new_record()
|
34
|
-
|
35
|
-
|
36
|
-
#
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
# Called from menu. Fill in values, that could be obtained from menu
|
35
|
+
if params[:from_menu]
|
36
|
+
# find menu and submenu. Menu class is defined in Site.
|
37
|
+
menu_a = params[:id].split(';')
|
38
|
+
menu = dc_get_site.menu_klass.find(menu_a.shift)
|
39
|
+
menu_items_method = "#{dc_get_site.menu_class}_items".underscore
|
40
|
+
menu_i = menu.send(menu_items_method).find(menu_a.shift)
|
41
|
+
while menu_a.size > 0 do menu_i = menu_i.send(menu_items_method).find(menu_a.shift) end
|
42
|
+
# Fill values for form
|
43
|
+
@record.subject = menu_i.caption
|
44
|
+
@record.dc_site_id = menu.dc_site_id
|
45
|
+
@record.menu_id = params[:id]
|
46
|
+
# set update_menu on save parameter
|
47
|
+
params['p__update_menu'] = '1'
|
48
|
+
else
|
49
|
+
@record.design_id = params[:design_id] if params[:design_id]
|
50
|
+
return unless params[:page_id]
|
51
|
+
# inherit some values from currently active page
|
52
|
+
if page = DcPage.find(params[:page_id])
|
53
|
+
@record.design_id = page.design_id
|
54
|
+
@record.menu = page.menu
|
55
|
+
@record.dc_site_id = page.dc_site_id
|
56
|
+
end
|
40
57
|
end
|
41
58
|
end
|
42
59
|
|
@@ -44,8 +61,7 @@ end
|
|
44
61
|
# Called just after record is saved to DB.
|
45
62
|
######################################################################
|
46
63
|
def dc_after_save()
|
47
|
-
if params
|
48
|
-
# menu_class = dc_get_site.menu_class.classify.constantize
|
64
|
+
if params.dig(:_record,:_update_menu).to_s == '1'
|
49
65
|
dc_get_site.menu_klass.update_menu_item_link(@record)
|
50
66
|
end
|
51
67
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (c) 2014+ Damjan Rems
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
#++
|
24
|
+
|
25
|
+
######################################################################
|
26
|
+
# DrgcmsControls for DcPage model.
|
27
|
+
######################################################################
|
28
|
+
module DcPollResultControl
|
29
|
+
|
30
|
+
######################################################################
|
31
|
+
# Filter result data when filter is set
|
32
|
+
######################################################################
|
33
|
+
def poll_filter()
|
34
|
+
get_query
|
35
|
+
end
|
36
|
+
|
37
|
+
######################################################################
|
38
|
+
# Filter action called. Update url to reflect filter conditions and reload form.
|
39
|
+
######################################################################
|
40
|
+
def do_filter
|
41
|
+
url = url_for(controller: :cmsedit, action: :index, table: :dc_poll_result,
|
42
|
+
'record[dc_poll_id]' => params[:record][:dc_poll_id],
|
43
|
+
'record[start_date]' => params[:record][:start_date],
|
44
|
+
'record[end_date]' => params[:record][:end_date]
|
45
|
+
)
|
46
|
+
dc_render_ajax(operation: :url, value: url)
|
47
|
+
end
|
48
|
+
|
49
|
+
######################################################################
|
50
|
+
# Export data to file
|
51
|
+
######################################################################
|
52
|
+
def do_export
|
53
|
+
c, keys = '', []
|
54
|
+
get_query.to_a.each do |doc|
|
55
|
+
# ensure, that fields are always in same order
|
56
|
+
data = YAML.load(doc.data)
|
57
|
+
if c.blank?
|
58
|
+
data.each {|k,v| keys << k}
|
59
|
+
c << I18n.t('helpers.label.dc_poll_result.created_at') + "\t"
|
60
|
+
c << keys.join("\t") + "\n"
|
61
|
+
end
|
62
|
+
c << doc.created_at.strftime(I18n.t('date.formats.default') ) + "\t"
|
63
|
+
keys.each {|k| c << data[k] + "\t"}
|
64
|
+
c << "\n"
|
65
|
+
end
|
66
|
+
File.write(Rails.root.join('public','export.csv'), c)
|
67
|
+
dc_render_ajax(operation: :window, value: 'export.csv')
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
######################################################################
|
72
|
+
# Creates query for Poll results
|
73
|
+
######################################################################
|
74
|
+
def get_query()
|
75
|
+
if params.dig(:record,:dc_poll_id).nil?
|
76
|
+
qry = DcPollResult.all
|
77
|
+
else
|
78
|
+
qry = DcPollResult.where(dc_poll_id: params[:record][:dc_poll_id])
|
79
|
+
unless params[:record][:start_date].blank?
|
80
|
+
start_date = DrgcmsFormFields::DatePicker.get_data(params,'start_date').beginning_of_day
|
81
|
+
end_date = DrgcmsFormFields::DatePicker.get_data(params,'end_date').end_of_day
|
82
|
+
qry = qry.and(:created_at.gt => start_date).and(:created_at.lt => end_date)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
qry
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|