drg_cms 0.6.1.4 → 0.6.1.9

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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +203 -24
  3. data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
  4. data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
  5. data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
  6. data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
  7. data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
  8. data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
  9. data/app/assets/javascripts/drg_cms/drg_cms.js +229 -95
  10. data/app/assets/stylesheets/drg_cms/drg_cms.css +608 -542
  11. data/app/assets/stylesheets/drg_cms_application.css +1 -1
  12. data/app/assets/stylesheets/drg_cms_cms.css +1 -4
  13. data/app/controllers/cmsedit_controller.rb +54 -127
  14. data/app/controllers/dc_application_controller.rb +17 -2
  15. data/app/controllers/dc_common_controller.rb +13 -7
  16. data/app/controls/browse_models_control.rb +15 -26
  17. data/app/controls/cmsedit_control.rb +125 -0
  18. data/app/controls/dc_help_control.rb +13 -1
  19. data/app/controls/dc_page_control.rb +0 -1
  20. data/app/controls/dc_poll_result_control.rb +1 -1
  21. data/app/controls/dc_report.rb +1 -1
  22. data/app/controls/design_element_settings_control.rb +1 -1
  23. data/app/forms/all_options.yml +23 -7
  24. data/app/forms/cms_menu.yml +24 -24
  25. data/app/forms/dc_big_table.yml +0 -2
  26. data/app/forms/dc_big_table_value.yml +0 -2
  27. data/app/forms/dc_browse_fields.yml +13 -9
  28. data/app/forms/dc_design.yml +1 -2
  29. data/app/forms/dc_folder_permission.yml +0 -2
  30. data/app/forms/dc_help_1.yml +2 -1
  31. data/app/forms/dc_json_ld.yml +0 -3
  32. data/app/forms/dc_menu.yml +6 -12
  33. data/app/forms/dc_menu_item.yml +1 -3
  34. data/app/forms/dc_page.yml +1 -2
  35. data/app/forms/dc_policy.yml +2 -5
  36. data/app/forms/dc_poll.yml +10 -16
  37. data/app/forms/dc_poll_result_export.yml +1 -1
  38. data/app/forms/dc_seo.yml +1 -2
  39. data/app/forms/dc_simple_menu.yml +1 -2
  40. data/app/forms/dc_site.yml +5 -7
  41. data/app/helpers/cms_common_helper.rb +8 -6
  42. data/app/helpers/cms_edit_helper.rb +61 -53
  43. data/app/helpers/cms_helper.rb +78 -42
  44. data/app/helpers/cms_index_helper.rb +198 -137
  45. data/app/helpers/dc_application_helper.rb +65 -43
  46. data/app/models/concerns/dc_page_concern.rb +1 -1
  47. data/app/models/concerns/dc_site_concern.rb +9 -3
  48. data/app/models/dc_big_table.rb +2 -2
  49. data/app/models/dc_filter.rb +45 -37
  50. data/app/models/dc_json_ld.rb +1 -1
  51. data/app/models/dc_part.rb +19 -9
  52. data/app/models/dc_site.rb +0 -1
  53. data/app/models/dc_temp.rb +7 -0
  54. data/app/models/drgcms_form_fields/comment.rb +11 -2
  55. data/app/models/drgcms_form_fields/drgcms_field.rb +10 -4
  56. data/app/models/drgcms_form_fields/link_to.rb +1 -1
  57. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +5 -5
  58. data/app/models/drgcms_form_fields/readonly.rb +3 -0
  59. data/app/models/drgcms_form_fields/select.rb +14 -14
  60. data/app/models/drgcms_form_fields/text_autocomplete.rb +19 -11
  61. data/app/renderers/dc_part_renderer.rb +1 -1
  62. data/app/renderers/dc_poll_renderer.rb +1 -1
  63. data/app/views/cmsedit/_edit_stuff.html.erb +12 -12
  64. data/app/views/cmsedit/_form.html.erb +3 -2
  65. data/app/views/cmsedit/_result.html.erb +21 -18
  66. data/app/views/cmsedit/login.html.erb +1 -1
  67. data/app/views/dc_common/paste_clipboard.html.erb +1 -1
  68. data/app/views/layouts/cms.html.erb +3 -5
  69. data/config/locales/drgcms_en.yml +5 -3
  70. data/config/locales/drgcms_sl.yml +5 -3
  71. data/config/locales/kaminari.yml +1 -1
  72. data/config/locales/models_sl.yml +1 -0
  73. data/drg_cms.gemspec +1 -1
  74. data/lib/drg_cms/version.rb +1 -1
  75. data/lib/drg_cms.rb +6 -12
  76. metadata +10 -5
  77. data/app/views/cmsedit/__remove_edit_stuff.js.erb +0 -6
  78. data/app/views/cmsedit/__show.html.erb +0 -21
@@ -9,6 +9,6 @@
9
9
  * compiled file, but it's generally better to create a new file per style scope.
10
10
  *
11
11
  *= require drg_cms/drg_cms
12
- *= require font-awesome
12
+ *= require drg_material_icons
13
13
 
14
14
  */
@@ -14,9 +14,6 @@
14
14
  *= require drg_cms/jstree
15
15
 
16
16
  *= require jquery-ui/all
17
-
18
- *= require font-awesome
17
+ *= require drg_material_icons
19
18
  */
20
19
 
21
- /* Required for link buttons to look alike */
22
- .dc-link a, .dc-link-submit input {font-weight: 600; }
@@ -41,9 +41,10 @@
41
41
  # its control's would be found in model_embedded_controls.rb. By convention module names
42
42
  # are declared in camel case, so our dc_page_controls.rb declares DrgcmsControls::DcPageControls module.
43
43
  #
44
- # Controls (among other) may contain 6 fixed callback methods.
44
+ # Controls (among other) may contain 7 callback methods.
45
45
  # These methods are:
46
46
  # * dc_new_record
47
+ # * dc_dup_record
47
48
  # * dc_before_edit
48
49
  # * dc_before_save
49
50
  # * dc_after_save
@@ -67,7 +68,7 @@
67
68
  # if dc_user_can(DcPermission::CAN_READ)
68
69
  # dc_page.where(created_by: session[:user_id])
69
70
  # else
70
- # flash[:error] = 'You can not perform this operation!'
71
+ # flash[:error] = 'User can not perform this operation!'
71
72
  # nil
72
73
  # end
73
74
  # end
@@ -76,7 +77,6 @@
76
77
  ########################################################################
77
78
  class CmseditController < DcApplicationController
78
79
  before_action :check_authorization, :except => [:login, :logout, :test, :run]
79
- before_action :dc_reload_patches if Rails.env.development?
80
80
  protect_from_forgery with: :null_session, only: Proc.new { |c| c.request.format.json? }
81
81
 
82
82
  layout 'cms'
@@ -99,7 +99,7 @@ end
99
99
  ########################################################################
100
100
  # Filter action.
101
101
  ########################################################################
102
- def filter
102
+ def _filter
103
103
  index
104
104
  end
105
105
 
@@ -128,12 +128,10 @@ end
128
128
  # Login can be called directly with url http://site.com/cmsedit/login
129
129
  ########################################################################
130
130
  def login
131
- if params[:id] == 'test' then set_test_site
132
- elsif params[:ok] then render action: 'login', layout: 'cms'
133
- else
134
- session[:edit_mode] = 0
135
- render action: 'login', layout: 'cms'
136
- end
131
+ return set_test_site if params[:id] == 'test'
132
+
133
+ session[:edit_mode] = 0 if !params[:ok]
134
+ render action: 'login', layout: 'cms'
137
135
  end
138
136
 
139
137
  ########################################################################
@@ -234,6 +232,7 @@ end
234
232
  # duplicating document and is subroutine of create action.
235
233
  ########################################################################
236
234
  def duplicate_document(source)
235
+ params['dup_fields'] += ',' if params['dup_fields'] # for easier field matching
237
236
  dest = {}
238
237
  source.attribute_names.each do |attribute_name|
239
238
  next if attribute_name == '_id' # don't duplicate _id
@@ -258,12 +257,9 @@ def duplicate_document(source)
258
257
  end
259
258
 
260
259
  ########################################################################
261
- # Create (or duplicate) action. Action is also used for turning filter on.
260
+ # Create (or duplicate) action.
262
261
  ########################################################################
263
262
  def create
264
- # abusing create for turning filter on
265
- return index if params[:filter].to_s == 'on'
266
-
267
263
  # not authorized
268
264
  unless dc_user_can(DcPermission::CAN_CREATE)
269
265
  flash[:error] = t('drgcms.not_authorized')
@@ -294,12 +290,11 @@ def create
294
290
  end
295
291
  else # duplicate record
296
292
  find_record
297
- params['dup_fields'] += ',' if params['dup_fields'] # for easier field matching
298
293
  new_doc = duplicate_document(@record)
299
294
  create_new_empty_record(new_doc)
300
- update_standards()
295
+ if (m = callback_method('dup_record')) then call_callback_method(m) end
296
+ update_standards
301
297
  @record.save!
302
-
303
298
  index
304
299
  end
305
300
  end
@@ -331,10 +326,8 @@ def update
331
326
  end
332
327
  end
333
328
 
334
- if dc_user_can(DcPermission::CAN_EDIT_ALL) or
335
- ( @record.respond_to?('created_by') and
336
- @record.created_by == session[:user_id] and
337
- dc_user_can(DcPermission::CAN_EDIT) )
329
+ if dc_user_can(DcPermission::CAN_EDIT_ALL) ||
330
+ (@record.respond_to?('created_by') && @record.created_by == session[:user_id] && dc_user_can(DcPermission::CAN_EDIT))
338
331
 
339
332
  if save_data
340
333
  params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
@@ -441,7 +434,7 @@ def run
441
434
  control_name, method_name = params[:control].split('.')
442
435
  if method_name.nil?
443
436
  method_name = control_name
444
- control_name = params[:table]
437
+ control_name = CmsHelper.table_param(params)
445
438
  end
446
439
  # extend with control methods
447
440
  extend_with_control_module(control_name)
@@ -478,7 +471,7 @@ def can_process_run
478
471
  response = send(:dc_can_process)
479
472
  return response unless response.class == Array
480
473
  else
481
- response = [DcPermission::CAN_VIEW, params[:table] || 'dc_memory']
474
+ response = [DcPermission::CAN_VIEW, CmsHelper.table_param(params) || 'dc_memory']
482
475
  end
483
476
  dc_user_can *response
484
477
  end
@@ -571,19 +564,19 @@ end
571
564
  # Read DRG form into @form object. Subroutine of check_authorization.
572
565
  ########################################################################
573
566
  def read_drg_form
574
- table_name = decamelize_type(params[:table].strip)
575
- @tables = table_name.split(';').inject([]) { |r,v| r << [(v.classify.constantize rescue nil), v] }
567
+ table_name = decamelize_type(CmsHelper.table_param(params).strip)
568
+ @tables = table_name.split(';').inject([]) { |r, v| r << [(v.classify.constantize rescue nil), v] }
576
569
 
577
570
  # split ids passed when embedded document
578
571
  ids = params[:ids].to_s.strip.downcase
579
572
  @ids = ids.split(';').inject([]) { |r,v| r << v }
580
573
 
581
574
  # form_name defaults to last table specified
582
- form_name = params[:form_name] || @tables.last[1]
575
+ form_name = CmsHelper.form_param(params) || @tables.last[1]
583
576
  @form_js = ''
584
577
 
585
578
  # dynamically generated form
586
- @form = if params[:form_name] == 'method'
579
+ @form = if CmsHelper.form_param(params) == 'method'
587
580
  dc_eval_class_method(params[:form_method], params)
588
581
  else
589
582
  form_file_name = dc_find_form_file(form_name)
@@ -623,7 +616,7 @@ end
623
616
  ############################################################################
624
617
  def extend_with_control_module(control_name = @form['controls'] || @form['control'])
625
618
  # May include embedded forms so ; => _
626
- control_name ||= params[:table].gsub(';','_')
619
+ control_name ||= CmsHelper.table_param(params).gsub(';','_')
627
620
  control_name += '_control' unless control_name.match(/control$|report$/i)
628
621
  # p '************', control_name
629
622
  controls = load_controls_module(control_name)
@@ -644,9 +637,10 @@ end
644
637
  # load DRG form.
645
638
  ############################################################################
646
639
  def check_authorization
647
- params[:table] ||= params[:form_name]
640
+ params[:table] ||= params[:t] || CmsHelper.form_param(params)
648
641
  # Only show menu
649
642
  return login if params[:id].in?(%w(login logout test))
643
+
650
644
  table = params[:table].to_s.strip.downcase
651
645
  set_default_guest_user_role if session[:user_roles].nil?
652
646
  # request shouldn't pass
@@ -688,7 +682,7 @@ def create_new_empty_record(initial_data = nil) #:nodoc:
688
682
  @record = @tables.first[0].new(initial_data)
689
683
  else
690
684
  rec = @tables.first[0].find(@ids.first) # top most record
691
- 1.upto(@tables.size - 2) { |i| rec = rec.send(@tables[i][1].pluralize).find(@ids[i]) } # find embedded childrens by ids
685
+ 1.upto(@tables.size - 2) { |i| rec = rec.send(@tables[i][1].pluralize).find(@ids[i]) } # find embedded children by ids
692
686
  @record = rec.send(@tables.last[1].pluralize).new(initial_data) # new record
693
687
  end
694
688
  end
@@ -715,8 +709,9 @@ end
715
709
  ########################################################################
716
710
  def save_journal(operation, changes = {})
717
711
  if operation == :delete
718
- @record.attributes.each {|k,v| changes[k] = v}
712
+ @record.attributes.each { |k, v| changes[k] = v }
719
713
  end
714
+ changes.except!('created_at', 'updated_at', 'created_by', 'updated_by')
720
715
 
721
716
  if (operation != :update) || changes.size > 0
722
717
  # determine site_id
@@ -740,7 +735,7 @@ end
740
735
  # Returns callback method name or nil if not defined.
741
736
  ########################################################################
742
737
  def callback_method(key) #:nodoc:
743
- data_key = key.gsub('_','-') # convert _ to -
738
+ data_key = key.gsub('_', '-') # convert _ to -
744
739
  callback = case
745
740
  when params['data'] && params['data'][data_key] then params['data'][data_key]
746
741
  # dc_ + key method is present then call it automatically
@@ -784,9 +779,10 @@ end
784
779
  def process_return_to(return_to)
785
780
  script = case
786
781
  when return_to == 'index' then return index
782
+ when return_to.match(/eval=/i) then return_to.sub('eval=', '')
787
783
  when return_to.match(/parent\.reload/i) then 'parent.location.href=parent.location.href;'
788
784
  when return_to.match(/reload/i) then 'location.href=location.href;'
789
- when return_to.match(/close/i) then 'window.close();'
785
+ when return_to.match(/window.close/i) then 'window.close();'
790
786
  when return_to.match(/none/i) then return
791
787
  else "location.href='#{return_to}'"
792
788
  end
@@ -830,6 +826,7 @@ def save_data
830
826
  value = DrgcmsFormFields.const_get(v['type'].camelize).get_data(params, v['name'])
831
827
  @record.send("#{v['name']}=", value)
832
828
  end
829
+
833
830
  # before_save callback
834
831
  if (m = callback_method('before_save') )
835
832
  ret = call_callback_method(m)
@@ -842,7 +839,7 @@ def save_data
842
839
  update_standards() if changes.size > 0 # update only if there has been some changes
843
840
  if (saved = @record.save)
844
841
  operation = @record.new_record? ? :new : :update
845
- save_journal(operation, changes)
842
+ save_journal(operation, @record.previous_changes)
846
843
  # after_save callback
847
844
  if (m = callback_method('after_save') ) then call_callback_method(m) end
848
845
  end
@@ -871,23 +868,12 @@ end
871
868
  ########################################################################
872
869
  # Will check and set sorting options for current result set. Subroutine of index method.
873
870
  ########################################################################
874
- def check_sort_options() #:nodoc:
871
+ def check_sort_options #:nodoc:
875
872
  table_name = @tables.first[1]
876
- old_sort = session[table_name][:sort].to_s
877
- sort, direction = old_sort.split(' ')
873
+ return if session[table_name][:sort].nil? || @records.class != Mongoid::Criteria
878
874
 
879
- if params['sort']
880
- # reverse sort if same selected
881
- if params['sort'] == sort
882
- direction = (direction == '1') ? '-1' : '1'
883
- end
884
- direction ||= '1'
885
- sort = params[:sort]
886
- session[table_name][:sort] = "#{params['sort']} #{direction}"
887
- session[table_name][:page] = 1
888
- end
889
- @records.sort( sort => direction.to_i ) if session[table_name][:sort] && @records.class == Mongoid::Criteria
890
- params['sort'] = nil # otherwise there is problem with other links
875
+ sort, direction = session[table_name][:sort].split(' ')
876
+ @records = @records.order_by( sort => direction.to_i )
891
877
  end
892
878
 
893
879
  ########################################################################
@@ -913,82 +899,20 @@ def user_sort_options(model) #:nodoc:
913
899
  { field.to_sym => direction.to_i }
914
900
  end
915
901
 
916
- ########################################################################
917
- # Will set session[table_name][:filter] and save last filter settings to session.
918
- # subroutine of check_filter_options.
919
- ########################################################################
920
- def set_session_filter(table_name)
921
- # models that can not be filtered (for now)
922
- return if %w(dc_temp dc_memory).include?(params[:table])
923
- # clear filter
924
- if params[:filter] == 'off'
925
- session[table_name][:filter] = nil
926
- return
927
- end
928
- # field_name should exist on set filter condition
929
- return if params[:filter_oper] && params[:filter_field].blank?
930
-
931
- filter_value = if params[:filter_value].nil?
932
- #NIL indicates that no filtering is needed
933
- '#NIL'
934
- else
935
- if params[:filter_value].class == String and params[:filter_value][0] == '@'
936
- # Internal value. Remove leading @ and evaluate expression
937
- expression = DcInternals.get(params[:filter_value])
938
- eval(expression) rescue nil
939
- else
940
- # No filter when empty
941
- params[:filter_value] == '' ? '#NIL' : params[:filter_value]
942
- end
943
- end
944
- # if filter field parameter is omitted then just set filter value
945
- session[table_name][:filter] =
946
- if params[:filter_field].nil?
947
- saved = YAML.load(session[table_name][:filter])
948
- saved['value'] = filter_value
949
- saved.to_yaml
950
- else
951
- # as field defined. Split name and alternative input field
952
- field = if params[:filter_field].match(' as ')
953
- params[:filter_input] = params[:filter_field].split(' as ').last.strip
954
- params[:filter_field].split(' as ').first.strip
955
- else
956
- params[:filter_field]
957
- end
958
-
959
- {'field' => field,
960
- 'operation' => params[:filter_oper],
961
- 'value' => filter_value,
962
- 'input' => params[:filter_input],
963
- 'table' => table_name }.to_yaml
964
- end
965
- # must be. Otherwise kaminari includes parames on paging links
966
- params[:filter] = nil
967
- params[:filter_id] = nil
968
- params[:filter_oper] = nil
969
- params[:filter_input] = nil
970
- params[:filter_field] = nil
971
- end
972
-
973
902
  ########################################################################
974
903
  # Will check and set current filter options for result set. Subroutine of index method.
975
904
  ########################################################################
976
- def check_filter_options() #:nodoc:
977
- table_name = @tables.first[1]
978
- model = @tables.first[0]
905
+ def check_filter_options #:nodoc:
906
+ table_name = CmsHelper.table_param(params).strip.split(';').first.underscore
907
+ model = table_name.classify.constantize
979
908
  session[table_name] ||= {}
980
909
  # page is set
981
910
  session[table_name][:page] = params[:page] if params[:page]
982
- # new filter is applied
983
- if params[:filter]
984
- set_session_filter(table_name)
985
- session[table_name][:page] = 1
986
- end
987
911
  # if data model has field dc_site_id ensure that only documents which belong to the site are selected.
988
912
  site_id = dc_get_site._id if dc_get_site
989
913
 
990
914
  # don't filter site if no dc_site_id field or user is ADMIN
991
- site_id = nil if !model.method_defined?('dc_site_id') or dc_user_can(DcPermission::CAN_ADMIN)
915
+ site_id = nil if !model.method_defined?('dc_site_id') || dc_user_can(DcPermission::CAN_ADMIN)
992
916
  site_id = nil if session[table_name][:filter].to_s.match('dc_site_id')
993
917
 
994
918
  if @records = DcFilter.get_filter(session[table_name][:filter])
@@ -998,7 +922,7 @@ def check_filter_options() #:nodoc:
998
922
  end
999
923
  process_select_and_deny_fields
1000
924
  # pagination if required
1001
- per_page = (@form['result_set']['per_page'] || 30).to_i
925
+ per_page = (@form['result_set']['per_page'] || 25).to_i
1002
926
  @records = @records.page(session[table_name][:page]).per(per_page) if per_page > 0
1003
927
  end
1004
928
 
@@ -1006,31 +930,35 @@ end
1006
930
  # Process index action for normal collections.
1007
931
  ########################################################################
1008
932
  def process_collections #:nodoc
1009
- # If result_set is not defined on form, then it will fail. :return_to should know where to go
933
+ # If result_set is not defined on form, then it will fail. :return_to should know where to go
1010
934
  if @form['result_set'].nil?
1011
- process_return_to(params[:return_to] || 'reload')
935
+ process_return_to(params[:return_to] || 'reload')
1012
936
  return true
1013
937
  end
1014
- # for now enable only filtering of top level documents
938
+ # when result set is evaluated as Rails helper
939
+ @form['result_set']['type'] ||= 'default'
940
+ return unless @form['result_set']['type'] == 'default'
941
+
942
+ # for now enable only filtering of top level documents
1015
943
  if @tables.size == 1
1016
944
  check_filter_options()
1017
945
  check_sort_options()
1018
946
  end
1019
- # result set is defined by filter method in control object
947
+ # result set is defined by filter method in control object
1020
948
  form_filter = @form['result_set']['filter']
1021
949
  if form_filter
1022
950
  if respond_to?(form_filter)
1023
951
  @records = send(form_filter)
1024
- # something went wrong. flash[] should have explanation.
952
+ # something went wrong. flash[] should have explanation.
1025
953
  if @records.class == FalseClass
1026
954
  @records = []
1027
955
  render(action: :index)
1028
956
  return true
1029
957
  end
1030
958
  process_select_and_deny_fields
1031
- # pagination but only if not already set
1032
- unless (@form['table'] == 'dc_memory' or @records.options[:limit])
1033
- per_page = (@form['result_set']['per_page'] || 30).to_i
959
+ # pagination but only if not already set
960
+ unless (@form['table'] == 'dc_memory' || @records.options[:limit])
961
+ per_page = (@form['result_set']['per_page'] || 25).to_i
1034
962
  @records = @records.page(params[:page]).per(per_page) if per_page > 0
1035
963
  end
1036
964
  elsif form_filter != 'dc_filter'
@@ -1040,10 +968,10 @@ def process_collections #:nodoc
1040
968
  if @tables.size > 1
1041
969
  rec = @tables.first[0].find(@ids.first) # top most document.id
1042
970
  1.upto(@tables.size - 2) { |i| rec = rec.send(@tables[i][1].pluralize).find(@ids[i]) } # find embedded childrens by ids
1043
- # TO DO. When field name is different then pluralized class name. Not working yet.
971
+ # TO DO. When field name is different then pluralized class name. Not working yet.
1044
972
  embedded_field_name = @tables.last[0] ? @tables.last[1].pluralize : @tables.last[1]
1045
973
  @records = rec.send(embedded_field_name) # current embedded set
1046
- # sort by order if order field is present in model
974
+ # sort by order if order field is present in model
1047
975
  if @tables.last[1].classify.constantize.respond_to?(:order)
1048
976
  @records = @records.order_by('order asc')
1049
977
  end
@@ -1074,5 +1002,4 @@ def process_in_memory #:nodoc
1074
1002
  false
1075
1003
  end
1076
1004
 
1077
-
1078
1005
  end
@@ -28,7 +28,8 @@
28
28
  class DcApplicationController < ActionController::Base
29
29
  protect_from_forgery with: :null_session, only: Proc.new { |c| c.request.format.json? }
30
30
  before_action :dc_reload_patches if Rails.env.development?
31
-
31
+ before_action :dc_set_locale
32
+
32
33
  ########################################################################
33
34
  # Writes anything passed as parameter to logger file.
34
35
  # Very useful for debuging strange errors.
@@ -256,7 +257,7 @@ def dc_set_options(parameters)
256
257
  return if parameters.to_s.size < 3
257
258
  # parameters are set as YAML. This should be default in future.
258
259
  parms = YAML.load(parameters) rescue {}
259
- @options.merge!(parms)
260
+ @options = @options.deep_merge(parms)
260
261
  end
261
262
 
262
263
  ##########################################################################
@@ -578,6 +579,20 @@ def dc_reload_patches
578
579
  end
579
580
  end
580
581
 
582
+ ########################################################################
583
+ # Will set new default locale for application
584
+ #
585
+ # @param [String] new_locale : New locale value. If omitted it will be provided from params[:locale].
586
+ # if new_locale value is 00, application's default_locale will be used.
587
+ ########################################################################
588
+ def dc_set_locale(new_locale = nil)
589
+ new_locale ||= params[:locale]
590
+ if new_locale && new_locale != session[:locale]
591
+ session[:locale] = new_locale == '00' ? nil : new_locale.to_sym
592
+ end
593
+ I18n.locale = session[:locale] ? session[:locale] : I18n.default_locale
594
+ end
595
+
581
596
  ############################################################################
582
597
  # Writes out deprication msg. It also adds site_name to message, so it is easier to
583
598
  # find where the message is comming from.
@@ -49,7 +49,12 @@ def autocomplete
49
49
  name = params['search'].split('.').first
50
50
  params['table'] = name.underscore
51
51
  end
52
- return render plain: t('drgcms.not_authorized') unless dc_user_can(DcPermission::CAN_VIEW)
52
+ if params['table'].match('_control')
53
+ # it must be at least logged on
54
+ return render json: { label: t('drgcms.not_authorized') } unless dc_user_can(DcPermission::CAN_VIEW, 'dc_memory')
55
+ else
56
+ return render json: { label: t('drgcms.not_authorized') } unless dc_user_can(DcPermission::CAN_VIEW)
57
+ end
53
58
 
54
59
  table = params['table'].classify.constantize
55
60
  input = params['input'].gsub(/\(|\)|\[|\]|\{|\|\.|\,}/, '')
@@ -69,7 +74,7 @@ def autocomplete
69
74
  end
70
75
  end
71
76
 
72
- render plain: a.to_json
77
+ render json: a
73
78
  end
74
79
 
75
80
  ########################################################################
@@ -212,8 +217,9 @@ def copy_clipboard
212
217
  format.json { dc_render_ajax(operation: 'window', url: request.url ) }
213
218
 
214
219
  format.html do
215
- doc = dc_find_document(params[:table], params[:id], params[:ids])
216
- text = "<br><br>[#{params[:table]},#{params[:id]},#{params[:ids]}]<br>"
220
+ table = CmsHelper.table_param(params)
221
+ doc = dc_find_document(table, params[:id], params[:ids])
222
+ text = "<br><br>[#{table},#{params[:id]},#{params[:ids]}]<br>"
217
223
  render plain: text + doc.as_document.to_json
218
224
  end
219
225
  end
@@ -261,7 +267,7 @@ end
261
267
  # document.
262
268
  ########################################################################
263
269
  def add_json_ld_schema
264
- edited_document = DcJsonLd.find_document_by_ids(params[:table], params[:ids])
270
+ edited_document = DcJsonLd.find_document_by_ids(CmsHelper.table_param(params), params[:ids])
265
271
  yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
266
272
  schema_data = yaml[params[:schema]]
267
273
  # Existing document
@@ -277,11 +283,11 @@ end
277
283
  # Will provide help data
278
284
  ########################################################################
279
285
  def help
280
- form_name = params[:form_name] || params[:table]
286
+ form_name = CmsHelper.form_param(params) || CmsHelper.table_param(params)
281
287
  @form = form_name ? YAML.load_file(dc_find_form_file(form_name)) : {}
282
288
  return render json: {} if @form.nil?
283
289
 
284
- help_file_name = @form['help'] || @form['extend'] || params[:form_name] || params[:table]
290
+ help_file_name = @form['help'] || @form['extend'] || form_name
285
291
  help_file_name = find_help_file(help_file_name)
286
292
  @help = YAML.load_file(help_file_name) if help_file_name
287
293
  # no auto generated help on index action
@@ -1,4 +1,3 @@
1
- #encoding: utf-8
2
1
  #--
3
2
  # Copyright (c) 2014+ Damjan Rems
4
3
  #
@@ -26,31 +25,19 @@
26
25
  #
27
26
  ######################################################################
28
27
  module BrowseModelsControl
29
- include DcApplicationHelper
30
-
31
- #########################################################################
32
- # Determine model class from filename.
33
- #########################################################################
34
- def determine_model(path)
35
- path =~ /(.*)\/(.*).rb/
36
- begin
37
- $2.camelize.constantize
38
- $2
39
- rescue Exception # it happends
40
- nil
41
- end
42
- end
43
28
 
44
29
  #########################################################################
45
30
  # Return array of all models found in application.
46
31
  #########################################################################
47
- def all_collections()
32
+ def all_collections
48
33
  collections = []
49
34
  DrgCms.paths(:forms).each do |path|
50
35
  models_dir = File.expand_path("../models", path)
51
- Dir["#{models_dir}/*.rb"].each do |model_file|
52
- collection_name = determine_model(model_file)
53
- collections << collection_name if collection_name
36
+ Dir["#{models_dir}/*.rb"].each do |model_file|
37
+ model_file =~ /(.*)\/(.*).rb/
38
+ # check if model exists
39
+ collection = $2.camelize.constantize.new rescue nil
40
+ collections << collection.class.to_s.underscore if collection&.respond_to?(:_id)
54
41
  end
55
42
  end
56
43
  collections.sort
@@ -59,10 +46,10 @@ end
59
46
  ######################################################################
60
47
  # List all collections
61
48
  ######################################################################
62
- def collections()
49
+ def collections
63
50
  @records = []
64
51
  all_collections.each do |collection|
65
- @records << {'id' => collection, 'description' => t("helpers.label.#{collection}.tabletitle") }
52
+ @records << DcMemory.new({'id' => collection, 'description' => t("helpers.label.#{collection}.tabletitle") })
66
53
  end
67
54
  @records
68
55
  end
@@ -70,7 +57,7 @@ end
70
57
  ######################################################################
71
58
  # List field definition for single model
72
59
  ######################################################################
73
- def all_fields()
60
+ def all_fields
74
61
  @records = []
75
62
  model = params[:id].classify.constantize
76
63
  document = model.new
@@ -80,12 +67,13 @@ def all_fields()
80
67
  description = I18n.t("helpers.label.#{params[:id]}.#{attribute_name}") if description.match('missing:')
81
68
  description = attribute_name if description.match('missing:')
82
69
 
83
- @records << {'collection' => params[:id],
70
+ @records << DcMemory.new({id: attribute_name,
71
+ 'collection' => params[:id],
84
72
  'field' => attribute_name,
85
73
  'type' => options[:type],
86
74
  'description' => description,
87
75
  '_default' => options[:default]
88
- }
76
+ })
89
77
  end
90
78
  # embedded documents
91
79
  document.embedded_relations.each do |a_embedded|
@@ -94,11 +82,12 @@ def all_fields()
94
82
  description = I18n.t("helpers.label.#{params[:id]}.#{embedded.key}") if description.match('missing:')
95
83
  description = embedded.key if description.match('missing:')
96
84
 
97
- @records << {'collection' => params[:id],
85
+ @records << DcMemory.new({ id: embedded.key,
86
+ 'collection' => params[:id],
98
87
  'field' => embedded.key,
99
88
  'type' => 'Embedded:' + embedded.class_name,
100
89
  'description' => description
101
- }
90
+ })
102
91
  end
103
92
 
104
93
  @records