drg_cms 0.6.0.8 → 0.6.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -10
- data/app/assets/javascripts/drg_cms/drg_cms.js +208 -81
- data/app/assets/stylesheets/drg_cms/drg_cms.css +298 -93
- data/app/assets/stylesheets/drg_cms/select-multiple.css +1 -1
- data/app/controllers/cmsedit_controller.rb +174 -167
- data/app/controllers/dc_application_controller.rb +230 -196
- data/app/controllers/dc_common_controller.rb +88 -50
- data/app/controls/dc_help_control.rb +138 -0
- data/app/controls/dc_report.rb +12 -16
- data/app/forms/all_options.yml +14 -5
- data/app/forms/cms_menu.yml +7 -1
- data/app/forms/dc_big_table.yml +0 -2
- data/app/forms/dc_big_table_value.yml +0 -2
- data/app/forms/dc_category.yml +2 -1
- data/app/forms/dc_design.yml +2 -2
- data/app/forms/dc_folder_permission.yml +0 -2
- data/app/forms/dc_help_1.yml +110 -0
- data/app/forms/dc_journal.yml +3 -1
- data/app/forms/dc_json_ld.yml +0 -3
- data/app/forms/dc_link.yml +1 -1
- data/app/forms/dc_menu.yml +8 -12
- data/app/forms/dc_menu_item.yml +2 -3
- data/app/forms/dc_page.yml +7 -2
- data/app/forms/dc_part.yml +1 -0
- data/app/forms/dc_piece.yml +1 -0
- data/app/forms/dc_policy.yml +2 -5
- data/app/forms/dc_poll.yml +13 -16
- data/app/forms/dc_seo.yml +1 -2
- data/app/forms/dc_simple_menu.yml +3 -2
- data/app/forms/dc_site.yml +5 -8
- data/app/forms/dc_user.yml +27 -11
- data/app/forms/dc_user_role.yml +3 -0
- data/app/helpers/cms_common_helper.rb +68 -4
- data/app/helpers/cms_edit_helper.rb +73 -55
- data/app/helpers/cms_helper.rb +70 -32
- data/app/helpers/cms_index_helper.rb +155 -102
- data/app/helpers/dc_application_helper.rb +132 -109
- data/app/models/concerns/dc_page_concern.rb +14 -4
- data/app/models/concerns/dc_piece_concern.rb +1 -1
- data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
- data/app/models/concerns/dc_site_concern.rb +56 -44
- data/app/models/concerns/dc_user_concern.rb +58 -19
- data/app/models/dc_big_table.rb +2 -2
- data/app/models/dc_design.rb +29 -19
- data/app/models/dc_filter.rb +28 -22
- data/app/models/dc_key_value_store.rb +1 -0
- data/app/models/dc_permission.rb +19 -9
- data/app/models/dc_policy.rb +25 -14
- data/app/models/dc_policy_role.rb +22 -11
- data/app/models/dc_temp.rb +8 -1
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields/comment.rb +11 -2
- data/app/models/drgcms_form_fields/date_picker.rb +2 -0
- data/app/models/drgcms_form_fields/drgcms_field.rb +2 -1
- data/app/models/drgcms_form_fields/embedded.rb +9 -10
- data/app/models/drgcms_form_fields/file_field.rb +1 -1
- data/app/models/drgcms_form_fields/file_select.rb +2 -2
- data/app/models/drgcms_form_fields/hash_field.rb +11 -7
- data/app/models/drgcms_form_fields/link_to.rb +2 -2
- data/app/models/drgcms_form_fields/method.rb +5 -4
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
- data/app/models/drgcms_form_fields/number_field.rb +4 -3
- data/app/models/drgcms_form_fields/readonly.rb +13 -17
- data/app/models/drgcms_form_fields/select.rb +24 -25
- data/app/models/drgcms_form_fields/text_autocomplete.rb +22 -14
- data/app/renderers/dc_page_renderer.rb +7 -6
- data/app/renderers/dc_poll_renderer.rb +16 -20
- data/app/views/cmsedit/_edit_stuff.html.erb +5 -2
- data/app/views/cmsedit/_form.html.erb +3 -2
- data/app/views/cmsedit/_result.html.erb +21 -18
- data/app/views/cmsedit/edit.html.erb +4 -1
- data/app/views/cmsedit/index.html.erb +3 -2
- data/app/views/cmsedit/new.html.erb +5 -2
- data/app/views/dc_common/_help.html.erb +17 -0
- data/app/views/layouts/models.html.erb +2 -1
- data/config/locales/drgcms_en.yml +17 -2
- data/config/locales/drgcms_sl.yml +20 -2
- data/config/locales/models_en.yml +7 -5
- data/config/locales/models_sl.yml +12 -9
- data/drg_cms.gemspec +16 -16
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +94 -2
- metadata +32 -30
- data/app/models/__dc_dummy.rb +0 -102
@@ -33,11 +33,13 @@ module CmsEditHelper
|
|
33
33
|
# Will return value when internal or additional parameters are defined in action
|
34
34
|
# Subroutine of dc_actions_for_form.
|
35
35
|
############################################################################
|
36
|
-
def dc_value_for_parameter(param)#:nodoc:
|
36
|
+
def dc_value_for_parameter(param, current_document = nil)#:nodoc:
|
37
37
|
if param.class == Hash
|
38
|
-
dc_internal_var(param['object']
|
38
|
+
dc_internal_var(param['object'] ||= 'record', param['method'], current_document)
|
39
|
+
elsif param.to_s.match(/record|document/)
|
40
|
+
current_document ? current_document : @record
|
39
41
|
else
|
40
|
-
param
|
42
|
+
param
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -51,9 +53,10 @@ end
|
|
51
53
|
def dc_is_action_active?(options)
|
52
54
|
if options['when_new']
|
53
55
|
dc_deprecate("when_option will be deprecated and replaced by active: not_new_record! Form #{params[:form_name]}")
|
54
|
-
return !(dc_dont?(options['when_new'])
|
56
|
+
return !(dc_dont?(options['when_new']) && @record.new_record?)
|
55
57
|
end
|
56
58
|
return true unless options['active']
|
59
|
+
|
57
60
|
# alias record and document so both can be used in eval
|
58
61
|
record = document = @record
|
59
62
|
option = options['active']
|
@@ -65,8 +68,7 @@ def dc_is_action_active?(options)
|
|
65
68
|
(@record.new_record? && option == 'new_record') || (!@record.new_record? && option == 'not_new_record')
|
66
69
|
elsif option.match(/\./)
|
67
70
|
# shortcut for method and eval option
|
68
|
-
|
69
|
-
dc_process_eval(option,parms)
|
71
|
+
dc_process_eval(option, self)
|
70
72
|
else
|
71
73
|
eval(option['eval'])
|
72
74
|
end
|
@@ -74,9 +76,8 @@ def dc_is_action_active?(options)
|
|
74
76
|
when option['eval'] then
|
75
77
|
eval(option['eval'])
|
76
78
|
when option['method'] then
|
77
|
-
# if record present send record otherwise send
|
78
|
-
|
79
|
-
dc_process_eval(option['method'],parms)
|
79
|
+
# if record present send record otherwise send self as parameter
|
80
|
+
dc_process_eval(option['method'], self)
|
80
81
|
else
|
81
82
|
false
|
82
83
|
end
|
@@ -90,32 +91,40 @@ end
|
|
90
91
|
# normal link.
|
91
92
|
############################################################################
|
92
93
|
def dc_actions_for_form(position)
|
93
|
-
# create standard actions
|
94
|
+
# create standard actions
|
94
95
|
std_actions = {1 => 'back', 2 => {'type' => 'submit', 'caption' => 'drgcms.save'},
|
95
96
|
3 => {'type' => 'submit', 'caption' => 'drgcms.save&back'} }
|
96
|
-
# when edit only
|
97
|
+
# when edit only
|
97
98
|
unless @record.try(:id).nil?
|
98
99
|
std_actions.merge!({6 => 'new'} )
|
99
100
|
std_actions.merge!(@record.active ? {5 => 'disable'} : {5 => 'enable'} ) if @record.respond_to?('active')
|
100
101
|
std_actions.merge!({7 => 'refresh'} )
|
101
102
|
end
|
103
|
+
# readonly
|
104
|
+
std_actions = { 1 => 'back' } if @form['readonly']
|
105
|
+
|
102
106
|
actions = @form['form']['actions']
|
103
|
-
# shortcut for actions: standard
|
107
|
+
# shortcut for actions: standard
|
104
108
|
actions = nil if actions.class == String && actions == 'standard'
|
105
|
-
# standard actions
|
106
109
|
actions = std_actions if actions.nil?
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
# Actions are strictly forbidden
|
111
|
-
if @form['form']['actions'] and dc_dont?(@form['form']['actions'])
|
110
|
+
|
111
|
+
# Actions are strictly forbidden
|
112
|
+
if @form['form']['actions'] && dc_dont?(@form['form']['actions'])
|
112
113
|
actions = []
|
113
114
|
elsif actions['standard']
|
114
115
|
actions.merge!(std_actions)
|
115
116
|
actions['standard'] = nil
|
116
117
|
end
|
117
|
-
#
|
118
|
-
actions.
|
118
|
+
# request for close window button present
|
119
|
+
if actions.class == Hash
|
120
|
+
case params[:window_close]
|
121
|
+
when '0' then actions[1] = 'close'; actions[3] = nil
|
122
|
+
when '1' then actions = { 1 => 'close' }
|
123
|
+
when '2' then actions = { 1 => 'close' }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
# Update save and save&back
|
127
|
+
actions.each do |k, v|
|
119
128
|
if v.class == String
|
120
129
|
if v.match(/save\&back/i)
|
121
130
|
actions[k] = {'type' => 'submit', 'caption' => 'drgcms.save&back'}
|
@@ -124,23 +133,23 @@ def dc_actions_for_form(position)
|
|
124
133
|
end
|
125
134
|
end
|
126
135
|
end
|
127
|
-
# remove standard option and sort so that standard actions come first
|
136
|
+
# remove standard option and sort so that standard actions come first
|
128
137
|
actions.delete('standard')
|
129
|
-
actions = actions.to_a.sort {|x,y| x[0] <=> y[0]}
|
130
|
-
# Add spinner to the beginning
|
138
|
+
actions = actions.to_a.sort { |x, y| x[0] <=> y[0] }
|
139
|
+
# Add spinner to the beginning
|
131
140
|
html = %Q[<span class="dc-spinner">#{fa_icon('spinner lg spin')}</span><ul class="dc-menu #{position}">]
|
132
|
-
|
141
|
+
|
133
142
|
actions.each do |key, options|
|
134
143
|
session[:form_processing] = "form:actions: #{key} #{options}"
|
135
|
-
next if options.nil? # yes it
|
144
|
+
next if options.nil? # yes it happens
|
136
145
|
parms = @parms.clone
|
137
146
|
if options.class == String
|
138
|
-
next if
|
147
|
+
next if @form['readonly'] and !options.match(/back|close/)
|
139
148
|
|
140
149
|
html << '<li class="dc-link dc-animate">'
|
141
150
|
html << case
|
142
151
|
when (options == 'back' or options == 'cancle') then
|
143
|
-
# If return_to is present link directly to URL
|
152
|
+
# If return_to is present link directly to URL
|
144
153
|
if parms['xreturn_to'] # disabled for now
|
145
154
|
dc_link_to( 'drgcms.back','arrow-left', parms['return_to'] )
|
146
155
|
else
|
@@ -185,6 +194,9 @@ def dc_actions_for_form(position)
|
|
185
194
|
html << '</td>'
|
186
195
|
# non standard actions
|
187
196
|
else
|
197
|
+
# action will be displayed when show: always or readonly option is declared and form is readonly
|
198
|
+
next if @form['readonly'] && !%w[readonly always].include?(options['show'].to_s)
|
199
|
+
|
188
200
|
options['title'] = t("#{options['title'].downcase}", options['title']) if options['title']
|
189
201
|
html << case
|
190
202
|
# submit button
|
@@ -233,7 +245,7 @@ def dc_background_for_result(start)
|
|
233
245
|
if start == :start
|
234
246
|
html = '<div class="dc-result-div" '
|
235
247
|
html << (@form['result_set']['table_style'] ? 'style="overflow-x: scroll;" >' : '>')
|
236
|
-
|
248
|
+
|
237
249
|
html << "\n<div class=\"dc-result #{@form['result_set']['table_class']}\" "
|
238
250
|
html << (@form['result_set']['table_style'] ? "style=\"#{@form['result_set']['table_style']}\" >" : '>')
|
239
251
|
else
|
@@ -295,13 +307,13 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
|
|
295
307
|
group_count = options['group'] || 1
|
296
308
|
group_option = options['group'] || 1
|
297
309
|
end
|
298
|
-
|
310
|
+
|
299
311
|
html << if labels_pos == 'top'
|
300
|
-
%
|
312
|
+
%(
|
301
313
|
<div class="dc-form-label-top dc-color-#{odd_even} dc-align-left" title="#{help}">
|
302
314
|
<label for="record_#{options['name']}">#{label} </label>
|
303
315
|
<div id="td_record_#{options['name']}">#{field_html}</div>
|
304
|
-
</div>
|
316
|
+
</div> )
|
305
317
|
else
|
306
318
|
# no label
|
307
319
|
if dc_dont?(options['caption'])
|
@@ -314,13 +326,14 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
|
|
314
326
|
else
|
315
327
|
label_width = 14
|
316
328
|
data_width = 85
|
317
|
-
end
|
318
|
-
|
329
|
+
end
|
330
|
+
help.gsub!('<br>',"\n") if help.present?
|
331
|
+
%(
|
319
332
|
<div class="dc-form-label dc-color-#{odd_even} dc-align-#{labels_pos} dc-width-#{label_width}" title="#{help}">
|
320
333
|
<label for="record_#{options['name']}">#{label} </label>
|
321
334
|
</div>
|
322
335
|
<div id="td_record_#{options['name']}" class="dc-form-field dc-color-#{odd_even} dc-width-#{data_width}">#{field_html}</div>
|
323
|
-
|
336
|
+
)
|
324
337
|
end
|
325
338
|
# check if group end
|
326
339
|
if (group_count -= 1) == 0
|
@@ -335,9 +348,9 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
|
|
335
348
|
end
|
336
349
|
|
337
350
|
############################################################################
|
338
|
-
# Creates edit form
|
351
|
+
# Creates edit form from fields or tabs options
|
339
352
|
############################################################################
|
340
|
-
def dc_fields_for_form
|
353
|
+
def dc_fields_for_form
|
341
354
|
html, tabs, tab_data = '',[], ''
|
342
355
|
@js ||= ''
|
343
356
|
@css ||= ''
|
@@ -350,10 +363,10 @@ def dc_fields_for_form()
|
|
350
363
|
first = true # first tab
|
351
364
|
@form['form']['tabs'].keys.sort.each do |tab_name|
|
352
365
|
next if tab_name.match('actions')
|
353
|
-
# Tricky. If field
|
366
|
+
# Tricky when editing single field. If field is not present on the tab skip to next tab
|
354
367
|
if params[:edit_only]
|
355
368
|
is_on_tab = false
|
356
|
-
@form['form']['tabs'][tab_name].each {|k,v| is_on_tab = true if params[:edit_only] == v['name'] }
|
369
|
+
@form['form']['tabs'][tab_name].each { |k, v| is_on_tab = true if params[:edit_only] == v['name'] }
|
357
370
|
next unless is_on_tab
|
358
371
|
end
|
359
372
|
# first div is displayed, all others are hidden
|
@@ -361,17 +374,18 @@ def dc_fields_for_form()
|
|
361
374
|
tab_data << ' class="div-hidden"' unless first
|
362
375
|
tab_data << " style=\"height: #{@form['form']['height']}px;\"" if @form['form']['height']
|
363
376
|
tab_data << ">#{dc_fields_for_tab(@form['form']['tabs'][tab_name])}</div>"
|
364
|
-
|
365
|
-
|
377
|
+
|
378
|
+
tab_label, tab_title = dc_tab_label_help(tab_name)
|
379
|
+
tabs << [tab_name, tab_label, tab_title]
|
366
380
|
first = false
|
367
381
|
end
|
368
382
|
# make it all work together
|
369
383
|
html << '<ul class="dc-form-ul" >'
|
370
384
|
first = true # first tab must be selected
|
371
|
-
tabs.each do |tab_name, tab_label|
|
372
|
-
html <<
|
373
|
-
html << ' dc-form-li-selected' if first
|
374
|
-
html << "\">#{
|
385
|
+
tabs.each do |tab_name, tab_label, tab_title|
|
386
|
+
html << %(<li id="li_#{tab_name}" data-div="#{tab_name.delete("\s\n")}" title="#{tab_title}" class="dc-form-li)
|
387
|
+
html << ' dc-form-li-selected' if first
|
388
|
+
html << "\">#{tab_label}</li>"
|
375
389
|
first = false
|
376
390
|
end
|
377
391
|
html << '</ul>'
|
@@ -391,11 +405,11 @@ end
|
|
391
405
|
# Creates head form div. Head form div is used to display header data usefull
|
392
406
|
# to be seen even when tabs are switched.
|
393
407
|
############################################################################
|
394
|
-
def dc_head_for_form
|
408
|
+
def dc_head_for_form
|
395
409
|
@css ||= ''
|
396
410
|
head = @form['form']['head']
|
397
411
|
return '' if head.nil?
|
398
|
-
html = %
|
412
|
+
html = %(<div class="dc-head #{head['class']}">\n<div class="dc-row">)
|
399
413
|
split = head['split'] || 4
|
400
414
|
percent = 100/split
|
401
415
|
current = 0
|
@@ -421,7 +435,7 @@ def dc_head_for_form()
|
|
421
435
|
@record.send(options['name'])
|
422
436
|
end
|
423
437
|
rescue Exception => e
|
424
|
-
dc_log_exception(e)
|
438
|
+
dc_log_exception(e, 'dc_head_for_form')
|
425
439
|
field = '!!!Error'
|
426
440
|
end
|
427
441
|
#
|
@@ -429,7 +443,7 @@ def dc_head_for_form()
|
|
429
443
|
style = dc_style_or_class(nil, options['style'], field, @record)
|
430
444
|
html << %Q[<div class="dc-column #{klass}" style="width:#{percent*span}%;#{style}">
|
431
445
|
#{label.blank? ? '' : "<span class=\"label\">#{label}</span>"}
|
432
|
-
<span class="field">#{field}</span>
|
446
|
+
<span id="head-#{options['name']}" class="field">#{field}</span>
|
433
447
|
</div>]
|
434
448
|
current += span
|
435
449
|
if current == split
|
@@ -445,11 +459,10 @@ end
|
|
445
459
|
# Returns username for id. Subroutine of dc_document_statistics
|
446
460
|
###########################################################################
|
447
461
|
def dc_document_user_for(field_name) #:nodoc:
|
448
|
-
if @record[field_name]
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
# nil
|
462
|
+
return if @record[field_name].nil?
|
463
|
+
|
464
|
+
user = DcUser.find(@record[field_name])
|
465
|
+
user ? user.name : @record[field_name]
|
453
466
|
end
|
454
467
|
|
455
468
|
############################################################################
|
@@ -471,8 +484,14 @@ def dc_document_statistics
|
|
471
484
|
parms[:controller] = 'dc_common'
|
472
485
|
parms[:action] = 'copy_clipboard'
|
473
486
|
url = url_for(parms.permit!)
|
474
|
-
html << fa_icon('copy
|
487
|
+
html << fa_icon('copy lg', class: 'dc-link-img dc-link-ajax dc-animate',
|
475
488
|
'data-url' => url, 'data-request' => 'get', title: t('drgcms.doc_copy_clipboard') )
|
489
|
+
|
490
|
+
url = url_for(controller: :cmsedit, action: :index, table: 'dc_journal', filter: 'on',
|
491
|
+
filter_oper: 'eq', filter_field: 'doc_id', filter_value: @record.id)
|
492
|
+
html << fa_icon('history lg', class: 'dc-link-img dc-animate dc-window-open',
|
493
|
+
'data-url' => url, title: t('helpers.label.dc_journal.tabletitle') )
|
494
|
+
|
476
495
|
(html << '</div></div>').html_safe
|
477
496
|
end
|
478
497
|
|
@@ -494,5 +513,4 @@ def dc_top_bottom_line(location, options)
|
|
494
513
|
end
|
495
514
|
end
|
496
515
|
|
497
|
-
|
498
516
|
end
|
data/app/helpers/cms_helper.rb
CHANGED
@@ -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 = %
|
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
|
|
@@ -46,7 +46,7 @@ end
|
|
46
46
|
# Field definition will be used for input field on the form.
|
47
47
|
############################################################################
|
48
48
|
def dc_get_field_form_definition(name) #:nodoc:
|
49
|
-
return
|
49
|
+
return if @form['form'].nil?
|
50
50
|
|
51
51
|
@form['form']['tabs'].each do |tab|
|
52
52
|
# Array with 2 elements. First is tabname, second is data
|
@@ -67,26 +67,14 @@ end
|
|
67
67
|
# Parameters:
|
68
68
|
# options : Hash : Field definition
|
69
69
|
#
|
70
|
-
# Returns:
|
70
|
+
# Returns: Array[3]
|
71
71
|
# field_html : String : HTML code for field definition
|
72
72
|
# label : String : Label text
|
73
73
|
# help : String : Help text
|
74
74
|
############################################################################
|
75
75
|
def dc_field_label_help(options)
|
76
|
-
|
77
|
-
|
78
|
-
label = options['caption'] || options['text'] || options['label']
|
79
|
-
label = if label.blank?
|
80
|
-
t_name(options['name'], options['name'].capitalize.gsub('_',' ') )
|
81
|
-
elsif options['name']
|
82
|
-
t(label, label)
|
83
|
-
end
|
84
|
-
# help text can be defined in form or in translations starting with helpers. or as helpers.help.collection.field
|
85
|
-
help = options['help']
|
86
|
-
help ||= "helpers.help.#{@form['table']}.#{options['name']}" if options['name']
|
87
|
-
help = t(help, ' ') if help.to_s.match(/helpers\./)
|
88
|
-
end
|
89
|
-
# create field object from type option and call its render method
|
76
|
+
label, help = dc_label_help(options)
|
77
|
+
# create field object from type and call its render method
|
90
78
|
if options['type'].present?
|
91
79
|
klass_string = options['type'].camelize
|
92
80
|
field_html = if DrgcmsFormFields.const_defined?(klass_string) # when field type defined
|
@@ -101,10 +89,57 @@ def dc_field_label_help(options)
|
|
101
89
|
else
|
102
90
|
"Error: Field type missing!"
|
103
91
|
end
|
104
|
-
|
105
92
|
[field_html, label, help]
|
106
93
|
end
|
107
94
|
|
95
|
+
############################################################################
|
96
|
+
# Return label and help text for a field defined on Form.
|
97
|
+
#
|
98
|
+
# Parameters:
|
99
|
+
# options : Hash : Field definition
|
100
|
+
#
|
101
|
+
# Returns:
|
102
|
+
# label : String : Label text
|
103
|
+
# help : String : Help text
|
104
|
+
############################################################################
|
105
|
+
def dc_label_help(options)
|
106
|
+
# no label or help in comments
|
107
|
+
return [nil, nil] if %w(comment action).include?(options['type'])
|
108
|
+
|
109
|
+
label = options['caption'] || options['text'] || options['label']
|
110
|
+
label = if label.blank?
|
111
|
+
t_name(options['name'], options['name'].capitalize.gsub('_',' ') )
|
112
|
+
elsif options['name']
|
113
|
+
t(label, label)
|
114
|
+
end
|
115
|
+
# help text can be defined in form or in translations starting with helpers. or as helpers.help.collection.field
|
116
|
+
help = options['help']
|
117
|
+
help ||= "helpers.help.#{@form['table']}.#{options['name']}" if options['name']
|
118
|
+
help = t(help, ' ') if help.to_s.match(/helpers\./)
|
119
|
+
[label, help]
|
120
|
+
end
|
121
|
+
|
122
|
+
############################################################################
|
123
|
+
# Return label and help for tab on Form.
|
124
|
+
#
|
125
|
+
# Parameters:
|
126
|
+
# options : String : Tab name on form
|
127
|
+
#
|
128
|
+
# Returns:
|
129
|
+
# label : String : Label text
|
130
|
+
# help : String : Help text
|
131
|
+
############################################################################
|
132
|
+
def dc_tab_label_help(tab_name)
|
133
|
+
label = @form['form']['tabs'][tab_name]['caption'] || tab_name
|
134
|
+
label = t(label, t_name(label, label))
|
135
|
+
|
136
|
+
help = @form['form']['tabs'][tab_name]['help'] || "helpers.help.#{@form['table']}.#{tab_name}"
|
137
|
+
help = t(help, t_name(help, help))
|
138
|
+
help = nil if help.match('helpers.') # help not found in translation
|
139
|
+
|
140
|
+
[label, help]
|
141
|
+
end
|
142
|
+
|
108
143
|
############################################################################
|
109
144
|
# Creates code for including data entry field in index actions.
|
110
145
|
############################################################################
|
@@ -147,9 +182,10 @@ end
|
|
147
182
|
# Returns:
|
148
183
|
# String : HTML code for action
|
149
184
|
############################################################################
|
150
|
-
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)
|
151
186
|
parms = {}
|
152
|
-
caption = yaml['caption']
|
187
|
+
caption = yaml['caption'] || yaml['text']
|
188
|
+
caption = caption ? t("#{caption.downcase}", caption) : nil
|
153
189
|
icon = yaml['icon'] ? "#{fa_icon(yaml['icon'])}" : ''
|
154
190
|
# action is not active
|
155
191
|
unless dc_is_action_active?(yaml)
|
@@ -158,14 +194,14 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
|
|
158
194
|
# set data-confirm when confirm
|
159
195
|
yaml['html'] ||= {}
|
160
196
|
confirm = yaml['html']['data-confirm'] || yaml['confirm']
|
161
|
-
yaml['html']['data-confirm'] = t(confirm)
|
197
|
+
yaml['html']['data-confirm'] = t(confirm) if confirm.present?
|
162
198
|
yaml['html']['title'] ||= yaml['title']
|
163
|
-
yaml['html']['title'] = t(yaml['title'])
|
199
|
+
yaml['html']['title'] = t(yaml['title']) if yaml['title'].present?
|
164
200
|
yaml['html']['target'] ||= yaml['target']
|
165
201
|
# direct url
|
166
202
|
if yaml['url']
|
167
|
-
parms['
|
168
|
-
parms['idr']
|
203
|
+
parms['url'] = yaml['url']
|
204
|
+
parms['idr'] = dc_document_path(record) if record
|
169
205
|
# make url from action controller
|
170
206
|
else
|
171
207
|
parms['controller'] = yaml['controller'] || 'cmsedit'
|
@@ -178,16 +214,18 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
|
|
178
214
|
# add current id to parameters
|
179
215
|
parms['id'] = dc_document_path(record) if record
|
180
216
|
# overwrite with or add additional parameters from environment or record
|
181
|
-
yaml['params'].each { |k,v| parms[k] = dc_value_for_parameter(v) } if yaml['params']
|
217
|
+
yaml['params'].each { |k, v| parms[k] = dc_value_for_parameter(v, record) } if yaml['params']
|
218
|
+
|
182
219
|
parms['table'] = parms['table'].underscore if parms['table'] # might be CamelCase
|
183
220
|
# error if controller parameter is missing
|
184
221
|
if parms['controller'].nil? && parms['url'].nil?
|
185
222
|
"<li>#{'Controller not defined'}</li>"
|
186
223
|
else
|
187
|
-
yaml['caption'] ||= yaml['text']
|
224
|
+
#yaml['caption'] ||= yaml['text']
|
188
225
|
html_data = dc_html_data(yaml['html'])
|
189
|
-
#
|
190
226
|
url = url_for(parms) rescue 'URL error'
|
227
|
+
url = nil if parms['url'] == '#'
|
228
|
+
|
191
229
|
request = yaml['request'] || yaml['method'] || 'get'
|
192
230
|
if yaml['type'] == 'ajax' # ajax button
|
193
231
|
clas = "dc-link-ajax dc-animate"
|
@@ -203,8 +241,8 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
|
|
203
241
|
data-request="#{request}" title="#{yaml['title']}">#{icon}#{caption}</li>]
|
204
242
|
|
205
243
|
elsif yaml['type'] == 'link' # link button
|
206
|
-
clas = "dc-link dc-animate"
|
207
|
-
link = dc_link_to(
|
244
|
+
clas = "dc-link plus-link dc-animate"
|
245
|
+
link = dc_link_to(caption, yaml['icon'], parms, yaml['html'] )
|
208
246
|
%Q[<li class="#{clas}">#{action_active ? link : caption}</li>]
|
209
247
|
|
210
248
|
elsif yaml['type'] == 'window'
|
@@ -218,10 +256,10 @@ def dc_link_ajax_window_submit_action(yaml, record=nil, action_active=true)
|
|
218
256
|
end
|
219
257
|
|
220
258
|
############################################################################
|
221
|
-
#
|
259
|
+
# Log exception to rails log. Usefull for debugging eval errors.
|
222
260
|
############################################################################
|
223
|
-
def dc_log_exception(exception)
|
224
|
-
log = exception ? "\n
|
261
|
+
def dc_log_exception(exception, where = '')
|
262
|
+
log = exception ? "\n*** Error:#{where + ':'} #{exception.message}\n#{exception.backtrace.first.inspect}\n" : ''
|
225
263
|
log << "DRG Form processing line: #{session[:form_processing]}\n"
|
226
264
|
|
227
265
|
logger.error log
|