drg_cms 0.6.0.1 → 0.6.1.1.1
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 +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +454 -145
- data/app/assets/javascripts/drg_cms_application.js +1 -1
- data/app/assets/stylesheets/drg_cms/drg_cms.css +635 -244
- 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 +515 -335
- data/app/controllers/dc_application_controller.rb +378 -111
- 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 +223 -0
- data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
- data/app/forms/all_options.yml +44 -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 +15 -5
- 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 +375 -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 +580 -0
- data/app/helpers/dc_application_helper.rb +218 -306
- 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 +57 -18
- 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/dc_poll_result.rb +46 -0
- data/app/models/dc_temp.rb +140 -0
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields.rb +12 -1
- data/app/models/drgcms_form_fields/action.rb +61 -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/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 +31 -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 +15 -4
- 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 +91 -64
- 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 +17 -0
- data/app/views/layouts/models.html.erb +2 -1
- data/config/locales/drgcms_en.yml +27 -3
- data/config/locales/drgcms_sl.yml +32 -5
- data/config/locales/models_en.yml +65 -17
- data/config/locales/models_sl.yml +69 -18
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms.rb +61 -1
- data/lib/drg_cms/version.rb +1 -1
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +9 -2
- data/lib/tasks/database.rake +6 -56
- metadata +73 -54
- 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 -888
- 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
|