drg_cms 0.6.1.9 → 0.6.1.11
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +35 -14
- data/app/assets/stylesheets/drg_cms/drg_cms.css +89 -26
- data/app/controllers/cmsedit_controller.rb +9 -111
- data/app/controllers/dc_application_controller.rb +97 -21
- data/app/controllers/dc_common_controller.rb +3 -17
- data/app/controls/browse_models_control.rb +3 -1
- data/app/controls/cmsedit_control.rb +5 -1
- data/app/controls/dc_report.rb +1 -1
- data/app/forms/all_options.yml +2 -0
- data/app/forms/dc_browse_models.yml +24 -2
- data/app/forms/dc_steps_template.yml +51 -0
- data/app/helpers/cms_common_helper.rb +66 -1
- data/app/helpers/cms_edit_helper.rb +228 -119
- data/app/helpers/cms_helper.rb +74 -17
- data/app/helpers/cms_index_helper.rb +40 -37
- data/app/helpers/dc_application_helper.rb +6 -27
- data/app/models/dc_journal.rb +2 -2
- data/app/models/dc_json_ld.rb +18 -41
- data/app/models/drgcms_form_fields/readonly.rb +1 -1
- data/app/models/drgcms_form_fields/select.rb +2 -2
- data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
- data/app/models/drgcms_form_fields/text_with_select.rb +1 -0
- data/app/renderers/dc_common_renderer.rb +20 -3
- data/app/views/cmsedit/_form.html.erb +19 -12
- data/app/views/cmsedit/edit.html.erb +10 -6
- data/app/views/cmsedit/index.html.erb +5 -3
- data/app/views/cmsedit/new.html.erb +9 -5
- data/app/views/dc_common/_help.html.erb +1 -0
- data/config/locales/drgcms_en.yml +5 -0
- data/config/locales/drgcms_sl.yml +5 -0
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dc5db773399698216bce4e41936d84f3e4780c1ac1a23497b755d9ddfce1102
|
4
|
+
data.tar.gz: aba467dab232ba47b20b1e00dcdc746aa9568521b8d756137c4dab40b255f795
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00c2289971583654147c8d7df3e2c1fcac20845f40381a631f290c888867db86b160910bb7643c5c54c749c671b7751de010cf53c16154a40d9be32c549eb761
|
7
|
+
data.tar.gz: c79254feaa595bb5fad752aaf943d327fa475d64b9e832bc5555d76388b4c25a286ac6f4ef1fa3acc65e122fc532ed09291a15e6623d96c80420282fca5480b5
|
@@ -67,7 +67,7 @@ update_embedded_on_tab_select = function(div_name) {
|
|
67
67
|
* Return false when confirmation is not required
|
68
68
|
*******************************************************************/
|
69
69
|
confirmation_is_cancled = function(object) {
|
70
|
-
|
70
|
+
let confirmation = object.getAttribute("data-confirm");
|
71
71
|
// if confirmation required
|
72
72
|
if (confirmation !== null) {
|
73
73
|
if (!confirm(confirmation)) {return true;}
|
@@ -81,8 +81,8 @@ confirmation_is_cancled = function(object) {
|
|
81
81
|
* methodname and depend field value to obtain new values for select field.
|
82
82
|
*******************************************************************/
|
83
83
|
update_select_depend = function(select_name, depend_name, method) {
|
84
|
-
|
85
|
-
|
84
|
+
let select_field = $('#' + select_name);
|
85
|
+
let depend_field = $('#' + depend_name);
|
86
86
|
|
87
87
|
$.ajax({
|
88
88
|
url: "/dc_common/autocomplete",
|
@@ -199,8 +199,10 @@ process_json_result = function(json) {
|
|
199
199
|
|
200
200
|
/**** update fields on form ****/
|
201
201
|
case 'record':
|
202
|
-
let name = key.replace('record_','record[') + ']';
|
203
|
-
field = $('[name="' + name + '"]');
|
202
|
+
//let name = key.replace('record_','record[') + ']';
|
203
|
+
//field = $('[name="' + name + '"]');
|
204
|
+
field = $('#' + key);
|
205
|
+
// console.log(field);
|
204
206
|
// checkbox field
|
205
207
|
if (field.is(':checkbox')) {
|
206
208
|
field.prop('checked', value);
|
@@ -258,6 +260,13 @@ process_json_result = function(json) {
|
|
258
260
|
opacity: 0, position: ['auto', 20],
|
259
261
|
closeClass: 'dc-link' });
|
260
262
|
}
|
263
|
+
// resize parent iframe if smaller then 500px to ensure popup some space
|
264
|
+
let document_height = document.body.scrollHeight;
|
265
|
+
if (document_height < 500) {
|
266
|
+
let frame = window.frameElement
|
267
|
+
if (frame === null) frame = document.body;
|
268
|
+
frame.style.height = '500px';
|
269
|
+
}
|
261
270
|
break;
|
262
271
|
|
263
272
|
/**** update div ****/
|
@@ -554,20 +563,20 @@ $(document).ready( function() {
|
|
554
563
|
*******************************************************************/
|
555
564
|
$('.dc-check-all').on('click',function(e) {
|
556
565
|
let checkboxes = $('.dc-check');
|
557
|
-
if ($(this).hasClass('
|
566
|
+
if ($(this).hasClass('mi-check_box')) {
|
558
567
|
// check all checkboxes
|
559
568
|
checkboxes.each( function() {
|
560
569
|
$(this).prop('checked', true);
|
561
570
|
$(this).parent().closest('div').addClass('dc-checked');
|
562
571
|
});
|
563
|
-
$(this).removeClass('
|
572
|
+
$(this).removeClass('mi-check_box').addClass('mi-check_square');
|
564
573
|
} else {
|
565
574
|
// uncheck all checkboxes
|
566
575
|
checkboxes.each( function() {
|
567
576
|
$(this).prop('checked', false);
|
568
577
|
$(this).parent().closest('div').removeClass('dc-checked');
|
569
578
|
});
|
570
|
-
$(this).removeClass('
|
579
|
+
$(this).removeClass('mi-check_square').addClass('mi-check_box');
|
571
580
|
}
|
572
581
|
});
|
573
582
|
|
@@ -667,11 +676,22 @@ $(document).ready( function() {
|
|
667
676
|
if (url.length < 5) return false;
|
668
677
|
|
669
678
|
// check HTML5 validations
|
670
|
-
|
671
|
-
|
672
|
-
|
679
|
+
let validate = this.getAttribute("data-validate");
|
680
|
+
if (validate == null || validate == true) {
|
681
|
+
if ($("form")[0] && !$("form")[0].checkValidity()) {
|
682
|
+
$("form")[0].reportValidity();
|
683
|
+
return false;
|
684
|
+
}
|
673
685
|
}
|
674
686
|
|
687
|
+
// update html editor fields before data serialization
|
688
|
+
let cke_elements = document.querySelectorAll(`div[id^="cke_record"]`);
|
689
|
+
cke_elements.forEach(e => {
|
690
|
+
let field_id = e.id.replace('cke_', '');
|
691
|
+
let text = CKEDITOR.instances[field_id].getData();
|
692
|
+
$('#' + field_id).val(text);
|
693
|
+
});
|
694
|
+
|
675
695
|
let data = {};
|
676
696
|
let request = this.getAttribute("data-request");
|
677
697
|
switch (request) {
|
@@ -692,7 +712,7 @@ $(document).ready( function() {
|
|
692
712
|
if (checkboxes.length > 0) {
|
693
713
|
let checked = [];
|
694
714
|
checkboxes.each( function() {
|
695
|
-
if ($(this).prop('checked')) checked.push($(this).attr("id"));
|
715
|
+
if ($(this).prop('checked')) checked.push($(this).attr("id").replace('check-', ''));
|
696
716
|
})
|
697
717
|
data['checked'] = checked;
|
698
718
|
}
|
@@ -717,7 +737,7 @@ $(document).ready( function() {
|
|
717
737
|
/*******************************************************************
|
718
738
|
* Click on filter off
|
719
739
|
*******************************************************************/
|
720
|
-
$('.mi-
|
740
|
+
$('.mi-filter_alt_off').on('click', function(e) {
|
721
741
|
let url = $(this).parents('.dc-filter').attr("data-url");
|
722
742
|
if (url.length > 5) simple_ajax_call(url);
|
723
743
|
});
|
@@ -1133,9 +1153,10 @@ $(document).ready( function() {
|
|
1133
1153
|
} else {
|
1134
1154
|
sign = '';
|
1135
1155
|
}
|
1136
|
-
// save value to
|
1156
|
+
// save value to field holding return value and trigger change event
|
1137
1157
|
var field = '#' + $(this).attr("id").slice(0,-1);
|
1138
1158
|
$(field).val(val);
|
1159
|
+
$(field).trigger("change")
|
1139
1160
|
|
1140
1161
|
// decimal part
|
1141
1162
|
if (decimals == 0) separator = '';
|
@@ -321,8 +321,9 @@ border-radius: 1px;
|
|
321
321
|
margin: -6px 0 0 16px;
|
322
322
|
}
|
323
323
|
|
324
|
-
.dc-result-submenu ul
|
324
|
+
.dc-result-submenu ul li {
|
325
325
|
text-align: left;
|
326
|
+
padding: 5px;
|
326
327
|
}
|
327
328
|
|
328
329
|
.dc-result-submenu ul li a:link, .dc-result-submenu .dc-link a:link,
|
@@ -330,7 +331,6 @@ border-radius: 1px;
|
|
330
331
|
font-size: 15px;
|
331
332
|
line-height: 18px;
|
332
333
|
font-weight: 500;
|
333
|
-
padding: 5px 10px;
|
334
334
|
color: #666;
|
335
335
|
display: inline-block;
|
336
336
|
width: 100%;
|
@@ -359,9 +359,9 @@ border-radius: 1px;
|
|
359
359
|
|
360
360
|
.dc-link-no i {
|
361
361
|
color: #bbb;
|
362
|
+
vertical-align: top;
|
362
363
|
}
|
363
364
|
|
364
|
-
|
365
365
|
.dc-result-header .dc-check-all {
|
366
366
|
font-size: 18px;
|
367
367
|
padding: 6px 0;
|
@@ -374,6 +374,7 @@ border-radius: 1px;
|
|
374
374
|
.dc-result-data .dc-link, .dc-result-data .dc-link-ajax {
|
375
375
|
background-color: transparent;
|
376
376
|
border: 0;
|
377
|
+
text-align: left;
|
377
378
|
}
|
378
379
|
|
379
380
|
.dc-result-data .dc-link, .dc-result-data .dc-link a, .dc-result-data .dc-link-ajax {
|
@@ -445,6 +446,12 @@ display: inline-table;
|
|
445
446
|
cursor: pointer;
|
446
447
|
filter: none;
|
447
448
|
}
|
449
|
+
.dc-window-open:hover {
|
450
|
+
transition: 0.3s;
|
451
|
+
color: #fff;
|
452
|
+
background: rgba(44, 142, 255, 1);
|
453
|
+
cursor: pointer;
|
454
|
+
}
|
448
455
|
|
449
456
|
.dc-link:hover > i, .dc-link-ajax:hover > i, .dc-submit:hover > i {
|
450
457
|
color: #fff;
|
@@ -622,10 +629,25 @@ display: inline-table;
|
|
622
629
|
|
623
630
|
/***** FORM *****/
|
624
631
|
|
632
|
+
#dc-form-container {
|
633
|
+
display: flex;
|
634
|
+
padding-left: 4px;
|
635
|
+
}
|
636
|
+
|
637
|
+
#dc-form-left {
|
638
|
+
padding: 8px;
|
639
|
+
background-color: rgba(44, 142, 255, 0.15);;
|
640
|
+
display: none;
|
641
|
+
margin-top: 12px;
|
642
|
+
}
|
643
|
+
|
644
|
+
#dc-form-right {
|
645
|
+
flex: 1;
|
646
|
+
}
|
647
|
+
|
625
648
|
.dc-form-frame {
|
626
649
|
margin: 0px;
|
627
650
|
padding: 4px;
|
628
|
-
/*background-color: #f7f7f7;*/
|
629
651
|
}
|
630
652
|
|
631
653
|
.dc-form {
|
@@ -690,11 +712,12 @@ display: inline-table;
|
|
690
712
|
}
|
691
713
|
|
692
714
|
.dc-form-label-top {
|
693
|
-
color: #555;
|
694
715
|
text-align: right;
|
695
716
|
vertical-align: middle;
|
696
|
-
|
697
|
-
|
717
|
+
color: #555;
|
718
|
+
font-weight: 500;
|
719
|
+
line-height: 1.8em;
|
720
|
+
margin-top: 8px;
|
698
721
|
}
|
699
722
|
|
700
723
|
.dc-form-label.dc-color-odd, .dc-form-label.dc-color-even {background-color: transparent;}
|
@@ -816,6 +839,45 @@ display: flex;
|
|
816
839
|
font-weight: normal;
|
817
840
|
}
|
818
841
|
|
842
|
+
#dc-form-left #dc-steps-menu {
|
843
|
+
color: #222;
|
844
|
+
}
|
845
|
+
#dc-form-left #dc-steps-menu h2 {
|
846
|
+
font-size: 1.6em;
|
847
|
+
font-weight: 600;
|
848
|
+
border-bottom: 2px solid #444;
|
849
|
+
margin-bottom: 8px;
|
850
|
+
}
|
851
|
+
|
852
|
+
#dc-form-left #dc-steps-menu li {
|
853
|
+
filter: none;
|
854
|
+
border: none;
|
855
|
+
text-align: left;
|
856
|
+
background-color: transparent;
|
857
|
+
padding: 8px 0;
|
858
|
+
font-size: 1.1em;
|
859
|
+
}
|
860
|
+
|
861
|
+
#dc-form-left #dc-steps-menu li {
|
862
|
+
color: #222;
|
863
|
+
}
|
864
|
+
|
865
|
+
#dc-form-left #dc-steps-menu li.active {
|
866
|
+
color: #000;
|
867
|
+
font-weight: 600;
|
868
|
+
}
|
869
|
+
|
870
|
+
#dc-form-left #dc-steps-menu li.active:before {
|
871
|
+
font-family: MI;
|
872
|
+
content: '\e409';
|
873
|
+
vertical-align: middle;
|
874
|
+
margin-left: -4px;
|
875
|
+
}
|
876
|
+
|
877
|
+
#dc-form-left #dc-steps-menu .dc-link-ajax:hover {
|
878
|
+
color: rgba(44, 142, 255, 1);
|
879
|
+
}
|
880
|
+
|
819
881
|
/*** CMS toggle button */
|
820
882
|
.cms-toggle {
|
821
883
|
z-index: 1000000;
|
@@ -1125,7 +1187,7 @@ color: #000;
|
|
1125
1187
|
}
|
1126
1188
|
.iframe_embedded {
|
1127
1189
|
padding: 4px;
|
1128
|
-
|
1190
|
+
background-color: #fff;
|
1129
1191
|
border-radius: 2px;
|
1130
1192
|
border: 2px solid #666;
|
1131
1193
|
}
|
@@ -1255,8 +1317,9 @@ color: #000;
|
|
1255
1317
|
margin-right: 5px;
|
1256
1318
|
}
|
1257
1319
|
|
1258
|
-
.dc-filter .mi-
|
1320
|
+
.dc-filter .mi-filter_alt_off {
|
1259
1321
|
color: #c43;
|
1322
|
+
font-size: 20px;
|
1260
1323
|
}
|
1261
1324
|
.dc-filter i:hover {
|
1262
1325
|
color: rgba(44, 142, 255, 1);
|
@@ -1266,10 +1329,6 @@ color: #000;
|
|
1266
1329
|
padding-top: 2px;
|
1267
1330
|
}
|
1268
1331
|
|
1269
|
-
.dc-sort:hover > select {
|
1270
|
-
color: rgba(44, 142, 255, 1);
|
1271
|
-
}
|
1272
|
-
|
1273
1332
|
.dc-sort-select {
|
1274
1333
|
width: 18px;
|
1275
1334
|
background: none;
|
@@ -1403,22 +1462,24 @@ color: #000;
|
|
1403
1462
|
|
1404
1463
|
.filter-popup {
|
1405
1464
|
background-color: #fff;
|
1406
|
-
|
1465
|
+
filter: drop-shadow(2px 2px 8px #888);
|
1466
|
+
border-radius: 2px;
|
1407
1467
|
}
|
1408
1468
|
|
1409
1469
|
.filter-popup div {
|
1470
|
+
font-weight: 500;
|
1410
1471
|
padding: 5px 10px;
|
1411
1472
|
text-align: center;
|
1412
|
-
|
1413
|
-
|
1473
|
+
color: rgba(44, 142, 255, 1);
|
1474
|
+
border-bottom: 2px solid rgba(44, 142, 255, 1);
|
1414
1475
|
}
|
1415
1476
|
|
1416
1477
|
.filter-popup li {
|
1417
|
-
padding:
|
1478
|
+
padding: 5px 10px;
|
1418
1479
|
}
|
1419
1480
|
|
1420
1481
|
.filter-popup li:hover {
|
1421
|
-
background-color:
|
1482
|
+
background-color: rgba(44, 142, 255, 1);
|
1422
1483
|
color: #fff;
|
1423
1484
|
cursor: pointer;
|
1424
1485
|
}
|
@@ -1436,14 +1497,15 @@ cursor: pointer;
|
|
1436
1497
|
}
|
1437
1498
|
|
1438
1499
|
#dc-document-info-popup {
|
1439
|
-
text-align: left;
|
1440
|
-
padding: 6px;
|
1441
|
-
font-size: 0.9em;
|
1442
|
-
position:absolute;
|
1443
|
-
background-color: #fff;
|
1444
|
-
border: solid 1px #
|
1445
|
-
border-radius:
|
1446
|
-
z-index: 100;
|
1500
|
+
text-align: left;
|
1501
|
+
padding: 6px;
|
1502
|
+
font-size: 0.9em;
|
1503
|
+
position:absolute;
|
1504
|
+
background-color: #fff;
|
1505
|
+
border: solid 1px #eee;
|
1506
|
+
border-radius: 2px;
|
1507
|
+
z-index: 100;
|
1508
|
+
filter: drop-shadow(0 8px 8px #ccc);
|
1447
1509
|
}
|
1448
1510
|
|
1449
1511
|
#dc-document-info-popup div span:first-child {
|
@@ -1454,6 +1516,7 @@ z-index: 100;
|
|
1454
1516
|
}
|
1455
1517
|
#dc-document-info-popup div span:last-child {font-weight: 600;}
|
1456
1518
|
|
1519
|
+
#dc-document-info-popup i {height: initial;}
|
1457
1520
|
|
1458
1521
|
/************************** filter popup *************************/
|
1459
1522
|
#drgcms_filter {
|
@@ -196,7 +196,7 @@ def new
|
|
196
196
|
end
|
197
197
|
# new_record callback. Set default values for new record
|
198
198
|
if (m = callback_method('new_record') ) then call_callback_method(m) end
|
199
|
-
@
|
199
|
+
@form_params['action'] = 'create'
|
200
200
|
end
|
201
201
|
|
202
202
|
########################################################################
|
@@ -279,8 +279,8 @@ def create
|
|
279
279
|
flash[:info] = t('drgcms.doc_saved')
|
280
280
|
params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
|
281
281
|
return process_return_to(params[:return_to]) if params[:return_to]
|
282
|
-
|
283
|
-
@
|
282
|
+
|
283
|
+
@form_params['id'] = @record.id # must be set, for proper update link
|
284
284
|
params[:id] = @record.id # must be set, for find_record
|
285
285
|
edit
|
286
286
|
else # error
|
@@ -309,7 +309,7 @@ def edit
|
|
309
309
|
# don't do anything if return is false
|
310
310
|
return index if ret.class == FalseClass
|
311
311
|
end
|
312
|
-
@
|
312
|
+
@form_params['action'] = 'update'
|
313
313
|
render action: :edit
|
314
314
|
end
|
315
315
|
|
@@ -331,7 +331,7 @@ def update
|
|
331
331
|
|
332
332
|
if save_data
|
333
333
|
params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
|
334
|
-
@
|
334
|
+
@form_params['action'] = 'update'
|
335
335
|
# Process return_to
|
336
336
|
return process_return_to(params[:return_to]) if params[:return_to]
|
337
337
|
else
|
@@ -422,7 +422,7 @@ def destroy
|
|
422
422
|
|
423
423
|
end
|
424
424
|
|
425
|
-
@
|
425
|
+
@form_params['action'] = 'update'
|
426
426
|
render action: :edit
|
427
427
|
end
|
428
428
|
|
@@ -496,108 +496,6 @@ def user_has_permission?(permission, collection_name)
|
|
496
496
|
true
|
497
497
|
end
|
498
498
|
|
499
|
-
########################################################################
|
500
|
-
# Merges two forms when current form extends other form. Subroutine of read_drg_form.
|
501
|
-
# With a little help of https://www.ruby-forum.com/topic/142809
|
502
|
-
########################################################################
|
503
|
-
def forms_merge(hash1, hash2)
|
504
|
-
target = hash1.dup
|
505
|
-
hash2.keys.each do |key|
|
506
|
-
if hash2[key].is_a? Hash and hash1[key].is_a? Hash
|
507
|
-
target[key] = forms_merge(hash1[key], hash2[key])
|
508
|
-
next
|
509
|
-
end
|
510
|
-
target[key] = hash2[key] == '/' ? nil : hash2[key]
|
511
|
-
end
|
512
|
-
# delete keys with nil value
|
513
|
-
target.delete_if { |k, v| v.nil? }
|
514
|
-
end
|
515
|
-
|
516
|
-
########################################################################
|
517
|
-
# Extends DRGCMS form file. Extended file is processed first and then merged
|
518
|
-
# with code in this form file. Form can extend only single form file.
|
519
|
-
#
|
520
|
-
# [Parameters:]
|
521
|
-
# [extend_option] : Value of @form['extend'] option
|
522
|
-
########################################################################
|
523
|
-
def extend_drg_form(extend_option)
|
524
|
-
form_file_name = dc_find_form_file(extend_option)
|
525
|
-
@form_js << read_js_drg_form(form_file_name)
|
526
|
-
form = YAML.load_file( form_file_name )
|
527
|
-
@form = forms_merge(form, @form)
|
528
|
-
# If combined form contains tabs and fields options, merge fields into tabs
|
529
|
-
if @form['form']['tabs'] && @form['form']['fields']
|
530
|
-
@form['form']['tabs']['fields'] = @form['form']['fields']
|
531
|
-
@form['form']['fields'] = nil
|
532
|
-
end
|
533
|
-
end
|
534
|
-
|
535
|
-
########################################################################
|
536
|
-
# Include code from another DRGCMS form file. Included code is merged
|
537
|
-
# with current form file code. Form can include more than one other DRGCMS forms.
|
538
|
-
#
|
539
|
-
# [Parameters:]
|
540
|
-
# [include_option] : Value of @form['include'] option
|
541
|
-
########################################################################
|
542
|
-
def include_drg_form(include_option)
|
543
|
-
includes = include_option.class == Array ? include_option : include_option.split(/\,|\;/)
|
544
|
-
includes.each do |include_file|
|
545
|
-
form_file_name = dc_find_form_file(include_file)
|
546
|
-
@form_js << read_js_drg_form(form_file_name)
|
547
|
-
form = YAML.load_file(form_file_name)
|
548
|
-
@form = forms_merge(@form, form)
|
549
|
-
end
|
550
|
-
end
|
551
|
-
|
552
|
-
########################################################################
|
553
|
-
# Will read data from form_file_name.js if exists.
|
554
|
-
#
|
555
|
-
# [Parameters:]
|
556
|
-
# [form_file_name] : Physical form filename
|
557
|
-
########################################################################
|
558
|
-
def read_js_drg_form(form_file_name)
|
559
|
-
js_form_file_name = form_file_name.sub('.yml','.js')
|
560
|
-
File.read(js_form_file_name) rescue ''
|
561
|
-
end
|
562
|
-
|
563
|
-
########################################################################
|
564
|
-
# Read DRG form into @form object. Subroutine of check_authorization.
|
565
|
-
########################################################################
|
566
|
-
def read_drg_form
|
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] }
|
569
|
-
|
570
|
-
# split ids passed when embedded document
|
571
|
-
ids = params[:ids].to_s.strip.downcase
|
572
|
-
@ids = ids.split(';').inject([]) { |r,v| r << v }
|
573
|
-
|
574
|
-
# form_name defaults to last table specified
|
575
|
-
form_name = CmsHelper.form_param(params) || @tables.last[1]
|
576
|
-
@form_js = ''
|
577
|
-
|
578
|
-
# dynamically generated form
|
579
|
-
@form = if CmsHelper.form_param(params) == 'method'
|
580
|
-
dc_eval_class_method(params[:form_method], params)
|
581
|
-
else
|
582
|
-
form_file_name = dc_find_form_file(form_name)
|
583
|
-
@form_js = read_js_drg_form(form_file_name)
|
584
|
-
YAML.load_file(form_file_name)
|
585
|
-
end
|
586
|
-
|
587
|
-
# form includes or extends another form file
|
588
|
-
include_drg_form(@form['include']) if @form['include']
|
589
|
-
extend_drg_form(@form['extend']) if @form['extend']
|
590
|
-
@form['script'] = (@form['script'].blank? ? @form_js : @form['script'] + @form_js)
|
591
|
-
# add readonly key to form if readonly parameter is passed in url
|
592
|
-
@form['readonly'] = 1 if params['readonly'] #and %w(1 yes true).include?(params['readonly'].to_s.downcase.strip)
|
593
|
-
|
594
|
-
# !!!!!! Always use strings for key names since @parms['table'] != @parms[:table]
|
595
|
-
@parms = { 'table' => table_name, 'ids' => params[:ids], 'form_name' => form_name,
|
596
|
-
'return_to' => params['return_to'], 'edit_only' => params['edit_only'],
|
597
|
-
'readonly' => params['readonly']
|
598
|
-
}
|
599
|
-
end
|
600
|
-
|
601
499
|
############################################################################
|
602
500
|
# Load module if available. Try not to mask errors in control module
|
603
501
|
############################################################################
|
@@ -648,8 +546,7 @@ def check_authorization
|
|
648
546
|
(table.size < 3 or !dc_user_can(DcPermission::CAN_VIEW))
|
649
547
|
return render(action: 'error', locals: { error: t('drgcms.not_authorized')} )
|
650
548
|
end
|
651
|
-
|
652
|
-
return render( plain: t('drgcms.form_error') ) if @form.nil?
|
549
|
+
dc_form_read
|
653
550
|
|
654
551
|
# Permissions can be also defined on form
|
655
552
|
#TODO So far only can_view is used. Think about if using other permissions has sense
|
@@ -698,6 +595,7 @@ def update_standards(record = @record)
|
|
698
595
|
# and will be directly visible only to admins
|
699
596
|
record.dc_site_id = dc_get_site.id if record.respond_to?('dc_site_id') && record.dc_site_id.nil?
|
700
597
|
end
|
598
|
+
record.send(:set_history, self) if record.respond_to?(:set_history)
|
701
599
|
end
|
702
600
|
|
703
601
|
########################################################################
|
@@ -739,7 +637,7 @@ def callback_method(key) #:nodoc:
|
|
739
637
|
callback = case
|
740
638
|
when params['data'] && params['data'][data_key] then params['data'][data_key]
|
741
639
|
# dc_ + key method is present then call it automatically
|
742
|
-
when @form
|
640
|
+
when @form.dig('form', key) then @form['form'][key]
|
743
641
|
when respond_to?('dc_' + key) then 'dc_' + key
|
744
642
|
when params[data_key] then params[data_key]
|
745
643
|
else nil
|
@@ -114,27 +114,6 @@ def set_page_title
|
|
114
114
|
dc_add_meta_tag(:name, 'description', @page.meta_description)
|
115
115
|
end
|
116
116
|
|
117
|
-
########################################################################
|
118
|
-
# Searches forms path for file_name and returns full file name or nil if not found.
|
119
|
-
#
|
120
|
-
# @param [String] Form file name. File name can be passed as gem_name.filename. This can
|
121
|
-
# be useful when you are extending form but want to retain same name as original form
|
122
|
-
# For example. You are extending dc_user form from drg_cms gem and want to
|
123
|
-
# retain same dc_user name. This can be done by setting drg_cms.dc_user as extend option.
|
124
|
-
#
|
125
|
-
# @return [String] Form file name including path or nil if not found.
|
126
|
-
########################################################################
|
127
|
-
def dc_find_form_file(form_file)
|
128
|
-
form_path = nil
|
129
|
-
form_path, form_file = form_file.split(/\.|\//) if form_file.match(/\.|\//)
|
130
|
-
|
131
|
-
DrgCms.paths(:forms).reverse.each do |path|
|
132
|
-
f = "#{path}/#{form_file}.yml"
|
133
|
-
return f if File.exist?(f) && (form_path.nil? || path.to_s.match(/\/#{form_path}(-|\/)/i))
|
134
|
-
end
|
135
|
-
raise "Exception: Form file '#{form_file}' not found!"
|
136
|
-
end
|
137
|
-
|
138
117
|
#######################################################################
|
139
118
|
# Will render public/404.html file with some debug code includded.
|
140
119
|
#
|
@@ -833,4 +812,101 @@ def redis
|
|
833
812
|
Rails.cache.redis
|
834
813
|
end
|
835
814
|
|
815
|
+
########################################################################
|
816
|
+
# Extends DRGCMS form file. Extended file is processed first and then merged
|
817
|
+
# with code in this form file. Form can extend only single form file.
|
818
|
+
#
|
819
|
+
# [Parameters:]
|
820
|
+
# [extend_option] : Value of @form['extend'] option
|
821
|
+
########################################################################
|
822
|
+
def dc_form_extend(extend_option)
|
823
|
+
form_file_name = CmsHelper.form_file_find(extend_option)
|
824
|
+
@form_js << read_js_drg_form(form_file_name)
|
825
|
+
form = YAML.load_file( form_file_name )
|
826
|
+
@form = CmsHelper.forms_merge(form, @form)
|
827
|
+
# If combined form contains tabs and fields options, merge fields into tabs
|
828
|
+
if @form['form']['tabs'] && @form['form']['fields']
|
829
|
+
@form['form']['tabs']['fields'] = @form['form']['fields']
|
830
|
+
@form['form']['fields'] = nil
|
831
|
+
end
|
832
|
+
end
|
833
|
+
|
834
|
+
########################################################################
|
835
|
+
# Include code from another DRGCMS form file. Included code is merged
|
836
|
+
# with current form file code. Form can include more than one other DRGCMS forms.
|
837
|
+
#
|
838
|
+
# [Parameters:]
|
839
|
+
# [include_option] : Value of @form['include'] option
|
840
|
+
########################################################################
|
841
|
+
def dc_form_include(include_option)
|
842
|
+
includes = include_option.class == Array ? include_option : include_option.split(/\,|\;/)
|
843
|
+
includes.each do |include_file|
|
844
|
+
form_file_name = CmsHelper.form_file_find(include_file)
|
845
|
+
@form_js << read_js_drg_form(form_file_name)
|
846
|
+
form = YAML.load_file(form_file_name)
|
847
|
+
@form = CmsHelper.forms_merge(@form, form)
|
848
|
+
end
|
849
|
+
end
|
850
|
+
|
851
|
+
########################################################################
|
852
|
+
# Will read data from form_file_name.js if exists.
|
853
|
+
#
|
854
|
+
# [Parameters:]
|
855
|
+
# [form_file_name] : Physical form filename
|
856
|
+
########################################################################
|
857
|
+
def read_js_drg_form(form_file_name)
|
858
|
+
js_form_file_name = form_file_name.sub('.yml','.js')
|
859
|
+
File.read(js_form_file_name) rescue ''
|
860
|
+
end
|
861
|
+
|
862
|
+
########################################################################
|
863
|
+
# Read DRG form into @form object. Subroutine of check_authorization.
|
864
|
+
########################################################################
|
865
|
+
def dc_form_read
|
866
|
+
params[:table] ||= params[:t] || CmsHelper.form_param(params)
|
867
|
+
table_name = decamelize_type(CmsHelper.table_param(params).strip)
|
868
|
+
@tables = table_name.split(';').inject([]) { |r, v| r << [(v.classify.constantize rescue nil), v] }
|
869
|
+
|
870
|
+
# split ids passed when embedded document
|
871
|
+
ids = params[:ids].to_s.strip.downcase
|
872
|
+
@ids = ids.split(';').inject([]) { |r,v| r << v }
|
873
|
+
|
874
|
+
# form_name defaults to last table specified
|
875
|
+
form_name = CmsHelper.form_param(params) || @tables.last[1]
|
876
|
+
@form_js = ''
|
877
|
+
|
878
|
+
# dynamically generated form
|
879
|
+
@form = if CmsHelper.form_param(params) == 'method'
|
880
|
+
dc_eval_class_method(params[:form_method], params)
|
881
|
+
else
|
882
|
+
form_file_name = CmsHelper.form_file_find(form_name)
|
883
|
+
@form_js = read_js_drg_form(form_file_name)
|
884
|
+
YAML.load_file(form_file_name)
|
885
|
+
end
|
886
|
+
|
887
|
+
# form includes or extends another form file
|
888
|
+
dc_form_include(@form['include']) if @form['include']
|
889
|
+
dc_form_extend(@form['extend']) if @form['extend']
|
890
|
+
@form['script'] = (@form['script'].blank? ? @form_js : @form['script'] + @form_js)
|
891
|
+
# add readonly key to form if readonly parameter is passed in url
|
892
|
+
@form['readonly'] = 1 if params['readonly'] #and %w(1 yes true).include?(params['readonly'].to_s.downcase.strip)
|
893
|
+
|
894
|
+
# !!!!!! Always use strings for key names since @form_params['table'] != @form_params[:table]
|
895
|
+
@form_params = { 'table' => table_name, 'ids' => params[:ids], 'form_name' => form_name,
|
896
|
+
'return_to' => params['return_to'], 'edit_only' => params['edit_only'],
|
897
|
+
'readonly' => params['readonly'], 'window_close' => params['window_close']}
|
898
|
+
end
|
899
|
+
|
900
|
+
########################################################################
|
901
|
+
# Will search for help file and return it's full path name if found.
|
902
|
+
########################################################################
|
903
|
+
def self.find_help_file(help_file_name)
|
904
|
+
file_name = nil
|
905
|
+
DrgCms.paths(:forms).reverse.each do |path|
|
906
|
+
f = "#{path}/help/#{help_file_name}.#{I18n.locale}"
|
907
|
+
file_name = f and break if File.exist?(f)
|
908
|
+
end
|
909
|
+
file_name
|
910
|
+
end
|
911
|
+
|
836
912
|
end
|