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