drg_cms 0.6.0.1 → 0.6.1.1.1

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +454 -145
  3. data/app/assets/javascripts/drg_cms_application.js +1 -1
  4. data/app/assets/stylesheets/drg_cms/drg_cms.css +635 -244
  5. data/app/assets/stylesheets/drg_cms/select-multiple.css +18 -12
  6. data/app/assets/stylesheets/drg_cms_cms.css +1 -1
  7. data/app/controllers/cmsedit_controller.rb +515 -335
  8. data/app/controllers/dc_application_controller.rb +378 -111
  9. data/app/controllers/dc_common_controller.rb +105 -14
  10. data/app/{controllers → controls}/browse_models_control.rb +0 -0
  11. data/app/controls/dc_help_control.rb +126 -0
  12. data/app/{controllers → controls}/dc_page_control.rb +24 -8
  13. data/app/controls/dc_poll_result_control.rb +88 -0
  14. data/app/controls/dc_report.rb +223 -0
  15. data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
  16. data/app/forms/all_options.yml +44 -9
  17. data/app/forms/cms_menu.yml +28 -18
  18. data/app/forms/dc_ad.yml +11 -22
  19. data/app/forms/dc_big_table.yml +1 -0
  20. data/app/forms/dc_big_table_value.yml +1 -0
  21. data/app/forms/dc_category.yml +2 -1
  22. data/app/forms/dc_design.yml +20 -16
  23. data/app/forms/dc_filter.yml +3 -6
  24. data/app/forms/dc_help_1.yml +109 -0
  25. data/app/forms/dc_journal.yml +3 -1
  26. data/app/forms/dc_json_ld.yml +59 -0
  27. data/app/forms/dc_key_value.yml +32 -0
  28. data/app/forms/dc_link.yml +1 -1
  29. data/app/forms/dc_menu.yml +2 -0
  30. data/app/forms/dc_menu_item.yml +2 -0
  31. data/app/forms/dc_page.yml +3 -5
  32. data/app/forms/dc_part.yml +1 -0
  33. data/app/forms/dc_piece.yml +1 -0
  34. data/app/forms/dc_poll.yml +15 -5
  35. data/app/forms/dc_poll_item.yml +2 -1
  36. data/app/forms/dc_poll_result.yml +83 -0
  37. data/app/forms/dc_poll_result_export.yml +35 -0
  38. data/app/forms/dc_seo.yml +33 -0
  39. data/app/forms/dc_simple_menu.yml +2 -0
  40. data/app/forms/dc_site.yml +4 -12
  41. data/app/forms/dc_user.yml +27 -11
  42. data/app/forms/dc_user_role.yml +3 -0
  43. data/app/forms/json_ld_schema.yml +168 -0
  44. data/app/helpers/cms_common_helper.rb +375 -0
  45. data/app/helpers/cms_edit_helper.rb +506 -0
  46. data/app/helpers/cms_helper.rb +268 -0
  47. data/app/helpers/cms_index_helper.rb +580 -0
  48. data/app/helpers/dc_application_helper.rb +218 -306
  49. data/app/models/concerns/dc_page_concern.rb +40 -6
  50. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  51. data/app/models/concerns/dc_seo_concern.rb +66 -0
  52. data/app/models/concerns/dc_site_concern.rb +67 -44
  53. data/app/models/concerns/dc_user_concern.rb +57 -18
  54. data/app/models/dc_design.rb +30 -18
  55. data/app/models/dc_filter.rb +22 -13
  56. data/app/models/dc_json_ld.rb +152 -0
  57. data/app/models/dc_key_value.rb +48 -0
  58. data/app/models/dc_key_value_store.rb +1 -0
  59. data/app/models/dc_memory.rb +8 -1
  60. data/app/models/dc_page.rb +0 -1
  61. data/app/models/dc_permission.rb +49 -9
  62. data/app/models/dc_policy.rb +25 -14
  63. data/app/models/dc_policy_role.rb +22 -11
  64. data/app/models/dc_poll.rb +39 -19
  65. data/app/models/dc_poll_result.rb +46 -0
  66. data/app/models/dc_temp.rb +140 -0
  67. data/app/models/dc_user_role.rb +2 -2
  68. data/app/models/drgcms_form_fields.rb +12 -1
  69. data/app/models/drgcms_form_fields/action.rb +61 -0
  70. data/app/models/drgcms_form_fields/comment.rb +8 -4
  71. data/app/models/drgcms_form_fields/date_picker.rb +11 -9
  72. data/app/models/drgcms_form_fields/date_select.rb +1 -1
  73. data/app/models/drgcms_form_fields/datetime_picker.rb +12 -10
  74. data/app/models/drgcms_form_fields/datetime_select.rb +1 -1
  75. data/app/models/drgcms_form_fields/drgcms_field.rb +55 -9
  76. data/app/models/drgcms_form_fields/embedded.rb +26 -16
  77. data/app/models/drgcms_form_fields/file_field.rb +52 -0
  78. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  79. data/app/models/drgcms_form_fields/hash_field.rb +90 -0
  80. data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
  81. data/app/models/drgcms_form_fields/html_field.rb +1 -1
  82. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  83. data/app/models/drgcms_form_fields/method.rb +66 -0
  84. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +23 -14
  85. data/app/models/drgcms_form_fields/number_field.rb +15 -6
  86. data/app/models/drgcms_form_fields/radio.rb +96 -0
  87. data/app/models/drgcms_form_fields/readonly.rb +2 -2
  88. data/app/models/drgcms_form_fields/select.rb +92 -29
  89. data/app/models/drgcms_form_fields/text_area.rb +1 -1
  90. data/app/models/drgcms_form_fields/text_autocomplete.rb +31 -17
  91. data/app/models/drgcms_form_fields/text_field.rb +1 -1
  92. data/app/models/drgcms_form_fields/text_with_select.rb +6 -3
  93. data/app/models/drgcms_form_fields/tree_select.rb +15 -4
  94. data/app/{helpers → renderers}/dc_ad_renderer.rb +0 -0
  95. data/app/{helpers → renderers}/dc_big_menu_renderer.rb +1 -0
  96. data/app/{helpers → renderers}/dc_captcha_renderer.rb +0 -0
  97. data/app/{helpers → renderers}/dc_common_renderer.rb +0 -0
  98. data/app/{helpers → renderers}/dc_gallery_renderer.rb +1 -0
  99. data/app/{helpers → renderers}/dc_menu_renderer.rb +11 -4
  100. data/app/{helpers → renderers}/dc_page_renderer.rb +1 -0
  101. data/app/{helpers → renderers}/dc_part_renderer.rb +5 -4
  102. data/app/{helpers → renderers}/dc_piece_renderer.rb +1 -1
  103. data/app/{helpers → renderers}/dc_poll_renderer.rb +91 -64
  104. data/app/{helpers → renderers}/dc_renderer.rb +1 -0
  105. data/app/{helpers → renderers}/dc_simple_menu_renderer.rb +1 -0
  106. data/app/views/cmsedit/{remove_edit_stuff.js.erb → __remove_edit_stuff.js.erb} +0 -0
  107. data/app/views/cmsedit/{show.html.erb → __show.html.erb} +0 -0
  108. data/app/views/cmsedit/_edit_stuff.html.erb +4 -25
  109. data/app/views/cmsedit/_form.html.erb +4 -3
  110. data/app/views/cmsedit/_result.html.erb +2 -3
  111. data/app/views/cmsedit/edit.html.erb +4 -1
  112. data/app/views/cmsedit/index.html.erb +7 -1
  113. data/app/views/cmsedit/new.html.erb +3 -1
  114. data/app/views/dc_common/_help.html.erb +17 -0
  115. data/app/views/layouts/models.html.erb +2 -1
  116. data/config/locales/drgcms_en.yml +27 -3
  117. data/config/locales/drgcms_sl.yml +32 -5
  118. data/config/locales/models_en.yml +65 -17
  119. data/config/locales/models_sl.yml +69 -18
  120. data/drg_cms.gemspec +1 -1
  121. data/lib/drg_cms.rb +61 -1
  122. data/lib/drg_cms/version.rb +1 -1
  123. data/lib/generators/new_drg_form/new_drg_form_generator.rb +9 -2
  124. data/lib/tasks/database.rake +6 -56
  125. metadata +73 -54
  126. data/app/assets/stylesheets/drg_cms/__jquery-ui.css +0 -339
  127. data/app/helpers/application_helper.rb +0 -2
  128. data/app/helpers/cmsedit_helper.rb +0 -888
  129. data/app/models/dc_dummy.rb +0 -102
  130. 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,375 @@
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 = '<a id="fields"></a>'
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.html_safe
366
+ end
367
+
368
+ ############################################################################
369
+ # Will return text from help files
370
+ ############################################################################
371
+ def dc_help_body
372
+ (params[:type] == 'index' ? @help['index'] : @help['form']).html_safe
373
+ end
374
+
375
+ end