drg_cms 0.7.0.2 → 0.7.0.8

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +63 -18
  3. data/app/assets/javascripts/drg_cms/jquery.bpopup.js +372 -0
  4. data/app/assets/javascripts/drg_cms_application.js +1 -1
  5. data/app/assets/javascripts/drg_cms_cms.js +1 -1
  6. data/app/assets/stylesheets/drg_cms/drg_cms.css +37 -5
  7. data/app/assets/stylesheets/drg_cms/select-multiple.css +2 -2
  8. data/app/controllers/cmsedit_controller.rb +22 -24
  9. data/app/controllers/dc_application_controller.rb +8 -8
  10. data/app/controllers/dc_common_controller.rb +9 -6
  11. data/app/controllers/dc_main_controller.rb +0 -1
  12. data/app/controls/{dc_category_control.rb → dc_gallery_control.rb} +15 -30
  13. data/app/controls/dc_image_control.rb +180 -0
  14. data/app/controls/dc_page_control.rb +3 -3
  15. data/app/controls/dc_poll_result_control.rb +7 -8
  16. data/app/controls/dc_report.rb +9 -4
  17. data/app/controls/design_element_settings_control.rb +88 -37
  18. data/app/forms/all_options.yml +18 -7
  19. data/app/forms/cms_menu.yml +7 -2
  20. data/app/forms/dc_gallery.yml +1 -1
  21. data/app/forms/dc_image.yml +122 -0
  22. data/app/forms/dc_image_search.yml +72 -0
  23. data/app/forms/dc_page.yml +11 -8
  24. data/app/forms/dc_steps_template.yml +2 -1
  25. data/app/helpers/cms_common_helper.rb +24 -16
  26. data/app/helpers/cms_edit_helper.rb +26 -33
  27. data/app/helpers/cms_helper.rb +21 -5
  28. data/app/helpers/cms_index_helper.rb +53 -38
  29. data/app/helpers/dc_application_helper.rb +64 -72
  30. data/app/helpers/dc_image_helper.rb +127 -0
  31. data/app/models/concerns/dc_policy_rule_concern.rb +1 -1
  32. data/app/models/concerns/dc_user_concern.rb +12 -4
  33. data/app/models/dc_category.rb +12 -0
  34. data/app/models/dc_design.rb +5 -4
  35. data/app/models/dc_filter.rb +19 -18
  36. data/app/models/dc_image.rb +237 -0
  37. data/app/models/dc_internals.rb +5 -9
  38. data/app/models/dc_policy_role.rb +8 -8
  39. data/app/models/drgcms_form_fields/drgcms_field.rb +9 -26
  40. data/app/models/drgcms_form_fields/embedded.rb +11 -8
  41. data/app/models/drgcms_form_fields/journal_diff.rb +2 -2
  42. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +51 -47
  43. data/app/models/drgcms_form_fields/select.rb +20 -14
  44. data/app/models/drgcms_form_fields/text_with_select.rb +5 -9
  45. data/app/renderers/dc_gallery_renderer.rb +10 -4
  46. data/app/renderers/dc_page_renderer.rb +7 -7
  47. data/app/renderers/dc_poll_renderer.rb +13 -12
  48. data/app/views/cmsedit/_edit_stuff.html.erb +1 -1
  49. data/app/views/cmsedit/edit.html.erb +1 -1
  50. data/app/views/cmsedit/index.html.erb +1 -1
  51. data/app/views/cmsedit/new.html.erb +1 -0
  52. data/config/locales/drgcms_en.yml +14 -2
  53. data/config/locales/drgcms_sl.yml +13 -2
  54. data/config/locales/models_en.yml +33 -0
  55. data/config/locales/models_sl.yml +44 -1
  56. data/drg_cms.gemspec +1 -1
  57. data/lib/drg_cms/version.rb +1 -1
  58. data/lib/drg_cms.rb +19 -5
  59. data/lib/generators/convert_to_ar/USAGE +8 -0
  60. data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
  61. metadata +16 -10
  62. data/app/assets/javascripts/drg_cms/jquery.bpopup.min.js +0 -7
  63. data/app/views/layouts/__cmsedit.html.erb +0 -16
@@ -34,7 +34,7 @@
34
34
  -moz-border-radius: 1px;
35
35
  border-radius: 1px;
36
36
  position: relative;
37
- height: 200px;
37
+ max-height: 200px;
38
38
  padding: 0;
39
39
  overflow-y: auto;
40
40
  }
@@ -65,7 +65,7 @@
65
65
  .ms-container .ms-selectable li.ms-elem-selectable{
66
66
  padding: 3px 10px;
67
67
  color: #444;
68
- font-size: 14px;
68
+ /* font-size: 14px;*/
69
69
  }
70
70
 
71
71
  .ms-container .ms-selectable li:nth-child(odd) {
@@ -113,7 +113,8 @@ def show
113
113
  ret = call_callback_method(m)
114
114
  if ret.class == FalseClass
115
115
  @form['readonly'] = nil # must be
116
- return index
116
+ flash[:error] ||= t('drgcms.not_authorized')
117
+ return index
117
118
  end
118
119
  end
119
120
 
@@ -271,7 +272,7 @@ def create
271
272
  # Prevent double form submit
272
273
  params[:form_time_stamp] = params[:form_time_stamp].to_i
273
274
  session[:form_time_stamp] ||= 0
274
- return index if params[:form_time_stamp] <= session[:form_time_stamp]
275
+ return index if params[:form_time_stamp] <= session[:form_time_stamp] && !Rails.env.test?
275
276
 
276
277
  session[:form_time_stamp] = params[:form_time_stamp]
277
278
  create_new_empty_record
@@ -385,7 +386,7 @@ def destroy
385
386
  save_journal(:delete)
386
387
  flash[:info] = t('drgcms.record_deleted')
387
388
  # after_delete callback
388
- if (m = callback_method('after_delete') )
389
+ if (m = callback_method('after_delete') )
389
390
  call_callback_method(m)
390
391
  elsif params['after-delete'].to_s.match('return_to')
391
392
  params[:return_to] = params['after-delete']
@@ -613,7 +614,7 @@ def save_journal(operation, changes = {})
613
614
 
614
615
  if (operation != :update) || changes.size > 0
615
616
  # determine site_id
616
- site_id = @record.site_id if @record.respond_to?('site_id')
617
+ site_id = @record.site_id if @record && @record.respond_to?('site_id')
617
618
  site_id = dc_get_site._id if site_id.nil? && dc_get_site
618
619
 
619
620
  DcJournal.create(site_id: site_id,
@@ -637,8 +638,9 @@ def callback_method(key) #:nodoc:
637
638
  callback = case
638
639
  when params['data'] && params['data'][data_key] then params['data'][data_key]
639
640
  # dc_ + key method is present then call it automatically
640
- when @form.dig('form', key) then @form['form'][key]
641
+ when @form.dig('permissions', key) then @form['permissions'][key]
641
642
  when respond_to?('dc_' + key) then 'dc_' + key
643
+ when respond_to?(key) then key
642
644
  when params[data_key] then params[data_key]
643
645
  else nil
644
646
  end
@@ -843,24 +845,20 @@ def process_collections #:nodoc
843
845
  check_sort_options()
844
846
  end
845
847
  # result set is defined by filter method in control object
846
- form_filter = @form['result_set']['filter']
847
- if form_filter
848
- if respond_to?(form_filter)
849
- @records = send(form_filter)
850
- # something went wrong. flash[] should have explanation.
851
- if @records.class == FalseClass
852
- @records = []
853
- render(action: :index)
854
- return true
855
- end
856
- process_select_and_deny_fields
857
- # pagination but only if not already set
858
- unless (@form['table'] == 'dc_memory' || @records.options[:limit])
859
- per_page = (@form['result_set']['per_page'] || 25).to_i
860
- @records = @records.page(params[:page]).per(per_page) if per_page > 0
861
- end
862
- elsif form_filter != 'dc_filter'
863
- Rails.logger.error "Error: result_set:filter: #{@form['result_set']['filter']} not found in controls!"
848
+ form_filter = @form['result_set']['filter'] || 'default_filter'
849
+ if respond_to?(form_filter)
850
+ @records = send(form_filter)
851
+ # something went wrong. flash[] should have explanation.
852
+ if @records.class == FalseClass
853
+ @records = []
854
+ render(action: :index)
855
+ return true
856
+ end
857
+ process_select_and_deny_fields
858
+ # pagination but only if not already set
859
+ unless (@form['table'] == 'dc_memory' || (@records.respond_to?(:options) && @records.options[:limit]))
860
+ per_page = (@form['result_set']['per_page'] || 25).to_i
861
+ @records = @records.page(params[:page]).per(per_page) if per_page > 0
864
862
  end
865
863
  else
866
864
  if @tables.size > 1
@@ -871,7 +869,7 @@ def process_collections #:nodoc
871
869
  @records = rec.send(embedded_field_name) # current embedded set
872
870
  # sort by order if order field is present in model
873
871
  if @tables.last[1].classify.constantize.respond_to?(:order)
874
- @records = @records.order_by('order asc')
872
+ @records = @records.order_by(order: 1)
875
873
  end
876
874
  end
877
875
  end
@@ -27,7 +27,6 @@
27
27
  ##########################################################################
28
28
  class DcApplicationController < ActionController::Base
29
29
  protect_from_forgery with: :null_session, only: Proc.new { |c| c.request.format.json? }
30
- before_action :dc_reload_patches if Rails.env.development?
31
30
  before_action :dc_set_locale
32
31
 
33
32
  ########################################################################
@@ -91,7 +90,7 @@ def dc_get_site
91
90
 
92
91
  @site = DcSite.find_by(name: uri.host)
93
92
  # Site can be aliased
94
- if @site && !@site.alias_for.blank?
93
+ if @site&.alias_for.present?
95
94
  @site = DcSite.find_by(name: @site.alias_for)
96
95
  end
97
96
  # Development environment. Check if site with name test exists and use
@@ -162,14 +161,15 @@ protected
162
161
  ############################################################################
163
162
  def dc_user_can(permission, table = params[:table])
164
163
  table = table.underscore
165
- cache_key = ['dc_permission', table, session[:user_id], dc_get_site.id]
166
- permissions = dc_cache_read(cache_key)
164
+ cache_key = ['dc_permission', table, dc_get_site.id]
165
+ permissions = DrgCms.cache_read(cache_key)
167
166
  if permissions.nil?
168
167
  permissions = DcPermission.permissions_for_table(table)
169
- dc_cache_write(cache_key, permissions)
168
+ DrgCms.cache_write(cache_key, permissions)
170
169
  end
171
- session[:user_roles].each { |r| return true if permissions[r] && permissions[r] >= permission }
172
- false
170
+ return false if session[:user_roles].nil?
171
+
172
+ session[:user_roles].inject(false) { |r, rule| break true if permissions[rule] && permissions[rule] >= permission }
173
173
  end
174
174
 
175
175
  ####################################################################
@@ -440,7 +440,7 @@ def dc_error_messages_for(document)
440
440
  msg = ''
441
441
  document.errors.each do |error|
442
442
  label = t("helpers.label.#{decamelize_type(document.class)}.#{error.attribute}")
443
- label = error.attribute if label.match( 'translation missing' )
443
+ label = error.attribute if label.match(/translation missing/i)
444
444
  msg << "<li>#{label} : #{error.message}</li>"
445
445
  end
446
446
 
@@ -124,19 +124,20 @@ end
124
124
  ####################################################################
125
125
  def process_login
126
126
  # Somebody is probably playing
127
- return dc_render_404 unless ( params[:record] && params[:record][:username] && params[:record][:password] )
127
+ return dc_render_404 unless ( params.dig(:record, :username) && params.dig(:record, :password) )
128
128
 
129
- unless params[:record][:password].blank? #password must not be empty
129
+ return_to = request.env['HTTP_REFERER'] || '/'
130
+ if params[:record][:password].present? #password must not be empty
130
131
  user = DcUser.find_by(username: params[:record][:username], active: true)
131
132
  if user && user.authenticate(params[:record][:password])
132
133
  fill_login_data(user, params[:record][:remember_me].to_i == 1)
133
- return redirect_to(params[:return_to] || '/', allow_other_host: true)
134
+ return redirect_to(params[:return_to] || return_to, allow_other_host: true)
134
135
  else
135
136
  clear_login_data # on the safe side
136
137
  end
137
138
  end
138
139
  flash[:error] = t('drgcms.invalid_username')
139
- redirect_to(params[:return_to] || '/', allow_other_host: true)
140
+ redirect_to return_to
140
141
  end
141
142
 
142
143
  ####################################################################
@@ -219,8 +220,10 @@ def copy_clipboard
219
220
  format.html do
220
221
  table = CmsHelper.table_param(params)
221
222
  doc = dc_find_document(table, params[:id], params[:ids])
222
- text = "<br><br>[#{table},#{params[:id]},#{params[:ids]}]<br>"
223
- render plain: text + doc.as_document.to_json
223
+ text = '<style>body {font-family: monospace;}</style><pre>'
224
+ text << "JSON:<br>[#{table},#{params[:id]},#{params[:ids]}]<br>#{doc.as_document.to_json}<br><br>"
225
+ text << "YAML:<br>#{doc.as_document.to_hash.to_yaml.gsub("\n", '<br>')}</pre>"
226
+ render plain: text
224
227
  end
225
228
  end
226
229
  end
@@ -1,4 +1,3 @@
1
- #coding: utf-8
2
1
  #--
3
2
  # Copyright (c) 2012+ Damjan Rems
4
3
  #
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2014+ Damjan Rems
2
+ # Copyright (c) 2022+ Damjan Rems
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -22,40 +22,25 @@
22
22
  #++
23
23
 
24
24
  ######################################################################
25
- # DrgcmsControls for DcPage model.
25
+ # DRG CMS controls for DcGallery collection
26
26
  ######################################################################
27
- module DcCategoryControl
27
+ module DcGalleryControl
28
28
 
29
29
  ######################################################################
30
- # Called when new empty record is created
30
+ # Remove picture from gallery.
31
31
  ######################################################################
32
- def dc_new_record
33
- if params[:selected]
34
-
35
- end
36
- if params[:from_menu]
37
- # find menu and submenu. Menu class is defined in Site.
38
- menu_a = params[:id].split(';')
39
- menu = dc_get_site.menu_klass.find(menu_a.shift)
40
- menu_items_method = "#{dc_get_site.menu_class}_items".underscore
41
- menu_i = menu.send(menu_items_method).find(menu_a.shift)
42
- while menu_a.size > 0 do menu_i = menu_i.send(menu_items_method).find(menu_a.shift) end
43
- # Fill values for form
44
- @record.subject = menu_i.caption
45
- @record.dc_site_id = menu.dc_site_id
46
- @record.menu_id = params[:id]
47
- # set update_menu on save parameter
48
- params['p__update_menu'] = '1'
49
- else
50
- @record.design_id = params[:design_id] if params[:design_id]
51
- return unless params[:page_id]
52
- # inherit some values from currently active page
53
- if page = DcPage.find(params[:page_id])
54
- @record.design_id = page.design_id
55
- @record.menu = page.menu
56
- @record.dc_site_id = page.dc_site_id
57
- end
32
+ def picture_remove
33
+ unless dc_user_can(DcPermission::CAN_DELETE, 'dc_gallery')
34
+ return render json: { alert: t('drgcms.not_authorized') }
58
35
  end
36
+
37
+ doc = DcGallery.find(params[:id])
38
+ pic = Rails.root.join('public', doc.picture.delete_prefix('/'))
39
+ File.delete(pic) if File.exist?(pic)
40
+ pic = Rails.root.join('public', doc.thumbnail.delete_prefix('/'))
41
+ File.delete(pic) if File.exist?(pic)
42
+ doc.delete
43
+ render json: { reload: true }
59
44
  end
60
45
 
61
46
  end
@@ -0,0 +1,180 @@
1
+ #--
2
+ # Copyright (c) 2022+ 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
+ # DrgcmsControls for DcImage data entry.
26
+ ######################################################################
27
+ module DcImageControl
28
+
29
+ ######################################################################
30
+ #
31
+ ######################################################################
32
+ def search_filter
33
+ flash[:record] ||= {}
34
+
35
+ created_by = flash[:record][:created_by]
36
+ qry = created_by.present? ? DcImage.where(created_by: created_by) : DcImage.all
37
+
38
+ short_name = flash[:record][:short]
39
+ qry = qry.and(short: /#{short_name}/i) if short_name.present?
40
+
41
+ category = flash[:record][:categories]
42
+ qry = qry.and(categories: category) if category.present?
43
+ qry.limit(30).order_by(created_at: -1)
44
+ end
45
+
46
+ ######################################################################
47
+ # Invoke images search. Just forward parameters and reload form. Filter parameters will
48
+ # be taken into account on reload.
49
+ ######################################################################
50
+ def images_search
51
+ flash[:record] = {}
52
+ flash[:record][:short] = params[:record][:short]
53
+ flash[:record][:created_by] = params[:record][:created_by]
54
+ flash[:record][:categories] = params[:record][:categories]
55
+
56
+ url = url_for(controller: :cmsedit, table: :dc_image, form_name: :dc_image_search, field_name: params[:field_name])
57
+ render json: { url: url }
58
+ end
59
+
60
+ ######################################################################
61
+ # Set some default values when new record
62
+ ######################################################################
63
+ def dc_new_record
64
+ default_sizes = dc_get_site.params.dig('dc_image', 'sizes').to_s.split(',')
65
+ @record.size_ls = default_sizes.shift
66
+ @record.size_ms = default_sizes.shift
67
+ @record.size_ss = default_sizes.shift
68
+ end
69
+
70
+ ######################################################################
71
+ # Save uploaded file if selected and extract properties data
72
+ ######################################################################
73
+ def dc_before_save
74
+ return if @record.size_o.present? || !params[:upload_file]
75
+
76
+ input_file_name = params[:upload_file].original_filename
77
+ type = File.extname(input_file_name).to_s.downcase.gsub('.', '').strip
78
+ unless %w(jpg jpeg png gif svg webp).include?(type)
79
+ flash[:error] = t 'drgcms.dc_image.wrong_type'
80
+ return false
81
+ end
82
+ name = File.basename(input_file_name)
83
+ path = File.dirname(params[:upload_file].tempfile)
84
+
85
+ @record.img_type = dc_get_site.params.dig('dc_image', 'img_type') || type
86
+ @record.short = File.basename(input_file_name, '.*') if @record.short.blank?
87
+ @record.name = File.join(path, name)
88
+ FileUtils.mv(params[:upload_file].tempfile, @record.name, force: nil)
89
+ end
90
+
91
+ ######################################################################
92
+ # Prepare additional images
93
+ ######################################################################
94
+ def dc_after_save
95
+ %w[l m s o].each { |size| image_convert(size) }
96
+ end
97
+
98
+ private
99
+
100
+ ######################################################################
101
+ #
102
+ ######################################################################
103
+ def image_convert(which)
104
+ new_file_name = "#{@record.id}-#{which}.#{@record.img_type}"
105
+ new_file_name = Rails.root.join('public', images_location, new_file_name)
106
+ new_size = @record["size_#{which}"]
107
+ # remove file if not needed
108
+ if new_size.blank?
109
+ FileUtils.rm(new_file_name) if File.exist?(new_file_name)
110
+ return
111
+ end
112
+
113
+ original_file_name = Rails.root.join('public', images_location, "#{@record.id}-o.#{@record.img_type}")
114
+ @record.name = original_file_name unless @record.name.present? && File.exist?(@record.name)
115
+ if !File.exist?(@record.name)
116
+ flash[:warning] = t 'drgcms.dc_image.no_file'
117
+ return
118
+ end
119
+
120
+ image_magick_do(new_size, new_file_name)
121
+ end
122
+
123
+ ######################################################################
124
+ # Crop and resize image
125
+ #
126
+ # @new_size [String] new_size widthxheight+offsetx+offsety 300x200+1000+0
127
+ # @file_name [String] Image file name
128
+ ######################################################################
129
+ def image_magick_do(new_size, file_name)
130
+ image = MiniMagick::Image.open(@record.name)
131
+
132
+ a = new_size.split(/x|\+/).map(&:to_i)
133
+ a += [0, 0] if a.size < 4
134
+ image_offset(image, a[2, 2]) if a[2, 2] != [0, 0]
135
+
136
+ img_w, img_h = image.width, image.height
137
+ new_w, new_h = a[0, 2]
138
+ img_ratio = img_w.to_f / img_h
139
+ new_ratio = new_w.to_f / new_h
140
+ formula = if new_ratio > img_ratio
141
+ "#{img_w}x#{img_w/new_ratio}+0+0"
142
+ else
143
+ "#{img_h*new_ratio}x#{img_h}+0+0"
144
+ end
145
+ image.crop(formula)
146
+
147
+ image.resize("#{new_w}x#{new_h}")
148
+ image.write(file_name)
149
+ image_reduce(file_name)
150
+ end
151
+
152
+ ######################################################################
153
+ # Reduce image quality of image
154
+ ######################################################################
155
+ def image_reduce(file_name)
156
+ if (quality = dc_get_site.params.dig('dc_image', 'quality').to_i) > 0
157
+ convert = MiniMagick::Tool::Convert.new
158
+ convert << file_name
159
+ convert.quality(quality)
160
+ convert << file_name
161
+ convert.call
162
+ end
163
+ end
164
+
165
+ ######################################################################
166
+ # Offset image if requested
167
+ ######################################################################
168
+ def image_offset(image, offset)
169
+ img_w, img_h = image.width - offset[0], image.height - offset[1]
170
+ image.crop("#{img_w}x#{img_h}+#{offset[0]}+#{offset[1]}")
171
+ end
172
+
173
+ ######################################################################
174
+ # Returns location of images files relative to public directory
175
+ ######################################################################
176
+ def images_location
177
+ dc_get_site.params.dig('dc_image', 'location') || 'images'
178
+ end
179
+
180
+ end
@@ -22,14 +22,14 @@
22
22
  #++
23
23
 
24
24
  ######################################################################
25
- # DrgcmsControls for DcPage model.
25
+ # DRG Controls for DcPage model.
26
26
  ######################################################################
27
27
  module DcPageControl
28
28
 
29
29
  ######################################################################
30
30
  # Called when new empty record is created
31
31
  ######################################################################
32
- def dc_new_record()
32
+ def dc_new_record
33
33
  # Called from menu. Fill in values, that could be obtained from menu
34
34
  if params[:from_menu]
35
35
  # find menu and submenu. Menu class is defined in Site.
@@ -59,7 +59,7 @@ end
59
59
  ######################################################################
60
60
  # Called just after record is saved to DB.
61
61
  ######################################################################
62
- def dc_after_save()
62
+ def dc_after_save
63
63
  if params.dig(:_record,:_update_menu).to_s == '1'
64
64
  dc_get_site.menu_klass.update_menu_item_link(@record)
65
65
  end
@@ -1,4 +1,3 @@
1
- #encoding: utf-8
2
1
  #--
3
2
  # Copyright (c) 2014+ Damjan Rems
4
3
  #
@@ -23,14 +22,14 @@
23
22
  #++
24
23
 
25
24
  ######################################################################
26
- # DrgcmsControls for DcPage model.
25
+ # DRG Controls for DcPage model.
27
26
  ######################################################################
28
27
  module DcPollResultControl
29
28
 
30
29
  ######################################################################
31
30
  # Filter result data when filter is set
32
31
  ######################################################################
33
- def poll_filter()
32
+ def poll_filter
34
33
  get_query
35
34
  end
36
35
 
@@ -55,15 +54,15 @@ def do_export
55
54
  # ensure, that fields are always in same order
56
55
  data = YAML.load(doc.data)
57
56
  if c.blank?
58
- data.each {|k,v| keys << k}
57
+ data.each { |k, v| keys << k }
59
58
  c << I18n.t('helpers.label.dc_poll_result.created_at') + "\t"
60
59
  c << keys.join("\t") + "\n"
61
60
  end
62
61
  c << doc.created_at.strftime(I18n.t('date.formats.default') ) + "\t"
63
- keys.each {|k| c << data[k] + "\t"}
62
+ keys.each { |k| c << data[k] + "\t" }
64
63
  c << "\n"
65
64
  end
66
- File.write(Rails.root.join('public','export.csv'), c)
65
+ File.write(Rails.root.join('public', 'export.csv'), c)
67
66
  dc_render_ajax(operation: :window, value: 'export.csv')
68
67
  end
69
68
 
@@ -71,8 +70,8 @@ private
71
70
  ######################################################################
72
71
  # Creates query for Poll results
73
72
  ######################################################################
74
- def get_query()
75
- if params.dig(:record,:dc_poll_id).nil?
73
+ def get_query
74
+ if params.dig(:record, :dc_poll_id).nil?
76
75
  qry = DcPollResult.all
77
76
  else
78
77
  qry = DcPollResult.where(dc_poll_id: params[:record][:dc_poll_id])
@@ -55,7 +55,7 @@ def print
55
55
  render json: { msg_error: t('drgcms.runtime_error') } and return
56
56
  end
57
57
 
58
- pdf_file = "tmp/dokument-#{Time.now.to_i}.pdf"
58
+ pdf_file = "tmp/document-#{Time.now.to_i}.pdf"
59
59
  @pdf.render_file Rails.root.join('public', pdf_file)
60
60
 
61
61
  render json: print_response(pdf_file)
@@ -142,14 +142,19 @@ def export_to_excel(report_id)
142
142
  columns.each_with_index do |column, i|
143
143
  caption = column.last['caption'] || column.last['label']
144
144
  label = t(caption)
145
- excel[n, i] = label.match('translation missing') ? caption : label
145
+ excel[n, i] = label.match(/translation missing/i) ? caption : label
146
146
  end
147
147
 
148
148
  data_filter.each do |doc|
149
149
  n += 1
150
150
  columns.each_with_index do |column, i|
151
- value = doc[column.last['name']].to_s.gsub('<br>', ";")
152
- value = value.gsub(/\<\/strong\>|\<strong\>|\<\/b\>|\<b\>/, '')
151
+ value = doc[column.last['name']]
152
+ value = case value.class.to_s
153
+ when /Integer|Float/ then value
154
+ when /Decimal/ then value.to_s.to_f
155
+ else
156
+ value.to_s.gsub('<br>', ";").gsub(/\<\/strong\>|\<strong\>|\<\/b\>|\<b\>/, '')
157
+ end
153
158
  excel[n, i] = value
154
159
  end
155
160
  end