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.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +454 -145
  3. data/app/assets/javascripts/drg_cms_application.js +1 -1
  4. data/app/assets/stylesheets/drg_cms/drg_cms.css +635 -244
  5. data/app/assets/stylesheets/drg_cms/select-multiple.css +18 -12
  6. data/app/assets/stylesheets/drg_cms_cms.css +1 -1
  7. data/app/controllers/cmsedit_controller.rb +515 -335
  8. data/app/controllers/dc_application_controller.rb +378 -111
  9. data/app/controllers/dc_common_controller.rb +105 -14
  10. data/app/{controllers → controls}/browse_models_control.rb +0 -0
  11. data/app/controls/dc_help_control.rb +126 -0
  12. data/app/{controllers → controls}/dc_page_control.rb +24 -8
  13. data/app/controls/dc_poll_result_control.rb +88 -0
  14. data/app/controls/dc_report.rb +223 -0
  15. data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
  16. data/app/forms/all_options.yml +44 -9
  17. data/app/forms/cms_menu.yml +28 -18
  18. data/app/forms/dc_ad.yml +11 -22
  19. data/app/forms/dc_big_table.yml +1 -0
  20. data/app/forms/dc_big_table_value.yml +1 -0
  21. data/app/forms/dc_category.yml +2 -1
  22. data/app/forms/dc_design.yml +20 -16
  23. data/app/forms/dc_filter.yml +3 -6
  24. data/app/forms/dc_help_1.yml +109 -0
  25. data/app/forms/dc_journal.yml +3 -1
  26. data/app/forms/dc_json_ld.yml +59 -0
  27. data/app/forms/dc_key_value.yml +32 -0
  28. data/app/forms/dc_link.yml +1 -1
  29. data/app/forms/dc_menu.yml +2 -0
  30. data/app/forms/dc_menu_item.yml +2 -0
  31. data/app/forms/dc_page.yml +3 -5
  32. data/app/forms/dc_part.yml +1 -0
  33. data/app/forms/dc_piece.yml +1 -0
  34. data/app/forms/dc_poll.yml +15 -5
  35. data/app/forms/dc_poll_item.yml +2 -1
  36. data/app/forms/dc_poll_result.yml +83 -0
  37. data/app/forms/dc_poll_result_export.yml +35 -0
  38. data/app/forms/dc_seo.yml +33 -0
  39. data/app/forms/dc_simple_menu.yml +2 -0
  40. data/app/forms/dc_site.yml +4 -12
  41. data/app/forms/dc_user.yml +27 -11
  42. data/app/forms/dc_user_role.yml +3 -0
  43. data/app/forms/json_ld_schema.yml +168 -0
  44. data/app/helpers/cms_common_helper.rb +375 -0
  45. data/app/helpers/cms_edit_helper.rb +506 -0
  46. data/app/helpers/cms_helper.rb +268 -0
  47. data/app/helpers/cms_index_helper.rb +580 -0
  48. data/app/helpers/dc_application_helper.rb +218 -306
  49. data/app/models/concerns/dc_page_concern.rb +40 -6
  50. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  51. data/app/models/concerns/dc_seo_concern.rb +66 -0
  52. data/app/models/concerns/dc_site_concern.rb +67 -44
  53. data/app/models/concerns/dc_user_concern.rb +57 -18
  54. data/app/models/dc_design.rb +30 -18
  55. data/app/models/dc_filter.rb +22 -13
  56. data/app/models/dc_json_ld.rb +152 -0
  57. data/app/models/dc_key_value.rb +48 -0
  58. data/app/models/dc_key_value_store.rb +1 -0
  59. data/app/models/dc_memory.rb +8 -1
  60. data/app/models/dc_page.rb +0 -1
  61. data/app/models/dc_permission.rb +49 -9
  62. data/app/models/dc_policy.rb +25 -14
  63. data/app/models/dc_policy_role.rb +22 -11
  64. data/app/models/dc_poll.rb +39 -19
  65. data/app/models/dc_poll_result.rb +46 -0
  66. data/app/models/dc_temp.rb +140 -0
  67. data/app/models/dc_user_role.rb +2 -2
  68. data/app/models/drgcms_form_fields.rb +12 -1
  69. data/app/models/drgcms_form_fields/action.rb +61 -0
  70. data/app/models/drgcms_form_fields/comment.rb +8 -4
  71. data/app/models/drgcms_form_fields/date_picker.rb +11 -9
  72. data/app/models/drgcms_form_fields/date_select.rb +1 -1
  73. data/app/models/drgcms_form_fields/datetime_picker.rb +12 -10
  74. data/app/models/drgcms_form_fields/datetime_select.rb +1 -1
  75. data/app/models/drgcms_form_fields/drgcms_field.rb +55 -9
  76. data/app/models/drgcms_form_fields/embedded.rb +26 -16
  77. data/app/models/drgcms_form_fields/file_field.rb +52 -0
  78. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  79. data/app/models/drgcms_form_fields/hash_field.rb +90 -0
  80. data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
  81. data/app/models/drgcms_form_fields/html_field.rb +1 -1
  82. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  83. data/app/models/drgcms_form_fields/method.rb +66 -0
  84. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +23 -14
  85. data/app/models/drgcms_form_fields/number_field.rb +15 -6
  86. data/app/models/drgcms_form_fields/radio.rb +96 -0
  87. data/app/models/drgcms_form_fields/readonly.rb +2 -2
  88. data/app/models/drgcms_form_fields/select.rb +92 -29
  89. data/app/models/drgcms_form_fields/text_area.rb +1 -1
  90. data/app/models/drgcms_form_fields/text_autocomplete.rb +31 -17
  91. data/app/models/drgcms_form_fields/text_field.rb +1 -1
  92. data/app/models/drgcms_form_fields/text_with_select.rb +6 -3
  93. data/app/models/drgcms_form_fields/tree_select.rb +15 -4
  94. data/app/{helpers → renderers}/dc_ad_renderer.rb +0 -0
  95. data/app/{helpers → renderers}/dc_big_menu_renderer.rb +1 -0
  96. data/app/{helpers → renderers}/dc_captcha_renderer.rb +0 -0
  97. data/app/{helpers → renderers}/dc_common_renderer.rb +0 -0
  98. data/app/{helpers → renderers}/dc_gallery_renderer.rb +1 -0
  99. data/app/{helpers → renderers}/dc_menu_renderer.rb +11 -4
  100. data/app/{helpers → renderers}/dc_page_renderer.rb +1 -0
  101. data/app/{helpers → renderers}/dc_part_renderer.rb +5 -4
  102. data/app/{helpers → renderers}/dc_piece_renderer.rb +1 -1
  103. data/app/{helpers → renderers}/dc_poll_renderer.rb +91 -64
  104. data/app/{helpers → renderers}/dc_renderer.rb +1 -0
  105. data/app/{helpers → renderers}/dc_simple_menu_renderer.rb +1 -0
  106. data/app/views/cmsedit/{remove_edit_stuff.js.erb → __remove_edit_stuff.js.erb} +0 -0
  107. data/app/views/cmsedit/{show.html.erb → __show.html.erb} +0 -0
  108. data/app/views/cmsedit/_edit_stuff.html.erb +4 -25
  109. data/app/views/cmsedit/_form.html.erb +4 -3
  110. data/app/views/cmsedit/_result.html.erb +2 -3
  111. data/app/views/cmsedit/edit.html.erb +4 -1
  112. data/app/views/cmsedit/index.html.erb +7 -1
  113. data/app/views/cmsedit/new.html.erb +3 -1
  114. data/app/views/dc_common/_help.html.erb +17 -0
  115. data/app/views/layouts/models.html.erb +2 -1
  116. data/config/locales/drgcms_en.yml +27 -3
  117. data/config/locales/drgcms_sl.yml +32 -5
  118. data/config/locales/models_en.yml +65 -17
  119. data/config/locales/models_sl.yml +69 -18
  120. data/drg_cms.gemspec +1 -1
  121. data/lib/drg_cms.rb +61 -1
  122. data/lib/drg_cms/version.rb +1 -1
  123. data/lib/generators/new_drg_form/new_drg_form_generator.rb +9 -2
  124. data/lib/tasks/database.rake +6 -56
  125. metadata +73 -54
  126. data/app/assets/stylesheets/drg_cms/__jquery-ui.css +0 -339
  127. data/app/helpers/application_helper.rb +0 -2
  128. data/app/helpers/cmsedit_helper.rb +0 -888
  129. data/app/models/dc_dummy.rb +0 -102
  130. data/test/fixtures/drg_cms_test_data.rb +0 -87
@@ -1,6 +1,5 @@
1
- #coding: utf-8
2
1
  #--
3
- # Copyright (c) 2012-2013 Damjan Rems
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
- # return '' unless session[:edit_mode] > 0 #
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 inline: a.to_json, formats: 'js'
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
- # called without logged in
92
- if session[:edit_mode] < 1
93
- dc_render_404
94
- else
95
- session[:edit_mode] = (session[:edit_mode] == 1) ? 2 : 1
96
- redirect_to params[:return_to]
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 inline: { 'msg_info' => (t ('drgcms.not_authorized')) }.to_json, formats: 'js'
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 inline: result.to_json, formats: 'js'
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
  ########################################################################
@@ -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
- @record.design_id = params[:design_id] if params[:design_id]
35
- return unless params[:page_id]
36
- #
37
- if page = DcPage.find(params[:page_id])
38
- @record.design_id = page.design_id
39
- @record.menu = page.menu
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[:_record] and params[:_record][:_update_menu] == '1'
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