drg_cms 0.6.0.8 → 0.6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +100 -58
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +177 -43
  4. data/app/controllers/cmsedit_controller.rb +149 -145
  5. data/app/controllers/dc_application_controller.rb +235 -113
  6. data/app/controllers/dc_common_controller.rb +32 -3
  7. data/app/controls/dc_help_control.rb +126 -0
  8. data/app/controls/dc_report.rb +5 -7
  9. data/app/forms/all_options.yml +10 -4
  10. data/app/forms/cms_menu.yml +7 -1
  11. data/app/forms/dc_category.yml +2 -1
  12. data/app/forms/dc_design.yml +1 -0
  13. data/app/forms/dc_help_1.yml +109 -0
  14. data/app/forms/dc_journal.yml +3 -1
  15. data/app/forms/dc_link.yml +1 -1
  16. data/app/forms/dc_menu.yml +2 -0
  17. data/app/forms/dc_menu_item.yml +1 -0
  18. data/app/forms/dc_page.yml +2 -0
  19. data/app/forms/dc_part.yml +1 -0
  20. data/app/forms/dc_piece.yml +1 -0
  21. data/app/forms/dc_poll.yml +3 -0
  22. data/app/forms/dc_simple_menu.yml +2 -0
  23. data/app/forms/dc_site.yml +2 -6
  24. data/app/forms/dc_user.yml +27 -11
  25. data/app/forms/dc_user_role.yml +3 -0
  26. data/app/helpers/cms_common_helper.rb +69 -4
  27. data/app/helpers/cms_edit_helper.rb +32 -24
  28. data/app/helpers/cms_helper.rb +64 -26
  29. data/app/helpers/cms_index_helper.rb +84 -72
  30. data/app/helpers/dc_application_helper.rb +33 -24
  31. data/app/models/concerns/dc_page_concern.rb +11 -2
  32. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  33. data/app/models/concerns/dc_site_concern.rb +56 -44
  34. data/app/models/concerns/dc_user_concern.rb +57 -18
  35. data/app/models/dc_design.rb +29 -19
  36. data/app/models/dc_key_value_store.rb +1 -0
  37. data/app/models/dc_permission.rb +19 -9
  38. data/app/models/dc_policy.rb +25 -14
  39. data/app/models/dc_policy_role.rb +22 -11
  40. data/app/models/dc_temp.rb +1 -1
  41. data/app/models/dc_user_role.rb +2 -2
  42. data/app/models/drgcms_form_fields/embedded.rb +5 -8
  43. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  44. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  45. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  46. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  47. data/app/models/drgcms_form_fields/method.rb +5 -4
  48. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  49. data/app/models/drgcms_form_fields/select.rb +10 -9
  50. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  51. data/app/views/cmsedit/edit.html.erb +2 -0
  52. data/app/views/cmsedit/index.html.erb +2 -1
  53. data/app/views/cmsedit/new.html.erb +2 -0
  54. data/app/views/dc_common/_help.html.erb +8 -0
  55. data/app/views/layouts/models.html.erb +2 -1
  56. data/config/locales/drgcms_en.yml +12 -0
  57. data/config/locales/drgcms_sl.yml +15 -0
  58. data/config/locales/models_en.yml +5 -5
  59. data/config/locales/models_sl.yml +7 -6
  60. data/lib/drg_cms.rb +58 -0
  61. data/lib/drg_cms/version.rb +1 -1
  62. metadata +5 -3
  63. data/app/models/__dc_dummy.rb +0 -102
@@ -88,7 +88,7 @@ def index
88
88
  @form['result_set'] ||= {}
89
89
  redirected = (@form['table'] == 'dc_memory' ? process_in_memory : process_collections)
90
90
  return if redirected
91
- #
91
+
92
92
  call_callback_method(@form['result_set']['footer'] || 'dc_footer')
93
93
  respond_to do |format|
94
94
  format.html { render action: :index }
@@ -108,9 +108,9 @@ end
108
108
  ########################################################################
109
109
  def show
110
110
  find_record
111
+ # before_show callback
111
112
  if (m = callback_method('before_show') )
112
113
  ret = call_callback_method(m)
113
- # Don't do anything if return is false
114
114
  if ret.class == FalseClass
115
115
  @form['readonly'] = nil # must be
116
116
  return index
@@ -148,20 +148,21 @@ def logout
148
148
  end
149
149
 
150
150
  ########################################################################
151
- # Logout action. Used to logout direct from CMS.
152
- #
153
- # Logout can be called directly with url http://site.com/cmsedit/logout
151
+ # Shortcut for setting currently selected site in development. Will search
152
+ # for dc_site document with site name 'test' and set alias_for to site
153
+ # url parameter.
154
154
  ########################################################################
155
155
  def set_test_site
156
156
  # only in development
157
- return dc_render_404 if !Rails.env.development?
157
+ return dc_render_404 unless Rails.env.development?
158
+
158
159
  alias_site = DcSite.find_by(:name => params[:site])
159
160
  return dc_render_404 unless alias_site
161
+
160
162
  # update alias for
161
- site = DcSite.find_by(:name => 'test')
163
+ site = DcSite.find_by(:name => 'test')
162
164
  site.alias_for = params[:site]
163
165
  site.save
164
- # redirect to root
165
166
  redirect_to '/'
166
167
  end
167
168
 
@@ -169,17 +170,17 @@ end
169
170
  # New action.
170
171
  ########################################################################
171
172
  def new
172
- # clear flash messages.
173
+ # clear flash messages.
173
174
  flash[:error] = flash[:warning] = flash[:info] = nil
174
175
  create_new_empty_record
176
+ # before_new callback
175
177
  if (m = callback_method('before_new') )
176
178
  ret = call_callback_method(m)
177
- # Don't do anything if return is false
178
179
  return index if ret.class == FalseClass
179
180
  end
180
181
  table = @tables.last[1] + '.'
181
- # initial values set on page
182
- if cookies[:record] and cookies[:record].size > 0
182
+ # initial values set on page
183
+ if cookies[:record] && cookies[:record].size > 0
183
184
  Marshal.load(cookies[:record]).each do |k,v|
184
185
  k = k.to_s
185
186
  if k.match(table)
@@ -188,15 +189,14 @@ def new
188
189
  end
189
190
  end
190
191
  end
191
- # initial values set in url
192
+ # initial values set in url (params)
192
193
  params.each do |k,v|
193
194
  if k.match(table)
194
195
  field = k.split('.').last
195
196
  @record.send("#{field}=", v) if @record.respond_to?(field)
196
197
  end
197
198
  end
198
- # This is how we set default values for new record
199
- #dc_new_record() if respond_to?('dc_new_record')
199
+ # new_record callback. Set default values for new record
200
200
  if (m = callback_method('new_record') ) then call_callback_method(m) end
201
201
  @parms['action'] = 'create'
202
202
  end
@@ -204,19 +204,21 @@ end
204
204
  ########################################################################
205
205
  # Duplicate embedded document. Since embedded documents are returned differently
206
206
  # then top level document. Subroutine of duplicate_socument.
207
+ #
208
+ #TODO Works for two embedded levels. Dies with third and more levels.
207
209
  ########################################################################
208
210
  def duplicate_embedded(source) #:nodoc:
209
- # TODO Works for two embedded levels. Dies with third and more levels.
210
211
  dest = {}
211
212
  source.each do |attribute_name, value|
212
213
  next if attribute_name == '_id' # don't duplicate _id
214
+
213
215
  if value.class == Array
214
216
  dest[attribute_name] = []
215
217
  value.each do |ar|
216
218
  dest[attribute_name] << duplicate_embedded(ar)
217
219
  end
218
- else
219
- # if duplicate string must be added. Useful for unique attributes
220
+ else
221
+ # if duplicate, string dup is added. For unique fields
220
222
  add_duplicate = params['dup_fields'].to_s.match(attribute_name + ',')
221
223
  dest[attribute_name] = value
222
224
  dest[attribute_name] << ' dup' if add_duplicate
@@ -229,20 +231,22 @@ end
229
231
 
230
232
  ########################################################################
231
233
  # Will create duplicate document of source document. This method is used for
232
- # duplicating document and is called from create action.
234
+ # duplicating document and is subroutine of create action.
233
235
  ########################################################################
234
236
  def duplicate_document(source)
235
237
  dest = {}
236
238
  source.attribute_names.each do |attribute_name|
237
239
  next if attribute_name == '_id' # don't duplicate _id
238
- # if duplicate, string must be added. Useful for unique attributes
240
+
241
+ # if duplicate, string dup is added. For unique fields
239
242
  add_duplicate = params['dup_fields'].to_s.match(attribute_name + ',')
240
243
  dest[attribute_name] = source[attribute_name]
241
244
  dest[attribute_name] << ' dup' if add_duplicate
242
245
  end
243
- # embedded documents
246
+ # embedded documents
244
247
  source.embedded_relations.keys.each do |embedded_name|
245
248
  next if source[embedded_name].nil? # it happens
249
+
246
250
  dest[embedded_name] = []
247
251
  source[embedded_name].each do |embedded|
248
252
  dest[embedded_name] << duplicate_embedded(embedded)
@@ -257,32 +261,35 @@ end
257
261
  # Create (or duplicate) action. Action is also used for turning filter on.
258
262
  ########################################################################
259
263
  def create
260
- # abusing create for turning filter on
264
+ # abusing create for turning filter on
261
265
  return index if params[:filter].to_s == 'on'
262
- # not authorized
266
+
267
+ # not authorized
263
268
  unless dc_user_can(DcPermission::CAN_CREATE)
264
269
  flash[:error] = t('drgcms.not_authorized')
265
270
  return index
266
271
  end
267
- #
268
- if params['id'].nil? # create record
269
- # Prevent double form submit
272
+
273
+ # create document
274
+ if params['id'].nil?
275
+ # Prevent double form submit
270
276
  params[:form_time_stamp] = params[:form_time_stamp].to_i
271
277
  session[:form_time_stamp] ||= 0
272
278
  return index if params[:form_time_stamp] <= session[:form_time_stamp]
279
+
273
280
  session[:form_time_stamp] = params[:form_time_stamp]
274
- #
275
281
  create_new_empty_record
276
282
  if save_data
277
283
  flash[:info] = t('drgcms.doc_saved')
278
284
  params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
279
285
  return process_return_to(params[:return_to]) if params[:return_to]
280
286
 
281
- @parms['id'] = @record.id # must be set, for proper update link
282
- params[:id] = @record.id # must be set, for find_record
287
+ @parms['id'] = @record.id # must be set, for proper update link
288
+ params[:id] = @record.id # must be set, for find_record
283
289
  edit
284
290
  else # error
285
291
  return process_return_to(params[:return_to]) if params[:return_to]
292
+
286
293
  render action: :new
287
294
  end
288
295
  else # duplicate record
@@ -304,7 +311,7 @@ def edit
304
311
  find_record
305
312
  if (m = callback_method('before_edit') )
306
313
  ret = call_callback_method(m)
307
- # Don't do anything if return is false
314
+ # don't do anything if return is false
308
315
  return index if ret.class == FalseClass
309
316
  end
310
317
  @parms['action'] = 'update'
@@ -316,29 +323,27 @@ end
316
323
  ########################################################################
317
324
  def update
318
325
  find_record
319
- # check if record was not updated in mean time
326
+ # check if record was not updated in mean time
320
327
  if @record.respond_to?(:updated_at)
321
328
  if params[:last_updated_at].to_i != @record.updated_at.to_i
322
329
  flash[:error] = t('drgcms.updated_by_other')
323
330
  return render(action: :edit)
324
331
  end
325
332
  end
326
- #
333
+
327
334
  if dc_user_can(DcPermission::CAN_EDIT_ALL) or
328
335
  ( @record.respond_to?('created_by') and
329
336
  @record.created_by == session[:user_id] and
330
337
  dc_user_can(DcPermission::CAN_EDIT) )
331
- #
338
+
332
339
  if save_data
333
340
  params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
334
341
  @parms['action'] = 'update'
335
- # Process return_to link
342
+ # Process return_to
336
343
  return process_return_to(params[:return_to]) if params[:return_to]
337
344
  else
338
345
  # do not forget before_edit callback
339
- if m = callback_method('before_edit')
340
- call_callback_method(m)
341
- end
346
+ if m = callback_method('before_edit') then call_callback_method(m) end
342
347
  return render action: :edit
343
348
  end
344
349
  else
@@ -352,7 +357,7 @@ end
352
357
  ########################################################################
353
358
  def destroy
354
359
  find_record
355
- # Which permission is required to delete
360
+ # check permission required to delete
356
361
  permission = if params['operation'].nil?
357
362
  if @record.respond_to?('created_by') # needs can_delete_all if created_by is present and not owner
358
363
  (@record.created_by == session[:user_id]) ? DcPermission::CAN_DELETE : DcPermission::CAN_DELETE_ALL
@@ -367,38 +372,39 @@ def destroy
367
372
  end
368
373
  end
369
374
  ok2delete = dc_user_can(permission)
370
- #
375
+
371
376
  case
372
- # not authorized
377
+ # not authorized
373
378
  when !ok2delete then
374
379
  flash[:error] = t('drgcms.not_authorized')
375
380
  return index
376
-
381
+
382
+ # delete document
377
383
  when params['operation'].nil? then
378
- # Process before delete callback
384
+ # before_delete callback
379
385
  if (m = callback_method('before_delete') )
380
386
  ret = call_callback_method(m)
381
- # Don't do anything if return is false
387
+ # don't do anything if return is false
382
388
  return index if ret.class == FalseClass
383
389
  end
384
- # document deleted
390
+
385
391
  if @record.destroy
386
392
  save_journal(:delete)
387
393
  flash[:info] = t('drgcms.record_deleted')
388
- # Process after delete callback
394
+ # after_delete callback
389
395
  if (m = callback_method('after_delete') )
390
396
  call_callback_method(m)
391
397
  elsif params['after-delete'].to_s.match('return_to')
392
398
  params[:return_to] = params['after-delete']
393
399
  end
394
- # Process return_to link
400
+ # Process return_to link
395
401
  return process_return_to(params[:return_to]) if params[:return_to]
396
402
  else
397
403
  flash[:error] = dc_error_messages_for(@record)
398
404
  end
399
405
  return index
400
406
 
401
- # deaktivate document
407
+ # deactivate document
402
408
  when params['operation'] == 'disable' then
403
409
  if @record.respond_to?('active')
404
410
  @record.active = false
@@ -408,7 +414,7 @@ def destroy
408
414
  flash[:info] = t('drgcms.doc_disabled')
409
415
  end
410
416
 
411
- # reaktivate document
417
+ # reactivate document
412
418
  when params['operation'] == 'enable' then
413
419
  if @record.respond_to?('active')
414
420
  @record.active = true
@@ -418,11 +424,11 @@ def destroy
418
424
  flash[:info] = t('drgcms.doc_enabled')
419
425
  end
420
426
 
421
- # reorder documents
427
+ #TODO reorder documents
422
428
  when params['operation'] == 'reorder' then
423
429
 
424
430
  end
425
- #
431
+
426
432
  @parms['action'] = 'update'
427
433
  render action: :edit
428
434
  end
@@ -498,7 +504,7 @@ def user_has_permission?(permission, collection_name)
498
504
  end
499
505
 
500
506
  ########################################################################
501
- # Merges two forms when current form extends other form. Subroutine of read_drg_cms_form.
507
+ # Merges two forms when current form extends other form. Subroutine of read_drg_form.
502
508
  # With a little help of https://www.ruby-forum.com/topic/142809
503
509
  ########################################################################
504
510
  def forms_merge(hash1, hash2)
@@ -510,8 +516,8 @@ def forms_merge(hash1, hash2)
510
516
  end
511
517
  target[key] = hash2[key] == '/' ? nil : hash2[key]
512
518
  end
513
- # delete keys with nil value
514
- target.delete_if{ |k,v| v.nil? }
519
+ # delete keys with nil value
520
+ target.delete_if { |k, v| v.nil? }
515
521
  end
516
522
 
517
523
  ########################################################################
@@ -521,13 +527,13 @@ end
521
527
  # [Parameters:]
522
528
  # [extend_option] : Value of @form['extend'] option
523
529
  ########################################################################
524
- def extend_drg_cms_form(extend_option)
530
+ def extend_drg_form(extend_option)
525
531
  form_file_name = dc_find_form_file(extend_option)
526
- @form_js << read_js_drg_cms_form(form_file_name)
532
+ @form_js << read_js_drg_form(form_file_name)
527
533
  form = YAML.load_file( form_file_name )
528
534
  @form = forms_merge(form, @form)
529
- # If combined form contains tabs and fields options, merge fields into tabs
530
- if @form['form']['tabs'] and @form['form']['fields']
535
+ # If combined form contains tabs and fields options, merge fields into tabs
536
+ if @form['form']['tabs'] && @form['form']['fields']
531
537
  @form['form']['tabs']['fields'] = @form['form']['fields']
532
538
  @form['form']['fields'] = nil
533
539
  end
@@ -540,54 +546,59 @@ end
540
546
  # [Parameters:]
541
547
  # [include_option] : Value of @form['include'] option
542
548
  ########################################################################
543
- def include_drg_cms_form(include_option)
549
+ def include_drg_form(include_option)
544
550
  includes = include_option.class == Array ? include_option : include_option.split(/\,|\;/)
545
551
  includes.each do |include_file|
546
552
  form_file_name = dc_find_form_file(include_file)
547
- @form_js << read_js_drg_cms_form(form_file_name)
553
+ @form_js << read_js_drg_form(form_file_name)
548
554
  form = YAML.load_file(form_file_name)
549
555
  @form = forms_merge(@form, form)
550
556
  end
551
557
  end
552
558
 
553
559
  ########################################################################
554
- # Will read data from form_file_name.js if it exists.
560
+ # Will read data from form_file_name.js if exists.
555
561
  #
556
562
  # [Parameters:]
557
563
  # [form_file_name] : Physical form filename
558
564
  ########################################################################
559
- def read_js_drg_cms_form(form_file_name)
565
+ def read_js_drg_form(form_file_name)
560
566
  js_form_file_name = form_file_name.sub('.yml','.js')
561
567
  File.read(js_form_file_name) rescue ''
562
568
  end
563
569
 
564
570
  ########################################################################
565
- # Read drgcms form into yaml object. Subroutine of check_authorization.
571
+ # Read DRG form into @form object. Subroutine of check_authorization.
566
572
  ########################################################################
567
- def read_drg_cms_form
573
+ def read_drg_form
568
574
  table_name = decamelize_type(params[:table].strip)
569
575
  @tables = table_name.split(';').inject([]) { |r,v| r << [(v.classify.constantize rescue nil), v] }
570
- # split ids passed when embedded document
576
+
577
+ # split ids passed when embedded document
571
578
  ids = params[:ids].to_s.strip.downcase
572
579
  @ids = ids.split(';').inject([]) { |r,v| r << v }
573
- # form_name defaults to last table specified
580
+
581
+ # form_name defaults to last table specified
574
582
  form_name = params[:form_name] || @tables.last[1]
575
583
  @form_js = ''
576
- # dynamicaly generated form
584
+
585
+ # dynamically generated form
577
586
  @form = if params[:form_name] == 'method'
578
- dc_eval_class_method(params[:form_method], params)
579
- else
580
- form_file_name = dc_find_form_file(form_name)
581
- @form_js = read_js_drg_cms_form(form_file_name)
582
- YAML.load_file(form_file_name)
583
- end
584
- # form includes or extends another form file
585
- include_drg_cms_form(@form['include']) if @form['include']
586
- extend_drg_cms_form(@form['extend']) if @form['extend']
587
+ dc_eval_class_method(params[:form_method], params)
588
+ else
589
+ form_file_name = dc_find_form_file(form_name)
590
+ @form_js = read_js_drg_form(form_file_name)
591
+ YAML.load_file(form_file_name)
592
+ end
593
+
594
+ # form includes or extends another form file
595
+ include_drg_form(@form['include']) if @form['include']
596
+ extend_drg_form(@form['extend']) if @form['extend']
587
597
  @form['script'] = (@form['script'].blank? ? @form_js : @form['script'] + @form_js)
588
- # add readonly key to form if readonly parameter is passed in url
598
+ # add readonly key to form if readonly parameter is passed in url
589
599
  @form['readonly'] = 1 if params['readonly'] #and %w(1 yes true).include?(params['readonly'].to_s.downcase.strip)
590
- # !!!!!! Always use strings for key names since @parms['table'] != @parms[:table]
600
+
601
+ # !!!!!! Always use strings for key names since @parms['table'] != @parms[:table]
591
602
  @parms = { 'table' => table_name, 'ids' => params[:ids], 'form_name' => form_name,
592
603
  'return_to' => params['return_to'], 'edit_only' => params['edit_only'],
593
604
  'readonly' => params['readonly']
@@ -643,7 +654,7 @@ def check_authorization
643
654
  (table.size < 3 or !dc_user_can(DcPermission::CAN_VIEW))
644
655
  return render(action: 'error', locals: { error: t('drgcms.not_authorized')} )
645
656
  end
646
- read_drg_cms_form
657
+ read_drg_form
647
658
  return render( plain: t('drgcms.form_error') ) if @form.nil?
648
659
 
649
660
  # Permissions can be also defined on form
@@ -672,7 +683,7 @@ end
672
683
  ########################################################################
673
684
  # Creates new empty record for new and create action.
674
685
  ########################################################################
675
- def create_new_empty_record(initial_data=nil) #:nodoc:
686
+ def create_new_empty_record(initial_data = nil) #:nodoc:
676
687
  if @tables.size == 1
677
688
  @record = @tables.first[0].new(initial_data)
678
689
  else
@@ -689,9 +700,9 @@ def update_standards(record = @record)
689
700
  record.updated_by = session[:user_id] if record.respond_to?('updated_by')
690
701
  if record.new_record?
691
702
  record.created_by = session[:user_id] if record.respond_to?('created_by')
692
- # set this only initialy. Allow to be set to nil on updates. This documents can then belong to all sites
693
- # and will be directly visible only to admins
694
- record.dc_site_id = dc_get_site._id if record.respond_to?('dc_site_id') and record.dc_site_id.nil?
703
+ # set this only initialy. Allow to be set to nil on updates. Document can then belong to all sites
704
+ # and will be directly visible only to admins
705
+ record.dc_site_id = dc_get_site.id if record.respond_to?('dc_site_id') && record.dc_site_id.nil?
695
706
  end
696
707
  end
697
708
 
@@ -703,17 +714,15 @@ end
703
714
  # [changes] Current document changed fields.
704
715
  ########################################################################
705
716
  def save_journal(operation, changes = {})
706
- # return unless session[:save_journal]
707
717
  if operation == :delete
708
718
  @record.attributes.each {|k,v| changes[k] = v}
709
- # elsif operation == :new
710
- # changes = {}
711
719
  end
712
- #
713
- if (operation != :update) or changes.size > 0
714
- # determine site_id
720
+
721
+ if (operation != :update) || changes.size > 0
722
+ # determine site_id
715
723
  site_id = @record.site_id if @record.respond_to?('site_id')
716
- site_id = dc_get_site._id if site_id.nil? and dc_get_site
724
+ site_id = dc_get_site._id if site_id.nil? && dc_get_site
725
+
717
726
  DcJournal.create(site_id: site_id,
718
727
  operation: operation,
719
728
  user_id: session[:user_id],
@@ -731,23 +740,23 @@ end
731
740
  # Returns callback method name or nil if not defined.
732
741
  ########################################################################
733
742
  def callback_method(key) #:nodoc:
734
- data_key = key.gsub('_','-') # data fields translate _ to -
735
- cb = case
743
+ data_key = key.gsub('_','-') # convert _ to -
744
+ callback = case
736
745
  when params['data'] && params['data'][data_key] then params['data'][data_key]
737
- # if dc_ + key method is present in model then it will be called automatically
746
+ # dc_ + key method is present then call it automatically
738
747
  when @form['form'][key] then @form['form'][key]
739
748
  when respond_to?('dc_' + key) then 'dc_' + key
740
749
  when params[data_key] then params[data_key]
741
750
  else nil
742
751
  end
743
- #
752
+
744
753
  ret = case
745
- when cb.nil? then cb # otherwise there will be errors in next lines
746
- when cb.match('eval ') then cb.sub('eval ','')
747
- when cb.match('return_to ')
748
- params[:return_to] = cb.sub('return_to ','')
754
+ when callback.nil? then callback # otherwise there will be errors in next lines
755
+ when callback.match('eval ') then callback.sub('eval ','')
756
+ when callback.match('return_to ')
757
+ params[:return_to] = callback.sub('return_to ','')
749
758
  return nil
750
- else cb
759
+ else callback
751
760
  end
752
761
  ret
753
762
  end
@@ -786,16 +795,16 @@ end
786
795
 
787
796
  ########################################################################
788
797
  # Since tabs have been introduced on form it is a little more complicated
789
- # to get all edit fields on form. This method does it. Subroutine of save_data.
798
+ # to collect all edit fields on form. This method does it. Subroutine of save_data.
790
799
  ########################################################################
791
- def fields_on_form() #:nodoc:
800
+ def fields_on_form #:nodoc:
792
801
  form_fields = []
793
802
  if @form['form']['fields']
794
- # read only field elements (key is Integer)
795
- @form['form']['fields'].each {|key,options| form_fields << options if key.class == Integer }
803
+ # read only field elements (key is Integer)
804
+ @form['form']['fields'].each { |key, options| form_fields << options if key.class == Integer }
796
805
  else
797
806
  @form['form']['tabs'].keys.each do |tab|
798
- @form['form']['tabs'][tab].each {|key,options| form_fields << options if key.class == Integer }
807
+ @form['form']['tabs'][tab].each { |key, options| form_fields << options if key.class == Integer }
799
808
  end
800
809
  end
801
810
  form_fields
@@ -808,7 +817,7 @@ end
808
817
  def save_data
809
818
  form_fields = fields_on_form()
810
819
  return true if form_fields.size == 0
811
- #
820
+
812
821
  form_fields.each do |v|
813
822
  session[:form_processing] = v['name'] # for debuging
814
823
  next if v['type'].nil? or v['name'].nil? or
@@ -821,20 +830,21 @@ def save_data
821
830
  value = DrgcmsFormFields.const_get(v['type'].camelize).get_data(params, v['name'])
822
831
  @record.send("#{v['name']}=", value)
823
832
  end
824
- # controls callback method
833
+ # before_save callback
825
834
  if (m = callback_method('before_save') )
826
835
  ret = call_callback_method(m)
827
- # dont's save if callback method returns false
836
+ # don't save if callback returns false
828
837
  return false if ret.class == FalseClass
829
838
  end
830
- # save data
839
+
840
+ # save data
831
841
  changes = @record.changes
832
842
  update_standards() if changes.size > 0 # update only if there has been some changes
833
843
  if (saved = @record.save)
834
844
  operation = @record.new_record? ? :new : :update
835
845
  save_journal(operation, changes)
836
- # callback methods
837
- if (m = callback_method('after_save') ) then call_callback_method(m) end
846
+ # after_save callback
847
+ if (m = callback_method('after_save') ) then call_callback_method(m) end
838
848
  end
839
849
  saved
840
850
  end
@@ -844,20 +854,18 @@ end
844
854
  # in select_fields and deny_fields
845
855
  ########################################################################
846
856
  def separated_to_symbols(data)
847
- data.chomp.split(',').inject([]) {|r,element| r << element.strip.downcase.to_sym }
857
+ data.chomp.split(',').map { |e| e.strip.downcase.to_sym }
848
858
  end
849
859
 
850
860
  ########################################################################
851
- # Will process select_fields and deny_fields if specified
861
+ # Will process only (select_fields) and without (deny_fields) option
852
862
  ########################################################################
853
863
  def process_select_and_deny_fields
854
- if @form['result_set']['select_fields']
855
- @records = @records.only( separated_to_symbols(@form['result_set']['select_fields']) )
856
- end
857
- # deny fields specified
858
- if @form['result_set']['deny_fields']
859
- @records = @records.without( separated_to_symbols(@form['result_set']['deny_fields']) )
860
- end
864
+ only = @form['result_set']['select_fields'] || @form['result_set']['only']
865
+ @records = @records.only( separated_to_symbols(only) ) if only
866
+
867
+ without = @form['result_set']['deny_fields'] || @form['result_set']['without']
868
+ @records = @records.without( separated_to_symbols(without) ) if without
861
869
  end
862
870
 
863
871
  ########################################################################
@@ -867,18 +875,18 @@ def check_sort_options() #:nodoc:
867
875
  table_name = @tables.first[1]
868
876
  old_sort = session[table_name][:sort].to_s
869
877
  sort, direction = old_sort.split(' ')
870
- # sort is requested
878
+
871
879
  if params['sort']
872
880
  # reverse sort if same selected
873
881
  if params['sort'] == sort
874
882
  direction = (direction == '1') ? '-1' : '1'
875
883
  end
876
- direction ||= 1
884
+ direction ||= '1'
877
885
  sort = params[:sort]
878
886
  session[table_name][:sort] = "#{params['sort']} #{direction}"
879
887
  session[table_name][:page] = 1
880
888
  end
881
- @records.sort( sort => direction.to_i ) if session[table_name][:sort]
889
+ @records.sort( sort => direction.to_i ) if session[table_name][:sort] && @records.class == Mongoid::Criteria
882
890
  params['sort'] = nil # otherwise there is problem with other links
883
891
  end
884
892
 
@@ -921,45 +929,45 @@ def set_session_filter(table_name)
921
929
  return if params[:filter_oper] && params[:filter_field].blank?
922
930
 
923
931
  filter_value = if params[:filter_value].nil?
924
- # NIL indicates that no filtering is needed
932
+ #NIL indicates that no filtering is needed
925
933
  '#NIL'
926
934
  else
927
935
  if params[:filter_value].class == String and params[:filter_value][0] == '@'
928
- # Internal value. Remove leading @ and evaluate expression
936
+ # Internal value. Remove leading @ and evaluate expression
929
937
  expression = DcInternals.get(params[:filter_value])
930
938
  eval(expression) rescue nil
931
939
  else
932
- # No filter when empty
940
+ # No filter when empty
933
941
  params[:filter_value] == '' ? '#NIL' : params[:filter_value]
934
942
  end
935
943
  end
936
- # if filter field parameter is omitted then just set filter value
944
+ # if filter field parameter is omitted then just set filter value
937
945
  session[table_name][:filter] =
938
946
  if params[:filter_field].nil?
939
947
  saved = YAML.load(session[table_name][:filter])
940
948
  saved['value'] = filter_value
941
949
  saved.to_yaml
942
950
  else
943
- # As field defined. Split name and alternative input field
951
+ # as field defined. Split name and alternative input field
944
952
  field = if params[:filter_field].match(' as ')
945
953
  params[:filter_input] = params[:filter_field].split(' as ').last.strip
946
954
  params[:filter_field].split(' as ').first.strip
947
955
  else
948
956
  params[:filter_field]
949
957
  end
950
- #
958
+
951
959
  {'field' => field,
952
960
  'operation' => params[:filter_oper],
953
961
  'value' => filter_value,
954
962
  'input' => params[:filter_input],
955
963
  'table' => table_name }.to_yaml
956
964
  end
957
- # must be. Otherwise kaminari includes parameter on paging
958
- params[:filter] = nil
959
- params[:filter_id] = nil
960
- params[:filter_oper] = nil
961
- params[:filter_input] = nil
962
- params[:filter_field] = nil
965
+ # must be. Otherwise kaminari includes parames on paging links
966
+ params[:filter] = nil
967
+ params[:filter_id] = nil
968
+ params[:filter_oper] = nil
969
+ params[:filter_input] = nil
970
+ params[:filter_field] = nil
963
971
  end
964
972
 
965
973
  ########################################################################
@@ -969,31 +977,27 @@ def check_filter_options() #:nodoc:
969
977
  table_name = @tables.first[1]
970
978
  model = @tables.first[0]
971
979
  session[table_name] ||= {}
972
- # process page
980
+ # page is set
973
981
  session[table_name][:page] = params[:page] if params[:page]
974
- # new filter is applied
982
+ # new filter is applied
975
983
  if params[:filter]
976
984
  set_session_filter(table_name)
977
985
  session[table_name][:page] = 1
978
986
  end
979
- # if data model has field dc_site_id ensure that only documents which belong to the site are selected.
987
+ # if data model has field dc_site_id ensure that only documents which belong to the site are selected.
980
988
  site_id = dc_get_site._id if dc_get_site
981
- # dont't filter site if no dc_site_id field or user is ADMIN
989
+
990
+ # don't filter site if no dc_site_id field or user is ADMIN
982
991
  site_id = nil if !model.method_defined?('dc_site_id') or dc_user_can(DcPermission::CAN_ADMIN)
983
992
  site_id = nil if session[table_name][:filter].to_s.match('dc_site_id')
984
- #
993
+
985
994
  if @records = DcFilter.get_filter(session[table_name][:filter])
986
995
  @records = @records.and(dc_site_id: site_id) if site_id
987
996
  else
988
- @records = if site_id
989
- model.where(dc_site_id: site_id)
990
- else
991
- model
992
- end
997
+ @records = site_id ? model.where(dc_site_id: site_id) : model
993
998
  end
994
- # select only fields or deny fields specified
995
999
  process_select_and_deny_fields
996
- # pagination if required
1000
+ # pagination if required
997
1001
  per_page = (@form['result_set']['per_page'] || 30).to_i
998
1002
  @records = @records.page(session[table_name][:page]).per(per_page) if per_page > 0
999
1003
  end