drg_cms 0.6.0.8 → 0.6.1.0

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +100 -58
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +177 -43
  4. data/app/controllers/cmsedit_controller.rb +149 -145
  5. data/app/controllers/dc_application_controller.rb +235 -113
  6. data/app/controllers/dc_common_controller.rb +32 -3
  7. data/app/controls/dc_help_control.rb +126 -0
  8. data/app/controls/dc_report.rb +5 -7
  9. data/app/forms/all_options.yml +10 -4
  10. data/app/forms/cms_menu.yml +7 -1
  11. data/app/forms/dc_category.yml +2 -1
  12. data/app/forms/dc_design.yml +1 -0
  13. data/app/forms/dc_help_1.yml +109 -0
  14. data/app/forms/dc_journal.yml +3 -1
  15. data/app/forms/dc_link.yml +1 -1
  16. data/app/forms/dc_menu.yml +2 -0
  17. data/app/forms/dc_menu_item.yml +1 -0
  18. data/app/forms/dc_page.yml +2 -0
  19. data/app/forms/dc_part.yml +1 -0
  20. data/app/forms/dc_piece.yml +1 -0
  21. data/app/forms/dc_poll.yml +3 -0
  22. data/app/forms/dc_simple_menu.yml +2 -0
  23. data/app/forms/dc_site.yml +2 -6
  24. data/app/forms/dc_user.yml +27 -11
  25. data/app/forms/dc_user_role.yml +3 -0
  26. data/app/helpers/cms_common_helper.rb +69 -4
  27. data/app/helpers/cms_edit_helper.rb +32 -24
  28. data/app/helpers/cms_helper.rb +64 -26
  29. data/app/helpers/cms_index_helper.rb +84 -72
  30. data/app/helpers/dc_application_helper.rb +33 -24
  31. data/app/models/concerns/dc_page_concern.rb +11 -2
  32. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  33. data/app/models/concerns/dc_site_concern.rb +56 -44
  34. data/app/models/concerns/dc_user_concern.rb +57 -18
  35. data/app/models/dc_design.rb +29 -19
  36. data/app/models/dc_key_value_store.rb +1 -0
  37. data/app/models/dc_permission.rb +19 -9
  38. data/app/models/dc_policy.rb +25 -14
  39. data/app/models/dc_policy_role.rb +22 -11
  40. data/app/models/dc_temp.rb +1 -1
  41. data/app/models/dc_user_role.rb +2 -2
  42. data/app/models/drgcms_form_fields/embedded.rb +5 -8
  43. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  44. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  45. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  46. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  47. data/app/models/drgcms_form_fields/method.rb +5 -4
  48. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  49. data/app/models/drgcms_form_fields/select.rb +10 -9
  50. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  51. data/app/views/cmsedit/edit.html.erb +2 -0
  52. data/app/views/cmsedit/index.html.erb +2 -1
  53. data/app/views/cmsedit/new.html.erb +2 -0
  54. data/app/views/dc_common/_help.html.erb +8 -0
  55. data/app/views/layouts/models.html.erb +2 -1
  56. data/config/locales/drgcms_en.yml +12 -0
  57. data/config/locales/drgcms_sl.yml +15 -0
  58. data/config/locales/models_en.yml +5 -5
  59. data/config/locales/models_sl.yml +7 -6
  60. data/lib/drg_cms.rb +58 -0
  61. data/lib/drg_cms/version.rb +1 -1
  62. metadata +5 -3
  63. data/app/models/__dc_dummy.rb +0 -102
@@ -73,6 +73,7 @@ form:
73
73
  10:
74
74
  name: dc_menu_items
75
75
  type: embedded
76
+ caption: false
76
77
  form_name: dc_menu_item
77
78
  html:
78
79
  height: 1000
@@ -143,12 +143,14 @@ form:
143
143
  3content:
144
144
  10:
145
145
  name: body
146
+ caption: false
146
147
  type: html_field
147
148
  options: 'height: 1000'
148
149
 
149
150
  4parts:
150
151
  10:
151
152
  name: dc_parts
153
+ caption: false
152
154
  type: embedded
153
155
  form_name: dc_part
154
156
  html:
@@ -81,6 +81,7 @@ form:
81
81
  2content:
82
82
  10:
83
83
  name: body
84
+ caption: false
84
85
  type: html_field
85
86
  options: 'height: 800'
86
87
 
@@ -100,6 +100,7 @@ form:
100
100
  tab3:
101
101
  10:
102
102
  name: body
103
+ caption: false
103
104
  type: html_field
104
105
  options: 'height: 800'
105
106
 
@@ -102,12 +102,14 @@ form:
102
102
  10:
103
103
  name: js
104
104
  type: text_area
105
+ caption: false
105
106
  html:
106
107
  size: 100x50
107
108
  style: 'font-family:courier;'
108
109
  tab3:
109
110
  20:
110
111
  name: dc_poll_items
112
+ caption: false
111
113
  type: embedded
112
114
  form_name: dc_poll_item
113
115
  html:
@@ -115,6 +117,7 @@ form:
115
117
  tab4:
116
118
  10:
117
119
  name: form
120
+ caption: false
118
121
  type: text_area
119
122
  html:
120
123
  size: 100x50
@@ -61,6 +61,7 @@ form:
61
61
  10:
62
62
  name: dc_simple_menu_items
63
63
  type: embedded
64
+ caption: false
64
65
  form_name: dc_simple_menu_item
65
66
  html:
66
67
  height: 800
@@ -68,6 +69,7 @@ form:
68
69
  tab3:
69
70
  20:
70
71
  name: css
72
+ caption: false
71
73
  type: text_area
72
74
  size: 100x50
73
75
 
@@ -143,15 +143,11 @@ form:
143
143
  20:
144
144
  name: dc_policies
145
145
  type: embedded
146
+ caption: false
146
147
  form_name: dc_policy
147
- html:
148
- height: 800
149
148
  6parts:
150
149
  10:
151
150
  name: dc_parts
151
+ caption: false
152
152
  type: embedded
153
153
  form_name: dc_part
154
- html:
155
- height: 1000
156
-
157
-
@@ -22,8 +22,9 @@ result_set:
22
22
  name: last_name
23
23
  width: 20%
24
24
  4:
25
- name: last_visit
26
- width: 10%
25
+ name: active
26
+ eval: dc_icon4_boolean
27
+ width: 5%
27
28
 
28
29
  form:
29
30
  title:
@@ -32,12 +33,18 @@ form:
32
33
  actions: standard
33
34
 
34
35
  tabs:
35
- tab1:
36
+ 1base:
36
37
 
37
38
  10:
38
39
  name: username
39
40
  type: text_field
40
41
  size: 10
42
+ group: 2
43
+ html:
44
+ autocomplete: 'off'
45
+ 15:
46
+ name: group
47
+ type: check_box
41
48
  20:
42
49
  name: title
43
50
  type: text_field
@@ -45,7 +52,8 @@ form:
45
52
  30:
46
53
  name: first_name
47
54
  type: text_field
48
- size: 20
55
+ size: 30
56
+ group: 3
49
57
 
50
58
  40:
51
59
  name: middle_name
@@ -65,12 +73,13 @@ form:
65
73
  70:
66
74
  name: address
67
75
  type: text_field
68
- size: 50
76
+ size: 30
77
+ group: 2
69
78
 
70
79
  80:
71
80
  name: post
72
81
  type: text_field
73
- size: 50
82
+ size: 30
74
83
 
75
84
  90:
76
85
  name: country
@@ -81,11 +90,12 @@ form:
81
90
  name: email
82
91
  type: text_field
83
92
  size: 30
93
+ group: 2
84
94
 
85
95
  110:
86
96
  name: phone
87
97
  type: text_field
88
- size: 30
98
+ size: 20
89
99
 
90
100
  120:
91
101
  name: birthdate
@@ -101,12 +111,16 @@ form:
101
111
  140:
102
112
  name: about
103
113
  type: text_area
104
- size: 100x10
114
+ size: 100x5
105
115
 
106
116
  150:
107
117
  name: password
108
118
  type: password_field
109
119
  size: 20
120
+ group: 2
121
+ line: top
122
+ html:
123
+ autocomplete: 'off'
110
124
 
111
125
  160:
112
126
  name: password_confirmation
@@ -120,6 +134,8 @@ form:
120
134
  size: 20
121
135
 
122
136
  180:
123
- name: signature
124
- type: text_area
125
- size: 100x5
137
+ name: member
138
+ type: select
139
+ multiple: true
140
+ eval: DcUser.groups_for_select
141
+ size: 30
@@ -14,13 +14,16 @@ result_set:
14
14
  columns:
15
15
  1:
16
16
  name: dc_policy_role_id
17
+ width: 25%
17
18
  eval: dc_name4_id,dc_policy_role,name
18
19
 
19
20
  2:
20
21
  name: valid_from
22
+ width: 10%
21
23
 
22
24
  3:
23
25
  name: valid_to
26
+ width: 10%
24
27
 
25
28
  4:
26
29
  name: active
@@ -44,7 +44,7 @@ module CmsCommonHelper
44
44
  # Returns:
45
45
  # String. Translated text.
46
46
  ####################################################################
47
- def self.t(key, default=nil)
47
+ def self.t(key, default=nil)
48
48
  c = I18n.t(key)
49
49
  if c.class == Hash or c.match( 'translation missing' )
50
50
  c = I18n.t(key, locale: 'en')
@@ -194,12 +194,13 @@ end
194
194
  ############################################################################
195
195
  def dc_name_for_id(model, field, field_name, id=nil)
196
196
  return '' if id.nil?
197
+
197
198
  field_name = (field_name || 'id').strip.to_sym
198
199
  field = field.strip.to_sym
199
-
200
200
  model = model.strip.classify.constantize if model.class == String
201
- rec = Mongoid::QueryCache.cache { model.find_by(field_name => id) }
202
- rec.nil? ? '' : (rec.send(field) rescue 'not defined')
201
+ doc = Mongoid::QueryCache.cache { model.find_by(field_name => id) }
202
+
203
+ doc.nil? ? '' : (doc.send(field) rescue 'not defined')
203
204
  end
204
205
 
205
206
  ############################################################################
@@ -255,6 +256,13 @@ def self.dc_format_date_time(value, format=nil)
255
256
  value.strftime(format)
256
257
  end
257
258
 
259
+ ############################################################################
260
+ # Returns html code for displaying date/time formatted by strftime. Will return '' if value is nil.
261
+ #
262
+ # Parameters:
263
+ # [value] Date/DateTime/Time.
264
+ # [format] String. strftime format mask. Defaults to locale's default format.
265
+ ############################################################################
258
266
  def dc_format_date_time(value, format=nil) #:nodoc:
259
267
  CmsCommonHelper.dc_format_date_time(value, format)
260
268
  end
@@ -304,8 +312,65 @@ def self.dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, c
304
312
  "#{sign}#{ar.reverse.join(delimiter)}#{separator}#{dec}"
305
313
  end
306
314
 
315
+ ############################################################################
316
+ # Returns html code for displaying formatted number.
317
+ #
318
+ # Parameters:
319
+ # [value] Numeric number.
320
+ # [decimals] Integer. Number of decimals
321
+ # [separator] String. Decimals separator
322
+ # [delimiter] String. Thousands delimiter.
323
+ # [currency] String. Currency symbol if applied to result string.
324
+ ############################################################################
307
325
  def dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil) #:nodoc:
308
326
  CmsCommonHelper.dc_format_number(value, decimals, separator, delimiter, currency)
309
327
  end
310
328
 
329
+ ############################################################################
330
+ # Create help text for fields on single tab
331
+ ############################################################################
332
+ def dc_help_for_tab(tab)
333
+ return '' if tab.nil?
334
+
335
+ html = ''
336
+ if tab.class == Array
337
+ tab_name = tab.last['caption'] || tab.first
338
+ tab_label, tab_help = dc_tab_label_help(tab_name)
339
+ html << %(<div class="help-tab">#{tab_label}</div><div class="help-tab-help">#{tab_help}</div>)
340
+
341
+ tab = tab.last
342
+ end
343
+
344
+ tab.each do |field|
345
+ label, help = dc_label_help(field.last)
346
+ next if help.blank?
347
+
348
+ html << %(<div class="help-field"><div class="help-label">#{label}</div><div class="help-text">#{help}</div></div>)
349
+ end
350
+ html
351
+ end
352
+
353
+ ############################################################################
354
+ # Will scoop fields and help text associated with them to create basic help text.
355
+ ############################################################################
356
+ def dc_help_fields
357
+ return '' if @form['form'].nil?
358
+
359
+ html = '<div class="dc-handle" data-div="#the1"></div><div id="the1">'
360
+ if @form['form']['tabs']
361
+ @form['form']['tabs'].each { |tab| html << dc_help_for_tab(tab) }
362
+ else
363
+ html << dc_help_for_tab(@form['form']['fields'])
364
+ end
365
+ html << '</div>'
366
+ html.html_safe
367
+ end
368
+
369
+ ############################################################################
370
+ # Will return text from help files
371
+ ############################################################################
372
+ def dc_help_body
373
+ (params[:type] == 'index' ? @help['index'] : @help['form']).html_safe
374
+ end
375
+
311
376
  end
@@ -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'] || 'record', param['method'])
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']) and @record.new_record?)
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
- parms = @record ? @record : params
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 params as parameter
78
- parms = @record ? @record : params
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
@@ -233,7 +234,7 @@ def dc_background_for_result(start)
233
234
  if start == :start
234
235
  html = '<div class="dc-result-div" '
235
236
  html << (@form['result_set']['table_style'] ? 'style="overflow-x: scroll;" >' : '>')
236
- #
237
+
237
238
  html << "\n<div class=\"dc-result #{@form['result_set']['table_class']}\" "
238
239
  html << (@form['result_set']['table_style'] ? "style=\"#{@form['result_set']['table_style']}\" >" : '>')
239
240
  else
@@ -335,9 +336,9 @@ def dc_fields_for_tab(fields_on_tab) #:nodoc:
335
336
  end
336
337
 
337
338
  ############################################################################
338
- # Creates edit form div.
339
+ # Creates edit form from fields or tabs options
339
340
  ############################################################################
340
- def dc_fields_for_form()
341
+ def dc_fields_for_form
341
342
  html, tabs, tab_data = '',[], ''
342
343
  @js ||= ''
343
344
  @css ||= ''
@@ -350,10 +351,10 @@ def dc_fields_for_form()
350
351
  first = true # first tab
351
352
  @form['form']['tabs'].keys.sort.each do |tab_name|
352
353
  next if tab_name.match('actions')
353
- # Tricky. If field name is not on the tab skip to next tab
354
+ # Tricky when editing single field. If field is not present on the tab skip to next tab
354
355
  if params[:edit_only]
355
356
  is_on_tab = false
356
- @form['form']['tabs'][tab_name].each {|k,v| is_on_tab = true if params[:edit_only] == v['name'] }
357
+ @form['form']['tabs'][tab_name].each { |k, v| is_on_tab = true if params[:edit_only] == v['name'] }
357
358
  next unless is_on_tab
358
359
  end
359
360
  # first div is displayed, all others are hidden
@@ -361,17 +362,18 @@ def dc_fields_for_form()
361
362
  tab_data << ' class="div-hidden"' unless first
362
363
  tab_data << " style=\"height: #{@form['form']['height']}px;\"" if @form['form']['height']
363
364
  tab_data << ">#{dc_fields_for_tab(@form['form']['tabs'][tab_name])}</div>"
364
- tab_label = @form['form']['tabs'][tab_name]['caption'] || tab_name
365
- tabs << [tab_name, tab_label]
365
+
366
+ tab_label, tab_title = dc_tab_label_help(tab_name)
367
+ tabs << [tab_name, tab_label, tab_title]
366
368
  first = false
367
369
  end
368
370
  # make it all work together
369
371
  html << '<ul class="dc-form-ul" >'
370
372
  first = true # first tab must be selected
371
- tabs.each do |tab_name, tab_label|
372
- html << "<li id=\"li_#{tab_name}\" data-div=\"#{tab_name.delete("\s\n")}\" class=\"dc-form-li"
373
- html << ' dc-form-li-selected' if first
374
- html << "\">#{t(tab_label, t_name(tab_label, tab_label))}</li>"
373
+ tabs.each do |tab_name, tab_label, tab_title|
374
+ html << %(<li id="li_#{tab_name}" data-div="#{tab_name.delete("\s\n")}" title="#{tab_title}" class="dc-form-li)
375
+ html << ' dc-form-li-selected' if first
376
+ html << "\">#{tab_label}</li>"
375
377
  first = false
376
378
  end
377
379
  html << '</ul>'
@@ -391,11 +393,11 @@ end
391
393
  # Creates head form div. Head form div is used to display header data usefull
392
394
  # to be seen even when tabs are switched.
393
395
  ############################################################################
394
- def dc_head_for_form()
396
+ def dc_head_for_form
395
397
  @css ||= ''
396
398
  head = @form['form']['head']
397
399
  return '' if head.nil?
398
- html = %Q[<div class="dc-head #{head['class']}">\n<div class="dc-row">]
400
+ html = %(<div class="dc-head #{head['class']}">\n<div class="dc-row">)
399
401
  split = head['split'] || 4
400
402
  percent = 100/split
401
403
  current = 0
@@ -429,7 +431,7 @@ def dc_head_for_form()
429
431
  style = dc_style_or_class(nil, options['style'], field, @record)
430
432
  html << %Q[<div class="dc-column #{klass}" style="width:#{percent*span}%;#{style}">
431
433
  #{label.blank? ? '' : "<span class=\"label\">#{label}</span>"}
432
- <span class="field">#{field}</span>
434
+ <span id="head-#{options['name']}" class="field">#{field}</span>
433
435
  </div>]
434
436
  current += span
435
437
  if current == split
@@ -471,8 +473,14 @@ def dc_document_statistics
471
473
  parms[:controller] = 'dc_common'
472
474
  parms[:action] = 'copy_clipboard'
473
475
  url = url_for(parms.permit!)
474
- html << fa_icon('copy 2x', class: 'dc-link-img dc-link-ajax dc-animate',
476
+ html << fa_icon('copy lg', class: 'dc-link-img dc-link-ajax dc-animate',
475
477
  'data-url' => url, 'data-request' => 'get', title: t('drgcms.doc_copy_clipboard') )
478
+
479
+ url = url_for(controller: :cmsedit, action: :index, table: 'dc_journal', filter: 'on',
480
+ filter_oper: 'eq', filter_field: 'doc_id', filter_value: @record.id)
481
+ html << fa_icon('history lg', class: 'dc-link-img dc-animate dc-window-open',
482
+ 'data-url' => url, title: t('helpers.label.dc_journal.tabletitle') )
483
+
476
484
  (html << '</div></div>').html_safe
477
485
  end
478
486