drg_cms 0.6.0.1 → 0.6.0.3
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/app/assets/javascripts/drg_cms/drg_cms.js +54 -7
- data/app/assets/javascripts/drg_cms_application.js +1 -1
- data/app/assets/javascripts/drg_cms_cms.js +1 -1
- data/app/assets/stylesheets/drg_cms/drg_cms.css +32 -1
- data/app/controllers/cmsedit_controller.rb +49 -18
- data/app/controllers/dc_application_controller.rb +82 -21
- data/app/controllers/dc_common_controller.rb +64 -5
- data/app/forms/all_options.yml +2 -0
- data/app/forms/dc_ad.yml +11 -22
- data/app/forms/dc_design.yml +13 -13
- data/app/forms/dc_json_ld.yml +59 -0
- data/app/forms/dc_key_value.yml +32 -0
- data/app/forms/dc_menu_item.yml +1 -0
- data/app/forms/dc_page.yml +1 -5
- data/app/forms/dc_seo.yml +33 -0
- data/app/forms/json_ld_schema.yml +168 -0
- data/app/helpers/cmsedit_helper.rb +29 -24
- data/app/helpers/dc_application_helper.rb +105 -4
- data/app/models/concerns/dc_page_concern.rb +30 -5
- data/app/models/concerns/dc_seo_concern.rb +66 -0
- data/app/models/dc_design.rb +2 -0
- data/app/models/dc_json_ld.rb +152 -0
- data/app/models/dc_key_value.rb +48 -0
- data/app/models/dc_page.rb +0 -1
- data/app/models/drgcms_form_fields/hash_field.rb +86 -0
- data/app/models/drgcms_form_fields/select.rb +48 -15
- data/app/models/drgcms_form_fields/text_autocomplete.rb +14 -2
- data/app/models/drgcms_form_fields/tree_select.rb +4 -1
- data/app/{helpers → renderers}/dc_ad_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_big_menu_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_captcha_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_common_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_gallery_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_menu_renderer.rb +10 -4
- data/app/{helpers → renderers}/dc_page_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_part_renderer.rb +4 -4
- data/app/{helpers → renderers}/dc_piece_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_poll_renderer.rb +13 -5
- data/app/{helpers → renderers}/dc_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_simple_menu_renderer.rb +0 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +3 -22
- data/config/locales/drgcms_en.yml +3 -1
- data/config/locales/drgcms_sl.yml +2 -0
- data/config/locales/models_en.yml +38 -6
- data/config/locales/models_sl.yml +39 -7
- data/lib/drg_cms.rb +2 -1
- data/lib/drg_cms/version.rb +1 -1
- metadata +22 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4b6e9f20a0a4ab04d8c5faa736a556f29a9a9709a324fb5438e66f4563c985de
|
|
4
|
+
data.tar.gz: e6c20a842d10be10c73a4d3129caafc43445a6552d0f6cbabd981b05981d20f2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd974c1b182db06f63cd0f7673b979bbbb4a0c0d2b200e9f6cd9fe428dfabc3d879348046882e97a7400e41961bfe6cbea4c147193bb0de2aca50e2bdbb7b738
|
|
7
|
+
data.tar.gz: bd4a6d8897a424ea22b403f70f4b4a12228798564ebe0023f5596e6a987de798ca304ee25c590966e688ba5588243ee566b6d4d897127ef37350b0c0aef55526
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
*******************************************************************/
|
|
29
29
|
$.getUrlParam = function(name) {
|
|
30
30
|
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
|
|
31
|
+
if (results == null) return null;
|
|
31
32
|
return results[1] || 0;
|
|
32
33
|
};
|
|
33
34
|
|
|
@@ -52,6 +53,31 @@ remove_background_from_iframe = function(obj) {
|
|
|
52
53
|
$(head).append(css);
|
|
53
54
|
};
|
|
54
55
|
|
|
56
|
+
/*******************************************************************
|
|
57
|
+
* Will update select field on the form which select options are dependend on other field
|
|
58
|
+
*******************************************************************/
|
|
59
|
+
update_select_depend = function(select_name, depend_name, method) {
|
|
60
|
+
var select_field = $('#'+select_name);
|
|
61
|
+
var depend_field = $('#'+depend_name);
|
|
62
|
+
/*
|
|
63
|
+
$.ajax({
|
|
64
|
+
url: "/dc_common/autocomplete",
|
|
65
|
+
type: "POST",
|
|
66
|
+
dataType: "json",
|
|
67
|
+
data: { input: request.term, table: "#{table}", search: "#{search}" #{(',id: "'+@yaml['id'] + '"') if @yaml['id']} },
|
|
68
|
+
success: function(data) {
|
|
69
|
+
response( $.map( data, function(key) {
|
|
70
|
+
return key;
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/*******************************************************************
|
|
79
|
+
* Format number input field according to data
|
|
80
|
+
*******************************************************************/
|
|
55
81
|
format_number_field = function(e) {
|
|
56
82
|
var decimals = e.attr("data-decimal") || 2;
|
|
57
83
|
var delimiter = e.attr("data-delimiter") || '.';
|
|
@@ -99,10 +125,10 @@ $(function() {
|
|
|
99
125
|
*
|
|
100
126
|
* Protocol consists of operation and value which are returned as json by
|
|
101
127
|
* called controller. Controller will return an ajax call usually like this:
|
|
102
|
-
* render json: {operation: value}
|
|
128
|
+
* render json: {operation: value}
|
|
103
129
|
*
|
|
104
130
|
* Operation is further divided into source and determinator which are divided by underline char.
|
|
105
|
-
* render json: {#div_status: 'OK!'}
|
|
131
|
+
* render json: {#div_status: 'OK!'}
|
|
106
132
|
* will replace html in div="status" with value 'OK!'. Source is '#div' determinator is 'status'.
|
|
107
133
|
*
|
|
108
134
|
* Possible operators are:
|
|
@@ -144,7 +170,7 @@ process_json_result = function(json) {
|
|
|
144
170
|
operation = key;
|
|
145
171
|
what = '';
|
|
146
172
|
}
|
|
147
|
-
//
|
|
173
|
+
//
|
|
148
174
|
switch (operation) {
|
|
149
175
|
// update field
|
|
150
176
|
case 'record':
|
|
@@ -195,6 +221,9 @@ process_json_result = function(json) {
|
|
|
195
221
|
w = window.open(val, what);
|
|
196
222
|
w.focus();
|
|
197
223
|
break;
|
|
224
|
+
case 'eval':
|
|
225
|
+
eval (val);
|
|
226
|
+
break;
|
|
198
227
|
case 'reload':
|
|
199
228
|
location.reload();
|
|
200
229
|
break;
|
|
@@ -248,6 +277,13 @@ $(document).ready( function() {
|
|
|
248
277
|
// select_first_input_field('.dc-form');
|
|
249
278
|
}
|
|
250
279
|
*/
|
|
280
|
+
/*******************************************************************
|
|
281
|
+
* It will scroll display to ypos if return_to_ypos parameter is present
|
|
282
|
+
*******************************************************************/
|
|
283
|
+
if (window.location.href.match(/return_to_ypos=/))
|
|
284
|
+
{
|
|
285
|
+
window.scrollTo(0, $.getUrlParam('return_to_ypos'));
|
|
286
|
+
}
|
|
251
287
|
|
|
252
288
|
/*******************************************************************
|
|
253
289
|
* Register ad clicks
|
|
@@ -257,6 +293,17 @@ $(document).ready( function() {
|
|
|
257
293
|
return true;
|
|
258
294
|
});
|
|
259
295
|
|
|
296
|
+
/*****************************************************************
|
|
297
|
+
* Toggle CMS mode. When clicked on left 30 pixels, window will be scrolled approximately
|
|
298
|
+
* to the position wher toggle was clicked. When clicked from pixel 31 and on it will
|
|
299
|
+
* stay on the top of window.
|
|
300
|
+
******************************************************************/
|
|
301
|
+
$('.cms-toggle').bind('click', function(e) {
|
|
302
|
+
var url = '/dc_common/toggle_edit_mode?return_to=' + window.location.href;
|
|
303
|
+
if (e.pageX < 30) url = url + '&return_to_ypos=' + e.pageY ;
|
|
304
|
+
window.location.href = url;
|
|
305
|
+
});
|
|
306
|
+
|
|
260
307
|
/*******************************************************************
|
|
261
308
|
* Popup or close CMS edit menu on icon click
|
|
262
309
|
*******************************************************************/
|
|
@@ -319,7 +366,7 @@ $(document).ready( function() {
|
|
|
319
366
|
* Resize iframe_cms to the size of its contents. Make at least 500 px high
|
|
320
367
|
* unless on initial display.
|
|
321
368
|
*******************************************************************/
|
|
322
|
-
$('#iframe_cms').load
|
|
369
|
+
$('#iframe_cms').on('load', function() {
|
|
323
370
|
// alert('bla 1');
|
|
324
371
|
new_height = this.contentWindow.document.body.offsetHeight + 50;
|
|
325
372
|
if (new_height < 500 && new_height > 60) new_height = 500;
|
|
@@ -332,7 +379,7 @@ $(document).ready( function() {
|
|
|
332
379
|
* Same goes for editiframe. Resize it + 30px
|
|
333
380
|
* unless on initial display with no data
|
|
334
381
|
*******************************************************************/
|
|
335
|
-
$('#iframe_edit').load
|
|
382
|
+
$('#iframe_edit').on('load', function() {
|
|
336
383
|
// console.log(this.contentWindow.document.body.offsetHeight);
|
|
337
384
|
if (this.contentWindow.document.body.offsetHeight > 10) {
|
|
338
385
|
this.style.height = (this.contentWindow.document.body.offsetHeight + 30) + 'px';
|
|
@@ -534,7 +581,7 @@ element = $(this).find(':first').attr('id');
|
|
|
534
581
|
/*******************************************************************
|
|
535
582
|
* Experimental. Force reload of parent page if this div appears.
|
|
536
583
|
*******************************************************************/
|
|
537
|
-
$('#div-reload-parent').load
|
|
584
|
+
$('#div-reload-parent').on('load', function() {
|
|
538
585
|
// alert('div-reload-parent 1');
|
|
539
586
|
parent.location.href = parent.location.href;
|
|
540
587
|
});
|
|
@@ -544,7 +591,7 @@ element = $(this).find(':first').attr('id');
|
|
|
544
591
|
*
|
|
545
592
|
* Just an Idea. Not needed yet.
|
|
546
593
|
*******************************************************************/
|
|
547
|
-
$('#div-reload').load
|
|
594
|
+
$('#div-reload').on('load', function() {
|
|
548
595
|
alert('div-reload 1');
|
|
549
596
|
// location.href = location.href;
|
|
550
597
|
});
|
|
@@ -647,8 +647,39 @@ padding: 5px 0;
|
|
|
647
647
|
border-top: 2px solid #ddd;
|
|
648
648
|
}
|
|
649
649
|
|
|
650
|
+
/*** CMS toggle button */
|
|
651
|
+
.cms-toggle {
|
|
652
|
+
z-index: 1000000;
|
|
653
|
+
position: fixed;
|
|
654
|
+
top: 1px; left: 1px;
|
|
655
|
+
padding: 4px;
|
|
656
|
+
color: #fff;
|
|
657
|
+
background-color: #000;
|
|
658
|
+
font-weight: bold;
|
|
659
|
+
font-size: 14px;
|
|
660
|
+
box-shadow: 2px 2px 6px #666;
|
|
661
|
+
border-radius: 3px;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.cms-toggle:hover {
|
|
665
|
+
color: #000;
|
|
666
|
+
background-color: #fff;
|
|
667
|
+
cursor: pointer;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
.cms-toggle.mode-1:before {
|
|
671
|
+
font-family: 'FontAwesome';
|
|
672
|
+
content: '\f06e\20';
|
|
673
|
+
color: lightskyblue;
|
|
674
|
+
}
|
|
675
|
+
.cms-toggle.mode-2:before {
|
|
676
|
+
font-family: 'FontAwesome';
|
|
677
|
+
content: '\f040\20';
|
|
678
|
+
color: lightcoral;
|
|
679
|
+
}
|
|
680
|
+
|
|
650
681
|
#cmsedit-div {
|
|
651
|
-
font-family:
|
|
682
|
+
font-family: Arial, sans-serif;
|
|
652
683
|
font-size: 13px;
|
|
653
684
|
line-height: 13px;
|
|
654
685
|
}
|
|
@@ -246,7 +246,9 @@ def process_collections #:nodoc
|
|
|
246
246
|
if @tables.size > 1
|
|
247
247
|
rec = @tables.first[0].find(@ids.first) # top most document.id
|
|
248
248
|
1.upto(@tables.size - 2) { |i| rec = rec.send(@tables[i][1].pluralize).find(@ids[i]) } # find embedded childrens by ids
|
|
249
|
-
|
|
249
|
+
# TO DO. When field name is different then pluralized class name. Not working yet.
|
|
250
|
+
embedded_field_name = @tables.last[0] ? @tables.last[1].pluralize : @tables.last[1]
|
|
251
|
+
@records = rec.send(embedded_field_name) # current embedded set
|
|
250
252
|
# sort by order if order field is present in model
|
|
251
253
|
if @tables.last[1].classify.constantize.respond_to?(:order)
|
|
252
254
|
@records = @records.order_by('order asc')
|
|
@@ -275,9 +277,10 @@ def process_in_memory #:nodoc
|
|
|
275
277
|
end
|
|
276
278
|
|
|
277
279
|
########################################################################
|
|
278
|
-
#
|
|
280
|
+
# Index action
|
|
279
281
|
########################################################################
|
|
280
282
|
def index
|
|
283
|
+
@form['result_set'] ||= {}
|
|
281
284
|
redirected = (@form['table'] == 'dc_memory' ? process_in_memory : process_collections)
|
|
282
285
|
return if redirected
|
|
283
286
|
#
|
|
@@ -321,7 +324,7 @@ end
|
|
|
321
324
|
########################################################################
|
|
322
325
|
def login
|
|
323
326
|
if params[:id] == 'test' then set_test_site
|
|
324
|
-
elsif params[:ok] then
|
|
327
|
+
elsif params[:ok] then render action: 'login', layout: 'cms'
|
|
325
328
|
else
|
|
326
329
|
session[:edit_mode] = 0
|
|
327
330
|
render action: 'login', layout: 'cms'
|
|
@@ -460,15 +463,14 @@ def create
|
|
|
460
463
|
session[:form_time_stamp] = params[:form_time_stamp]
|
|
461
464
|
#
|
|
462
465
|
create_new_empty_record
|
|
463
|
-
params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
|
|
464
466
|
if save_data
|
|
465
|
-
flash[:info]
|
|
467
|
+
flash[:info] = t('drgcms.doc_saved')
|
|
468
|
+
params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
|
|
466
469
|
return process_return_to(params[:return_to]) if params[:return_to]
|
|
467
470
|
|
|
468
471
|
@parms['id'] = @record.id # must be set, for proper update link
|
|
469
472
|
params[:id] = @record.id # must be set, for find_record
|
|
470
473
|
edit
|
|
471
|
-
# render action: :edit
|
|
472
474
|
else # error
|
|
473
475
|
return process_return_to(params[:return_to]) if params[:return_to]
|
|
474
476
|
render action: :new
|
|
@@ -642,29 +644,58 @@ def forms_merge(hash1, hash2)
|
|
|
642
644
|
target.delete_if{ |k,v| v.nil? }
|
|
643
645
|
end
|
|
644
646
|
|
|
647
|
+
########################################################################
|
|
648
|
+
# Extends DRGCMS form file. Extended file is processed first and then merged
|
|
649
|
+
# with code in this form file. Form can extend only single form file.
|
|
650
|
+
#
|
|
651
|
+
# [Parameters:]
|
|
652
|
+
# [extend_option] : Value of @form['extend'] option
|
|
653
|
+
########################################################################
|
|
654
|
+
def extend_drg_cms_form(extend_option)
|
|
655
|
+
form = YAML.load_file( dc_find_form_file(extend_option) )
|
|
656
|
+
@form = forms_merge(form, @form)
|
|
657
|
+
# If combined form contains tabs and fields options, merge fields into tabs
|
|
658
|
+
if @form['form']['tabs'] and @form['form']['fields']
|
|
659
|
+
@form['form']['tabs']['fields'] = @form['form']['fields']
|
|
660
|
+
@form['form']['fields'] = nil
|
|
661
|
+
end
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
########################################################################
|
|
665
|
+
# Include code from another DRGCMS form file. Included code is merged
|
|
666
|
+
# with current form file code. Form can include more than one other DRGCMS forms.
|
|
667
|
+
#
|
|
668
|
+
# [Parameters:]
|
|
669
|
+
# [include_option] : Value of @form['include'] option
|
|
670
|
+
########################################################################
|
|
671
|
+
def include_drg_cms_form(include_option)
|
|
672
|
+
includes = include_option.class == Array ? include_option : include_option.split(/\,|\;/)
|
|
673
|
+
includes.each do |include_file|
|
|
674
|
+
form = YAML.load_file( dc_find_form_file(include_file) )
|
|
675
|
+
@form = forms_merge(@form, form)
|
|
676
|
+
end
|
|
677
|
+
end
|
|
678
|
+
|
|
645
679
|
########################################################################
|
|
646
680
|
# Read drgcms form into yaml object. Subroutine of check_authorization.
|
|
647
681
|
########################################################################
|
|
648
682
|
def read_drg_cms_form
|
|
649
683
|
table_name = decamelize_type(params[:table].strip)
|
|
650
|
-
@tables = table_name.split(';').inject([]) { |r,v| r << [v.classify.constantize, v] }
|
|
684
|
+
@tables = table_name.split(';').inject([]) { |r,v| r << [(v.classify.constantize rescue nil), v] }
|
|
651
685
|
# split ids passed when embedded document
|
|
652
686
|
ids = params[:ids].to_s.strip.downcase
|
|
653
687
|
@ids = ids.split(';').inject([]) { |r,v| r << v }
|
|
654
688
|
# form_name defaults to last table specified
|
|
655
689
|
form_name = params[:form_name] || @tables.last[1]
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
@form = forms_merge(form, @form)
|
|
662
|
-
# If combined form contains tabs and fields options, merge fields into tabs
|
|
663
|
-
if @form['form']['tabs'] and @form['form']['fields']
|
|
664
|
-
@form['form']['tabs']['fields'] = @form['form']['fields']
|
|
665
|
-
@form['form']['fields'] = nil
|
|
666
|
-
end
|
|
690
|
+
# dynamicaly generated form
|
|
691
|
+
@form = if params[:form_name] == 'method'
|
|
692
|
+
dc_eval_class_method(params[:form_method], params)
|
|
693
|
+
else
|
|
694
|
+
YAML.load_file( dc_find_form_file(form_name) ) rescue nil
|
|
667
695
|
end
|
|
696
|
+
# form includes or extends another form file
|
|
697
|
+
include_drg_cms_form(@form['include']) if @form['include']
|
|
698
|
+
extend_drg_cms_form(@form['extend']) if @form['extend']
|
|
668
699
|
# add readonly key to form if readonly parameter is passed in url
|
|
669
700
|
@form['readonly'] = 1 if params['readonly'] #and %w(1 yes true).include?(params['readonly'].to_s.downcase.strip)
|
|
670
701
|
# !!!!!! Always use strings for key names since @parms['table'] != @parms[:table]
|
|
@@ -105,7 +105,8 @@ end
|
|
|
105
105
|
# Sets internal @page_title variable.
|
|
106
106
|
##########################################################################
|
|
107
107
|
def set_page_title()
|
|
108
|
-
@page_title = @page.title.blank? ?
|
|
108
|
+
@page_title = @page.title.blank? ? @page.subject : @page.title
|
|
109
|
+
dc_add_meta_tag(:name, 'description', @page.meta_description)
|
|
109
110
|
end
|
|
110
111
|
|
|
111
112
|
########################################################################
|
|
@@ -127,7 +128,7 @@ def dc_find_form_file(form_file)
|
|
|
127
128
|
f = "#{path}/#{form_file}.yml"
|
|
128
129
|
return f if File.exist?(f) and (form_path.nil? or path.to_s.match(/\/#{form_path}\//i))
|
|
129
130
|
end
|
|
130
|
-
|
|
131
|
+
logger.error "Form file #{form_file} not found!"
|
|
131
132
|
nil
|
|
132
133
|
end
|
|
133
134
|
|
|
@@ -141,7 +142,7 @@ end
|
|
|
141
142
|
# return dc_render_404('Site') unless site
|
|
142
143
|
########################################################################
|
|
143
144
|
def dc_render_404(where_the_error_is=nil)
|
|
144
|
-
logger.info("Error 404;#{request.env['REQUEST_URI']};#{request.referer};#{where_the_error_is}")
|
|
145
|
+
logger.info("Error 404;#{request.env['REQUEST_URI'] rescue ''};#{request.referer};#{where_the_error_is}")
|
|
145
146
|
render(file: Rails.root.join('public/404.html'), status: 404)
|
|
146
147
|
end
|
|
147
148
|
|
|
@@ -286,23 +287,27 @@ def get_design_and_render(design_doc)
|
|
|
286
287
|
extend controller if controller
|
|
287
288
|
return send @options[:action] if respond_to?(@options[:action])
|
|
288
289
|
end
|
|
289
|
-
#
|
|
290
|
+
# design doc present
|
|
290
291
|
if design_doc
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
design = site_top + design_doc.body + site_bottom
|
|
297
|
-
return render(inline: design, layout: layout)
|
|
292
|
+
# defined as rails view
|
|
293
|
+
design = if design_doc.rails_view.blank? or design_doc.rails_view == 'site'
|
|
294
|
+
@site.rails_view
|
|
295
|
+
else
|
|
296
|
+
design_doc.rails_view
|
|
298
297
|
end
|
|
298
|
+
return render design, layout: layout unless design.blank?
|
|
299
|
+
# defined as inline code
|
|
300
|
+
design = design_doc.body.blank? ? @site.design : design_doc.body
|
|
301
|
+
design = site_top + design + site_bottom
|
|
302
|
+
return render(inline: design, layout: layout) unless design.blank?
|
|
299
303
|
end
|
|
300
|
-
#
|
|
304
|
+
# Design doc not defined
|
|
301
305
|
if @site.rails_view.blank?
|
|
302
306
|
design = site_top + @site.design + site_bottom
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
307
|
+
render(inline: design, layout: layout)
|
|
308
|
+
else
|
|
309
|
+
render @site.rails_view, layout: layout
|
|
310
|
+
end
|
|
306
311
|
end
|
|
307
312
|
|
|
308
313
|
##########################################################################
|
|
@@ -331,13 +336,13 @@ def dc_process_default_request()
|
|
|
331
336
|
dc_set_options(@site.settings)
|
|
332
337
|
# HOMEPAGE. When no parameters is set
|
|
333
338
|
params[:path] = @site.homepage_link if params[:id].nil? and params[:path].nil?
|
|
334
|
-
@options[:path] = params[:path].to_s.split('/')
|
|
339
|
+
@options[:path] = params[:path].to_s.downcase.split('/')
|
|
335
340
|
params[:path] = @options[:path].first if @options[:path].size > 1
|
|
336
341
|
# some other process request. It should fail if not defined
|
|
337
342
|
return send(@site.request_processor) unless @site.request_processor.blank?
|
|
338
343
|
|
|
339
344
|
# Search for page
|
|
340
|
-
pageclass = @site.
|
|
345
|
+
pageclass = @site.page_klass
|
|
341
346
|
if params[:id]
|
|
342
347
|
#Page.where(id: params[:id]).or(subject_link: params[:id]).first
|
|
343
348
|
@page = pageclass.find_by(:dc_site_id.in => [@site._id, nil], subject_link: params[:id], active: true)
|
|
@@ -357,17 +362,19 @@ def dc_process_default_request()
|
|
|
357
362
|
end
|
|
358
363
|
# if @page is not found render 404 error
|
|
359
364
|
return dc_render_404('Page!') unless @page
|
|
360
|
-
dc_set_options @page.params
|
|
361
365
|
dc_set_is_mobile unless session[:is_mobile] # do it only once per session
|
|
362
366
|
# find design if defined. Otherwise design MUST be declared in site
|
|
363
367
|
if @page.dc_design_id
|
|
364
368
|
@design = DcDesign.find(@page.dc_design_id)
|
|
365
369
|
return dc_render_404('Design!') unless @design
|
|
366
370
|
end
|
|
371
|
+
dc_set_options @design.params if @design
|
|
372
|
+
dc_set_options @page.params
|
|
373
|
+
dc_add_json_ld(@page.get_json_ld)
|
|
367
374
|
# Add edit menu
|
|
368
375
|
if session[:edit_mode] > 0
|
|
369
376
|
session[:site_id] = @site.id
|
|
370
|
-
session[:
|
|
377
|
+
session[:site_page_class] = @site.page_class
|
|
371
378
|
session[:page_id] = @page.id
|
|
372
379
|
else
|
|
373
380
|
# Log only visits from non-editors
|
|
@@ -529,11 +536,11 @@ def dc_render_ajax(opts)
|
|
|
529
536
|
end
|
|
530
537
|
key << "_#{opts[:div]}#{opts[:class]}"
|
|
531
538
|
else
|
|
532
|
-
|
|
539
|
+
logger.error 'Error: dc_render_ajax. Operation is not set!' if opts[:operation].nil?
|
|
533
540
|
key = "#{opts[:operation]}_"
|
|
534
541
|
end
|
|
535
542
|
result[key] = opts[:value] || opts[:url] || ''
|
|
536
|
-
render
|
|
543
|
+
render json: result
|
|
537
544
|
end
|
|
538
545
|
|
|
539
546
|
########################################################################
|
|
@@ -654,4 +661,58 @@ def dc_check_user_still_valid(repeat_after=1.day)
|
|
|
654
661
|
end
|
|
655
662
|
end
|
|
656
663
|
|
|
664
|
+
##########################################################################
|
|
665
|
+
# Evaluates Class.method in more predictable context then just calling eval
|
|
666
|
+
#
|
|
667
|
+
# @param [String] class_method defined as MyClass.method_name
|
|
668
|
+
# @param [Object] optional parameters send to class_method
|
|
669
|
+
##########################################################################
|
|
670
|
+
def dc_eval_class_method(class_method, params=nil)
|
|
671
|
+
klass, method = class_method.split('.')
|
|
672
|
+
# check if class exists
|
|
673
|
+
klass = klass.classify.constantize rescue nil
|
|
674
|
+
if klass.nil?
|
|
675
|
+
logger.error " Class in #{class_method} not defined!"
|
|
676
|
+
return nil
|
|
677
|
+
end
|
|
678
|
+
# call method
|
|
679
|
+
if klass.respond_to?(method)
|
|
680
|
+
klass.send(method, params)
|
|
681
|
+
else
|
|
682
|
+
logger.error "Method in #{class_method} not defined!"
|
|
683
|
+
nil
|
|
684
|
+
end
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
##########################################################################
|
|
688
|
+
# Will add new element to json_ld structure
|
|
689
|
+
#
|
|
690
|
+
# Parameters:
|
|
691
|
+
# [element] Hash or Array of hashes:
|
|
692
|
+
##########################################################################
|
|
693
|
+
def dc_add_json_ld(element)
|
|
694
|
+
@json_ld ||= []
|
|
695
|
+
if element.class == Array
|
|
696
|
+
@json_ld += element
|
|
697
|
+
else
|
|
698
|
+
@json_ld << element
|
|
699
|
+
end
|
|
700
|
+
end
|
|
701
|
+
|
|
702
|
+
########################################################################
|
|
703
|
+
# Will add a meta tag to internal hash structure. If meta tag already exists it
|
|
704
|
+
# will be overwritten.
|
|
705
|
+
#
|
|
706
|
+
# Parameters:
|
|
707
|
+
# [name] String: meta name
|
|
708
|
+
# [content] String: meta content
|
|
709
|
+
#
|
|
710
|
+
########################################################################
|
|
711
|
+
def dc_add_meta_tag(type, name, content)
|
|
712
|
+
return if content.blank?
|
|
713
|
+
@meta_tags ||= {}
|
|
714
|
+
key = "#{type}=\"#{name}\""
|
|
715
|
+
@meta_tags[key] = content
|
|
716
|
+
end
|
|
717
|
+
|
|
657
718
|
end
|