drg_cms 0.6.0.6 → 0.6.0.8

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +92 -36
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +141 -101
  4. data/app/assets/stylesheets/drg_cms/select-multiple.css +9 -12
  5. data/app/assets/stylesheets/drg_cms_cms.css +1 -1
  6. data/app/controllers/cmsedit_controller.rb +100 -32
  7. data/app/controllers/dc_application_controller.rb +71 -12
  8. data/app/controls/dc_report.rb +227 -0
  9. data/app/forms/all_options.yml +24 -5
  10. data/app/forms/dc_big_table.yml +1 -0
  11. data/app/forms/dc_big_table_value.yml +1 -0
  12. data/app/forms/dc_poll.yml +12 -5
  13. data/app/forms/dc_poll_item.yml +2 -1
  14. data/app/forms/dc_poll_result.yml +9 -0
  15. data/app/forms/dc_site.yml +2 -6
  16. data/app/helpers/cms_common_helper.rb +311 -0
  17. data/app/helpers/{cmsedit_edit_helper.rb → cms_edit_helper.rb} +52 -25
  18. data/app/helpers/{cmsedit_helper.rb → cms_helper.rb} +38 -31
  19. data/app/helpers/{cmsedit_index_helper.rb → cms_index_helper.rb} +152 -155
  20. data/app/helpers/dc_application_helper.rb +20 -234
  21. data/app/models/concerns/dc_site_concern.rb +12 -1
  22. data/app/models/dc_filter.rb +10 -8
  23. data/app/models/dc_permission.rb +30 -0
  24. data/app/models/dc_poll.rb +1 -0
  25. data/app/models/dc_poll_result.rb +4 -2
  26. data/app/models/dc_temp.rb +5 -2
  27. data/app/models/drgcms_form_fields.rb +12 -1
  28. data/app/models/drgcms_form_fields/date_picker.rb +4 -3
  29. data/app/models/drgcms_form_fields/datetime_picker.rb +4 -3
  30. data/app/models/drgcms_form_fields/drgcms_field.rb +18 -4
  31. data/app/models/drgcms_form_fields/embedded.rb +17 -9
  32. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  33. data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
  34. data/app/models/drgcms_form_fields/method.rb +65 -0
  35. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +17 -11
  36. data/app/models/drgcms_form_fields/radio.rb +10 -5
  37. data/app/models/drgcms_form_fields/readonly.rb +1 -1
  38. data/app/models/drgcms_form_fields/select.rb +49 -32
  39. data/app/models/drgcms_form_fields/text_autocomplete.rb +21 -21
  40. data/app/renderers/dc_big_menu_renderer.rb +1 -0
  41. data/app/renderers/dc_gallery_renderer.rb +1 -0
  42. data/app/renderers/dc_menu_renderer.rb +1 -0
  43. data/app/renderers/dc_page_renderer.rb +1 -0
  44. data/app/renderers/dc_part_renderer.rb +1 -0
  45. data/app/renderers/dc_piece_renderer.rb +1 -1
  46. data/app/renderers/dc_poll_renderer.rb +43 -38
  47. data/app/renderers/dc_renderer.rb +1 -0
  48. data/app/renderers/dc_simple_menu_renderer.rb +1 -0
  49. data/config/locales/drgcms_en.yml +3 -2
  50. data/config/locales/drgcms_sl.yml +5 -4
  51. data/config/locales/models_en.yml +9 -2
  52. data/config/locales/models_sl.yml +10 -3
  53. data/lib/drg_cms/version.rb +1 -1
  54. data/lib/generators/new_drg_form/new_drg_form_generator.rb +5 -3
  55. data/lib/tasks/database.rake +6 -56
  56. metadata +35 -33
  57. data/app/helpers/application_helper.rb +0 -2
@@ -3,6 +3,9 @@
3
3
  extend: form_name
4
4
  table: table_name
5
5
  title: Some title
6
+ title:
7
+ text: Dynamicaly defined title
8
+ eval: SomeClass.title_method
6
9
  controls: controls_file
7
10
  readonly: 1
8
11
  permissions:
@@ -55,6 +58,14 @@ result_set:
55
58
  footer: custom_footer
56
59
  actions_width: 100
57
60
  per_page: 10
61
+
62
+ dblclick:
63
+ table: model_name
64
+ form_name: form_name
65
+ readonly: 1
66
+ action: show
67
+ window_close: 1 (close), 2 (history.back)
68
+
58
69
  table_style: 'color: green;'
59
70
  table_class: tclass
60
71
  tr_style: 'color: green;'
@@ -92,6 +103,7 @@ result_set:
92
103
  name: name
93
104
  eval: dc_name4_id,dc_site,name
94
105
  width: 10%
106
+ width: none || hidden
95
107
  align: right (center)
96
108
  style: 'color: red;'
97
109
  td_class: class-name
@@ -212,8 +224,8 @@ form:
212
224
  100:
213
225
  name: css
214
226
  type: text_area
215
- html:
216
- size: 100x20
227
+ size: 100x20
228
+
217
229
 
218
230
  110:
219
231
  name: active
@@ -223,20 +235,26 @@ form:
223
235
  10:
224
236
  name: form
225
237
  type: text_area
238
+ size: 100x50
226
239
  html:
227
- size: 100x50
228
- style: 'font-family:courier;'
240
+ style: 'font-family:courier;'
229
241
 
230
242
  tab3:
231
243
  20:
232
244
  name: dc_poll_items
233
245
  type: embedded
246
+ load: default,delay,always
234
247
  form_name: dc_poll_item
235
248
  html:
236
249
  height: 800
237
250
  20:
238
251
  name: odhod
239
- type: datetime_picker
252
+ type: datetime_picker
253
+ 20:
254
+ name: gender
255
+ type: radio
256
+ inline: true
257
+
240
258
  40:
241
259
  name: customer_id
242
260
  type: text_autocomplete
@@ -245,6 +263,7 @@ form:
245
263
  field: custumer_name
246
264
  method: search
247
265
  with_new: customer
266
+ is_id: false
248
267
  size: 50
249
268
  50:
250
269
  name: kats
@@ -21,6 +21,7 @@ result_set:
21
21
  name: key
22
22
  2:
23
23
  name: description
24
+ width: 25%
24
25
  3:
25
26
  name: site_id
26
27
  eval: dc_name4_id,dc_site,name
@@ -22,6 +22,7 @@ result_set:
22
22
  name: value
23
23
  2:
24
24
  name: description
25
+ width: 30%
25
26
  3:
26
27
  name: active
27
28
  eval: dc_icon4_boolean
@@ -78,13 +78,14 @@ form:
78
78
 
79
79
  80:
80
80
  name: valid_from
81
- type: datetime_select
81
+ type: datetime_picker
82
82
  options:
83
83
  include_blank: true
84
+ group: 2
84
85
 
85
86
  90:
86
87
  name: valid_to
87
- type: datetime_select
88
+ type: datetime_picker
88
89
  options:
89
90
  include_blank: true
90
91
 
@@ -99,12 +100,11 @@ form:
99
100
  type: check_box
100
101
  tab2:
101
102
  10:
102
- name: form
103
+ name: js
103
104
  type: text_area
104
105
  html:
105
106
  size: 100x50
106
- style: 'font-family:courier;'
107
-
107
+ style: 'font-family:courier;'
108
108
  tab3:
109
109
  20:
110
110
  name: dc_poll_items
@@ -112,3 +112,10 @@ form:
112
112
  form_name: dc_poll_item
113
113
  html:
114
114
  height: 800
115
+ tab4:
116
+ 10:
117
+ name: form
118
+ type: text_area
119
+ html:
120
+ size: 100x50
121
+ style: 'font-family:courier;'
@@ -10,7 +10,8 @@ index:
10
10
  result_set:
11
11
  actions:
12
12
  1: edit
13
- 2: delete
13
+ 2: duplicate
14
+ 3: delete
14
15
 
15
16
  columns:
16
17
  1:
@@ -3,7 +3,9 @@
3
3
  table: dc_poll_result
4
4
 
5
5
  index:
6
+ filter: data as text_field
6
7
  actions:
8
+ 1: filter
7
9
  10:
8
10
  type: field
9
11
  name: dc_poll_id
@@ -53,6 +55,10 @@ result_set:
53
55
  name: created_at
54
56
  format: '%d.%m.%Y %H:%M'
55
57
  width: 10%
58
+ 30:
59
+ name: confirmed
60
+ eval: dc_icon4_boolean
61
+ width: 5%
56
62
 
57
63
  form:
58
64
  actions:
@@ -69,6 +75,9 @@ form:
69
75
  type: text_area
70
76
  size: 100x25
71
77
  30:
78
+ name: confirmed
79
+ type: check_box
80
+ 40:
72
81
  name: created_at
73
82
  type: readonly
74
83
  format: '%d.%m.%Y %H:%M'
@@ -100,15 +100,11 @@ form:
100
100
  name: menu_class
101
101
  type: text_field
102
102
  size: 20
103
- # 60:
104
- # name: menu_name
105
- # type: text_with_select
106
- # eval: dc_choices4(@record.menu_class,'description','name')
107
- # size: 30
108
103
  70:
109
104
  name: menu_id
110
105
  type: select
111
- eval: dc_choices4(@record.menu_class,'description','_id')
106
+ eval: DcSite.choices_for_menu
107
+ depend: menu_class
112
108
  90:
113
109
  name: settings
114
110
  type: text_area
@@ -0,0 +1,311 @@
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
+ field_name = (field_name || 'id').strip.to_sym
198
+ field = field.strip.to_sym
199
+
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')
203
+ end
204
+
205
+ ############################################################################
206
+ #
207
+ ############################################################################
208
+ def dc_name4_id(model, field, field_name, id=nil) #nodoc
209
+ #dc_deprecate('dc_name4_id will be deprecated. Use dc_name_for_id instead.')
210
+ dc_name_for_id(model, field, field_name, id)
211
+ end
212
+
213
+ ############################################################################
214
+ # Return html code for icon presenting boolean value. Icon is a picture of checked or unchecked box.
215
+ #
216
+ # Parameters:
217
+ # [value] Boolean.
218
+ #
219
+ # Example:
220
+ # # usage from program
221
+ # dc_icon4_boolean(some_value)
222
+ #
223
+ # # usage from form description
224
+ # columns:
225
+ # 10:
226
+ # name: active
227
+ # eval: dc_icon4_boolean
228
+ ############################################################################
229
+ def dc_icon_for_boolean(value=false)
230
+ dc_dont?(value, true) ? fa_icon('square-o lg') : fa_icon('check-square-o lg')
231
+ end
232
+
233
+ ############################################################################
234
+ #
235
+ ############################################################################
236
+ def dc_icon4_boolean(value=false) #nodoc
237
+ #dc_deprecate('dc_icon4_boolean will be deprecated. Use dc_icon_for_boolean instead.')
238
+ dc_icon_for_boolean(value)
239
+ end
240
+
241
+ ############################################################################
242
+ # Returns html code for displaying date/time formatted by strftime. Will return '' if value is nil.
243
+ #
244
+ # Parameters:
245
+ # [value] Date/DateTime/Time.
246
+ # [format] String. strftime format mask. Defaults to locale's default format.
247
+ ############################################################################
248
+ def self.dc_format_date_time(value, format=nil)
249
+ return '' if value.blank?
250
+
251
+ format ||= value.class == Date ? t('date.formats.default') : t('time.formats.default')
252
+ if format.size == 1
253
+ format = format.match(/d/i) ? t('date.formats.default') : t('time.formats.default')
254
+ end
255
+ value.strftime(format)
256
+ end
257
+
258
+ def dc_format_date_time(value, format=nil) #:nodoc:
259
+ CmsCommonHelper.dc_format_date_time(value, format)
260
+ end
261
+
262
+ ####################################################################
263
+ #
264
+ ####################################################################
265
+ def dc_date_time(value, format) #:nodoc:
266
+ dc_deprecate 'dc_date_time will be deprecated! Use dc_format_date_time instead.'
267
+ dc_format_date_time(value, format)
268
+ end
269
+
270
+ ############################################################################
271
+ # Returns html code for displaying formatted number.
272
+ #
273
+ # Parameters:
274
+ # [value] Numeric number.
275
+ # [decimals] Integer. Number of decimals
276
+ # [separator] String. Decimals separator
277
+ # [delimiter] String. Thousands delimiter.
278
+ # [currency] String. Currency symbol if applied to result string.
279
+ ############################################################################
280
+ def self.dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil)
281
+ decimals ||= I18n.t('number.currency.format.precision')
282
+ separator ||= I18n.t('number.currency.format.separator')
283
+ separator = '' if decimals == 0
284
+ delimiter ||= I18n.t('number.currency.format.delimiter')
285
+ whole, dec = value.to_s.split('.')
286
+ whole = '0' if whole.blank?
287
+ # remove and remember sign
288
+ sign = ''
289
+ if whole[0] == '-'
290
+ whole.delete_prefix!('-')
291
+ sign << '-'
292
+ end
293
+ # format decimals
294
+ dec ||= '0'
295
+ dec = dec[0,decimals]
296
+ while dec.size < decimals do dec += '0' end
297
+ # slice whole on chunks of 3
298
+ ar = []
299
+ while whole.size > 0 do
300
+ n = whole.size >=3 ? 3 : whole.size
301
+ ar << whole.slice!(n*-1,n)
302
+ end
303
+ # put it all back and format
304
+ "#{sign}#{ar.reverse.join(delimiter)}#{separator}#{dec}"
305
+ end
306
+
307
+ def dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil) #:nodoc:
308
+ CmsCommonHelper.dc_format_number(value, decimals, separator, delimiter, currency)
309
+ end
310
+
311
+ end