drg_cms 0.6.0.8 → 0.6.1.0

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 +100 -58
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +177 -43
  4. data/app/controllers/cmsedit_controller.rb +149 -145
  5. data/app/controllers/dc_application_controller.rb +235 -113
  6. data/app/controllers/dc_common_controller.rb +32 -3
  7. data/app/controls/dc_help_control.rb +126 -0
  8. data/app/controls/dc_report.rb +5 -7
  9. data/app/forms/all_options.yml +10 -4
  10. data/app/forms/cms_menu.yml +7 -1
  11. data/app/forms/dc_category.yml +2 -1
  12. data/app/forms/dc_design.yml +1 -0
  13. data/app/forms/dc_help_1.yml +109 -0
  14. data/app/forms/dc_journal.yml +3 -1
  15. data/app/forms/dc_link.yml +1 -1
  16. data/app/forms/dc_menu.yml +2 -0
  17. data/app/forms/dc_menu_item.yml +1 -0
  18. data/app/forms/dc_page.yml +2 -0
  19. data/app/forms/dc_part.yml +1 -0
  20. data/app/forms/dc_piece.yml +1 -0
  21. data/app/forms/dc_poll.yml +3 -0
  22. data/app/forms/dc_simple_menu.yml +2 -0
  23. data/app/forms/dc_site.yml +2 -6
  24. data/app/forms/dc_user.yml +27 -11
  25. data/app/forms/dc_user_role.yml +3 -0
  26. data/app/helpers/cms_common_helper.rb +69 -4
  27. data/app/helpers/cms_edit_helper.rb +32 -24
  28. data/app/helpers/cms_helper.rb +64 -26
  29. data/app/helpers/cms_index_helper.rb +84 -72
  30. data/app/helpers/dc_application_helper.rb +33 -24
  31. data/app/models/concerns/dc_page_concern.rb +11 -2
  32. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  33. data/app/models/concerns/dc_site_concern.rb +56 -44
  34. data/app/models/concerns/dc_user_concern.rb +57 -18
  35. data/app/models/dc_design.rb +29 -19
  36. data/app/models/dc_key_value_store.rb +1 -0
  37. data/app/models/dc_permission.rb +19 -9
  38. data/app/models/dc_policy.rb +25 -14
  39. data/app/models/dc_policy_role.rb +22 -11
  40. data/app/models/dc_temp.rb +1 -1
  41. data/app/models/dc_user_role.rb +2 -2
  42. data/app/models/drgcms_form_fields/embedded.rb +5 -8
  43. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  44. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  45. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  46. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  47. data/app/models/drgcms_form_fields/method.rb +5 -4
  48. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  49. data/app/models/drgcms_form_fields/select.rb +10 -9
  50. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  51. data/app/views/cmsedit/edit.html.erb +2 -0
  52. data/app/views/cmsedit/index.html.erb +2 -1
  53. data/app/views/cmsedit/new.html.erb +2 -0
  54. data/app/views/dc_common/_help.html.erb +8 -0
  55. data/app/views/layouts/models.html.erb +2 -1
  56. data/config/locales/drgcms_en.yml +12 -0
  57. data/config/locales/drgcms_sl.yml +15 -0
  58. data/config/locales/models_en.yml +5 -5
  59. data/config/locales/models_sl.yml +7 -6
  60. data/lib/drg_cms.rb +58 -0
  61. data/lib/drg_cms/version.rb +1 -1
  62. metadata +5 -3
  63. data/app/models/__dc_dummy.rb +0 -102
@@ -1,4 +1,3 @@
1
- #coding: utf-8
2
1
  #--
3
2
  # Copyright (c) 2012+ Damjan Rems
4
3
  #
@@ -66,8 +65,8 @@ end
66
65
  ####################################################################
67
66
  def dc_user_has_role(role)
68
67
  role = DcPolicyRole.get_role(role)
69
- return false if role.nil? or session[:user_roles].nil?
70
- # role is found in user_roles
68
+ return false if role.nil? || session[:user_roles].nil?
69
+ # role exists in user_roles
71
70
  session[:user_roles].include?(role._id)
72
71
  end
73
72
 
@@ -81,22 +80,28 @@ end
81
80
  # @example Returns Google analytics code from site settings
82
81
  # settings = dc_get_site.params['ga_acc']
83
82
  ####################################################################
84
- def dc_get_site()
85
- return @site if @site
83
+ def dc_get_site
84
+ return @site if @site
85
+
86
86
  uri = URI.parse(request.url)
87
+ cache_key = ['dc_site', uri.host]
88
+
89
+ @site = dc_cache_read(cache_key)
90
+ return @site if @site
91
+
87
92
  @site = DcSite.find_by(name: uri.host)
88
- # Site can be aliased
89
- if @site and !@site.alias_for.blank?
93
+ # Site can be aliased
94
+ if @site && !@site.alias_for.blank?
90
95
  @site = DcSite.find_by(name: @site.alias_for)
91
96
  end
92
- # Development environment. Check if site with name test exists and use
93
- # alias_for as pointer to real site.
94
- if @site.nil? and ENV["RAILS_ENV"] != 'production'
97
+ # Development environment. Check if site with name test exists and use
98
+ # alias_for as pointer to real site.
99
+ if @site.nil? && ENV["RAILS_ENV"] != 'production'
95
100
  @site = DcSite.find_by(name: 'test')
96
101
  @site = DcSite.find_by(name: @site.alias_for) if @site
97
- end
98
- @site = nil if @site and !@site.active # site is disabled
99
- @site
102
+ end
103
+ @site = nil if @site && !@site.active # site is disabled
104
+ dc_cache_write(cache_key, @site)
100
105
  end
101
106
 
102
107
  ##########################################################################
@@ -104,7 +109,7 @@ end
104
109
  #
105
110
  # Sets internal @page_title variable.
106
111
  ##########################################################################
107
- def set_page_title()
112
+ def set_page_title
108
113
  @page_title = @page.title.blank? ? @page.subject : @page.title
109
114
  dc_add_meta_tag(:name, 'description', @page.meta_description)
110
115
  end
@@ -115,18 +120,17 @@ end
115
120
  # @param [String] Form file name. File name can be passed as gem_name.filename. This can
116
121
  # be useful when you are extending form but want to retain same name as original form
117
122
  # For example. You are extending dc_user form from drg_cms gem and want to
118
- # retain same dc_user name. This can be done by setting drg_cms.dc_user to extend option.
123
+ # retain same dc_user name. This can be done by setting drg_cms.dc_user as extend option.
119
124
  #
120
125
  # @return [String] Form file name including path or nil if not found.
121
126
  ########################################################################
122
127
  def dc_find_form_file(form_file)
123
- form_path=nil
124
- if form_file.match(/\.|\//)
125
- form_path,form_file=form_file.split(/\.|\//)
126
- end
128
+ form_path = nil
129
+ form_path, form_file = form_file.split(/\.|\//) if form_file.match(/\.|\//)
130
+
127
131
  DrgCms.paths(:forms).reverse.each do |path|
128
132
  f = "#{path}/#{form_file}.yml"
129
- return f if File.exist?(f) and (form_path.nil? or path.to_s.match(/\/#{form_path}\//i))
133
+ return f if File.exist?(f) && (form_path.nil? || path.to_s.match(/\/#{form_path}(-|\/)/i))
130
134
  end
131
135
  raise "Exception: Form file '#{form_file}' not found!"
132
136
  end
@@ -165,15 +169,7 @@ end
165
169
 
166
170
  protected
167
171
 
168
- #############################################################################
169
- # Add permissions. Subroutine of dc_user_can
170
- ############################################################################
171
- def __add_permissions_for(table_name=nil) # :nodoc:
172
- perm = table_name.nil? ? DcPermission.find_by(is_default: true) : DcPermission.find_by(table_name: table_name, active: true)
173
- (perm.dc_policy_rules.each {|p1| @permissions[p1.dc_policy_role_id] = p1.permission }) if perm
174
- end
175
-
176
- ############################################################################
172
+ ###########################################################################
177
173
  # Checks if user can perform (read, create, edit, delete) document in specified
178
174
  # table (collection).
179
175
  #
@@ -185,45 +181,75 @@ end
185
181
  # @Example True when user has view permission on the table
186
182
  # if dc_user_can(DcPermission::CAN_VIEW, params[:table]) then ...
187
183
  ############################################################################
188
- def __dc_user_can(permission, table=params[:table])
189
- if @permissions.nil?
190
- @permissions = {}
191
- add_permissions_for # default permission
192
- table_name = ''
193
- # permission can be set for table or object embedded in table. Read all possible values
194
- table.strip.downcase.split(';').each do |t|
195
- table_name << (table_name.size > 0 ? ';' : '') + t # table;embedded;another;...
196
- add_permissions_for table_name
197
- end
198
- end
199
- # Return true if any of the permissions user has is higher or equal to requested permission
200
- session[:user_roles].each {|r| return true if @permissions[r] and @permissions[r] >= permission }
184
+ def dc_user_can(permission, table = params[:table])
185
+ permissions = DcPermission.permissions_for_table(table)
186
+ session[:user_roles].each {|r| return true if permissions[r] && permissions[r] >= permission }
201
187
  false
202
- end
188
+ end
203
189
 
204
- ###########################################################################
205
- # Checks if user can perform (read, create, edit, delete) document in specified
206
- # table (collection).
207
- #
208
- # @param [Integer] Required permission level
209
- # @param [String] Collection (table) name for which permission is queried. Defaults to params[table].
210
- #
211
- # @return [Boolean] true if user's role permits (is higher or equal then required) operation on a table (collection).
212
- #
213
- # @Example True when user has view permission on the table
214
- # if dc_user_can(DcPermission::CAN_VIEW, params[:table]) then ...
215
- ############################################################################
216
- def dc_user_can(permission, table=params[:table])
217
- @permissions ||= DcPermission.permissions_for_table(table)
218
- # Return true if any of the permissions user has is higher or equal to requested permission
219
- session[:user_roles].each {|r| return true if @permissions[r] and @permissions[r] >= permission }
190
+ def dc_user_can(permission, table = params[:table])
191
+ cache_key = ['dc_permission', table, session[:user_id], dc_get_site.id]
192
+ permissions = dc_cache_read(cache_key)
193
+ if permissions.nil?
194
+ permissions = DcPermission.permissions_for_table(table)
195
+ dc_cache_write(cache_key, permissions)
196
+ end
197
+ session[:user_roles].each {|r| return true if permissions[r] && permissions[r] >= permission }
220
198
  false
221
199
  end
222
200
 
223
201
  ####################################################################
224
- # Detects if called from mobile agent according to http://detectmobilebrowsers.com/
202
+ # Read from cache
203
+ #
204
+ # @keys [Array] Array of keys
205
+ #
206
+ # @return [Object] Data returned from cache
207
+ ####################################################################
208
+ def dc_cache_read(keys)
209
+ if redis_cache_store?
210
+ keys = keys.dup
211
+ first = keys.shift
212
+ data = redis.hget(first, keys.join(''))
213
+ data ? Marshal.load(data) : nil
214
+ else
215
+ Rails.cache.read(keys.join(''))
216
+ end
217
+ end
218
+
219
+ def __dc_cache_read(keys)
220
+ p 'read', keys.join(''), Rails.cache.instance_variable_get(:@data).keys
221
+ pp Rails.cache.read(keys.join(''))
222
+ end
223
+
224
+ ####################################################################
225
+ # Write data to cache
226
+ #
227
+ # @param [Array] Array of keys
228
+ # @param [Object] Data written to cache
229
+ #
230
+ # @return [Object] data so dc_cache_write can be used as last statement in method.
231
+ ####################################################################
232
+ def dc_cache_write(keys, data)
233
+ if redis_cache_store?
234
+ keys = keys.dup
235
+ first = keys.shift
236
+ redis.hset(first, keys.join(''), Marshal.dump(data))
237
+ else
238
+ Rails.cache.write(keys.join(''), data)
239
+ end
240
+ data
241
+ end
242
+
243
+ def __dc_cache_write(keys, data)
244
+ p 'write', keys.join('')
245
+ pp Rails.cache.write(keys.join(''), data)
246
+ data
247
+ end
248
+
249
+ ####################################################################
250
+ # Detects if called from mobile agent according to http://detectmobilebrowsers.com/
225
251
  # and set session[:is_mobile]
226
- #
252
+ #
227
253
  # Detect also if caller is a robot and set session[:is_robot]
228
254
  ####################################################################
229
255
  def dc_set_is_mobile
@@ -231,7 +257,7 @@ def dc_set_is_mobile
231
257
  : false
232
258
  session[:is_mobile] = is_mobile ? 1 : 0
233
259
  #
234
- if request.env["HTTP_USER_AGENT"] and request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/)
260
+ if request.env["HTTP_USER_AGENT "] and request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/)
235
261
  logger.info "ROBOT: #{Time.now.strftime('%Y.%m.%d %H:%M:%S')} id=#{@page.id} ip=#{request.remote_ip}."
236
262
  session[:is_robot] = true
237
263
  end
@@ -299,7 +325,7 @@ def get_design_and_render(design_doc)
299
325
  site_top = '<%= dc_page_top %>'
300
326
  site_bottom = '<%= dc_page_bottom %>'
301
327
  # lets try the rails way
302
- if @options[:control] and @options[:action]
328
+ if @options[:control] && @options[:action]
303
329
  controller = "#{@options[:control]}_control".classify.constantize rescue nil
304
330
  extend controller if controller
305
331
  return send @options[:action] if respond_to?(@options[:action])
@@ -307,7 +333,7 @@ def get_design_and_render(design_doc)
307
333
  # design doc present
308
334
  if design_doc
309
335
  # defined as rails view
310
- design = if design_doc.rails_view.blank? or design_doc.rails_view == 'site'
336
+ design = if design_doc.rails_view.blank? || design_doc.rails_view == 'site'
311
337
  @site.rails_view
312
338
  else
313
339
  design_doc.rails_view
@@ -319,7 +345,7 @@ def get_design_and_render(design_doc)
319
345
  return render(inline: design, layout: layout) unless design.blank?
320
346
  end
321
347
  # Design doc not defined
322
- if @site.rails_view.blank?
348
+ if @site.rails_view.blank?
323
349
  design = site_top + @site.design + site_bottom
324
350
  render(inline: design, layout: layout)
325
351
  else
@@ -341,34 +367,34 @@ end
341
367
  # dc_process_default_request
342
368
  # end
343
369
  ##########################################################################
344
- def dc_process_default_request()
370
+ def dc_process_default_request
345
371
  session[:edit_mode] ||= 0
346
- # Initialize parts
372
+ # Initialize parts
347
373
  @parts = nil
348
374
  @js, @css = '', ''
349
- # find domain name in sites
375
+ # find domain name in sites
350
376
  @site = dc_get_site
351
- # site not defined. render 404 error
377
+ # site not defined. render 404 error
352
378
  return dc_render_404('Site!') if @site.nil?
379
+
353
380
  dc_set_options(@site.settings)
354
- # HOMEPAGE. When no parameters is set
381
+ # HOMEPAGE. When no parameters is set
355
382
  params[:path] = @site.homepage_link if params[:id].nil? and params[:path].nil?
356
383
  @options[:path] = params[:path].to_s.downcase.split('/')
357
384
  params[:path] = @options[:path].first if @options[:path].size > 1
358
- # some other process request. It should fail if not defined
385
+ # some other process request. It should fail if not defined
359
386
  return send(@site.request_processor) unless @site.request_processor.blank?
360
-
361
- # Search for page
387
+ # Search for page
362
388
  pageclass = @site.page_klass
363
389
  if params[:id]
364
390
  #Page.where(id: params[:id]).or(subject_link: params[:id]).first
365
391
  @page = pageclass.find_by(:dc_site_id.in => [@site._id, nil], subject_link: params[:id], active: true)
366
392
  @page = pageclass.find(params[:id]) if @page.nil? # I think that there will be more subject_link searchers than id
367
393
  elsif params[:path]
368
- # path may point direct to page's subject_link
394
+ # path may point direct to page's subject_link
369
395
  @page = pageclass.find_by(:dc_site_id.in => [@site._id, nil], subject_link: params[:path], active: true)
370
396
  if @page.nil?
371
- # no. Find if defined in links
397
+ # no. Find if defined in links
372
398
  link = DcLink.find_by(:dc_site_id.in => [@site._id, nil], name: params[:path])
373
399
  if link
374
400
  #pageclass.find_by(alt_link: params[:path])
@@ -377,10 +403,10 @@ def dc_process_default_request()
377
403
  end
378
404
  end
379
405
  end
380
- # if @page is not found render 404 error
406
+ # if @page is not found render 404 error
381
407
  return dc_render_404('Page!') unless @page
382
408
  dc_set_is_mobile unless session[:is_mobile] # do it only once per session
383
- # find design if defined. Otherwise design MUST be declared in site
409
+ # find design if defined. Otherwise design MUST be declared in site
384
410
  if @page.dc_design_id
385
411
  @design = DcDesign.find(@page.dc_design_id)
386
412
  return dc_render_404('Design!') unless @design
@@ -388,20 +414,21 @@ def dc_process_default_request()
388
414
  dc_set_options @design.params if @design
389
415
  dc_set_options @page.params
390
416
  dc_add_json_ld(@page.get_json_ld)
391
- # Add edit menu
417
+ # Add edit menu
392
418
  if session[:edit_mode] > 0
393
419
  session[:site_id] = @site.id
394
420
  session[:site_page_class] = @site.page_class
395
421
  session[:page_id] = @page.id
396
- else
397
- # Log only visits from non-editors
422
+ else
423
+ # Log only visits from non-editors
398
424
  dc_log_visit()
399
425
  end
400
426
  set_page_title()
401
427
  get_design_and_render @design
402
428
  end
403
429
 
404
- ##########################################################################
430
+ ######
431
+ # ####################################################################
405
432
  # Single site document kind of request handler.
406
433
  #
407
434
  # This request handler assumes that all data for the site is saved in the site document.
@@ -501,7 +528,7 @@ end
501
528
  #
502
529
  ####################################################################
503
530
  def dc_check_model(document, crash=false)
504
- DcApplicationController.dc_check_model(document, crash=false)
531
+ DrgCms.check_model(document, crash=false)
505
532
  end
506
533
 
507
534
  ######################################################################
@@ -525,7 +552,7 @@ end
525
552
  # can be found in drg_cms.js file.
526
553
  #
527
554
  # @param [Hash] Options
528
- #
555
+ #
529
556
  # @return [JSON Response] Formatted to be used for ajax return.
530
557
  #
531
558
  # @example
@@ -537,7 +564,7 @@ end
537
564
  ######################################################################
538
565
  def dc_render_ajax(opts)
539
566
  result = {}
540
- if opts[:div] or opts[:class]
567
+ if opts[:div] || opts[:class]
541
568
  selector = opts[:div] ? '#' : '.' # for div . for class
542
569
  key = case
543
570
  when opts[:prepend] then "#{selector}+div"
@@ -559,7 +586,7 @@ end
559
586
  # @param [String] Table (collection) name. Could be dc_page;dc_part;... when searching for embedded document.
560
587
  # @param [String] Id of the document
561
588
  # @param [String] Ids of parent documents when document is embedded. Ids are separated by ; char.
562
- #
589
+ #
563
590
  # @return [document]. Required document or nil if not found.
564
591
  #
565
592
  # @example As used in Cmsedit_controller
@@ -604,7 +631,7 @@ def clear_login_data
604
631
  session[:edit_mode] = 0
605
632
  session[:user_id] = nil
606
633
  session[:user_name] = nil
607
- session[:user_roles] = nil
634
+ set_default_guest_user_role
608
635
  cookies.delete :remember_me
609
636
  end
610
637
 
@@ -618,20 +645,20 @@ end
618
645
 
619
646
  ####################################################################
620
647
  # Fills session with data related to successful login.
621
- #
648
+ #
622
649
  # @param [DcUser] user : User's document
623
650
  # @param [Boolean] remember_me : false by default
624
651
  ####################################################################
625
652
  def fill_login_data(user, remember_me=false)
626
653
  session[:user_id] = user.id if user
627
654
  session[:user_name] = user.name if user
628
- session[:edit_mode] = 0
655
+ session[:edit_mode] = 0
629
656
  session[:user_roles] = []
630
657
  # Every user has guest role
631
- # guest = DcPolicyRole.find_by(system_name: 'guest')
632
- # session[:user_roles] << guest.id if guest
658
+ # guest = DcPolicyRole.find_by(system_name: 'guest')
659
+ # session[:user_roles] << guest.id if guest
633
660
  set_default_guest_user_role
634
- return unless user and user.active
661
+ return unless user and user.active
635
662
  # special for SUPERADMIN
636
663
  sa = DcPolicyRole.find_by(system_name: 'superadmin')
637
664
  if sa and (role = user.dc_user_roles.find_by(dc_policy_role_id: sa.id))
@@ -643,7 +670,7 @@ def fill_login_data(user, remember_me=false)
643
670
  policy_site = dc_get_site()
644
671
  policy_site = DcSite.find(policy_site.inherit_policy) if policy_site.inherit_policy
645
672
  default_policy = policy_site.dc_policies.find_by(is_default: true)
646
- # load user roles
673
+ # load user roles
647
674
  user.dc_user_roles.each do |role|
648
675
  next unless role.active
649
676
  next if role.valid_from and role.valid_from > Time.now.end_of_day.to_date
@@ -651,7 +678,7 @@ def fill_login_data(user, remember_me=false)
651
678
  # check if role is active in this site
652
679
  policy_role = default_policy.dc_policy_rules.find_by(dc_policy_role_id: role.dc_policy_role_id)
653
680
  next unless policy_role
654
- # set edit_mode
681
+ # set edit_mode
655
682
  session[:edit_mode] = 1 if policy_role.permission > 1
656
683
  session[:user_roles] << role.dc_policy_role_id
657
684
  end
@@ -661,15 +688,75 @@ def fill_login_data(user, remember_me=false)
661
688
  end
662
689
  end
663
690
 
691
+ ####################################################################
692
+ # Fills session with data related to successful login.
693
+ #
694
+ # @param [DcUser] user : User's document
695
+ # @param [Boolean] remember_me : false by default
696
+ ####################################################################
697
+ def fill_login_data(user, remember_me = false)
698
+ session[:user_id] = user.id if user
699
+ session[:user_name] = user.name if user
700
+ session[:edit_mode] = 0
701
+ set_default_guest_user_role
702
+ return unless user&.active
703
+
704
+ # special for SUPERADMIN
705
+ sa = DcPolicyRole.find_by(system_name: 'superadmin')
706
+ if sa && (role = user.dc_user_roles.find_by(dc_policy_role_id: sa.id))
707
+ session[:user_roles] << role.dc_policy_role_id
708
+ session[:edit_mode] = 2
709
+ return
710
+ end
711
+ # read default policy from site. Policy might be inherited from other site
712
+ policy_site = dc_get_site()
713
+ policy_site = DcSite.find(policy_site.inherit_policy) if policy_site.inherit_policy
714
+ default_policy = policy_site.dc_policies.find_by(is_default: true)
715
+
716
+ # load user roles from groups
717
+ roles = {}
718
+ user.member.each do |group_id|
719
+ group = DcUser.find(group_id)
720
+ next unless group.active
721
+
722
+ group.dc_user_roles.each do |role|
723
+ next unless role.active?
724
+ roles[role.dc_policy_role_id] = role
725
+ end
726
+ end unless user.member.blank?
727
+
728
+ # load user roles from user
729
+ user.dc_user_roles.each do |role|
730
+ # not active in user roles will remove role defined in groups
731
+ unless role.active?
732
+ roles.delete(role.dc_policy_role_id) if roles[role.dc_policy_role_id]
733
+ next
734
+ end
735
+ roles[role.dc_policy_role_id] = role
736
+ end
737
+ # select only roles defined in default site policy and set edit_mode
738
+ roles.each do |key, role|
739
+ # check if role is active in this site
740
+ policy_role = default_policy.dc_policy_rules.find_by(dc_policy_role_id: role.dc_policy_role_id)
741
+ next unless policy_role
742
+ # set edit_mode
743
+ session[:edit_mode] = 1 if policy_role.permission > 1
744
+ session[:user_roles] << role.dc_policy_role_id
745
+ end
746
+ # Save remember me cookie if not CMS user and remember me is selected
747
+ if session[:edit_mode] == 0 && remember_me
748
+ cookies.signed[:remember_me] = { value: user.id, expires: 180.days.from_now }
749
+ end
750
+ end
751
+
664
752
  ##########################################################################
665
- # Will check if user's login data is stil valid and reload user roles.
753
+ # Will check if user's login data is still valid and reload user roles.
666
754
  #
667
755
  # @param [Time] repeat_after : Check is repeated after time. This is by default performed every 24 hours.
668
756
  ##########################################################################
669
- def dc_check_user_still_valid(repeat_after=1.day)
670
- # not needed
671
- return if session[:user_id].nil?
672
- # last check more than a day ago
757
+ def dc_check_user_still_valid(repeat_after = 1.day)
758
+ return if session[:user_id].nil?
759
+ # last check more than repeat_after ago
673
760
  if (session[:user_chk] ||= Time.now) < repeat_after.ago
674
761
  user_id = session[:user_id]
675
762
  clear_login_data
@@ -686,7 +773,7 @@ end
686
773
  # @param [String] class_method defined as MyClass.method_name
687
774
  # @param [Object] optional parameters send to class_method
688
775
  ##########################################################################
689
- def dc_eval_class_method(class_method, params=nil)
776
+ def dc_eval_class_method(class_method, params = nil)
690
777
  klass, method = class_method.split('.')
691
778
  # check if class exists
692
779
  klass = klass.classify.constantize rescue nil
@@ -729,6 +816,7 @@ end
729
816
  ########################################################################
730
817
  def dc_add_meta_tag(type, name, content)
731
818
  return if content.blank?
819
+
732
820
  @meta_tags ||= {}
733
821
  key = "#{type}=\"#{name}\""
734
822
  @meta_tags[key] = content
@@ -745,11 +833,38 @@ end
745
833
  #
746
834
  ########################################################################
747
835
  def dc_update_form_field(field_name, value, readonly=false)
836
+ dc_deprecate('dc_update_form_field will be deprecated. Use dc_update_form_element instead.')
748
837
  key_name = (readonly ? 'td_' : '') + "record_#{field_name}"
749
838
  flash[:update] ||= {}
750
839
  flash[:update][key_name] = value
751
840
  end
752
841
 
842
+ ########################################################################
843
+ # Will prepare flash[:update] data, which will be used for updating elements
844
+ # on parent form.
845
+ #
846
+ # dc_update_form_field will be deprecated eventually.
847
+ #
848
+ # Parameters passed as hash:
849
+ # [field] String: Field name
850
+ # [head] String: Filed name in head of form
851
+ # [value] String: New value
852
+ # [readonly] Boolean: Field is readonly
853
+ #
854
+ ########################################################################
855
+ def dc_update_form_element(field: nil, head: nil, value:, readonly: true)
856
+ key = if field
857
+ (readonly ? 'td_' : '') + "record_#{field}"
858
+ elsif head
859
+ "head-#{head}"
860
+ end
861
+
862
+ if key
863
+ flash[:update] ||= {}
864
+ flash[:update][key] = value
865
+ end
866
+ end
867
+
753
868
  ####################################################################
754
869
  # Checks if any errors exist on document and writes error log. It can also
755
870
  # crash if requested. This is mostly usefull in development for debuging
@@ -769,20 +884,8 @@ end
769
884
  # end
770
885
  #
771
886
  ####################################################################
772
- def self.dc_check_model(document, crash=false)
773
- return nil unless document.errors.any?
774
- msg = ""
775
- document.errors.each do |attribute, errors_array|
776
- msg << "#{attribute}: #{errors_array}\n"
777
- end
778
- #
779
- if crash and msg.size > 0
780
- msg = "Validation errors in #{document.class}:\n" + msg
781
- pp msg
782
- Rails.logger.error(msg)
783
- raise "Validation error. See log for more information."
784
- end
785
- msg
887
+ def self.dc_check_model(document, crash = false)
888
+ DrgCms.model_check(document, crash)
786
889
  end
787
890
 
788
891
  ########################################################################
@@ -798,5 +901,24 @@ def dc_dump_exception(exception)
798
901
  Rails.logger.error msg
799
902
  end
800
903
 
904
+ private
905
+
906
+ ########################################################################
907
+ # Determines if redis cache store is active
908
+ #
909
+ # @return [Boolean] : True if redis cache store is active
910
+ ########################################################################
911
+ def redis_cache_store?
912
+ (Rails.application.config.cache_store.first == :redis_cache_store) rescue false
913
+ end
914
+
915
+ ########################################################################
916
+ # Returns redis object
917
+ #
918
+ # @return [Object] : Redis object
919
+ ########################################################################
920
+ def redis
921
+ Rails.cache.redis
922
+ end
801
923
 
802
924
  end