drg_cms 0.6.1.4 → 0.6.1.5

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +12 -4
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +29 -49
  4. data/app/controllers/cmsedit_controller.rb +26 -23
  5. data/app/controllers/dc_application_controller.rb +16 -1
  6. data/app/controllers/dc_common_controller.rb +7 -2
  7. data/app/controls/dc_help_control.rb +12 -0
  8. data/app/forms/dc_big_table.yml +0 -2
  9. data/app/forms/dc_big_table_value.yml +0 -2
  10. data/app/forms/dc_design.yml +1 -2
  11. data/app/forms/dc_folder_permission.yml +0 -2
  12. data/app/forms/dc_help_1.yml +2 -1
  13. data/app/forms/dc_json_ld.yml +0 -3
  14. data/app/forms/dc_menu.yml +6 -12
  15. data/app/forms/dc_menu_item.yml +1 -3
  16. data/app/forms/dc_page.yml +1 -2
  17. data/app/forms/dc_policy.yml +2 -5
  18. data/app/forms/dc_poll.yml +10 -16
  19. data/app/forms/dc_seo.yml +1 -2
  20. data/app/forms/dc_simple_menu.yml +1 -2
  21. data/app/forms/dc_site.yml +3 -2
  22. data/app/helpers/cms_common_helper.rb +1 -1
  23. data/app/helpers/cms_edit_helper.rb +9 -8
  24. data/app/helpers/cms_helper.rb +3 -3
  25. data/app/helpers/cms_index_helper.rb +19 -3
  26. data/app/helpers/dc_application_helper.rb +35 -7
  27. data/app/models/dc_big_table.rb +2 -2
  28. data/app/models/dc_filter.rb +17 -17
  29. data/app/models/dc_temp.rb +7 -0
  30. data/app/models/drgcms_form_fields/comment.rb +11 -2
  31. data/app/models/drgcms_form_fields/select.rb +6 -7
  32. data/app/views/cmsedit/_form.html.erb +3 -2
  33. data/app/views/cmsedit/_result.html.erb +21 -18
  34. data/config/locales/drgcms_en.yml +3 -2
  35. data/config/locales/drgcms_sl.yml +3 -2
  36. data/config/locales/models_sl.yml +1 -0
  37. data/lib/drg_cms/version.rb +1 -1
  38. data/lib/drg_cms.rb +2 -8
  39. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94829c523218c40d302d4ab63c76c016a540008b878c48e261691f15b54485f7
4
- data.tar.gz: ce0c1134fc51e26f4c8439322223e50c071211416a230e674b86f25f81337f06
3
+ metadata.gz: be7dfed0ede6cbd81a93dbefbd517a2cb3d31151339a1bd3598ebde7e76993e9
4
+ data.tar.gz: d028640f11c1877e4f6eb4efe44f8fdd9306047678b9d731daeab3e56fb32749
5
5
  SHA512:
6
- metadata.gz: 45f569c43d27c468a545ed56a15822dee25c27bd3f8811eb28ccb1b388a323420135838b37f9590c3ac98a93d7484db283cf14c767a426d1a812c9597eb9f9c2
7
- data.tar.gz: 91838e2e5bec0f8b91cea632e8047cfd53dcd2872de5c5d74b65834b64495498b617bcfee5cac4ae673aed2a8e61b5ceb7025f235a8795b6cc009a5e1fb279d7
6
+ metadata.gz: 2f5617503a1c85ce1b5bf2a9d3460a33525ba96e20a82a84b85e7adc6f370a576f97b2e76aa57ff424243958046b396e0c4c2a3529a8ba0f763ef43cbe92f450
7
+ data.tar.gz: 9e716e8fca1ae6330bd74139512fb952d88600ca42d8cd4c5690e8271fb9a50b3e624e72fbcdc7df5ee820a4cd466fc8c6c2b1f5c58b5b9261afb1d076905237
@@ -245,9 +245,14 @@ process_json_result = function(json) {
245
245
 
246
246
  /**** display popup message ****/
247
247
  case 'popup':
248
- $('#popup').html(value);
249
- $('#popup').bPopup({ speed: 650, transition: 'slideUp'});
250
- break;
248
+ if (selector == 'url') {
249
+ $('#popup').bPopup({ loadUrl: value });
250
+ }
251
+ else {
252
+ $('#popup').html(value);
253
+ $('#popup').bPopup({speed: 650, transition: 'slideUp', position: ['auto',1]});
254
+ }
255
+ break;
251
256
 
252
257
  /**** update div ****/
253
258
  case '#div+':
@@ -273,6 +278,9 @@ process_json_result = function(json) {
273
278
  case 'url':
274
279
  window.location.href = value;
275
280
  break;
281
+ case 'parenturl':
282
+ parent.location.href = value;
283
+ break;
276
284
  case 'alert':
277
285
  alert(value);
278
286
  break;
@@ -574,7 +582,7 @@ $(document).ready( function() {
574
582
  $('.iframe_embedded').on('load', function() {
575
583
  let embedded_height = this.contentWindow.document.body.offsetHeight;
576
584
  // workaround. It gets tricky when embedded field is on tab
577
- if (embedded_height == 0) embedded_height = 500;
585
+ if (embedded_height == 0) embedded_height = 50;
578
586
  this.style.height = (embedded_height + 30) + 'px';
579
587
  // resize parent iframe window too
580
588
  let parentWindow = this.contentWindow.parent;
@@ -175,14 +175,6 @@ img { vertical-align:bottom; }
175
175
  padding: 7px;
176
176
  }
177
177
 
178
- /*
179
- .dc-link a:hover, .dc-animate a:hover, .dc-result a:hover {
180
- background: #f8f8f8;
181
- transition: 0.3s;
182
- color: #000;
183
- }
184
- */
185
-
186
178
  a.dc-animate:hover { color: #000; background: transparent;}
187
179
 
188
180
  .dc-link a img { border: none; }
@@ -208,7 +200,6 @@ width: 99.9%;
208
200
  padding: 0;
209
201
  border-spacing: 0;
210
202
  border-radius: 1px;
211
- /*background-color: #f9f9f9;*/
212
203
  }
213
204
 
214
205
  .dc-result i {
@@ -230,7 +221,6 @@ padding: 0;
230
221
 
231
222
  .dc-result-header {
232
223
  display: flex;
233
- /* background: linear-gradient(to bottom, #eee 0%, #e2e2e2 100%); */
234
224
  }
235
225
  .dc-result-data {
236
226
  display: flex;
@@ -255,12 +245,6 @@ padding: 0;
255
245
 
256
246
  .dc-result-header .spacer, .dc-result-data .spacer {
257
247
  width: 2px;
258
- /*
259
- font-size: 1.5em;
260
- margin: 0 0;
261
- padding: 4px 0;
262
- resize: both;
263
- /* border-left: 1px solid #ccc;*/
264
248
  }
265
249
 
266
250
  .dc-result-header a:link, .dc-result-header a:visited {
@@ -335,7 +319,6 @@ padding: 0;
335
319
  font-size: 1.2em;
336
320
  margin-left: -1rem;
337
321
  background-color: white;
338
- /* padding: 8px 5px; */
339
322
  padding: 6px 3px;
340
323
  }
341
324
 
@@ -352,12 +335,12 @@ display: inline-table;
352
335
  #data-fields {margin: 5px;}
353
336
 
354
337
  .dc-link {
355
- font-weight: 600;
356
- color: #666;
357
- text-align: center;
358
- border-radius: 3px;
359
- background: transparent linear-gradient(to bottom, #fff 0%, #e2e2e2 100%);
360
- border: 1px solid #ddd;
338
+ font-weight: 600;
339
+ color: #666;
340
+ text-align: center;
341
+ border-radius: 3px;
342
+ background: transparent linear-gradient(to bottom, #fff 0%, #e2e2e2 100%);
343
+ border: 1px solid #eee;
361
344
  }
362
345
 
363
346
  .dc-link:hover {
@@ -382,13 +365,17 @@ border: 1px solid #ddd;
382
365
  font-weight: 600;
383
366
  padding: 7px;
384
367
  vertical-align: bottom;
385
- border: 1px solid #ccc;
368
+ border: 1px solid #eee;
386
369
  border-radius: 3px;
387
370
  color: #777;
388
371
  text-shadow: 1px 1px #fff;
389
372
  background: #ddd !important;
390
373
  }
391
374
 
375
+ .dc-action-menu li.dc-link.plus-link {
376
+ padding: 7px 0;
377
+ }
378
+
392
379
  .dc-link-ajax {
393
380
  text-align: left;
394
381
  font-weight: 600;
@@ -396,7 +383,7 @@ border: 1px solid #ddd;
396
383
  border-radius: 3px;
397
384
  color: #666;
398
385
  background: transparent linear-gradient(to bottom, #fff 0%, #e2e2e2 100%) repeat scroll 0% 0%;
399
- border: 1px solid #ddd;
386
+ border: 1px solid #eee;
400
387
  }
401
388
 
402
389
  .dc-link-ajax.with-link {padding: 7px}
@@ -407,20 +394,19 @@ border: 1px solid #ddd;
407
394
  }
408
395
 
409
396
  .dc-link-ajax:hover, .dc-action-submit:hover {
410
- cursor: pointer;
411
- background: #eee;
412
- border: 1px solid #bbb;
397
+ cursor: pointer;
398
+ color: #000;
399
+ background: #eee;
413
400
  border: 1px solid rgba(76,154,255, 1);
414
401
  box-shadow: inset 0 0 0 1px rgba(76,154,255, 1);
415
- transition: 0.3s;
416
- color: #000;
402
+ transition: 0.3s;
417
403
  }
418
404
 
419
405
  .dc-link-ajax:hover a {
420
- color: #000;
421
- background: transparent;
422
- cursor: pointer;
423
- transition: 0.3s;
406
+ color: #000;
407
+ background: transparent;
408
+ cursor: pointer;
409
+ transition: 0.3s;
424
410
  }
425
411
 
426
412
  .dc-link-img {
@@ -494,16 +480,12 @@ border: solid 1px #ccc;;
494
480
  }
495
481
  .dc-link-submit {
496
482
  text-align: left;
497
- padding: 1px 8px 0.5px;
498
- /* Exo padding: 0 8px; */
499
-
500
483
  border-radius: 3px;
501
484
  background-color: #eee;
502
485
  background: transparent linear-gradient(to bottom, #fff 0%, #e2e2e2 100%) repeat scroll 0% 0%;
503
- border: 1px solid #ddd;
486
+ border: 1px solid #eee;
504
487
  display: flex;
505
488
  align-items: center;
506
-
507
489
  }
508
490
 
509
491
  .dc-link-submit .fa {
@@ -529,7 +511,7 @@ border: solid 1px #ccc;;
529
511
  border: none;
530
512
  color: #666;
531
513
  font-weight: 600;
532
- padding: 1px 2px 0;
514
+ padding: 2px 8px 1px;
533
515
  border-radius: 0;
534
516
  background: transparent;
535
517
  line-height: 30px;
@@ -638,7 +620,7 @@ color: #aaa;
638
620
 
639
621
  .dc-form-info {
640
622
  padding: 8px;
641
- background-image: linear-gradient(to bottom, #dff0d8 0px, #c8e5bc 100%);
623
+ background-image: linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);
642
624
  background-repeat: repeat-x;
643
625
  color: darkgreen;
644
626
  border: 1px solid #b2dba1;
@@ -648,19 +630,17 @@ color: #aaa;
648
630
 
649
631
  .dc-form-warning {
650
632
  padding: 8px;
651
- background-image: linear-gradient(to bottom, #fcf8e3 0px, #f8efc0 100%);
633
+ background-image: linear-gradient(to bottom, rgba(213, 143, 218, 0.1) 0, rgba(213, 143, 218, 0.5) 100%);
652
634
  background-repeat: repeat-x;
653
- color: #c84;
654
- border: 1px solid #f5e79e;
635
+ color: rgba(102, 51, 153, 1);
636
+ border: 1px solid rgba(102, 51, 153, 0.3);
655
637
  border-radius: 2px;
656
638
  margin: 2px 0;
657
639
  }
658
640
 
659
641
  .dc-form-error {
660
642
  padding: 8px;
661
- background-image: linear-gradient(to bottom, #f2dede 0px, #e7c3c3 100%);
662
- background-repeat: repeat-x;
663
- background-color: #f2dede;
643
+ background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);
664
644
  color: #a94442;
665
645
  border: 1px solid #dca7a7;
666
646
  border-radius: 2px;
@@ -771,7 +751,7 @@ margin-bottom: -3px;
771
751
  line-height: 1.2em;
772
752
  padding: 0.4em 1em;
773
753
  background: #666;
774
- margin: 0 1px 1px 0;
754
+ margin: 0 1px 0 0;
775
755
  border-left: 1px solid #ddd;
776
756
  border-right: 1px solid #ddd;
777
757
  border-radius: 4px 4px 0 0;
@@ -1524,6 +1504,6 @@ color: #669;
1524
1504
  /******* Firefox only ********/
1525
1505
  @-moz-document url-prefix() {
1526
1506
  .dc-submit {
1527
- padding: 0 2px 1px;
1507
+ /* padding: 0 2px 1px; */
1528
1508
  }
1529
1509
  }
@@ -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'
@@ -234,6 +234,7 @@ end
234
234
  # duplicating document and is subroutine of create action.
235
235
  ########################################################################
236
236
  def duplicate_document(source)
237
+ params['dup_fields'] += ',' if params['dup_fields'] # for easier field matching
237
238
  dest = {}
238
239
  source.attribute_names.each do |attribute_name|
239
240
  next if attribute_name == '_id' # don't duplicate _id
@@ -294,12 +295,11 @@ def create
294
295
  end
295
296
  else # duplicate record
296
297
  find_record
297
- params['dup_fields'] += ',' if params['dup_fields'] # for easier field matching
298
298
  new_doc = duplicate_document(@record)
299
299
  create_new_empty_record(new_doc)
300
- update_standards()
300
+ if (m = callback_method('dup_record')) then call_callback_method(m) end
301
+ update_standards
301
302
  @record.save!
302
-
303
303
  index
304
304
  end
305
305
  end
@@ -331,10 +331,8 @@ def update
331
331
  end
332
332
  end
333
333
 
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) )
334
+ if dc_user_can(DcPermission::CAN_EDIT_ALL) ||
335
+ (@record.respond_to?('created_by') && @record.created_by == session[:user_id] && dc_user_can(DcPermission::CAN_EDIT))
338
336
 
339
337
  if save_data
340
338
  params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
@@ -688,7 +686,7 @@ def create_new_empty_record(initial_data = nil) #:nodoc:
688
686
  @record = @tables.first[0].new(initial_data)
689
687
  else
690
688
  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
689
+ 1.upto(@tables.size - 2) { |i| rec = rec.send(@tables[i][1].pluralize).find(@ids[i]) } # find embedded children by ids
692
690
  @record = rec.send(@tables.last[1].pluralize).new(initial_data) # new record
693
691
  end
694
692
  end
@@ -715,8 +713,9 @@ end
715
713
  ########################################################################
716
714
  def save_journal(operation, changes = {})
717
715
  if operation == :delete
718
- @record.attributes.each {|k,v| changes[k] = v}
716
+ @record.attributes.each { |k, v| changes[k] = v }
719
717
  end
718
+ changes.except!('created_at', 'updated_at', 'created_by', 'updated_by')
720
719
 
721
720
  if (operation != :update) || changes.size > 0
722
721
  # determine site_id
@@ -740,7 +739,7 @@ end
740
739
  # Returns callback method name or nil if not defined.
741
740
  ########################################################################
742
741
  def callback_method(key) #:nodoc:
743
- data_key = key.gsub('_','-') # convert _ to -
742
+ data_key = key.gsub('_', '-') # convert _ to -
744
743
  callback = case
745
744
  when params['data'] && params['data'][data_key] then params['data'][data_key]
746
745
  # dc_ + key method is present then call it automatically
@@ -842,7 +841,7 @@ def save_data
842
841
  update_standards() if changes.size > 0 # update only if there has been some changes
843
842
  if (saved = @record.save)
844
843
  operation = @record.new_record? ? :new : :update
845
- save_journal(operation, changes)
844
+ save_journal(operation, @record.previous_changes)
846
845
  # after_save callback
847
846
  if (m = callback_method('after_save') ) then call_callback_method(m) end
848
847
  end
@@ -1006,30 +1005,34 @@ end
1006
1005
  # Process index action for normal collections.
1007
1006
  ########################################################################
1008
1007
  def process_collections #:nodoc
1009
- # If result_set is not defined on form, then it will fail. :return_to should know where to go
1008
+ # If result_set is not defined on form, then it will fail. :return_to should know where to go
1010
1009
  if @form['result_set'].nil?
1011
- process_return_to(params[:return_to] || 'reload')
1010
+ process_return_to(params[:return_to] || 'reload')
1012
1011
  return true
1013
1012
  end
1014
- # for now enable only filtering of top level documents
1013
+ # when result set is evaluated as Rails helper
1014
+ @form['result_set']['type'] ||= 'default'
1015
+ return unless @form['result_set']['type'] == 'default'
1016
+
1017
+ # for now enable only filtering of top level documents
1015
1018
  if @tables.size == 1
1016
1019
  check_filter_options()
1017
1020
  check_sort_options()
1018
1021
  end
1019
- # result set is defined by filter method in control object
1022
+ # result set is defined by filter method in control object
1020
1023
  form_filter = @form['result_set']['filter']
1021
1024
  if form_filter
1022
1025
  if respond_to?(form_filter)
1023
1026
  @records = send(form_filter)
1024
- # something went wrong. flash[] should have explanation.
1027
+ # something went wrong. flash[] should have explanation.
1025
1028
  if @records.class == FalseClass
1026
1029
  @records = []
1027
1030
  render(action: :index)
1028
1031
  return true
1029
1032
  end
1030
1033
  process_select_and_deny_fields
1031
- # pagination but only if not already set
1032
- unless (@form['table'] == 'dc_memory' or @records.options[:limit])
1034
+ # pagination but only if not already set
1035
+ unless (@form['table'] == 'dc_memory' || @records.options[:limit])
1033
1036
  per_page = (@form['result_set']['per_page'] || 30).to_i
1034
1037
  @records = @records.page(params[:page]).per(per_page) if per_page > 0
1035
1038
  end
@@ -1040,10 +1043,10 @@ def process_collections #:nodoc
1040
1043
  if @tables.size > 1
1041
1044
  rec = @tables.first[0].find(@ids.first) # top most document.id
1042
1045
  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.
1046
+ # TO DO. When field name is different then pluralized class name. Not working yet.
1044
1047
  embedded_field_name = @tables.last[0] ? @tables.last[1].pluralize : @tables.last[1]
1045
1048
  @records = rec.send(embedded_field_name) # current embedded set
1046
- # sort by order if order field is present in model
1049
+ # sort by order if order field is present in model
1047
1050
  if @tables.last[1].classify.constantize.respond_to?(:order)
1048
1051
  @records = @records.order_by('order asc')
1049
1052
  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.
@@ -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
  ########################################################################
@@ -116,6 +116,18 @@ def self.choices_for_form_name(session)
116
116
  Dir["#{session[:help_project]}/*.yml"].map { |file_name| File.basename(file_name,'.*') }.sort
117
117
  end
118
118
 
119
+ ######################################################################
120
+ # Will return choices for language select on form. Choices can be either set by dc_locales document in dc_big_table
121
+ # or can be acquired from Rails default locale
122
+ ######################################################################
123
+ def self.choices_for_locales
124
+ choices = DcBigTable.choices4('dc_locales')
125
+ return choices unless choices[0,0] == I18n.t('drgcms.error')
126
+
127
+ choices = [I18n.default_locale] + I18n.fallbacks.inject([]) { |r, e| r << e.first }
128
+ choices.map(&:to_s).uniq
129
+ end
130
+
119
131
  ######################################################################
120
132
  # Will return temp key for data saved in dc_temp file
121
133
  ######################################################################
@@ -59,5 +59,3 @@ form:
59
59
  name: dc_big_table_values
60
60
  type: embedded
61
61
  form_name: dc_big_table_value
62
- html:
63
- height: 600
@@ -48,5 +48,3 @@ form:
48
48
  name: dc_big_table_locales
49
49
  type: embedded
50
50
  form_name: dc_big_table_locale
51
- html:
52
- height: 300
@@ -79,5 +79,4 @@ form:
79
79
  type: embedded
80
80
  caption: false
81
81
  form_name: dc_part
82
- html:
83
- height: 1000
82
+ load: delay
@@ -46,5 +46,3 @@ form:
46
46
  type: embedded
47
47
  table: dc_policy_rule
48
48
  form_name: dc_policy_rule_nocms
49
- html:
50
- height: 400
@@ -20,8 +20,9 @@ index:
20
20
  type: field
21
21
  name: lang_1
22
22
  caption: drgcms.dc_help.lang
23
- field_type: text_field
23
+ field_type: text_with_select
24
24
  size: 5
25
+ eval: DcHelpControl.choices_for_locales
25
26
  default:
26
27
  eval: '@parent.session[:help_lang]'
27
28
  html:
@@ -54,6 +54,3 @@ form:
54
54
  name: dc_json_lds
55
55
  type: embedded
56
56
  table: dc_json_ld
57
- html:
58
- height: 400
59
-
@@ -32,25 +32,21 @@ form:
32
32
  10:
33
33
  name: name
34
34
  type: text_field
35
- html:
36
- size: 20
35
+ size: 20
37
36
 
38
37
  20:
39
38
  name: description
40
39
  type: text_field
41
- html:
42
- size: 20
40
+ size: 20
43
41
 
44
42
  30:
45
43
  name: div_name
46
44
  type: text_field
47
- html:
48
- size: 20
45
+ size: 20
49
46
  40:
50
47
  name: link_prepend
51
48
  type: text_field
52
- html:
53
- size: 20
49
+ size: 20
54
50
  50:
55
51
  name: dc_site_id
56
52
  type: select
@@ -64,13 +60,11 @@ form:
64
60
  type: embedded
65
61
  caption: false
66
62
  form_name: dc_menu_item
67
- html:
68
- height: 1000
63
+ load: delay
69
64
 
70
65
  tab3:
71
66
  20:
72
67
  name: css
73
68
  caption: false
74
69
  type: text_area
75
- html:
76
- size: 100x50
70
+ size: 100x50
@@ -75,7 +75,5 @@ form:
75
75
  type: embedded
76
76
  caption: false
77
77
  form_name: dc_menu_item
78
- html:
79
- height: 1000
80
-
78
+ load: delay
81
79
 
@@ -157,8 +157,7 @@ form:
157
157
  caption: false
158
158
  type: embedded
159
159
  form_name: dc_part
160
- html:
161
- height: 600
160
+ load: delay
162
161
 
163
162
  5iframe:
164
163
  10:
@@ -40,8 +40,7 @@ form:
40
40
  40:
41
41
  name: message
42
42
  type: text_area
43
- html:
44
- size: 100x5
43
+ size: 100x5
45
44
 
46
45
  50:
47
46
  name: active
@@ -51,6 +50,4 @@ form:
51
50
  name: dc_policy_rules
52
51
  type: embedded
53
52
  form_name: dc_policy_rule
54
- html:
55
- height: 400
56
-
53
+
@@ -37,14 +37,12 @@ form:
37
37
  10:
38
38
  name: name
39
39
  type: text_field
40
- html:
41
- size: 50
40
+ size: 50
42
41
 
43
42
  20:
44
43
  name: title
45
44
  type: text_field
46
- html:
47
- size: 50
45
+ size: 50
48
46
 
49
47
  30:
50
48
  name: sub_text
@@ -54,8 +52,7 @@ form:
54
52
  35:
55
53
  name: pre_display
56
54
  type: text_field
57
- html:
58
- size: 50
55
+ size: 50
59
56
  40:
60
57
  name: operation
61
58
  type: select
@@ -63,8 +60,7 @@ form:
63
60
  50:
64
61
  name: parameters
65
62
  type: text_field
66
- html:
67
- size: 50
63
+ size: 50
68
64
 
69
65
  60:
70
66
  name: display
@@ -73,8 +69,7 @@ form:
73
69
  70:
74
70
  name: captcha_type
75
71
  type: text_field
76
- html:
77
- size: 10
72
+ size: 10
78
73
 
79
74
  80:
80
75
  name: valid_from
@@ -92,8 +87,7 @@ form:
92
87
  100:
93
88
  name: css
94
89
  type: text_area
95
- html:
96
- size: 100x20
90
+ size: 100x20
97
91
 
98
92
  110:
99
93
  name: active
@@ -103,8 +97,8 @@ form:
103
97
  name: js
104
98
  type: text_area
105
99
  caption: false
100
+ size: 100x50
106
101
  html:
107
- size: 100x50
108
102
  style: 'font-family:courier;'
109
103
  tab3:
110
104
  20:
@@ -112,13 +106,13 @@ form:
112
106
  caption: false
113
107
  type: embedded
114
108
  form_name: dc_poll_item
115
- html:
116
- height: 800
109
+ load: delay
110
+
117
111
  tab4:
118
112
  10:
119
113
  name: form
120
114
  caption: false
121
115
  type: text_area
116
+ size: 100x50
122
117
  html:
123
- size: 100x50
124
118
  style: 'font-family:courier;'
data/app/forms/dc_seo.yml CHANGED
@@ -29,5 +29,4 @@ form:
29
29
  help: helpers.help.dc_seo.dc_json_lds
30
30
  type: embedded
31
31
  table: dc_json_ld
32
- html:
33
- height: 600
32
+ load: delay
@@ -63,8 +63,7 @@ form:
63
63
  type: embedded
64
64
  caption: false
65
65
  form_name: dc_simple_menu_item
66
- html:
67
- height: 800
66
+ load: delay
68
67
 
69
68
  tab3:
70
69
  20:
@@ -132,8 +132,7 @@ form:
132
132
  type: text_area
133
133
  size: 130x40
134
134
 
135
- 5permissions:
136
-
135
+ 5permissions:
137
136
  10:
138
137
  name: inherit_policy
139
138
  type: select
@@ -145,6 +144,8 @@ form:
145
144
  type: embedded
146
145
  caption: false
147
146
  form_name: dc_policy
147
+ load: delay
148
+
148
149
  6parts:
149
150
  10:
150
151
  name: dc_parts
@@ -345,7 +345,7 @@ def dc_help_for_tab(tab)
345
345
  label, help = dc_label_help(field.last)
346
346
  next if help.blank?
347
347
 
348
- html << %(<div class="help-field"><div class="help-label">#{label}</div><div class="help-text">#{help}</div></div>)
348
+ html << %(<div class="help-field"><div class="help-label">#{label}</div><div class="help-text">#{help.gsub("\n",'<br>')}</div></div>)
349
349
  end
350
350
  html
351
351
  end
@@ -138,10 +138,10 @@ def dc_actions_for_form(position)
138
138
  actions = actions.to_a.sort { |x, y| x[0] <=> y[0] }
139
139
  # Add spinner to the beginning
140
140
  html = %Q[<span class="dc-spinner">#{fa_icon('spinner lg spin')}</span><ul class="dc-menu #{position}">]
141
-
141
+
142
142
  actions.each do |key, options|
143
143
  session[:form_processing] = "form:actions: #{key} #{options}"
144
- next if options.nil? # yes it happends
144
+ next if options.nil? # yes it happens
145
145
  parms = @parms.clone
146
146
  if options.class == String
147
147
  next if @form['readonly'] and !options.match(/back|close/)
@@ -307,13 +307,13 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
307
307
  group_count = options['group'] || 1
308
308
  group_option = options['group'] || 1
309
309
  end
310
- #
310
+
311
311
  html << if labels_pos == 'top'
312
- %Q[
312
+ %(
313
313
  <div class="dc-form-label-top dc-color-#{odd_even} dc-align-left" title="#{help}">
314
314
  <label for="record_#{options['name']}">#{label} </label>
315
315
  <div id="td_record_#{options['name']}">#{field_html}</div>
316
- </div> ]
316
+ </div> )
317
317
  else
318
318
  # no label
319
319
  if dc_dont?(options['caption'])
@@ -326,13 +326,14 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
326
326
  else
327
327
  label_width = 14
328
328
  data_width = 85
329
- end
330
- %Q[
329
+ end
330
+ help.gsub!('<br>',"\n") if help.present?
331
+ %(
331
332
  <div class="dc-form-label dc-color-#{odd_even} dc-align-#{labels_pos} dc-width-#{label_width}" title="#{help}">
332
333
  <label for="record_#{options['name']}">#{label} </label>
333
334
  </div>
334
335
  <div id="td_record_#{options['name']}" class="dc-form-field dc-color-#{odd_even} dc-width-#{data_width}">#{field_html}</div>
335
- ]
336
+ )
336
337
  end
337
338
  # check if group end
338
339
  if (group_count -= 1) == 0
@@ -37,7 +37,7 @@ def dc_script_action(yaml)
37
37
  # data = {'request' => 'script', 'script' => yaml['js'] || yaml['script'] }
38
38
  # %Q[<li class="dc-link-ajax with-link dc-animate">#{ dc_link_to(yaml['caption'], yaml['icon'], '#', data: data ) }</li>]
39
39
  icon = dc_icon_for_link yaml['icon']
40
- data = %Q[data-request="script" data-script="#{yaml['js'] || yaml['script']}"]
40
+ data = %(data-request="script" data-script="#{yaml['js'] || yaml['script']}" data-url="script")
41
41
  %Q[<li class="dc-link-ajax dc-animate" #{data}>#{icon} #{ t(yaml['caption'],yaml['caption']) }</li>]
42
42
  end
43
43
 
@@ -182,7 +182,7 @@ end
182
182
  # Returns:
183
183
  # String : HTML code for action
184
184
  ############################################################################
185
- def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
185
+ def dc_link_ajax_window_submit_action(yaml, record = nil, action_active = true)
186
186
  parms = {}
187
187
  caption = yaml['caption'] || yaml['text']
188
188
  caption = caption ? t("#{caption.downcase}", caption) : nil
@@ -241,7 +241,7 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
241
241
  data-request="#{request}" title="#{yaml['title']}">#{icon}#{caption}</li>]
242
242
 
243
243
  elsif yaml['type'] == 'link' # link button
244
- clas = "dc-link dc-animate"
244
+ clas = "dc-link plus-link dc-animate"
245
245
  link = dc_link_to(caption, yaml['icon'], parms, yaml['html'] )
246
246
  %Q[<li class="#{clas}">#{action_active ? link : caption}</li>]
247
247
 
@@ -84,7 +84,6 @@ def dc_actions_for_index
84
84
  # html link options
85
85
  yhtml = yaml['html'] || {}
86
86
  yhtml['title'] = yaml['title'] if yaml['title']
87
-
88
87
  code = case
89
88
  # sort
90
89
  when action == 'sort' then
@@ -113,9 +112,14 @@ def dc_actions_for_index
113
112
  caption
114
113
 
115
114
  # new
116
- when action == 'new' then
115
+ when action == 'new' then
117
116
  caption = yaml['caption'] || 'drgcms.new'
118
- dc_link_to(caption,'plus', url, yhtml )
117
+ html << "<li class=\"dc-link plus-link dc-animate\">#{dc_link_to(caption, 'plus', url, yhtml )}</li>"
118
+ next
119
+
120
+ when action == 'close' then
121
+ html << %(<li class="dc-link dc-animate" onclick="window.close();"'>#{fa_icon('close')} #{t('drgcms.close')}</li>)
122
+ next
119
123
 
120
124
  # menu
121
125
  when action == 'menu' then
@@ -598,4 +602,16 @@ def dc_define_standard_actions(actions_params, standard)
598
602
  actions
599
603
  end
600
604
 
605
+ ############################################################################
606
+ # When result set is to be drawn by Rails helper method.
607
+ ############################################################################
608
+ def dc_process_result_set_method
609
+ method = @form['result_set']['eval']
610
+ if respond_to?(method)
611
+ send method
612
+ else
613
+ I18n.t('drgcms.no_method', method: method)
614
+ end
615
+ end
616
+
601
617
  end
@@ -288,7 +288,7 @@ def dc_edit_title
288
288
  else
289
289
  # concatenate title
290
290
  c = (@form['readonly'] ? t('drgcms.show') : t('drgcms.edit')) + " : "
291
- c << (@form['title'] ? t( @form['title'], @form['title'] ) : t_tablename(@form['table'])) + ' : '
291
+ c << (@form['title'].class == String ? t( @form['title'], @form['title'] ) : t_tablename(@form['table'])) + ' : '
292
292
  title = (title and title['field']) ? title['field'] : @form['form']['edit_title']
293
293
  dc_deprecate('form:edit_title will be deprecated. Use form:title:field instead.') if @form['form']['edit_title']
294
294
 
@@ -456,19 +456,47 @@ end
456
456
  def dc_error_messages_for(doc)
457
457
  return '' unless doc && doc.errors.any?
458
458
 
459
- msgs = ''
460
- doc.errors.each do |error|
459
+ msgs = doc.errors.inject('') do |r, error|
461
460
  label = t("helpers.label.#{decamelize_type(doc.class)}.#{error.attribute}", error.attribute)
462
- msgs << "<li>#{label} : #{error.message}</li>"
461
+ r << "<li>#{label} : #{error.message}</li>"
463
462
  end
464
-
465
- c = <<eot
463
+
464
+ html = <<eot
466
465
  <div class="dc-form-error">
467
466
  <h2>#{t('drgcms.errors_no')} #{doc.errors.size}</h2>
468
467
  <ul>#{msgs}</ul>
469
468
  </div>
470
469
  eot
471
- c.html_safe
470
+ html.html_safe
471
+ end
472
+
473
+ ####################################################################
474
+ # Returns warning messages if any set in a model.
475
+ #
476
+ # When warnings array is added to model its content can be written on top of the form.
477
+ #
478
+ # Parameters:
479
+ # [doc] Document. Document record which will be checked for errors.
480
+ #
481
+ # Returns:
482
+ # String. HTML code formatted for display.
483
+ ####################################################################
484
+ def dc_warning_messages_for(doc)
485
+ return ''
486
+ return '' unless doc && doc.respond_to?(:warnings)
487
+
488
+ msgs = doc.warnings.inject('') do |r, error|
489
+ label = t("helpers.label.#{decamelize_type(doc.class)}.#{error.attribute}", error.attribute)
490
+ msgs << "<li>#{label} : #{error.message}</li>"
491
+ end
492
+
493
+ html = <<eot
494
+ <div class="dc-form-warning">
495
+ <h2>#{t('drgcms.warnings_no')} #{doc.warnings.size}</h2>
496
+ <ul>#{msgs}</ul>
497
+ </div>
498
+ eot
499
+ html.html_safe
472
500
  end
473
501
 
474
502
  ####################################################################
@@ -78,10 +78,10 @@ class DcBigTable
78
78
  ########################################################################
79
79
  # Will return possible choices for specified key prepared for usega in select input field.
80
80
  ########################################################################
81
- def self.choices4(key, site, locale=nil)
81
+ def self.choices4(key, site = nil, locale = nil)
82
82
  result = []
83
83
  choices = find_by(key: key, site: site)
84
- choices = find_by(key: key, site: nil) if choices.nil?
84
+ choices = find_by(key: key, site: nil) if site && choices.nil?
85
85
  if choices
86
86
  choices.dc_big_table_values.each do |choice|
87
87
  description = choice.description
@@ -119,7 +119,7 @@ def self.get_filter_field(parent)
119
119
  return '' if field.nil? && filter['input'].nil?
120
120
 
121
121
  saved_readonly = parent.form['readonly']
122
- parent.form['readonly'] = nil # must be
122
+ parent.form['readonly'] = false # must be
123
123
  field ||= {}
124
124
  # If field has choices available in labels, use them. This is most likely select input field.
125
125
  if field['name']
@@ -146,24 +146,24 @@ def self.get_filter_field(parent)
146
146
  # remove if present
147
147
  field['with_new'] = nil if field['with_new']
148
148
  # create input field object
149
- klas_string = field['type'].camelize
150
- klas = DrgcmsFormFields::const_get(klas_string) rescue nil
151
- parent.form['readonly'] = saved_readonly
152
- return '' if klas.nil?
153
-
149
+ html = ''
150
+ klass_string = field['type'].camelize
151
+ klass = DrgcmsFormFields::const_get(klass_string) rescue nil
154
152
  # return data from object and create html code to display field
155
- object = klas.new(parent, nil, field).render rescue nil
156
- # Error. Forget filter and return
157
- if object.nil?
158
- parent.session[ parent.form['table'] ][:filter] = nil
159
- return ''
153
+ if klass
154
+ if drg_field = klass.new(parent, nil, field).render rescue nil
155
+ js = drg_field.js.blank? ? '' : parent.javascript_tag(drg_field.js)
156
+ html = %(<li class="no-background">
157
+ <span class="filter_field" data-url="#{url}">#{drg_field.html}
158
+ #{parent.fa_icon('search lg', class: 'record_filter_field_icon')}
159
+ #{js}</span></li>)
160
+ else
161
+ # Error. Forget filter
162
+ parent.session[ parent.form['table'] ][:filter] = nil
163
+ end
160
164
  end
161
- js = object.js.blank? ? '' : parent.javascript_tag(object.js)
162
- %(<li class="no-background">
163
- <span class="filter_field" data-url="#{url}">#{object.html}
164
- #{parent.fa_icon('search lg', class: 'record_filter_field_icon')}
165
- #{js}</span>
166
- </li>)
165
+ parent.form['readonly'] = saved_readonly
166
+ html
167
167
  end
168
168
 
169
169
  ######################################################################
@@ -137,4 +137,11 @@ def self.prepare(key:, clear: nil)
137
137
  self.where(key: key)
138
138
  end
139
139
 
140
+ ########################################################################
141
+ # Order data by new key. Will update order field with values from new field
142
+ ########################################################################
143
+ def self.reorder_by(key, new_order)
144
+ self.where(key: key).each { |doc| doc.order = data[key]; doc.save }
145
+ end
146
+
140
147
  end
@@ -31,12 +31,17 @@ module DrgcmsFormFields
31
31
  # * +type:+ comment (required)
32
32
  # * +caption:+ Caption text written in label place. If set to false comment
33
33
  # will occupy whole row. (required)
34
- #
34
+ # * +html:+ Optional html attributes will be added to div surrounding the comment.
35
+ #
35
36
  # Form example:
36
37
  # 30:
37
38
  # type: comment
38
39
  # text: myapp.comment_text
39
40
  # caption: false
41
+ # html:
42
+ # style: 'color: red'
43
+ # class: some_class
44
+ # id: some_id
40
45
  ###########################################################################
41
46
  class Comment < DrgcmsField
42
47
 
@@ -45,7 +50,11 @@ class Comment < DrgcmsField
45
50
  ###########################################################################
46
51
  def render
47
52
  comment = @yaml['comment'] || @yaml['text']
48
- @html << "<div class=\"dc-comment\">#{t(comment, comment).gsub("\n",'<br>')}</div>"
53
+ @yaml['html'] ||= {}
54
+ @yaml['html']['class'] = 'dc-comment ' + @yaml['html']['class'].to_s
55
+ html = @yaml['html'].inject('') { |r, e| r << %( #{e[0]}="#{e[1]}") }
56
+
57
+ @html << %(<div #{html}>#{t(comment, comment).gsub("\n",'<br>')}</div>)
49
58
  self
50
59
  end
51
60
  end
@@ -144,8 +144,7 @@ end
144
144
  def add_view_code
145
145
  return '' if (data = @record.send(@yaml['name'])).blank?
146
146
 
147
- ar = @yaml['view'].split(/\ |\,/).delete_if {|e| e.blank?}
148
- table, form_name = *ar
147
+ table, form_name = @yaml['view'].split(/\ |\,/).delete_if { |e| e.blank? }
149
148
  url = @parent.url_for(controller: :cmsedit, id: data, action: :edit, table: table, form_name: form_name, readonly: true, window_close: 1 )
150
149
  icon = @parent.fa_icon('eye')
151
150
  %(<span class="dc-window-open" data-url="#{url}">#{icon}</span>)
@@ -158,9 +157,9 @@ def ro_standard
158
157
  value = @record.respond_to?(@yaml['name']) ? @record.send(@yaml['name']) : nil
159
158
  return self if value.blank?
160
159
 
160
+ html = ''
161
161
  choices = get_choices()
162
162
  if value.class == Array # multiple choices
163
- html = ''
164
163
  value.each do |element|
165
164
  choices.each do |choice|
166
165
  if choice.to_s == element.to_s
@@ -169,17 +168,17 @@ def ro_standard
169
168
  end
170
169
  end
171
170
  end
172
- return super(html)
173
171
  else
174
172
  choices.each do |choice|
175
173
  if choice.class == Array
176
- return super(choice.first) if choice.last.to_s == value.to_s
174
+ (html = choice.first; break) if choice.last.to_s == value.to_s
177
175
  else
178
- return super(choice) if choice.to_s == value.to_s
176
+ (html = choice; break) if choice.to_s == value.to_s
179
177
  end
180
178
  end
179
+ html << add_view_code if @yaml['view']
181
180
  end
182
- super('')
181
+ super(html)
183
182
  end
184
183
 
185
184
  ###########################################################################
@@ -1,6 +1,7 @@
1
1
 
2
- <%= dc_flash_messages %>
3
- <%= dc_error_messages_for @record %>
2
+ <%= dc_flash_messages %>
3
+ <%= dc_error_messages_for @record %>
4
+ <%= dc_warning_messages_for @record %>
4
5
 
5
6
  <div class="dc-form-frame">
6
7
 
@@ -1,24 +1,27 @@
1
1
 
2
2
  <div class="dc-table-frame">
3
3
 
4
- <% unless @records.nil? %>
5
- <%= dc_background_for_result(:start) %>
6
-
7
- <%= dc_header_for_result %>
8
- <% for document in @records %>
9
- <%= dc_row_for_result(document) %>
10
- <%= dc_actions_for_result(document) %>
11
- <%= dc_columns_for_result(document) %>
12
- </div>
13
- <% end %>
14
- <% if @record_footer %>
15
- <div class="dc-result-data footer">
16
- <%= dc_actions_column_for_footer() %>
17
- <%= dc_columns_for_result(@record_footer) %>
18
- </div>
19
- <% end %>
20
-
21
- <%= dc_background_for_result(:end) %>
4
+ <% if @form['result_set']['type'] == 'method' %>
5
+ <%= dc_process_result_set_method %>
6
+ <% elsif @records %>
7
+ <%= dc_background_for_result(:start) %>
8
+ <%= dc_header_for_result %>
9
+
10
+ <% for document in @records %>
11
+ <%= dc_row_for_result(document) %>
12
+ <%= dc_actions_for_result(document) %>
13
+ <%= dc_columns_for_result(document) %>
14
+ </div>
15
+ <% end %>
16
+
17
+ <% if @record_footer %>
18
+ <div class="dc-result-data footer">
19
+ <%= dc_actions_column_for_footer() %>
20
+ <%= dc_columns_for_result(@record_footer) %>
21
+ </div>
22
+ <% end %>
23
+
24
+ <%= dc_background_for_result(:end) %>
22
25
  <% end %>
23
26
  <%= dc_filter_popup() %>
24
27
 
@@ -60,9 +60,10 @@ en:
60
60
  login: Login into CMS
61
61
  username: User name
62
62
  password: Password
63
- form_error: Error loading form #{form_name}
63
+ form_error: Error loading form %{form_name}
64
64
  img_large: Click for larger image
65
- no_class: Class %{class} not defined!
65
+ no_class: Class [%{class}] not defined!
66
+ no_method: Method (helper) [%{method}] not defined!
66
67
  img_alt_not_present: All images in body must have alternative text entered
67
68
 
68
69
  toggle_cms: Toggle CMS edit/view mode
@@ -60,9 +60,10 @@ sl:
60
60
  login: Prijava v CMS
61
61
  username: Uporabnik
62
62
  password: Geslo
63
- form_error: Napaka pri branju forme #{form_name}
63
+ form_error: Napaka pri branju forme %{form_name}
64
64
  img_large: Klik za večjo sliko
65
- no_class: Class %{class} ni definiran!
65
+ no_class: Razred (class) [%{class}] ni definiran!
66
+ no_method: Metoda (helper) [%{method}] ne obstaja!
66
67
  img_alt_not_present: Vse slike v vsebini morajo imeti vpisano nadomestno besedilo
67
68
 
68
69
  toggle_cms: Preklopi med CMS urejanjem in prikazom
@@ -984,3 +984,4 @@ sl:
984
984
  active: Podatki so aktivni
985
985
  add_schema: Dodaj strukturo
986
986
  add_error: Element %{schema} že obstaja!
987
+
@@ -23,5 +23,5 @@
23
23
 
24
24
  # drg_cms gem version
25
25
  module DrgCms #:nodoc:
26
- VERSION = '0.6.1.4'.freeze
26
+ VERSION = '0.6.1.5'.freeze
27
27
  end
data/lib/drg_cms.rb CHANGED
@@ -140,12 +140,8 @@ end
140
140
  def self.model_check(document, crash = false)
141
141
  return nil unless document.errors.any?
142
142
 
143
- msg = ""
144
- document.errors.each do |attribute, errors_array|
145
- msg << "#{attribute}: #{errors_array}\n"
146
- end
147
- #
148
- if crash and msg.size > 0
143
+ msg = document.errors.inject('') { |r, error| r << "#{error.attribute}: #{error.message}\n" }
144
+ if crash && msg.size > 0
149
145
  msg = "Validation errors in #{document.class}:\n" + msg
150
146
  pp msg
151
147
  Rails.logger.error(msg)
@@ -245,5 +241,3 @@ def self.routes
245
241
  end
246
242
 
247
243
  end
248
-
249
- DrgCms.add_patches_path(File.dirname(__FILE__) + '../app/models/drgcms_form_fields/patches')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1.4
4
+ version: 0.6.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damjan Rems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-21 00:00:00.000000000 Z
11
+ date: 2021-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails