drg_cms 0.5.52.16 → 0.6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +446 -144
  3. data/app/assets/javascripts/drg_cms/jstree.min.js +6 -6
  4. data/app/assets/javascripts/drg_cms_application.js +1 -1
  5. data/app/assets/stylesheets/drg_cms/drg_cms.css +625 -243
  6. data/app/assets/stylesheets/drg_cms/jstree.css +6 -12
  7. data/app/assets/stylesheets/drg_cms/select-multiple.css +18 -12
  8. data/app/assets/stylesheets/drg_cms_cms.css +1 -1
  9. data/app/controllers/cmsedit_controller.rb +536 -331
  10. data/app/controllers/dc_application_controller.rb +380 -117
  11. data/app/controllers/dc_common_controller.rb +105 -14
  12. data/app/{controllers → controls}/browse_models_control.rb +0 -0
  13. data/app/controls/dc_help_control.rb +126 -0
  14. data/app/{controllers → controls}/dc_page_control.rb +24 -8
  15. data/app/controls/dc_poll_result_control.rb +88 -0
  16. data/app/controls/dc_report.rb +225 -0
  17. data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
  18. data/app/forms/all_options.yml +50 -9
  19. data/app/forms/cms_menu.yml +28 -18
  20. data/app/forms/dc_ad.yml +11 -22
  21. data/app/forms/dc_big_table.yml +1 -0
  22. data/app/forms/dc_big_table_value.yml +1 -0
  23. data/app/forms/dc_category.yml +2 -1
  24. data/app/forms/dc_design.yml +20 -16
  25. data/app/forms/dc_filter.yml +3 -6
  26. data/app/forms/dc_help_1.yml +109 -0
  27. data/app/forms/dc_journal.yml +3 -1
  28. data/app/forms/dc_json_ld.yml +59 -0
  29. data/app/forms/dc_key_value.yml +32 -0
  30. data/app/forms/dc_link.yml +1 -1
  31. data/app/forms/dc_menu.yml +2 -0
  32. data/app/forms/dc_menu_item.yml +2 -0
  33. data/app/forms/dc_page.yml +3 -5
  34. data/app/forms/dc_part.yml +1 -0
  35. data/app/forms/dc_piece.yml +1 -0
  36. data/app/forms/dc_poll.yml +19 -9
  37. data/app/forms/dc_poll_item.yml +2 -1
  38. data/app/forms/dc_poll_result.yml +83 -0
  39. data/app/forms/dc_poll_result_export.yml +35 -0
  40. data/app/forms/dc_seo.yml +33 -0
  41. data/app/forms/dc_simple_menu.yml +2 -0
  42. data/app/forms/dc_site.yml +4 -12
  43. data/app/forms/dc_user.yml +27 -11
  44. data/app/forms/dc_user_role.yml +3 -0
  45. data/app/forms/json_ld_schema.yml +168 -0
  46. data/app/helpers/cms_common_helper.rb +376 -0
  47. data/app/helpers/cms_edit_helper.rb +506 -0
  48. data/app/helpers/cms_helper.rb +268 -0
  49. data/app/helpers/cms_index_helper.rb +576 -0
  50. data/app/helpers/dc_application_helper.rb +183 -271
  51. data/app/models/concerns/dc_page_concern.rb +40 -6
  52. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  53. data/app/models/concerns/dc_seo_concern.rb +66 -0
  54. data/app/models/concerns/dc_site_concern.rb +67 -44
  55. data/app/models/concerns/dc_user_concern.rb +62 -21
  56. data/app/models/dc_design.rb +30 -18
  57. data/app/models/dc_filter.rb +22 -13
  58. data/app/models/dc_json_ld.rb +152 -0
  59. data/app/models/dc_key_value.rb +48 -0
  60. data/app/models/dc_key_value_store.rb +1 -0
  61. data/app/models/dc_memory.rb +8 -1
  62. data/app/models/dc_page.rb +0 -1
  63. data/app/models/dc_permission.rb +49 -9
  64. data/app/models/dc_policy.rb +25 -14
  65. data/app/models/dc_policy_role.rb +22 -11
  66. data/app/models/dc_poll.rb +39 -19
  67. data/app/models/{drgcms_form_fields/drgcms_form_fields.rb → dc_poll_result.rb} +23 -2
  68. data/app/models/dc_temp.rb +140 -0
  69. data/app/models/dc_user_role.rb +2 -2
  70. data/app/models/drgcms_form_fields.rb +14 -6
  71. data/app/models/drgcms_form_fields/action.rb +61 -0
  72. data/app/models/drgcms_form_fields/check_box.rb +3 -0
  73. data/app/models/drgcms_form_fields/comment.rb +8 -4
  74. data/app/models/drgcms_form_fields/date_picker.rb +11 -9
  75. data/app/models/drgcms_form_fields/date_select.rb +1 -1
  76. data/app/models/drgcms_form_fields/{date_time_picker.rb → datetime_picker.rb} +12 -10
  77. data/app/models/drgcms_form_fields/datetime_select.rb +1 -1
  78. data/app/models/drgcms_form_fields/drgcms_field.rb +55 -9
  79. data/app/models/drgcms_form_fields/embedded.rb +26 -16
  80. data/app/models/drgcms_form_fields/file_field.rb +52 -0
  81. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  82. data/app/models/drgcms_form_fields/hash_field.rb +90 -0
  83. data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
  84. data/app/models/drgcms_form_fields/html_field.rb +1 -1
  85. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  86. data/app/models/drgcms_form_fields/method.rb +66 -0
  87. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +23 -14
  88. data/app/models/drgcms_form_fields/number_field.rb +15 -6
  89. data/app/models/drgcms_form_fields/radio.rb +96 -0
  90. data/app/models/drgcms_form_fields/readonly.rb +2 -2
  91. data/app/models/drgcms_form_fields/select.rb +92 -29
  92. data/app/models/drgcms_form_fields/text_area.rb +1 -1
  93. data/app/models/drgcms_form_fields/text_autocomplete.rb +29 -17
  94. data/app/models/drgcms_form_fields/text_field.rb +1 -1
  95. data/app/models/drgcms_form_fields/text_with_select.rb +6 -3
  96. data/app/models/drgcms_form_fields/tree_select.rb +29 -10
  97. data/app/{helpers → renderers}/dc_ad_renderer.rb +0 -0
  98. data/app/{helpers → renderers}/dc_big_menu_renderer.rb +1 -0
  99. data/app/{helpers → renderers}/dc_captcha_renderer.rb +0 -0
  100. data/app/{helpers → renderers}/dc_common_renderer.rb +0 -0
  101. data/app/{helpers → renderers}/dc_gallery_renderer.rb +1 -0
  102. data/app/{helpers → renderers}/dc_menu_renderer.rb +11 -4
  103. data/app/{helpers → renderers}/dc_page_renderer.rb +1 -0
  104. data/app/{helpers → renderers}/dc_part_renderer.rb +5 -4
  105. data/app/{helpers → renderers}/dc_piece_renderer.rb +1 -1
  106. data/app/{helpers → renderers}/dc_poll_renderer.rb +84 -48
  107. data/app/{helpers → renderers}/dc_renderer.rb +1 -0
  108. data/app/{helpers → renderers}/dc_simple_menu_renderer.rb +1 -0
  109. data/app/views/cmsedit/{remove_edit_stuff.js.erb → __remove_edit_stuff.js.erb} +0 -0
  110. data/app/views/cmsedit/{show.html.erb → __show.html.erb} +0 -0
  111. data/app/views/cmsedit/_edit_stuff.html.erb +4 -25
  112. data/app/views/cmsedit/_form.html.erb +4 -3
  113. data/app/views/cmsedit/_result.html.erb +2 -3
  114. data/app/views/cmsedit/edit.html.erb +4 -1
  115. data/app/views/cmsedit/index.html.erb +7 -1
  116. data/app/views/cmsedit/new.html.erb +3 -1
  117. data/app/views/dc_common/_help.html.erb +8 -0
  118. data/app/views/layouts/models.html.erb +2 -1
  119. data/config/locales/drgcms_en.yml +26 -3
  120. data/config/locales/drgcms_sl.yml +31 -5
  121. data/config/locales/models_en.yml +66 -18
  122. data/config/locales/models_sl.yml +71 -20
  123. data/drg_cms.gemspec +3 -3
  124. data/lib/drg_cms.rb +63 -1
  125. data/lib/drg_cms/version.rb +2 -2
  126. data/lib/generators/new_drg_form/new_drg_form_generator.rb +9 -2
  127. data/lib/tasks/database.rake +6 -56
  128. metadata +81 -63
  129. data/app/assets/stylesheets/drg_cms/__jquery-ui.css +0 -339
  130. data/app/helpers/application_helper.rb +0 -2
  131. data/app/helpers/cmsedit_helper.rb +0 -885
  132. data/app/models/dc_dummy.rb +0 -102
  133. data/test/fixtures/drg_cms_test_data.rb +0 -87
@@ -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
@@ -0,0 +1,168 @@
1
+ ## JSON/LD schema description
2
+ ---
3
+ # Organization
4
+ Organization:
5
+ level: 1
6
+ name:
7
+ type: String
8
+ text: Organization name
9
+
10
+ legalName:
11
+ type: String
12
+ text: Organization legal name
13
+
14
+ '@id':
15
+ type: String
16
+ text: https://www.example.com
17
+
18
+ url:
19
+ type: String
20
+ text: https://www.example.com
21
+
22
+ logo:
23
+ type: String
24
+ text: https://www.example.com/logo.jpg
25
+
26
+ foundingDate:
27
+ type: String
28
+ text: Year
29
+
30
+ founders:
31
+ type: Person
32
+
33
+ address:
34
+ type: PostalAddress
35
+
36
+ contactPoint:
37
+ type: ContactPoint
38
+
39
+ sameAs:
40
+ type: Array
41
+
42
+ # Person
43
+ Person:
44
+
45
+ name:
46
+ type: String
47
+ text: Name
48
+
49
+ address:
50
+ type: PostalAddress
51
+
52
+ collegue:
53
+ type: Array
54
+
55
+ email:
56
+ type: String
57
+ text: eMail address
58
+
59
+ image:
60
+ type: String
61
+ text: Image filename
62
+
63
+ jobTitle:
64
+ type: String
65
+ text: Job title
66
+
67
+ alumniOf:
68
+ type: String
69
+ text: School name
70
+
71
+ birthPlace:
72
+ type: String
73
+ text: City of birth
74
+
75
+ birthDate:
76
+ type: String
77
+ text: 1999-31-12
78
+
79
+ jobTitle:
80
+ type: String
81
+ text: Job title
82
+
83
+ gender:
84
+ type: String
85
+ text: male/female
86
+
87
+ telephone:
88
+ type: String
89
+ text: (123) 456-6789
90
+
91
+ url:
92
+ type: String
93
+ text: http://www.example.com
94
+
95
+ sameAs:
96
+ type: Array
97
+
98
+ #PostalAddress
99
+ PostalAddress:
100
+
101
+
102
+ streetAddress:
103
+ type: String
104
+ text: address
105
+
106
+ postalCode:
107
+ type: String
108
+ text: 1234
109
+
110
+ addressLocality:
111
+ type: String
112
+ text: CityName
113
+
114
+ addressRegion:
115
+ type: String
116
+ text: CA
117
+
118
+ addressCountry:
119
+ type: String
120
+ text: SI or Slovenia
121
+
122
+ #ContactPoint
123
+ ContactPoint:
124
+
125
+ telephone:
126
+ type: String
127
+ text: +1-877-453-1304
128
+
129
+ contactType:
130
+ type: String
131
+ text: technical support
132
+
133
+ contactOption:
134
+ type: String
135
+ text: TollFree
136
+
137
+ areaServed:
138
+ type: Array
139
+ text: [US,CA]
140
+
141
+ availableLanguage:
142
+ type: String
143
+ text: [English,French]
144
+
145
+ FAQPage:
146
+ level: 1
147
+
148
+ dummy:
149
+ type: String
150
+ text: yes
151
+
152
+ mainEntity:
153
+ type: Question
154
+
155
+ Question:
156
+
157
+ name:
158
+ type: String
159
+ text: Question?
160
+
161
+ acceptedAnswer:
162
+ type: Answer
163
+ n: 1
164
+
165
+ Answer:
166
+ '@type': Answer
167
+ text: Your answer
168
+
@@ -0,0 +1,376 @@
1
+ #--
2
+ # Copyright (c) 2012+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+
25
+ ####################################################################
26
+ # Common methods which may also come handy in controllers or models or any
27
+ # other module of program.
28
+ #
29
+ # Usage: include CmsCommonHelper
30
+ ####################################################################
31
+ module CmsCommonHelper
32
+
33
+ ####################################################################
34
+ # Wrapper for i18 t method, with some spice added. If translation is not found English
35
+ # translation value will be returned. And if still not found default value will be returned if passed.
36
+ #
37
+ # Parameters:
38
+ # [key] String. String to be translated into locale.
39
+ # [default] String. Value returned if translation is not found.
40
+ #
41
+ # Example:
42
+ # t('translate.this','Enter text for ....')
43
+ #
44
+ # Returns:
45
+ # String. Translated text.
46
+ ####################################################################
47
+ def self.t(key, default=nil)
48
+ c = I18n.t(key)
49
+ if c.class == Hash or c.match( 'translation missing' )
50
+ c = I18n.t(key, locale: 'en')
51
+ # Still not found. Return default if set
52
+ if c.class == Hash or c.match( 'translation missing' )
53
+ c = default.nil? ? key : default
54
+ end
55
+ end
56
+ c
57
+ end
58
+
59
+ ####################################################################
60
+ def t(key, default=nil) #:nodoc
61
+ CmsCommonHelper.t(key, default)
62
+ end
63
+
64
+ ####################################################################
65
+ # Returns table (collection) name translation for usage in dialog title. Tablename
66
+ # title is provided by helpers.label.table_name.tabletitle locale.
67
+ #
68
+ # Parameters:
69
+ # [tablename] String. Table (collection) name to be translated.
70
+ # [default] String. Value returned if translation is not found.
71
+ #
72
+ # Returns:
73
+ # String. Translated text.
74
+ ####################################################################
75
+ def t_tablename(tablename, default=nil)
76
+ t('helpers.label.' + tablename + '.tabletitle', default || tablename)
77
+ end
78
+
79
+ ############################################################################
80
+ # Returns label for field translated to current locale for usage on data entry form.
81
+ # Translation is provided by lang.helpers.label.table_name.field_name locale. If
82
+ # translation is not found method will capitalize field_name and replace '_' with ' '.
83
+ ############################################################################
84
+ def t_name(field_name, default='')
85
+ c = t("helpers.label.#{@form['table']}.#{field_name}", default)
86
+ c = field_name.capitalize.gsub('_',' ') if c.match( 'translation missing' )
87
+ c
88
+ end
89
+
90
+ ###########################################################################
91
+ # When select field is used on form options for select can be provided by
92
+ # helpers.label.table_name.choices4_name locale. This is how select
93
+ # field options are translated. Method returns selected choice translated
94
+ # to current locale.
95
+ #
96
+ # Parameters:
97
+ # [model] String. Table (collection) model name (lowercase).
98
+ # [field] String. Field name used.
99
+ # [value] String. Value of field which translation will be returned.
100
+ #
101
+ # Example:
102
+ # # usage in program. Choice values for state are 'Deactivated:0,Active:1,Waiting:2'
103
+ # dc_name4_value('dc_user', 'state', @record.active )
104
+ #
105
+ # # usage in form
106
+ # columns:
107
+ # 2:
108
+ # name: state
109
+ # eval: dc_name4_value dc_user, state
110
+ #
111
+ # Returns:
112
+ # String. Descriptive text (translated) for selected choice value.
113
+ ############################################################################
114
+ def self.dc_name_for_value(model, field, value)
115
+ return '' if value.nil?
116
+ c = t('helpers.label.' + model + '.choices4_' + field )
117
+ a = c.chomp.split(',').inject([]) {|r,v| r << v.split(':') }
118
+ a.each {|e| return e.first if e.last.to_s == value.to_s }
119
+ '???'
120
+ end
121
+
122
+ ############################################################################
123
+ def dc_name_for_value(model, field, value)
124
+ CmsCommonHelper.dc_name_for_value(model, field, value)
125
+ end
126
+
127
+ ############################################################################
128
+ #
129
+ ############################################################################
130
+ def dc_name4_value(model, field, value) #nodoc
131
+ #dc_deprecate('dc_name4_value will be deprecated. Use dc_name_for_value instead.')
132
+ CmsCommonHelper.dc_name_for_value(model, field, value)
133
+ end
134
+
135
+ ############################################################################
136
+ # Return choices for field in model if choices are defined in localization text.
137
+ #
138
+ # Parameters:
139
+ # [model] String. Table (collection) model name (lowercase).
140
+ # [field] String. Field name used.
141
+ #
142
+ # Example:
143
+ # dc_choices4_field('dc_user', 'state' )
144
+ #
145
+ # Returns:
146
+ # Array. Choices for select input field
147
+ ############################################################################
148
+ def self.dc_choices_for_field(model, field)
149
+ c = CmsCommonHelper.t('helpers.label.' + model + '.choices4_' + field )
150
+ return ['error'] if c.match( 'translation missing' )
151
+ c.chomp.split(',').inject([]) {|r,v| r << v.split(':') }
152
+ end
153
+
154
+ ############################################################################
155
+ def dc_choices_for_field(model, field)
156
+ CmsCommonHelper.dc_choices_for_field(model, field)
157
+ end
158
+
159
+ ############################################################################
160
+ #
161
+ ############################################################################
162
+ def dc_choices4_field(model, field) #nodoc
163
+ #dc_deprecate('dc_choices4_field will be deprecated. Use dc_choices_for_field instead.')
164
+ CmsCommonHelper.dc_choices_for_field(model, field)
165
+ end
166
+
167
+ ############################################################################
168
+ # Will return descriptive text for id key when field in one table (collection) has belongs_to
169
+ # relation to other table.
170
+ #
171
+ # Parameters:
172
+ # [model] String. Table (collection) model name (lowercase).
173
+ # [field] String. Field name holding the value of descriptive text.
174
+ # [field_name] String. ID field name. This is by default id, but can be any other
175
+ # (preferred unique) field.
176
+ # [value] Value of id_field. Usually a BSON Key but can be any other data type.
177
+ #
178
+ # Example:
179
+ # # usage in program.
180
+ # dc_name4_id('dc_user', 'name', nil, dc_page.created_by)
181
+ #
182
+ # # usage in form
183
+ # columns:
184
+ # 2:
185
+ # name: site_id
186
+ # eval: dc_name4_id,site,name
187
+ # # username is saved to document instead of user.id field
188
+ # 5:
189
+ # name: user
190
+ # eval: dc_name4_id,dc_user,name,username
191
+ #
192
+ # Returns:
193
+ # String. Name (descriptive value) for specified key in table.
194
+ ############################################################################
195
+ def dc_name_for_id(model, field, field_name, id=nil)
196
+ return '' if id.nil?
197
+
198
+ field_name = (field_name || 'id').strip.to_sym
199
+ field = field.strip.to_sym
200
+ model = model.strip.classify.constantize if model.class == String
201
+ doc = Mongoid::QueryCache.cache { model.find_by(field_name => id) }
202
+
203
+ doc.nil? ? '' : (doc.send(field) rescue 'not defined')
204
+ end
205
+
206
+ ############################################################################
207
+ #
208
+ ############################################################################
209
+ def dc_name4_id(model, field, field_name, id=nil) #nodoc
210
+ #dc_deprecate('dc_name4_id will be deprecated. Use dc_name_for_id instead.')
211
+ dc_name_for_id(model, field, field_name, id)
212
+ end
213
+
214
+ ############################################################################
215
+ # Return html code for icon presenting boolean value. Icon is a picture of checked or unchecked box.
216
+ #
217
+ # Parameters:
218
+ # [value] Boolean.
219
+ #
220
+ # Example:
221
+ # # usage from program
222
+ # dc_icon4_boolean(some_value)
223
+ #
224
+ # # usage from form description
225
+ # columns:
226
+ # 10:
227
+ # name: active
228
+ # eval: dc_icon4_boolean
229
+ ############################################################################
230
+ def dc_icon_for_boolean(value=false)
231
+ dc_dont?(value, true) ? fa_icon('square-o lg') : fa_icon('check-square-o lg')
232
+ end
233
+
234
+ ############################################################################
235
+ #
236
+ ############################################################################
237
+ def dc_icon4_boolean(value=false) #nodoc
238
+ #dc_deprecate('dc_icon4_boolean will be deprecated. Use dc_icon_for_boolean instead.')
239
+ dc_icon_for_boolean(value)
240
+ end
241
+
242
+ ############################################################################
243
+ # Returns html code for displaying date/time formatted by strftime. Will return '' if value is nil.
244
+ #
245
+ # Parameters:
246
+ # [value] Date/DateTime/Time.
247
+ # [format] String. strftime format mask. Defaults to locale's default format.
248
+ ############################################################################
249
+ def self.dc_format_date_time(value, format=nil)
250
+ return '' if value.blank?
251
+
252
+ format ||= value.class == Date ? t('date.formats.default') : t('time.formats.default')
253
+ if format.size == 1
254
+ format = format.match(/d/i) ? t('date.formats.default') : t('time.formats.default')
255
+ end
256
+ value.strftime(format)
257
+ end
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
+ ############################################################################
266
+ def dc_format_date_time(value, format=nil) #:nodoc:
267
+ CmsCommonHelper.dc_format_date_time(value, format)
268
+ end
269
+
270
+ ####################################################################
271
+ #
272
+ ####################################################################
273
+ def dc_date_time(value, format) #:nodoc:
274
+ dc_deprecate 'dc_date_time will be deprecated! Use dc_format_date_time instead.'
275
+ dc_format_date_time(value, format)
276
+ end
277
+
278
+ ############################################################################
279
+ # Returns html code for displaying formatted number.
280
+ #
281
+ # Parameters:
282
+ # [value] Numeric number.
283
+ # [decimals] Integer. Number of decimals
284
+ # [separator] String. Decimals separator
285
+ # [delimiter] String. Thousands delimiter.
286
+ # [currency] String. Currency symbol if applied to result string.
287
+ ############################################################################
288
+ def self.dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil)
289
+ decimals ||= I18n.t('number.currency.format.precision')
290
+ separator ||= I18n.t('number.currency.format.separator')
291
+ separator = '' if decimals == 0
292
+ delimiter ||= I18n.t('number.currency.format.delimiter')
293
+ whole, dec = value.to_s.split('.')
294
+ whole = '0' if whole.blank?
295
+ # remove and remember sign
296
+ sign = ''
297
+ if whole[0] == '-'
298
+ whole.delete_prefix!('-')
299
+ sign << '-'
300
+ end
301
+ # format decimals
302
+ dec ||= '0'
303
+ dec = dec[0,decimals]
304
+ while dec.size < decimals do dec += '0' end
305
+ # slice whole on chunks of 3
306
+ ar = []
307
+ while whole.size > 0 do
308
+ n = whole.size >=3 ? 3 : whole.size
309
+ ar << whole.slice!(n*-1,n)
310
+ end
311
+ # put it all back and format
312
+ "#{sign}#{ar.reverse.join(delimiter)}#{separator}#{dec}"
313
+ end
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
+ ############################################################################
325
+ def dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil) #:nodoc:
326
+ CmsCommonHelper.dc_format_number(value, decimals, separator, delimiter, currency)
327
+ end
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
+
376
+ end