drg_cms 0.7.0.2 → 0.7.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +110 -35
- data/app/assets/javascripts/drg_cms/jquery.bpopup.js +372 -0
- data/app/assets/javascripts/drg_cms_application.js +1 -1
- data/app/assets/javascripts/drg_cms_cms.js +1 -1
- data/app/assets/stylesheets/drg_cms/drg_cms.css +126 -36
- data/app/assets/stylesheets/drg_cms/select-multiple.css +6 -7
- data/app/controllers/cmsedit_controller.rb +78 -47
- data/app/controllers/dc_application_controller.rb +22 -25
- data/app/controllers/dc_common_controller.rb +9 -6
- data/app/controllers/dc_main_controller.rb +0 -1
- data/app/controls/{dc_category_control.rb → dc_gallery_control.rb} +15 -30
- data/app/controls/dc_image_control.rb +180 -0
- data/app/controls/dc_page_control.rb +3 -3
- data/app/controls/dc_poll_result_control.rb +38 -39
- data/app/controls/dc_report.rb +9 -4
- data/app/controls/dc_setup_control.rb +53 -0
- data/app/controls/design_element_settings_control.rb +88 -37
- data/app/forms/all_options.yml +20 -9
- data/app/forms/cms_menu.yml +14 -2
- data/app/forms/dc_gallery.yml +1 -1
- data/app/forms/dc_image.yml +122 -0
- data/app/forms/dc_image_search.yml +72 -0
- data/app/forms/dc_page.yml +11 -8
- data/app/forms/dc_poll.yml +2 -1
- data/app/forms/dc_poll_result.yml +10 -7
- data/app/forms/dc_setup.yml +45 -0
- data/app/forms/dc_steps_template.yml +6 -2
- data/app/helpers/cms_common_helper.rb +36 -24
- data/app/helpers/cms_edit_helper.rb +26 -33
- data/app/helpers/cms_helper.rb +29 -12
- data/app/helpers/cms_index_helper.rb +109 -80
- data/app/helpers/dc_application_helper.rb +108 -86
- data/app/helpers/dc_image_helper.rb +127 -0
- data/app/models/concerns/dc_policy_rule_concern.rb +1 -1
- data/app/models/concerns/dc_user_concern.rb +13 -5
- data/app/models/dc_big_table.rb +1 -1
- data/app/models/dc_category.rb +12 -0
- data/app/models/dc_design.rb +5 -4
- data/app/models/dc_filter.rb +24 -27
- data/app/models/dc_image.rb +237 -0
- data/app/models/dc_internals.rb +5 -9
- data/app/models/dc_memory.rb +2 -2
- data/app/models/dc_policy_role.rb +8 -8
- data/app/models/dc_setup.rb +111 -0
- data/app/models/drgcms_form_fields/datetime_picker.rb +1 -1
- data/app/models/drgcms_form_fields/drgcms_field.rb +9 -26
- data/app/models/drgcms_form_fields/embedded.rb +28 -17
- data/app/models/drgcms_form_fields/journal_diff.rb +2 -2
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +88 -76
- data/app/models/drgcms_form_fields/select.rb +41 -19
- data/app/models/drgcms_form_fields/text_with_select.rb +5 -9
- data/app/renderers/dc_big_menu_renderer.rb +18 -20
- data/app/renderers/dc_gallery_renderer.rb +10 -4
- data/app/renderers/dc_menu_renderer.rb +21 -58
- data/app/renderers/dc_page_renderer.rb +7 -7
- data/app/renderers/dc_poll_renderer.rb +13 -12
- data/app/renderers/dc_simple_menu_renderer.rb +1 -1
- data/app/views/cmsedit/_edit_stuff.html.erb +4 -1
- data/app/views/cmsedit/edit.html.erb +1 -1
- data/app/views/cmsedit/index.html.erb +1 -1
- data/app/views/cmsedit/new.html.erb +1 -0
- data/config/locales/drgcms_en.yml +22 -2
- data/config/locales/drgcms_sl.yml +25 -6
- data/config/locales/models_en.yml +50 -1
- data/config/locales/models_sl.yml +60 -1
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +40 -27
- data/lib/generators/convert_to_ar/USAGE +8 -0
- data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +32 -14
- metadata +19 -10
- data/app/assets/javascripts/drg_cms/jquery.bpopup.min.js +0 -7
- data/app/views/layouts/__cmsedit.html.erb +0 -16
@@ -35,12 +35,10 @@ module CmsIndexHelper
|
|
35
35
|
def dc_actions_for_index
|
36
36
|
@js = @form['script'] || @form['js'] || ''
|
37
37
|
@css = @form['css'] || ''
|
38
|
-
|
39
|
-
|
40
|
-
actions = @form['index']['actions']
|
38
|
+
actions = @form.dig('index', 'actions')
|
41
39
|
return '' if actions.blank?
|
42
40
|
|
43
|
-
std_actions = {2 => 'new', 3 => 'sort', 4 => 'filter' }
|
41
|
+
std_actions = { 2 => 'new', 3 => 'sort', 4 => 'filter' }
|
44
42
|
std_actions.delete(2) if @form['readonly']
|
45
43
|
|
46
44
|
if actions.class == String
|
@@ -51,22 +49,16 @@ def dc_actions_for_index
|
|
51
49
|
end
|
52
50
|
|
53
51
|
html_left, html_right = '', ''
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
only_actions.sort_by!(&:first)
|
58
|
-
only_actions.each do |key, options|
|
52
|
+
# remove settings and sort
|
53
|
+
actions_only = actions.inject([]) { |r, action| r << action if action.first.class == Integer; r }.sort_by(&:first)
|
54
|
+
actions_only.each do |key, options|
|
59
55
|
session[:form_processing] = "index:actions: #{key}=#{options}"
|
60
56
|
next if options.nil? # must be
|
61
57
|
|
62
|
-
url
|
63
|
-
yaml
|
58
|
+
url = @form_params.clone
|
59
|
+
yaml = options.class == String ? { 'type' => options } : options # sinle action. Simulate type parameter
|
64
60
|
action = yaml['type'].to_s.downcase
|
65
|
-
|
66
|
-
dc_deprecate "action: url will be deprecated. Use action: link in index: actions! Form #{params['form_name']}"
|
67
|
-
action = 'link'
|
68
|
-
end
|
69
|
-
# if return_to is present link directly to URL
|
61
|
+
|
70
62
|
if action == 'link' && yaml['url']
|
71
63
|
url = yaml['url']
|
72
64
|
else
|
@@ -89,10 +81,8 @@ def dc_actions_for_index
|
|
89
81
|
choices << [ t("helpers.label.#{@form['table']}.#{e}"), e ]
|
90
82
|
end
|
91
83
|
end
|
92
|
-
data =
|
93
|
-
|
94
|
-
data = mi_icon('sort') + select('sort', 'sort', choices, { include_blank: true }, { class: 'dc-sort-select',
|
95
|
-
'data-table' => @form['table'], 'data-form' => CmsHelper.form_param(params)} )
|
84
|
+
data = mi_icon('sort') + select('sort', 'sort', choices, { include_blank: true },
|
85
|
+
{ class: 'dc-sort-select', 'data-table': @form['table'], 'data-form': CmsHelper.form_param(params)} )
|
96
86
|
html_right << %(<li title="#{t('drgcms.sort')}"><div class="dc-sort">#{data}</li>)
|
97
87
|
|
98
88
|
# filter
|
@@ -139,12 +129,17 @@ def dc_actions_for_index
|
|
139
129
|
parms['id'] = params[:ids]
|
140
130
|
parms['table'] = @form['table']
|
141
131
|
dc_link_to( caption, 'reorder', parms, method: :delete )
|
142
|
-
=end
|
132
|
+
=end
|
133
|
+
|
143
134
|
when action == 'script'
|
144
135
|
html_left << dc_script_action(options)
|
145
136
|
|
146
137
|
when action == 'field'
|
147
|
-
|
138
|
+
if options['position'] && options['position'] == 'left'
|
139
|
+
html_left << dc_field_action(yaml)
|
140
|
+
else
|
141
|
+
html_right << dc_field_action(yaml)
|
142
|
+
end
|
148
143
|
|
149
144
|
when %w(ajax link window popup submit).include?(action)
|
150
145
|
html_left << dc_link_ajax_window_submit_action(options, nil)
|
@@ -263,9 +258,16 @@ def dc_actions_column
|
|
263
258
|
actions.delete('standard')
|
264
259
|
end
|
265
260
|
# check must be first action
|
266
|
-
has_check =
|
267
|
-
|
268
|
-
|
261
|
+
has_check = has_action_type('check', actions)
|
262
|
+
# when readonly only check and show are allowed
|
263
|
+
if @form['readonly']
|
264
|
+
width = has_action_type('show', actions) ? 22 : 0
|
265
|
+
width += 22 if has_check
|
266
|
+
else
|
267
|
+
width = actions.size == 1 ? 22 : 44
|
268
|
+
width = 22 if actions.size > 2 && !has_check
|
269
|
+
end
|
270
|
+
|
269
271
|
[actions, width, has_check]
|
270
272
|
end
|
271
273
|
|
@@ -275,7 +277,7 @@ end
|
|
275
277
|
def dc_actions_column_for_footer
|
276
278
|
return '' unless @form['result_set']['actions']
|
277
279
|
|
278
|
-
ignore, width, ignore2 = dc_actions_column
|
280
|
+
ignore, width, ignore2 = dc_actions_column()
|
279
281
|
%(<div class="dc-result-actions" style="width: #{width}px;"></div>).html_safe
|
280
282
|
end
|
281
283
|
|
@@ -284,10 +286,10 @@ end
|
|
284
286
|
############################################################################
|
285
287
|
def dc_actions_for_result(document)
|
286
288
|
actions = @form['result_set']['actions']
|
287
|
-
return '' if actions.nil?
|
289
|
+
return '' if actions.nil? #|| @form['readonly']
|
288
290
|
|
289
291
|
actions, width, has_check = dc_actions_column()
|
290
|
-
has_sub_menu = actions.size > 2
|
292
|
+
has_sub_menu = actions.size > 2 #|| (has_check && actions.size > 1)
|
291
293
|
|
292
294
|
main_menu, sub_menu = '', ''
|
293
295
|
actions.sort_by(&:first).each do |num, action|
|
@@ -296,41 +298,48 @@ def dc_actions_for_result(document)
|
|
296
298
|
# if single definition simulate type parameter
|
297
299
|
yaml = action.class == String ? { 'type' => action } : action
|
298
300
|
|
301
|
+
next if @form['readonly'] && !%[show check].include?(yaml['type'])
|
302
|
+
|
299
303
|
if %w(ajax link window popup submit).include?(yaml['type'])
|
300
304
|
@record = document # otherwise document fields can't be used as parameters
|
301
305
|
html = dc_link_ajax_window_submit_action(yaml, document)
|
302
306
|
else
|
303
307
|
caption = dc_get_caption(yaml) || "drgcms.#{yaml['type']}"
|
304
|
-
title = t(yaml['help'] || caption
|
308
|
+
title = t(yaml['title'] || yaml['help'] || caption)
|
305
309
|
caption = has_sub_menu ? t(caption, '') : nil
|
306
|
-
html
|
310
|
+
html = '<li>'
|
307
311
|
html << case yaml['type']
|
308
|
-
when 'check'
|
312
|
+
when 'check'
|
309
313
|
main_menu << '<li>' + check_box_tag("check-#{document.id}", false, false, { class: 'dc-check' }) + '</li>'
|
310
314
|
next
|
311
315
|
|
312
|
-
when 'edit'
|
316
|
+
when 'edit'
|
313
317
|
parms['action'] = 'edit'
|
314
318
|
parms['id'] = document.id
|
315
|
-
|
319
|
+
parms['readonly'] = yaml['readonly']
|
320
|
+
icon = yaml['icon'] || 'edit-o'
|
321
|
+
dc_link_to( caption, icon, parms, title: title )
|
316
322
|
|
317
|
-
when 'show'
|
323
|
+
when 'show'
|
318
324
|
parms['action'] = 'show'
|
319
325
|
parms['id'] = document.id
|
320
326
|
parms['readonly'] = true
|
321
|
-
|
327
|
+
icon = yaml['icon'] || 'eye-o'
|
328
|
+
dc_link_to( caption, icon, parms, title: title )
|
322
329
|
|
323
|
-
when 'duplicate'
|
330
|
+
when 'duplicate'
|
324
331
|
parms['id'] = document.id
|
325
332
|
# duplicate string will be added to these fields.
|
326
333
|
parms['dup_fields'] = yaml['dup_fields']
|
327
334
|
parms['action'] = 'create'
|
328
|
-
|
335
|
+
icon = yaml['icon'] || 'content_copy-o'
|
336
|
+
dc_link_to( caption, icon, parms, data: { confirm: t('drgcms.confirm_dup') }, method: :post, title: title )
|
329
337
|
|
330
|
-
when 'delete'
|
338
|
+
when 'delete'
|
331
339
|
parms['action'] = 'destroy'
|
332
340
|
parms['id'] = document.id
|
333
|
-
|
341
|
+
icon = yaml['icon'] || 'delete-o'
|
342
|
+
dc_link_to( caption, icon, parms, data: { confirm: t('drgcms.confirm_delete') }, method: :delete, title: title )
|
334
343
|
|
335
344
|
else # error.
|
336
345
|
yaml['type'].to_s
|
@@ -362,7 +371,7 @@ end
|
|
362
371
|
############################################################################
|
363
372
|
def dc_header_for_result
|
364
373
|
html = '<div class="dc-result-header">'
|
365
|
-
if @form['result_set']['actions']
|
374
|
+
if @form['result_set']['actions'] #&& !@form['readonly']
|
366
375
|
ignore, width, has_check = dc_actions_column()
|
367
376
|
check_all = fa_icon('check-box-o', class: 'dc-check-all') if has_check
|
368
377
|
html << %(<div class="dc-result-actions" style="width:#{width}px;">#{check_all}</div>)
|
@@ -436,7 +445,7 @@ end
|
|
436
445
|
############################################################################
|
437
446
|
# Formats value according to format supplied or data type. There is lots of things missing here.
|
438
447
|
############################################################################
|
439
|
-
def dc_format_value(value, format=nil)
|
448
|
+
def dc_format_value(value, format = nil)
|
440
449
|
return '' if value.nil?
|
441
450
|
|
442
451
|
klass = value.class.to_s
|
@@ -444,7 +453,7 @@ def dc_format_value(value, format=nil)
|
|
444
453
|
|
445
454
|
format = format.to_s.upcase
|
446
455
|
if format[0] == 'N'
|
447
|
-
return '' if
|
456
|
+
return '' if format.match('Z') && value.to_s.to_f == 0.0
|
448
457
|
|
449
458
|
format.gsub!('Z', '')
|
450
459
|
dec = format[1].blank? ? nil : format[1].to_i
|
@@ -479,7 +488,7 @@ def dc_columns_for_result(document)
|
|
479
488
|
|
480
489
|
# convert shortcut to hash
|
481
490
|
v = {'name' => v} if v.class == String
|
482
|
-
begin
|
491
|
+
#begin
|
483
492
|
# as Array (footer)
|
484
493
|
value = if document.class == Array
|
485
494
|
dc_format_value(document[index], v['format']) if document[index]
|
@@ -491,17 +500,19 @@ def dc_columns_for_result(document)
|
|
491
500
|
dc_process_column_eval(v, document)
|
492
501
|
# as field
|
493
502
|
elsif document.respond_to?(v['name'])
|
494
|
-
dc_format_value(document.send(
|
503
|
+
dc_format_value(document.send(v['name']), v['format'])
|
504
|
+
elsif respond_to?(v['name'])
|
505
|
+
dc_format_value(send(v['name'], document), v['format'])
|
495
506
|
else
|
496
507
|
"??? #{v['name']}"
|
497
508
|
end
|
498
|
-
rescue Exception => e
|
499
|
-
|
500
|
-
|
501
|
-
end
|
509
|
+
#rescue Exception => e
|
510
|
+
# dc_log_exception(e, 'dc_columns_for_result')
|
511
|
+
# value = '!!!Error'
|
512
|
+
#end
|
502
513
|
html << '<div class="spacer"></div>'
|
503
514
|
# set class
|
504
|
-
clas = dc_style_or_class(nil, v['td_class'], value, document)
|
515
|
+
clas = dc_style_or_class(nil, v['td_class'] || v['class'], value, document)
|
505
516
|
# set width and align an additional style
|
506
517
|
style = dc_style_or_class(nil, v['td_style'] || v['style'], value, document)
|
507
518
|
flex_align = v['align'].to_s == 'right' ? 'flex-direction:row-reverse;' : ''
|
@@ -519,19 +530,17 @@ end
|
|
519
530
|
# Ex. Will split dc_name4_value(one ,"two") => ['dc_name4_value', 'one', 'two']
|
520
531
|
############################################################################
|
521
532
|
def dc_eval_to_array(expression)
|
522
|
-
expression.split(/\ |\,|\(|\)/).
|
533
|
+
expression.split(/\ |\,|\(|\)/).select(&:present?).map{ _1.gsub(/\'|\"/, '').strip }
|
523
534
|
end
|
524
535
|
|
525
|
-
private
|
526
|
-
|
527
536
|
############################################################################
|
528
537
|
# Process eval. Breaks eval option and calls with send method.
|
529
538
|
# Parameters:
|
530
539
|
# evaluate : String : Expression to be evaluated
|
531
540
|
# parameters : Array : array of parameters which will be send to method
|
532
541
|
############################################################################
|
533
|
-
def dc_process_eval(evaluate, parameters)
|
534
|
-
# evaluate by calling send method
|
542
|
+
def dc_process_eval(evaluate, parameters = nil)
|
543
|
+
# evaluate by calling send method
|
535
544
|
clas, method = evaluate.split('.')
|
536
545
|
if method.nil?
|
537
546
|
send(clas, *parameters)
|
@@ -541,41 +550,49 @@ def dc_process_eval(evaluate, parameters)
|
|
541
550
|
end
|
542
551
|
end
|
543
552
|
|
553
|
+
private
|
554
|
+
|
544
555
|
############################################################################
|
545
|
-
# Process eval option for field value.
|
556
|
+
# Process eval option for field value.
|
557
|
+
#
|
546
558
|
# Used for processing single field column on result_set or form head.
|
547
559
|
############################################################################
|
560
|
+
#TODO make it universal without parameters complications
|
548
561
|
def dc_process_column_eval(yaml, document)
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
562
|
+
if yaml['params'].blank?
|
563
|
+
parms = dc_eval_to_array(yaml['eval'])
|
564
|
+
method = parms.shift
|
565
|
+
|
566
|
+
# prepare parameters for dc_name_for_* methods
|
567
|
+
method.sub!('dc_name4_', 'dc_name_for_') if method.match(/^dc_name4_/)
|
568
|
+
if method == 'dc_name_for_id' && parms.size == 2
|
569
|
+
parms << 'id'
|
556
570
|
end
|
557
|
-
|
558
|
-
|
559
|
-
elsif yaml['eval'].match(/dc_name4_value|dc_name_for_value/)
|
560
|
-
parms = dc_eval_to_array(yaml['eval'])
|
561
|
-
if parms.size == 1
|
562
|
-
dc_name_for_value( @form['table'], yaml['name'], document[ yaml['name'] ] )
|
563
|
-
else
|
564
|
-
dc_name_for_value( parms[1], parms[2], document[ yaml['name'] ] )
|
571
|
+
if method == 'dc_name_for_value' && parms.size < 2
|
572
|
+
parms = [@form['table'], yaml['name']]
|
565
573
|
end
|
566
574
|
|
567
|
-
|
568
|
-
|
569
|
-
|
575
|
+
parms << document[yaml['name']]
|
576
|
+
parms.map!{ %w[record document].include?(_1.to_s) ? document : _1 }
|
577
|
+
case
|
578
|
+
when method.match(/^dc_/)
|
579
|
+
send(method, *parms)
|
570
580
|
|
571
|
-
|
572
|
-
|
573
|
-
|
581
|
+
when respond_to?(method)
|
582
|
+
parms = [document] + parms
|
583
|
+
send(method, *parms)
|
574
584
|
|
575
|
-
|
576
|
-
|
577
|
-
|
585
|
+
# model method
|
586
|
+
when document.respond_to?(method)
|
587
|
+
document.send(method)
|
578
588
|
|
589
|
+
# some class method
|
590
|
+
when method.match('.')
|
591
|
+
klass, method = method.split('.')
|
592
|
+
klass.classify.constantize.send(method, *parms)
|
593
|
+
else
|
594
|
+
'?????'
|
595
|
+
end
|
579
596
|
# eval with params
|
580
597
|
else
|
581
598
|
parms = {}
|
@@ -594,7 +611,7 @@ end
|
|
594
611
|
# Defines style or class for row (tr) or column (td)
|
595
612
|
############################################################################
|
596
613
|
def dc_style_or_class(selector, yaml, value, record)
|
597
|
-
return '' if yaml.
|
614
|
+
return '' if yaml.blank?
|
598
615
|
|
599
616
|
# alias record and value so both names can be used in eval
|
600
617
|
field, document = value, record
|
@@ -662,4 +679,16 @@ def form_has_input_field?(field_name)
|
|
662
679
|
!(field['type'] == 'readonly' || field['readonly'])
|
663
680
|
end
|
664
681
|
|
682
|
+
############################################################################
|
683
|
+
# return true if actions define check or show option
|
684
|
+
############################################################################
|
685
|
+
def has_action_type(type, actions)
|
686
|
+
h = { 'check' => 0, 'show' => 1 }
|
687
|
+
return false unless identifier = h[type]
|
688
|
+
return false unless actions[identifier]
|
689
|
+
|
690
|
+
type_value = actions[identifier].class == String ? actions[identifier] : actions[identifier]['type']
|
691
|
+
type_value == type
|
692
|
+
end
|
693
|
+
|
665
694
|
end
|