drg_cms 0.6.0.6 → 0.6.0.8

Sign up to get free protection for your applications and to get access to all the features.
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