drg_cms 0.6.1.5 → 0.6.1.11
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.
- checksums.yaml +4 -4
- data/README.md +203 -24
- data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
- data/app/assets/javascripts/drg_cms/drg_cms.js +253 -106
- data/app/assets/stylesheets/drg_cms/drg_cms.css +670 -521
- data/app/assets/stylesheets/drg_cms_application.css +1 -1
- data/app/assets/stylesheets/drg_cms_cms.css +1 -4
- data/app/controllers/cmsedit_controller.rb +33 -211
- data/app/controllers/dc_application_controller.rb +98 -22
- data/app/controllers/dc_common_controller.rb +9 -22
- data/app/controls/browse_models_control.rb +18 -27
- data/app/controls/cmsedit_control.rb +129 -0
- data/app/controls/dc_help_control.rb +1 -1
- data/app/controls/dc_page_control.rb +0 -1
- data/app/controls/dc_poll_result_control.rb +1 -1
- data/app/controls/dc_report.rb +2 -2
- data/app/controls/design_element_settings_control.rb +1 -1
- data/app/forms/all_options.yml +25 -7
- data/app/forms/cms_menu.yml +24 -24
- data/app/forms/dc_browse_fields.yml +13 -9
- data/app/forms/dc_browse_models.yml +24 -2
- data/app/forms/dc_poll_result_export.yml +1 -1
- data/app/forms/dc_site.yml +2 -5
- data/app/forms/dc_steps_template.yml +51 -0
- data/app/helpers/cms_common_helper.rb +73 -6
- data/app/helpers/cms_edit_helper.rb +275 -159
- data/app/helpers/cms_helper.rb +152 -59
- data/app/helpers/cms_index_helper.rb +220 -172
- data/app/helpers/dc_application_helper.rb +40 -67
- data/app/models/concerns/dc_page_concern.rb +1 -1
- data/app/models/concerns/dc_site_concern.rb +9 -3
- data/app/models/dc_filter.rb +30 -22
- data/app/models/dc_journal.rb +2 -2
- data/app/models/dc_json_ld.rb +19 -42
- data/app/models/dc_part.rb +19 -9
- data/app/models/dc_site.rb +0 -1
- data/app/models/drgcms_form_fields/drgcms_field.rb +10 -4
- data/app/models/drgcms_form_fields/link_to.rb +1 -1
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +5 -5
- data/app/models/drgcms_form_fields/readonly.rb +4 -1
- data/app/models/drgcms_form_fields/select.rb +10 -9
- data/app/models/drgcms_form_fields/text_autocomplete.rb +20 -12
- data/app/models/drgcms_form_fields/text_with_select.rb +1 -0
- data/app/renderers/dc_common_renderer.rb +20 -3
- data/app/renderers/dc_part_renderer.rb +1 -1
- data/app/renderers/dc_poll_renderer.rb +1 -1
- data/app/views/cmsedit/_edit_stuff.html.erb +12 -12
- data/app/views/cmsedit/_form.html.erb +19 -12
- data/app/views/cmsedit/edit.html.erb +10 -6
- data/app/views/cmsedit/index.html.erb +5 -3
- data/app/views/cmsedit/login.html.erb +1 -1
- data/app/views/cmsedit/new.html.erb +9 -5
- data/app/views/dc_common/_help.html.erb +1 -0
- data/app/views/dc_common/paste_clipboard.html.erb +1 -1
- data/app/views/layouts/cms.html.erb +3 -5
- data/config/locales/drgcms_en.yml +7 -1
- data/config/locales/drgcms_sl.yml +7 -1
- data/config/locales/kaminari.yml +1 -1
- data/drg_cms.gemspec +2 -2
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +4 -4
- metadata +16 -10
- data/app/views/cmsedit/__remove_edit_stuff.js.erb +0 -6
- data/app/views/cmsedit/__show.html.erb +0 -21
@@ -99,7 +99,7 @@ end
|
|
99
99
|
########################################################################
|
100
100
|
# Filter action.
|
101
101
|
########################################################################
|
102
|
-
def
|
102
|
+
def _filter
|
103
103
|
index
|
104
104
|
end
|
105
105
|
|
@@ -128,12 +128,10 @@ end
|
|
128
128
|
# Login can be called directly with url http://site.com/cmsedit/login
|
129
129
|
########################################################################
|
130
130
|
def login
|
131
|
-
if
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
render action: 'login', layout: 'cms'
|
136
|
-
end
|
131
|
+
return set_test_site if params[:id] == 'test'
|
132
|
+
|
133
|
+
session[:edit_mode] = 0 if !params[:ok]
|
134
|
+
render action: 'login', layout: 'cms'
|
137
135
|
end
|
138
136
|
|
139
137
|
########################################################################
|
@@ -198,7 +196,7 @@ def new
|
|
198
196
|
end
|
199
197
|
# new_record callback. Set default values for new record
|
200
198
|
if (m = callback_method('new_record') ) then call_callback_method(m) end
|
201
|
-
@
|
199
|
+
@form_params['action'] = 'create'
|
202
200
|
end
|
203
201
|
|
204
202
|
########################################################################
|
@@ -259,12 +257,9 @@ def duplicate_document(source)
|
|
259
257
|
end
|
260
258
|
|
261
259
|
########################################################################
|
262
|
-
# Create (or duplicate) action.
|
260
|
+
# Create (or duplicate) action.
|
263
261
|
########################################################################
|
264
262
|
def create
|
265
|
-
# abusing create for turning filter on
|
266
|
-
return index if params[:filter].to_s == 'on'
|
267
|
-
|
268
263
|
# not authorized
|
269
264
|
unless dc_user_can(DcPermission::CAN_CREATE)
|
270
265
|
flash[:error] = t('drgcms.not_authorized')
|
@@ -284,8 +279,8 @@ def create
|
|
284
279
|
flash[:info] = t('drgcms.doc_saved')
|
285
280
|
params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
|
286
281
|
return process_return_to(params[:return_to]) if params[:return_to]
|
287
|
-
|
288
|
-
@
|
282
|
+
|
283
|
+
@form_params['id'] = @record.id # must be set, for proper update link
|
289
284
|
params[:id] = @record.id # must be set, for find_record
|
290
285
|
edit
|
291
286
|
else # error
|
@@ -314,7 +309,7 @@ def edit
|
|
314
309
|
# don't do anything if return is false
|
315
310
|
return index if ret.class == FalseClass
|
316
311
|
end
|
317
|
-
@
|
312
|
+
@form_params['action'] = 'update'
|
318
313
|
render action: :edit
|
319
314
|
end
|
320
315
|
|
@@ -336,7 +331,7 @@ def update
|
|
336
331
|
|
337
332
|
if save_data
|
338
333
|
params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
|
339
|
-
@
|
334
|
+
@form_params['action'] = 'update'
|
340
335
|
# Process return_to
|
341
336
|
return process_return_to(params[:return_to]) if params[:return_to]
|
342
337
|
else
|
@@ -427,7 +422,7 @@ def destroy
|
|
427
422
|
|
428
423
|
end
|
429
424
|
|
430
|
-
@
|
425
|
+
@form_params['action'] = 'update'
|
431
426
|
render action: :edit
|
432
427
|
end
|
433
428
|
|
@@ -439,7 +434,7 @@ def run
|
|
439
434
|
control_name, method_name = params[:control].split('.')
|
440
435
|
if method_name.nil?
|
441
436
|
method_name = control_name
|
442
|
-
control_name = params
|
437
|
+
control_name = CmsHelper.table_param(params)
|
443
438
|
end
|
444
439
|
# extend with control methods
|
445
440
|
extend_with_control_module(control_name)
|
@@ -476,7 +471,7 @@ def can_process_run
|
|
476
471
|
response = send(:dc_can_process)
|
477
472
|
return response unless response.class == Array
|
478
473
|
else
|
479
|
-
response = [DcPermission::CAN_VIEW, params
|
474
|
+
response = [DcPermission::CAN_VIEW, CmsHelper.table_param(params) || 'dc_memory']
|
480
475
|
end
|
481
476
|
dc_user_can *response
|
482
477
|
end
|
@@ -501,108 +496,6 @@ def user_has_permission?(permission, collection_name)
|
|
501
496
|
true
|
502
497
|
end
|
503
498
|
|
504
|
-
########################################################################
|
505
|
-
# Merges two forms when current form extends other form. Subroutine of read_drg_form.
|
506
|
-
# With a little help of https://www.ruby-forum.com/topic/142809
|
507
|
-
########################################################################
|
508
|
-
def forms_merge(hash1, hash2)
|
509
|
-
target = hash1.dup
|
510
|
-
hash2.keys.each do |key|
|
511
|
-
if hash2[key].is_a? Hash and hash1[key].is_a? Hash
|
512
|
-
target[key] = forms_merge(hash1[key], hash2[key])
|
513
|
-
next
|
514
|
-
end
|
515
|
-
target[key] = hash2[key] == '/' ? nil : hash2[key]
|
516
|
-
end
|
517
|
-
# delete keys with nil value
|
518
|
-
target.delete_if { |k, v| v.nil? }
|
519
|
-
end
|
520
|
-
|
521
|
-
########################################################################
|
522
|
-
# Extends DRGCMS form file. Extended file is processed first and then merged
|
523
|
-
# with code in this form file. Form can extend only single form file.
|
524
|
-
#
|
525
|
-
# [Parameters:]
|
526
|
-
# [extend_option] : Value of @form['extend'] option
|
527
|
-
########################################################################
|
528
|
-
def extend_drg_form(extend_option)
|
529
|
-
form_file_name = dc_find_form_file(extend_option)
|
530
|
-
@form_js << read_js_drg_form(form_file_name)
|
531
|
-
form = YAML.load_file( form_file_name )
|
532
|
-
@form = forms_merge(form, @form)
|
533
|
-
# If combined form contains tabs and fields options, merge fields into tabs
|
534
|
-
if @form['form']['tabs'] && @form['form']['fields']
|
535
|
-
@form['form']['tabs']['fields'] = @form['form']['fields']
|
536
|
-
@form['form']['fields'] = nil
|
537
|
-
end
|
538
|
-
end
|
539
|
-
|
540
|
-
########################################################################
|
541
|
-
# Include code from another DRGCMS form file. Included code is merged
|
542
|
-
# with current form file code. Form can include more than one other DRGCMS forms.
|
543
|
-
#
|
544
|
-
# [Parameters:]
|
545
|
-
# [include_option] : Value of @form['include'] option
|
546
|
-
########################################################################
|
547
|
-
def include_drg_form(include_option)
|
548
|
-
includes = include_option.class == Array ? include_option : include_option.split(/\,|\;/)
|
549
|
-
includes.each do |include_file|
|
550
|
-
form_file_name = dc_find_form_file(include_file)
|
551
|
-
@form_js << read_js_drg_form(form_file_name)
|
552
|
-
form = YAML.load_file(form_file_name)
|
553
|
-
@form = forms_merge(@form, form)
|
554
|
-
end
|
555
|
-
end
|
556
|
-
|
557
|
-
########################################################################
|
558
|
-
# Will read data from form_file_name.js if exists.
|
559
|
-
#
|
560
|
-
# [Parameters:]
|
561
|
-
# [form_file_name] : Physical form filename
|
562
|
-
########################################################################
|
563
|
-
def read_js_drg_form(form_file_name)
|
564
|
-
js_form_file_name = form_file_name.sub('.yml','.js')
|
565
|
-
File.read(js_form_file_name) rescue ''
|
566
|
-
end
|
567
|
-
|
568
|
-
########################################################################
|
569
|
-
# Read DRG form into @form object. Subroutine of check_authorization.
|
570
|
-
########################################################################
|
571
|
-
def read_drg_form
|
572
|
-
table_name = decamelize_type(params[:table].strip)
|
573
|
-
@tables = table_name.split(';').inject([]) { |r,v| r << [(v.classify.constantize rescue nil), v] }
|
574
|
-
|
575
|
-
# split ids passed when embedded document
|
576
|
-
ids = params[:ids].to_s.strip.downcase
|
577
|
-
@ids = ids.split(';').inject([]) { |r,v| r << v }
|
578
|
-
|
579
|
-
# form_name defaults to last table specified
|
580
|
-
form_name = params[:form_name] || @tables.last[1]
|
581
|
-
@form_js = ''
|
582
|
-
|
583
|
-
# dynamically generated form
|
584
|
-
@form = if params[:form_name] == 'method'
|
585
|
-
dc_eval_class_method(params[:form_method], params)
|
586
|
-
else
|
587
|
-
form_file_name = dc_find_form_file(form_name)
|
588
|
-
@form_js = read_js_drg_form(form_file_name)
|
589
|
-
YAML.load_file(form_file_name)
|
590
|
-
end
|
591
|
-
|
592
|
-
# form includes or extends another form file
|
593
|
-
include_drg_form(@form['include']) if @form['include']
|
594
|
-
extend_drg_form(@form['extend']) if @form['extend']
|
595
|
-
@form['script'] = (@form['script'].blank? ? @form_js : @form['script'] + @form_js)
|
596
|
-
# add readonly key to form if readonly parameter is passed in url
|
597
|
-
@form['readonly'] = 1 if params['readonly'] #and %w(1 yes true).include?(params['readonly'].to_s.downcase.strip)
|
598
|
-
|
599
|
-
# !!!!!! Always use strings for key names since @parms['table'] != @parms[:table]
|
600
|
-
@parms = { 'table' => table_name, 'ids' => params[:ids], 'form_name' => form_name,
|
601
|
-
'return_to' => params['return_to'], 'edit_only' => params['edit_only'],
|
602
|
-
'readonly' => params['readonly']
|
603
|
-
}
|
604
|
-
end
|
605
|
-
|
606
499
|
############################################################################
|
607
500
|
# Load module if available. Try not to mask errors in control module
|
608
501
|
############################################################################
|
@@ -621,7 +514,7 @@ end
|
|
621
514
|
############################################################################
|
622
515
|
def extend_with_control_module(control_name = @form['controls'] || @form['control'])
|
623
516
|
# May include embedded forms so ; => _
|
624
|
-
control_name ||= params
|
517
|
+
control_name ||= CmsHelper.table_param(params).gsub(';','_')
|
625
518
|
control_name += '_control' unless control_name.match(/control$|report$/i)
|
626
519
|
# p '************', control_name
|
627
520
|
controls = load_controls_module(control_name)
|
@@ -642,9 +535,10 @@ end
|
|
642
535
|
# load DRG form.
|
643
536
|
############################################################################
|
644
537
|
def check_authorization
|
645
|
-
params[:table] ||= params[:
|
538
|
+
params[:table] ||= params[:t] || CmsHelper.form_param(params)
|
646
539
|
# Only show menu
|
647
540
|
return login if params[:id].in?(%w(login logout test))
|
541
|
+
|
648
542
|
table = params[:table].to_s.strip.downcase
|
649
543
|
set_default_guest_user_role if session[:user_roles].nil?
|
650
544
|
# request shouldn't pass
|
@@ -652,8 +546,7 @@ def check_authorization
|
|
652
546
|
(table.size < 3 or !dc_user_can(DcPermission::CAN_VIEW))
|
653
547
|
return render(action: 'error', locals: { error: t('drgcms.not_authorized')} )
|
654
548
|
end
|
655
|
-
|
656
|
-
return render( plain: t('drgcms.form_error') ) if @form.nil?
|
549
|
+
dc_form_read
|
657
550
|
|
658
551
|
# Permissions can be also defined on form
|
659
552
|
#TODO So far only can_view is used. Think about if using other permissions has sense
|
@@ -702,6 +595,7 @@ def update_standards(record = @record)
|
|
702
595
|
# and will be directly visible only to admins
|
703
596
|
record.dc_site_id = dc_get_site.id if record.respond_to?('dc_site_id') && record.dc_site_id.nil?
|
704
597
|
end
|
598
|
+
record.send(:set_history, self) if record.respond_to?(:set_history)
|
705
599
|
end
|
706
600
|
|
707
601
|
########################################################################
|
@@ -743,7 +637,7 @@ def callback_method(key) #:nodoc:
|
|
743
637
|
callback = case
|
744
638
|
when params['data'] && params['data'][data_key] then params['data'][data_key]
|
745
639
|
# dc_ + key method is present then call it automatically
|
746
|
-
when @form
|
640
|
+
when @form.dig('form', key) then @form['form'][key]
|
747
641
|
when respond_to?('dc_' + key) then 'dc_' + key
|
748
642
|
when params[data_key] then params[data_key]
|
749
643
|
else nil
|
@@ -783,9 +677,10 @@ end
|
|
783
677
|
def process_return_to(return_to)
|
784
678
|
script = case
|
785
679
|
when return_to == 'index' then return index
|
680
|
+
when return_to.match(/eval=/i) then return_to.sub('eval=', '')
|
786
681
|
when return_to.match(/parent\.reload/i) then 'parent.location.href=parent.location.href;'
|
787
682
|
when return_to.match(/reload/i) then 'location.href=location.href;'
|
788
|
-
when return_to.match(/close/i) then 'window.close();'
|
683
|
+
when return_to.match(/window.close/i) then 'window.close();'
|
789
684
|
when return_to.match(/none/i) then return
|
790
685
|
else "location.href='#{return_to}'"
|
791
686
|
end
|
@@ -829,6 +724,7 @@ def save_data
|
|
829
724
|
value = DrgcmsFormFields.const_get(v['type'].camelize).get_data(params, v['name'])
|
830
725
|
@record.send("#{v['name']}=", value)
|
831
726
|
end
|
727
|
+
|
832
728
|
# before_save callback
|
833
729
|
if (m = callback_method('before_save') )
|
834
730
|
ret = call_callback_method(m)
|
@@ -870,23 +766,12 @@ end
|
|
870
766
|
########################################################################
|
871
767
|
# Will check and set sorting options for current result set. Subroutine of index method.
|
872
768
|
########################################################################
|
873
|
-
def check_sort_options
|
769
|
+
def check_sort_options #:nodoc:
|
874
770
|
table_name = @tables.first[1]
|
875
|
-
|
876
|
-
sort, direction = old_sort.split(' ')
|
771
|
+
return if session[table_name][:sort].nil? || @records.class != Mongoid::Criteria
|
877
772
|
|
878
|
-
|
879
|
-
|
880
|
-
if params['sort'] == sort
|
881
|
-
direction = (direction == '1') ? '-1' : '1'
|
882
|
-
end
|
883
|
-
direction ||= '1'
|
884
|
-
sort = params[:sort]
|
885
|
-
session[table_name][:sort] = "#{params['sort']} #{direction}"
|
886
|
-
session[table_name][:page] = 1
|
887
|
-
end
|
888
|
-
@records.sort( sort => direction.to_i ) if session[table_name][:sort] && @records.class == Mongoid::Criteria
|
889
|
-
params['sort'] = nil # otherwise there is problem with other links
|
773
|
+
sort, direction = session[table_name][:sort].split(' ')
|
774
|
+
@records = @records.order_by( sort => direction.to_i )
|
890
775
|
end
|
891
776
|
|
892
777
|
########################################################################
|
@@ -912,82 +797,20 @@ def user_sort_options(model) #:nodoc:
|
|
912
797
|
{ field.to_sym => direction.to_i }
|
913
798
|
end
|
914
799
|
|
915
|
-
########################################################################
|
916
|
-
# Will set session[table_name][:filter] and save last filter settings to session.
|
917
|
-
# subroutine of check_filter_options.
|
918
|
-
########################################################################
|
919
|
-
def set_session_filter(table_name)
|
920
|
-
# models that can not be filtered (for now)
|
921
|
-
return if %w(dc_temp dc_memory).include?(params[:table])
|
922
|
-
# clear filter
|
923
|
-
if params[:filter] == 'off'
|
924
|
-
session[table_name][:filter] = nil
|
925
|
-
return
|
926
|
-
end
|
927
|
-
# field_name should exist on set filter condition
|
928
|
-
return if params[:filter_oper] && params[:filter_field].blank?
|
929
|
-
|
930
|
-
filter_value = if params[:filter_value].nil?
|
931
|
-
#NIL indicates that no filtering is needed
|
932
|
-
'#NIL'
|
933
|
-
else
|
934
|
-
if params[:filter_value].class == String and params[:filter_value][0] == '@'
|
935
|
-
# Internal value. Remove leading @ and evaluate expression
|
936
|
-
expression = DcInternals.get(params[:filter_value])
|
937
|
-
eval(expression) rescue nil
|
938
|
-
else
|
939
|
-
# No filter when empty
|
940
|
-
params[:filter_value] == '' ? '#NIL' : params[:filter_value]
|
941
|
-
end
|
942
|
-
end
|
943
|
-
# if filter field parameter is omitted then just set filter value
|
944
|
-
session[table_name][:filter] =
|
945
|
-
if params[:filter_field].nil?
|
946
|
-
saved = YAML.load(session[table_name][:filter])
|
947
|
-
saved['value'] = filter_value
|
948
|
-
saved.to_yaml
|
949
|
-
else
|
950
|
-
# as field defined. Split name and alternative input field
|
951
|
-
field = if params[:filter_field].match(' as ')
|
952
|
-
params[:filter_input] = params[:filter_field].split(' as ').last.strip
|
953
|
-
params[:filter_field].split(' as ').first.strip
|
954
|
-
else
|
955
|
-
params[:filter_field]
|
956
|
-
end
|
957
|
-
|
958
|
-
{'field' => field,
|
959
|
-
'operation' => params[:filter_oper],
|
960
|
-
'value' => filter_value,
|
961
|
-
'input' => params[:filter_input],
|
962
|
-
'table' => table_name }.to_yaml
|
963
|
-
end
|
964
|
-
# must be. Otherwise kaminari includes parames on paging links
|
965
|
-
params[:filter] = nil
|
966
|
-
params[:filter_id] = nil
|
967
|
-
params[:filter_oper] = nil
|
968
|
-
params[:filter_input] = nil
|
969
|
-
params[:filter_field] = nil
|
970
|
-
end
|
971
|
-
|
972
800
|
########################################################################
|
973
801
|
# Will check and set current filter options for result set. Subroutine of index method.
|
974
802
|
########################################################################
|
975
|
-
def check_filter_options
|
976
|
-
table_name =
|
977
|
-
model =
|
803
|
+
def check_filter_options #:nodoc:
|
804
|
+
table_name = CmsHelper.table_param(params).strip.split(';').first.underscore
|
805
|
+
model = table_name.classify.constantize
|
978
806
|
session[table_name] ||= {}
|
979
807
|
# page is set
|
980
808
|
session[table_name][:page] = params[:page] if params[:page]
|
981
|
-
# new filter is applied
|
982
|
-
if params[:filter]
|
983
|
-
set_session_filter(table_name)
|
984
|
-
session[table_name][:page] = 1
|
985
|
-
end
|
986
809
|
# if data model has field dc_site_id ensure that only documents which belong to the site are selected.
|
987
810
|
site_id = dc_get_site._id if dc_get_site
|
988
811
|
|
989
812
|
# don't filter site if no dc_site_id field or user is ADMIN
|
990
|
-
site_id = nil if !model.method_defined?('dc_site_id')
|
813
|
+
site_id = nil if !model.method_defined?('dc_site_id') || dc_user_can(DcPermission::CAN_ADMIN)
|
991
814
|
site_id = nil if session[table_name][:filter].to_s.match('dc_site_id')
|
992
815
|
|
993
816
|
if @records = DcFilter.get_filter(session[table_name][:filter])
|
@@ -997,7 +820,7 @@ def check_filter_options() #:nodoc:
|
|
997
820
|
end
|
998
821
|
process_select_and_deny_fields
|
999
822
|
# pagination if required
|
1000
|
-
per_page = (@form['result_set']['per_page'] ||
|
823
|
+
per_page = (@form['result_set']['per_page'] || 25).to_i
|
1001
824
|
@records = @records.page(session[table_name][:page]).per(per_page) if per_page > 0
|
1002
825
|
end
|
1003
826
|
|
@@ -1033,7 +856,7 @@ def process_collections #:nodoc
|
|
1033
856
|
process_select_and_deny_fields
|
1034
857
|
# pagination but only if not already set
|
1035
858
|
unless (@form['table'] == 'dc_memory' || @records.options[:limit])
|
1036
|
-
per_page = (@form['result_set']['per_page'] ||
|
859
|
+
per_page = (@form['result_set']['per_page'] || 25).to_i
|
1037
860
|
@records = @records.page(params[:page]).per(per_page) if per_page > 0
|
1038
861
|
end
|
1039
862
|
elsif form_filter != 'dc_filter'
|
@@ -1077,5 +900,4 @@ def process_in_memory #:nodoc
|
|
1077
900
|
false
|
1078
901
|
end
|
1079
902
|
|
1080
|
-
|
1081
903
|
end
|
@@ -114,27 +114,6 @@ def set_page_title
|
|
114
114
|
dc_add_meta_tag(:name, 'description', @page.meta_description)
|
115
115
|
end
|
116
116
|
|
117
|
-
########################################################################
|
118
|
-
# Searches forms path for file_name and returns full file name or nil if not found.
|
119
|
-
#
|
120
|
-
# @param [String] Form file name. File name can be passed as gem_name.filename. This can
|
121
|
-
# be useful when you are extending form but want to retain same name as original form
|
122
|
-
# For example. You are extending dc_user form from drg_cms gem and want to
|
123
|
-
# retain same dc_user name. This can be done by setting drg_cms.dc_user as extend option.
|
124
|
-
#
|
125
|
-
# @return [String] Form file name including path or nil if not found.
|
126
|
-
########################################################################
|
127
|
-
def dc_find_form_file(form_file)
|
128
|
-
form_path = nil
|
129
|
-
form_path, form_file = form_file.split(/\.|\//) if form_file.match(/\.|\//)
|
130
|
-
|
131
|
-
DrgCms.paths(:forms).reverse.each do |path|
|
132
|
-
f = "#{path}/#{form_file}.yml"
|
133
|
-
return f if File.exist?(f) && (form_path.nil? || path.to_s.match(/\/#{form_path}(-|\/)/i))
|
134
|
-
end
|
135
|
-
raise "Exception: Form file '#{form_file}' not found!"
|
136
|
-
end
|
137
|
-
|
138
117
|
#######################################################################
|
139
118
|
# Will render public/404.html file with some debug code includded.
|
140
119
|
#
|
@@ -257,7 +236,7 @@ def dc_set_options(parameters)
|
|
257
236
|
return if parameters.to_s.size < 3
|
258
237
|
# parameters are set as YAML. This should be default in future.
|
259
238
|
parms = YAML.load(parameters) rescue {}
|
260
|
-
@options.
|
239
|
+
@options = @options.deep_merge(parms)
|
261
240
|
end
|
262
241
|
|
263
242
|
##########################################################################
|
@@ -833,4 +812,101 @@ def redis
|
|
833
812
|
Rails.cache.redis
|
834
813
|
end
|
835
814
|
|
815
|
+
########################################################################
|
816
|
+
# Extends DRGCMS form file. Extended file is processed first and then merged
|
817
|
+
# with code in this form file. Form can extend only single form file.
|
818
|
+
#
|
819
|
+
# [Parameters:]
|
820
|
+
# [extend_option] : Value of @form['extend'] option
|
821
|
+
########################################################################
|
822
|
+
def dc_form_extend(extend_option)
|
823
|
+
form_file_name = CmsHelper.form_file_find(extend_option)
|
824
|
+
@form_js << read_js_drg_form(form_file_name)
|
825
|
+
form = YAML.load_file( form_file_name )
|
826
|
+
@form = CmsHelper.forms_merge(form, @form)
|
827
|
+
# If combined form contains tabs and fields options, merge fields into tabs
|
828
|
+
if @form['form']['tabs'] && @form['form']['fields']
|
829
|
+
@form['form']['tabs']['fields'] = @form['form']['fields']
|
830
|
+
@form['form']['fields'] = nil
|
831
|
+
end
|
832
|
+
end
|
833
|
+
|
834
|
+
########################################################################
|
835
|
+
# Include code from another DRGCMS form file. Included code is merged
|
836
|
+
# with current form file code. Form can include more than one other DRGCMS forms.
|
837
|
+
#
|
838
|
+
# [Parameters:]
|
839
|
+
# [include_option] : Value of @form['include'] option
|
840
|
+
########################################################################
|
841
|
+
def dc_form_include(include_option)
|
842
|
+
includes = include_option.class == Array ? include_option : include_option.split(/\,|\;/)
|
843
|
+
includes.each do |include_file|
|
844
|
+
form_file_name = CmsHelper.form_file_find(include_file)
|
845
|
+
@form_js << read_js_drg_form(form_file_name)
|
846
|
+
form = YAML.load_file(form_file_name)
|
847
|
+
@form = CmsHelper.forms_merge(@form, form)
|
848
|
+
end
|
849
|
+
end
|
850
|
+
|
851
|
+
########################################################################
|
852
|
+
# Will read data from form_file_name.js if exists.
|
853
|
+
#
|
854
|
+
# [Parameters:]
|
855
|
+
# [form_file_name] : Physical form filename
|
856
|
+
########################################################################
|
857
|
+
def read_js_drg_form(form_file_name)
|
858
|
+
js_form_file_name = form_file_name.sub('.yml','.js')
|
859
|
+
File.read(js_form_file_name) rescue ''
|
860
|
+
end
|
861
|
+
|
862
|
+
########################################################################
|
863
|
+
# Read DRG form into @form object. Subroutine of check_authorization.
|
864
|
+
########################################################################
|
865
|
+
def dc_form_read
|
866
|
+
params[:table] ||= params[:t] || CmsHelper.form_param(params)
|
867
|
+
table_name = decamelize_type(CmsHelper.table_param(params).strip)
|
868
|
+
@tables = table_name.split(';').inject([]) { |r, v| r << [(v.classify.constantize rescue nil), v] }
|
869
|
+
|
870
|
+
# split ids passed when embedded document
|
871
|
+
ids = params[:ids].to_s.strip.downcase
|
872
|
+
@ids = ids.split(';').inject([]) { |r,v| r << v }
|
873
|
+
|
874
|
+
# form_name defaults to last table specified
|
875
|
+
form_name = CmsHelper.form_param(params) || @tables.last[1]
|
876
|
+
@form_js = ''
|
877
|
+
|
878
|
+
# dynamically generated form
|
879
|
+
@form = if CmsHelper.form_param(params) == 'method'
|
880
|
+
dc_eval_class_method(params[:form_method], params)
|
881
|
+
else
|
882
|
+
form_file_name = CmsHelper.form_file_find(form_name)
|
883
|
+
@form_js = read_js_drg_form(form_file_name)
|
884
|
+
YAML.load_file(form_file_name)
|
885
|
+
end
|
886
|
+
|
887
|
+
# form includes or extends another form file
|
888
|
+
dc_form_include(@form['include']) if @form['include']
|
889
|
+
dc_form_extend(@form['extend']) if @form['extend']
|
890
|
+
@form['script'] = (@form['script'].blank? ? @form_js : @form['script'] + @form_js)
|
891
|
+
# add readonly key to form if readonly parameter is passed in url
|
892
|
+
@form['readonly'] = 1 if params['readonly'] #and %w(1 yes true).include?(params['readonly'].to_s.downcase.strip)
|
893
|
+
|
894
|
+
# !!!!!! Always use strings for key names since @form_params['table'] != @form_params[:table]
|
895
|
+
@form_params = { 'table' => table_name, 'ids' => params[:ids], 'form_name' => form_name,
|
896
|
+
'return_to' => params['return_to'], 'edit_only' => params['edit_only'],
|
897
|
+
'readonly' => params['readonly'], 'window_close' => params['window_close']}
|
898
|
+
end
|
899
|
+
|
900
|
+
########################################################################
|
901
|
+
# Will search for help file and return it's full path name if found.
|
902
|
+
########################################################################
|
903
|
+
def self.find_help_file(help_file_name)
|
904
|
+
file_name = nil
|
905
|
+
DrgCms.paths(:forms).reverse.each do |path|
|
906
|
+
f = "#{path}/help/#{help_file_name}.#{I18n.locale}"
|
907
|
+
file_name = f and break if File.exist?(f)
|
908
|
+
end
|
909
|
+
file_name
|
910
|
+
end
|
911
|
+
|
836
912
|
end
|
@@ -217,8 +217,9 @@ def copy_clipboard
|
|
217
217
|
format.json { dc_render_ajax(operation: 'window', url: request.url ) }
|
218
218
|
|
219
219
|
format.html do
|
220
|
-
|
221
|
-
|
220
|
+
table = CmsHelper.table_param(params)
|
221
|
+
doc = dc_find_document(table, params[:id], params[:ids])
|
222
|
+
text = "<br><br>[#{table},#{params[:id]},#{params[:ids]}]<br>"
|
222
223
|
render plain: text + doc.as_document.to_json
|
223
224
|
end
|
224
225
|
end
|
@@ -266,8 +267,8 @@ end
|
|
266
267
|
# document.
|
267
268
|
########################################################################
|
268
269
|
def add_json_ld_schema
|
269
|
-
edited_document = DcJsonLd.find_document_by_ids(params
|
270
|
-
yaml = YAML.load_file(
|
270
|
+
edited_document = DcJsonLd.find_document_by_ids(CmsHelper.table_param(params), params[:ids])
|
271
|
+
yaml = YAML.load_file( CmsHelper.form_file_find('json_ld_schema') )
|
271
272
|
schema_data = yaml[params[:schema]]
|
272
273
|
# Existing document
|
273
274
|
if edited_document.dc_json_lds.find_by(type: "@#{params[:schema]}")
|
@@ -282,12 +283,10 @@ end
|
|
282
283
|
# Will provide help data
|
283
284
|
########################################################################
|
284
285
|
def help
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
help_file_name = @form['help'] || @form['extend'] || params[:form_name] || params[:table]
|
290
|
-
help_file_name = find_help_file(help_file_name)
|
286
|
+
dc_form_read
|
287
|
+
form_name = CmsHelper.form_param(params) || CmsHelper.table_param(params)
|
288
|
+
help_file_name = @form['help'] || @form['extend'] || form_name
|
289
|
+
help_file_name = DcApplicationController.find_help_file(help_file_name)
|
291
290
|
@help = YAML.load_file(help_file_name) if help_file_name
|
292
291
|
# no auto generated help on index action
|
293
292
|
return render json: {} if params[:type] == 'index' && @help.nil?
|
@@ -297,18 +296,6 @@ end
|
|
297
296
|
|
298
297
|
protected
|
299
298
|
|
300
|
-
########################################################################
|
301
|
-
# Will search for help file and return it's path if found
|
302
|
-
########################################################################
|
303
|
-
def find_help_file(help_file_name)
|
304
|
-
file_name = nil
|
305
|
-
DrgCms.paths(:forms).reverse.each do |path|
|
306
|
-
f = "#{path}/help/#{help_file_name}.#{I18n.locale}"
|
307
|
-
file_name = f and break if File.exist?(f)
|
308
|
-
end
|
309
|
-
file_name
|
310
|
-
end
|
311
|
-
|
312
299
|
########################################################################
|
313
300
|
# Subroutine of add_json_ld_schema for adding one element
|
314
301
|
########################################################################
|