drg_cms 0.4.39
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +39 -0
- data/app/assets/images/drg_cms/add.png +0 -0
- data/app/assets/images/drg_cms/arrow_in.png +0 -0
- data/app/assets/images/drg_cms/arrow_out.png +0 -0
- data/app/assets/images/drg_cms/checkbox-checked.png +0 -0
- data/app/assets/images/drg_cms/checkbox-unchecked.png +0 -0
- data/app/assets/images/drg_cms/cols.png +0 -0
- data/app/assets/images/drg_cms/copy.png +0 -0
- data/app/assets/images/drg_cms/edit.png +0 -0
- data/app/assets/images/drg_cms/edit_design.png +0 -0
- data/app/assets/images/drg_cms/edit_page.png +0 -0
- data/app/assets/images/drg_cms/edit_site.png +0 -0
- data/app/assets/images/drg_cms/html.png +0 -0
- data/app/assets/images/drg_cms/pin.png +0 -0
- data/app/assets/images/drg_cms/printer.png +0 -0
- data/app/assets/images/drg_cms/reload.png +0 -0
- data/app/assets/images/drg_cms/search_16.png +0 -0
- data/app/assets/images/drg_cms/spinner.gif +0 -0
- data/app/assets/images/drg_cms/view_tile.png +0 -0
- data/app/assets/images/drg_cms/x.png +0 -0
- data/app/assets/javascripts/drg_cms/drg_cms.js +449 -0
- data/app/assets/javascripts/drg_cms/jquery-migrate.js +511 -0
- data/app/assets/javascripts/drg_cms/jquery.datetimepicker.js +1353 -0
- data/app/assets/javascripts/drg_cms/some_scripts.js +33 -0
- data/app/assets/javascripts/drg_cms_application.js +11 -0
- data/app/assets/javascripts/drg_cms_cms.js +28 -0
- data/app/assets/stylesheets/drg_cms/drg_cms.css +632 -0
- data/app/assets/stylesheets/drg_cms/jquery-ui.css +339 -0
- data/app/assets/stylesheets/drg_cms/jquery.datetimepicker.css +304 -0
- data/app/assets/stylesheets/drg_cms/th-bg.png +0 -0
- data/app/assets/stylesheets/drg_cms/theme.css +49 -0
- data/app/assets/stylesheets/drg_cms_application.css +12 -0
- data/app/assets/stylesheets/drg_cms_cms.css +26 -0
- data/app/controllers/cmsedit_controller.rb +673 -0
- data/app/controllers/dc_application_controller.rb +385 -0
- data/app/controllers/dc_at_the_beginning_controller.rb +120 -0
- data/app/controllers/dc_common_controller.rb +314 -0
- data/app/controllers/dc_mail_controller.rb +89 -0
- data/app/controllers/dc_main_controller.rb +40 -0
- data/app/controllers/drgcms_controls/dc_page_controls.rb +40 -0
- data/app/forms/all_options.yml +176 -0
- data/app/forms/cms_forms.yml +93 -0
- data/app/forms/cms_menu.yml +142 -0
- data/app/forms/dc_ad.yml +130 -0
- data/app/forms/dc_big_table.yml +59 -0
- data/app/forms/dc_big_table_locale.yml +41 -0
- data/app/forms/dc_big_table_value.yml +47 -0
- data/app/forms/dc_category.yml +57 -0
- data/app/forms/dc_design.yml +68 -0
- data/app/forms/dc_folder_permission.yml +49 -0
- data/app/forms/dc_forum_cat.yml +54 -0
- data/app/forms/dc_forum_forum.yml +53 -0
- data/app/forms/dc_forum_msg.yml +124 -0
- data/app/forms/dc_forum_privmsg.yml +125 -0
- data/app/forms/dc_forum_topic.yml +131 -0
- data/app/forms/dc_journal.yml +85 -0
- data/app/forms/dc_link.yml +55 -0
- data/app/forms/dc_mail.yml +88 -0
- data/app/forms/dc_mail_address.yml +56 -0
- data/app/forms/dc_mail_list.yml +44 -0
- data/app/forms/dc_mail_list_member.yml +42 -0
- data/app/forms/dc_menu.yml +62 -0
- data/app/forms/dc_menu_item.yml +81 -0
- data/app/forms/dc_page.yml +145 -0
- data/app/forms/dc_part.yml +102 -0
- data/app/forms/dc_permission.yml +50 -0
- data/app/forms/dc_piece.yml +105 -0
- data/app/forms/dc_policy.yml +57 -0
- data/app/forms/dc_policy_role.yml +42 -0
- data/app/forms/dc_policy_rule.yml +38 -0
- data/app/forms/dc_policy_rule_nocms.yml +38 -0
- data/app/forms/dc_poll.yml +113 -0
- data/app/forms/dc_poll_item.yml +76 -0
- data/app/forms/dc_simple_menu.yml +64 -0
- data/app/forms/dc_simple_menu_item.yml +80 -0
- data/app/forms/dc_site.yml +149 -0
- data/app/forms/dc_user.yml +142 -0
- data/app/forms/dc_user_role.yml +54 -0
- data/app/forms/drgcms_cms.yml +28 -0
- data/app/helpers/cmsedit_helper.rb +698 -0
- data/app/helpers/dc_ad_renderer.rb +206 -0
- data/app/helpers/dc_application_helper.rb +704 -0
- data/app/helpers/dc_big_menu_renderer.rb +180 -0
- data/app/helpers/dc_captcha_renderer.rb +100 -0
- data/app/helpers/dc_common_renderer.rb +132 -0
- data/app/helpers/dc_mail_renderer.rb +76 -0
- data/app/helpers/dc_menu_renderer.rb +143 -0
- data/app/helpers/dc_page_renderer.rb +80 -0
- data/app/helpers/dc_part_renderer.rb +162 -0
- data/app/helpers/dc_piece_renderer.rb +124 -0
- data/app/helpers/dc_poll_renderer.rb +219 -0
- data/app/helpers/dc_renderer.rb +56 -0
- data/app/helpers/dc_simple_menu_renderer.rb +244 -0
- data/app/helpers/drgcms_form_field.rb +863 -0
- data/app/models/__dc_global_data.rb +44 -0
- data/app/models/dc_ad.rb +52 -0
- data/app/models/dc_ad_stat.rb +34 -0
- data/app/models/dc_big_menu.rb +89 -0
- data/app/models/dc_big_table.rb +63 -0
- data/app/models/dc_big_table_locale.rb +35 -0
- data/app/models/dc_big_table_value.rb +38 -0
- data/app/models/dc_category.rb +48 -0
- data/app/models/dc_design.rb +48 -0
- data/app/models/dc_dummy.rb +30 -0
- data/app/models/dc_folder_permission.rb +43 -0
- data/app/models/dc_global_data.rb +44 -0
- data/app/models/dc_journal.rb +39 -0
- data/app/models/dc_key_value_store.rb +90 -0
- data/app/models/dc_link.rb +39 -0
- data/app/models/dc_mail.rb +64 -0
- data/app/models/dc_mail_address.rb +69 -0
- data/app/models/dc_mail_list.rb +48 -0
- data/app/models/dc_mail_list_member.rb +34 -0
- data/app/models/dc_menu.rb +59 -0
- data/app/models/dc_menu_item.rb +40 -0
- data/app/models/dc_page.rb +123 -0
- data/app/models/dc_part.rb +28 -0
- data/app/models/dc_permission.rb +58 -0
- data/app/models/dc_piece.rb +57 -0
- data/app/models/dc_policy.rb +94 -0
- data/app/models/dc_policy_role.rb +47 -0
- data/app/models/dc_policy_rule.rb +65 -0
- data/app/models/dc_poll.rb +46 -0
- data/app/models/dc_poll_item.rb +40 -0
- data/app/models/dc_sendmail.rb +48 -0
- data/app/models/dc_simple_menu.rb +58 -0
- data/app/models/dc_simple_menu_item.rb +39 -0
- data/app/models/dc_site.rb +92 -0
- data/app/models/dc_stat.rb +36 -0
- data/app/models/dc_user.rb +91 -0
- data/app/models/dc_user_role.rb +36 -0
- data/app/models/dc_visit.rb +35 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +59 -0
- data/app/views/cmsedit/_edit_stuff.js.erb +6 -0
- data/app/views/cmsedit/_form.html.erb +21 -0
- data/app/views/cmsedit/_result.html.erb +20 -0
- data/app/views/cmsedit/edit.html.erb +6 -0
- data/app/views/cmsedit/error.html.erb +2 -0
- data/app/views/cmsedit/index.html.erb +6 -0
- data/app/views/cmsedit/new.html.erb +5 -0
- data/app/views/cmsedit/show.html.erb +21 -0
- data/app/views/dc_at_the_beginning/create.html.erb +9 -0
- data/app/views/dc_at_the_beginning/index.html.erb +19 -0
- data/app/views/dc_common/paste_clipboard.html.erb +17 -0
- data/app/views/dc_mail/subscribe.html.erb +7 -0
- data/app/views/dc_mail/unsubscribe.html.erb +19 -0
- data/app/views/layouts/cms.html.erb +17 -0
- data/app/views/layouts/cmsedit.html.erb +16 -0
- data/app/views/layouts/content.html.erb +16 -0
- data/config/initializers/kaminari_patch.rb +36 -0
- data/config/locales/datetimepicker.yml +13 -0
- data/config/locales/drgcms_en.yml +96 -0
- data/config/locales/drgcms_sl.yml +97 -0
- data/config/locales/en.yml +7 -0
- data/config/locales/kaminari.yml +26 -0
- data/config/locales/models_en.yml +790 -0
- data/config/locales/models_sl.yml +805 -0
- data/config/locales/mongoid_sl.yml +60 -0
- data/config/locales/sl.yml +211 -0
- data/config/routes.rb +2 -0
- data/drg_cms.gemspec +28 -0
- data/lib/drg_cms.rb +45 -0
- data/lib/drg_cms/engine.rb +30 -0
- data/lib/drg_cms/version.rb +3 -0
- data/lib/tasks/at_the_beginning.yml +26 -0
- data/lib/tasks/dc_cleanup.rake +94 -0
- data/lib/tasks/drg_cms_tasks.rake +118 -0
- data/lib/tasks/send_mail.rake +253 -0
- data/lib/tasks/site_statistics.rake +80 -0
- data/test/drg_cms_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +58 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- metadata +375 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#coding: utf-8
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2014+ Damjan Rems
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
# a copy of this software and associated documentation files (the
|
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
# the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be
|
|
14
|
+
# included in all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
#++
|
|
24
|
+
|
|
25
|
+
########################################################################
|
|
26
|
+
#
|
|
27
|
+
########################################################################
|
|
28
|
+
class DcMenuRenderer
|
|
29
|
+
|
|
30
|
+
include DcApplicationHelper
|
|
31
|
+
########################################################################
|
|
32
|
+
#
|
|
33
|
+
########################################################################
|
|
34
|
+
def initialize( parent, opts )
|
|
35
|
+
@parent = parent
|
|
36
|
+
opts[:name] ||= parent.site.menu_name # default in site
|
|
37
|
+
@menu = DcMenu.find_by(name: opts[:name].to_s)
|
|
38
|
+
@opts = opts
|
|
39
|
+
self
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
########################################################################
|
|
43
|
+
# Return selected topmenu level
|
|
44
|
+
########################################################################
|
|
45
|
+
def find_selected
|
|
46
|
+
ret = @menu.dc_menu_items.find( @parent.page.menu_id ) if @parent.page.menu_id
|
|
47
|
+
# return first if not found (something is wrong)
|
|
48
|
+
ret ||= @menu.dc_menu_items[0]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
########################################################################
|
|
52
|
+
# Creates edit link if in edit mode.
|
|
53
|
+
########################################################################
|
|
54
|
+
def link_4edit(opts)
|
|
55
|
+
html = ''
|
|
56
|
+
if @opts[:edit_mode] > 1
|
|
57
|
+
opts.merge!( { controller: 'cmsedit', action: 'edit' } )
|
|
58
|
+
title = "#{t('drgcms.edit')}: "
|
|
59
|
+
opts[:title] = "#{title} #{opts[:title]}"
|
|
60
|
+
html << '<li>'+dc_link_for_edit(opts)+'</li>'
|
|
61
|
+
end
|
|
62
|
+
html
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
########################################################################
|
|
66
|
+
# Returns html code required for link in a menu.
|
|
67
|
+
########################################################################
|
|
68
|
+
def link_4menu(item)
|
|
69
|
+
# Error in early development. Throw out
|
|
70
|
+
item.link = ((item.link[0] == '/' ? '' : '/') + item.link) unless item.link.match('http')
|
|
71
|
+
target = item.target.blank? ? nil : item.target
|
|
72
|
+
# - in first place won't write caption text
|
|
73
|
+
caption = item.caption[0] == '-' ? '' : item.caption.to_s
|
|
74
|
+
img_title = item.caption.to_s.sub('-','')
|
|
75
|
+
(item.picture.blank? ? '' : @parent.link_to( @parent.image_tag(item.picture), item.link, {title: img_title, target: target} )) +
|
|
76
|
+
( caption.blank? ? '' : @parent.link_to(caption, item.link, {target: target}) )
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
########################################################################
|
|
80
|
+
# Creates html required for submenu on one level
|
|
81
|
+
########################################################################
|
|
82
|
+
def do_menu_level(menu, options={})
|
|
83
|
+
html = '<ul>'
|
|
84
|
+
if @opts[:edit_mode] > 1
|
|
85
|
+
options[:title] = menu.respond_to?('name') ? menu.name : menu.caption # 1. level or submenus
|
|
86
|
+
options[:id] = menu._id
|
|
87
|
+
html << link_4edit(options)
|
|
88
|
+
end
|
|
89
|
+
# sort items acording to :order
|
|
90
|
+
menu.dc_menu_items.order_by(order: 1).each do |item|
|
|
91
|
+
next unless item.active
|
|
92
|
+
# menu can be hidden from user
|
|
93
|
+
can_view, msg = dc_user_can_view(@parent, item)
|
|
94
|
+
next unless can_view
|
|
95
|
+
|
|
96
|
+
html << if item.id == @selected.id
|
|
97
|
+
"<li class=\"menu-selected\">#{ link_4menu(item) }"
|
|
98
|
+
else
|
|
99
|
+
"<li>#{ link_4menu(item) }"
|
|
100
|
+
end
|
|
101
|
+
# do submenu
|
|
102
|
+
if (sub = item.dc_menu_items).size > 0
|
|
103
|
+
if @opts[:edit_mode] > 1
|
|
104
|
+
opts = options.clone
|
|
105
|
+
opts[:ids] = (opts[:ids] ? "#{opts[:ids]};" : '') + menu._id.to_s
|
|
106
|
+
opts[:table] = (opts[:table] ? "#{opts[:table]};" : '') + 'dc_menu_item'
|
|
107
|
+
end
|
|
108
|
+
html << do_menu_level(item, opts)
|
|
109
|
+
end
|
|
110
|
+
html << '</li>'
|
|
111
|
+
end
|
|
112
|
+
html << '</ul>'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
########################################################################
|
|
116
|
+
# Creates default menu.
|
|
117
|
+
########################################################################
|
|
118
|
+
def default
|
|
119
|
+
return "(#{@opts[:name]}) menu not found!" if @menu.nil?
|
|
120
|
+
#
|
|
121
|
+
@selected = find_selected
|
|
122
|
+
html = ''
|
|
123
|
+
html << "<div id='#{@menu.div_name}'>" unless @menu.div_name.blank?
|
|
124
|
+
html << do_menu_level(@menu, table: 'dc_menu')
|
|
125
|
+
html << "</div>" unless @menu.div_name.blank?
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
########################################################################
|
|
129
|
+
#
|
|
130
|
+
########################################################################
|
|
131
|
+
def render_html
|
|
132
|
+
method = @opts[:method] || 'default'
|
|
133
|
+
respond_to?(method) ? send(method) : "Error DcMenu: Method #{method} doesn't exist!"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
########################################################################
|
|
137
|
+
#
|
|
138
|
+
########################################################################
|
|
139
|
+
def render_css
|
|
140
|
+
@menu.css if @menu
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2012+ Damjan Rems
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
########################################################################
|
|
25
|
+
#
|
|
26
|
+
########################################################################
|
|
27
|
+
class DcPageRenderer
|
|
28
|
+
|
|
29
|
+
include DcApplicationHelper
|
|
30
|
+
|
|
31
|
+
########################################################################
|
|
32
|
+
#
|
|
33
|
+
########################################################################
|
|
34
|
+
def initialize( parent, opts={} )
|
|
35
|
+
@parent = parent
|
|
36
|
+
@opts = opts
|
|
37
|
+
@page = @parent.page
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
=begin
|
|
41
|
+
#########################################################################
|
|
42
|
+
# Return code for editing this piece.
|
|
43
|
+
########################################################################
|
|
44
|
+
def link_4edit()
|
|
45
|
+
html = ''
|
|
46
|
+
if @opts[:edit_mode] > 1
|
|
47
|
+
html << dc_page_edit_menu() # @opts[:editparams] )
|
|
48
|
+
end
|
|
49
|
+
html
|
|
50
|
+
end
|
|
51
|
+
=end
|
|
52
|
+
|
|
53
|
+
#########################################################################
|
|
54
|
+
# default DcPage render method
|
|
55
|
+
#########################################################################
|
|
56
|
+
def default
|
|
57
|
+
can_view, msg = dc_user_can_view(@parent, @page)
|
|
58
|
+
return msg unless can_view
|
|
59
|
+
#
|
|
60
|
+
html = ''
|
|
61
|
+
html << dc_page_edit_menu() if @opts[:edit_mode] > 1
|
|
62
|
+
html << @page.body
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#########################################################################
|
|
66
|
+
# render html
|
|
67
|
+
########################################################################
|
|
68
|
+
def render_html
|
|
69
|
+
method = @opts[:method] || 'default'
|
|
70
|
+
respond_to?(method) ? send(method) : "Error DcPage: Method #{method} doesn't exist!"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
########################################################################
|
|
74
|
+
# render css
|
|
75
|
+
########################################################################
|
|
76
|
+
def render_css
|
|
77
|
+
@page.css
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2012+ Damjan Rems
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
########################################################################
|
|
25
|
+
#
|
|
26
|
+
########################################################################
|
|
27
|
+
class DcPartRenderer
|
|
28
|
+
|
|
29
|
+
include DcApplicationHelper
|
|
30
|
+
|
|
31
|
+
########################################################################
|
|
32
|
+
#
|
|
33
|
+
########################################################################
|
|
34
|
+
def initialize( parent, opts={} )
|
|
35
|
+
@parent = parent
|
|
36
|
+
@opts = opts
|
|
37
|
+
@part_css = ''
|
|
38
|
+
self
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
########################################################################
|
|
42
|
+
# Render single particle
|
|
43
|
+
########################################################################
|
|
44
|
+
def render_particle(particle, opts)
|
|
45
|
+
# Check if policy allows to view page
|
|
46
|
+
can_view, msg = dc_user_can_view(@parent, particle)
|
|
47
|
+
return msg unless can_view
|
|
48
|
+
html = ''
|
|
49
|
+
if @opts[:edit_mode] > 1
|
|
50
|
+
opts[:editparams].merge!(title: "#{t('drgcms.edit')}: #{particle.name}", controller: :cmsedit)
|
|
51
|
+
html << dc_link_for_edit( opts[:editparams] )
|
|
52
|
+
end
|
|
53
|
+
#
|
|
54
|
+
if particle.piece_id
|
|
55
|
+
opts[:id] = particle.piece_id
|
|
56
|
+
piece = DcPieceRenderer.new(@parent, opts)
|
|
57
|
+
html << piece.render_html
|
|
58
|
+
@part_css << piece.render_css
|
|
59
|
+
else
|
|
60
|
+
html << particle.body
|
|
61
|
+
@part_css << particle.css.to_s
|
|
62
|
+
end
|
|
63
|
+
html
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
########################################################################
|
|
67
|
+
# Load parts defined in design, page or dc_piece
|
|
68
|
+
########################################################################
|
|
69
|
+
def load_parts
|
|
70
|
+
@parent.parts = []
|
|
71
|
+
# Start with parts in design. Collect to array and add values needed for editing
|
|
72
|
+
if @parent.design
|
|
73
|
+
@parent.design.dc_parts.where(active: true).each do |part|
|
|
74
|
+
type = decamelize_type(part._type) || 'dc_part'
|
|
75
|
+
@parent.parts << [part, @parent.design.id, type, "dc_design;#{type}"]
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
# add parts in page
|
|
79
|
+
@parent.page.dc_parts.where(active: true).each do |part|
|
|
80
|
+
type = decamelize_type(part._type) || 'dc_part'
|
|
81
|
+
@parent.parts << [part, @parent.page.id, type, "#{@parent.site.page_table};#{type}"]
|
|
82
|
+
end
|
|
83
|
+
# add parts belonging to site, defined in dc_pieces
|
|
84
|
+
DcPiece.where(site_id: @parent.site._id, active: true).each do |part|
|
|
85
|
+
@parent.parts << [part, part._id, 'dc_piece', 'dc_piece']
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
########################################################################
|
|
90
|
+
# Default part_renderer method will collect all parts with the div_id defined
|
|
91
|
+
# by position and create html output defined by order.
|
|
92
|
+
########################################################################
|
|
93
|
+
def default
|
|
94
|
+
html = ''
|
|
95
|
+
# Load all parts only once per call
|
|
96
|
+
load_parts if @parent.parts.nil?
|
|
97
|
+
p 'DcPart: Parameter location will be deprecated! Please use position keyword.' if @opts['location']
|
|
98
|
+
@opts[:position] ||= @opts['position'] || @opts[:location] || @opts['location'] # symbols are not strings. Ensure that it works.
|
|
99
|
+
# Select parts
|
|
100
|
+
parts = []
|
|
101
|
+
@parent.parts.each { |v| parts << v if v[0].div_id == @opts[:position] }
|
|
102
|
+
# Edit link
|
|
103
|
+
@opts[:editparams].merge!( { controller: 'cmsedit', action: 'edit' } )
|
|
104
|
+
if parts.size > 0
|
|
105
|
+
parts.sort! {|a,b| a[0].order <=> b[0].order }
|
|
106
|
+
|
|
107
|
+
parts.each do |part|
|
|
108
|
+
@opts[:editparams].merge!( id: part[0], ids: "#{part[1]}", formname: part[2], table: part[3] )
|
|
109
|
+
html << render_particle(part[0], @opts)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
html
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
########################################################################
|
|
116
|
+
# This method will search and render single part defined in page. Part may
|
|
117
|
+
# be defined in current page or in any page in current pages file.
|
|
118
|
+
#
|
|
119
|
+
# Options:
|
|
120
|
+
# required :name : Name of part.
|
|
121
|
+
# optional :page_id : Id of page where part is saved if not current page.
|
|
122
|
+
# optional :page_link : Subject link of page where part is saved if not current page.
|
|
123
|
+
########################################################################
|
|
124
|
+
def in_page
|
|
125
|
+
# Part is in page with id
|
|
126
|
+
page = if @opts[:page_id]
|
|
127
|
+
pageclass = @parent.site.page_table.classify.constantize
|
|
128
|
+
pageclass.find(@opts[:page_id])
|
|
129
|
+
# Part is in page with subject link
|
|
130
|
+
elsif @opts[:page_link]
|
|
131
|
+
pageclass = @parent.site.page_table.classify.constantize
|
|
132
|
+
@page = pageclass.find_by(dc_site_id: @parent.site._id, subject_link: @opts[:page_link])
|
|
133
|
+
# Part is in current page
|
|
134
|
+
else
|
|
135
|
+
@parent.page
|
|
136
|
+
end
|
|
137
|
+
return "Error DcPart: Page not found!" if page.nil?
|
|
138
|
+
#
|
|
139
|
+
if part = page.dc_parts.find_by(name: @opts[:name])
|
|
140
|
+
@opts[:editparams].merge!(id: part, ids: page._id, formname: 'dc_part', table: "#{@parent.site.page_table};dc_part" )
|
|
141
|
+
render_particle(part, @opts)
|
|
142
|
+
else
|
|
143
|
+
"Part with name #{@opts[:name]} not found in page!"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
########################################################################
|
|
148
|
+
#
|
|
149
|
+
########################################################################
|
|
150
|
+
def render_html
|
|
151
|
+
method = @opts[:method] || 'default'
|
|
152
|
+
respond_to?(method) ? send(method) : "Error DcPart: Method #{method} doesn't exist!"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
########################################################################
|
|
156
|
+
#
|
|
157
|
+
########################################################################
|
|
158
|
+
def render_css
|
|
159
|
+
@part_css
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2012+ Damjan Rems
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
########################################################################
|
|
25
|
+
#
|
|
26
|
+
########################################################################
|
|
27
|
+
class DcPieceRenderer
|
|
28
|
+
|
|
29
|
+
include DcApplicationHelper
|
|
30
|
+
|
|
31
|
+
########################################################################
|
|
32
|
+
#
|
|
33
|
+
########################################################################
|
|
34
|
+
def initialize( parent, opts={} )
|
|
35
|
+
@parent = parent
|
|
36
|
+
@opts = opts
|
|
37
|
+
@piece = DcPiece.find(opts[:id]) if opts[:id]
|
|
38
|
+
if @piece.nil? # alternatively find by name
|
|
39
|
+
name = opts[:name] || opts[:id]
|
|
40
|
+
@piece = if @opts[:site]
|
|
41
|
+
DcPiece.find_by(name: name, site_id: dc_get_site._id)
|
|
42
|
+
else
|
|
43
|
+
DcPiece.find_by(name: name)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#########################################################################
|
|
49
|
+
# Return code for editing this piece.
|
|
50
|
+
########################################################################
|
|
51
|
+
def link_4edit()
|
|
52
|
+
html = ''
|
|
53
|
+
if @opts[:edit_mode] > 1
|
|
54
|
+
@opts[:editparams].merge!( { table: 'dc_piece',
|
|
55
|
+
controller: 'cmsedit',
|
|
56
|
+
action: 'edit',
|
|
57
|
+
id: @piece.id,
|
|
58
|
+
title: "#{t('drgcms.edit')}: #{@piece.name}" } )
|
|
59
|
+
html << dc_link_for_edit( @opts[:editparams] )
|
|
60
|
+
end
|
|
61
|
+
html
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
########################################################################
|
|
65
|
+
# script renderer expects rails erb code (view) in the script field.
|
|
66
|
+
#
|
|
67
|
+
# Usefull when you have many designs which have lots pieces of code in common.
|
|
68
|
+
########################################################################
|
|
69
|
+
def script
|
|
70
|
+
html = link_4edit()
|
|
71
|
+
html << @parent.render(inline: @piece.script, layout: @opts[:layout])
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
########################################################################
|
|
75
|
+
# script renderer expects rails erb code (view) in the script field.
|
|
76
|
+
# Used for designs with common code and one part which is different.
|
|
77
|
+
# It function is similar to dc_replace_in_design method except that design
|
|
78
|
+
# is defined in dc_piece document and not in site document.
|
|
79
|
+
#
|
|
80
|
+
# Example: As used in design. Backslashing < and % is important \<\%
|
|
81
|
+
# <% part = "<div class='some-class'>\<\%= dc_render(:my_renderer, method: 'render_method') \%\></div>" %>
|
|
82
|
+
# <%= dc_render(:dc_piece, id: 'common', method: 'script', replace: '[main]', with: part) %>
|
|
83
|
+
#
|
|
84
|
+
# Want to replace more than one part. Use array.
|
|
85
|
+
# <%= dc_render(:dc_piece, id: 'common', method: 'script', replace: ['[part1]','[part2]'], with: [part1, part2]) %>
|
|
86
|
+
########################################################################
|
|
87
|
+
def script
|
|
88
|
+
s = @piece.script
|
|
89
|
+
if @opts[:replace]
|
|
90
|
+
# replace more than one part of code
|
|
91
|
+
if @opts[:replace].class == Array
|
|
92
|
+
0.upto(@opts[:replace].size - 1) {|i| s.sub!(@opts[:replace][i], @opts[:with][i])}
|
|
93
|
+
else
|
|
94
|
+
s.sub!(@opts[:replace], @opts[:with])
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
@parent.render(inline: s, layout: @opts[:layout])
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
#########################################################################
|
|
101
|
+
# default DcPiece render method
|
|
102
|
+
########################################################################
|
|
103
|
+
def default
|
|
104
|
+
html = link_4edit()
|
|
105
|
+
html << @piece.body
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#########################################################################
|
|
109
|
+
# render html
|
|
110
|
+
########################################################################
|
|
111
|
+
def render_html
|
|
112
|
+
return "DcPiece #{@opts[:id]} #{@opts[:name]} not found!" unless @piece
|
|
113
|
+
method = @opts[:method] || 'default'
|
|
114
|
+
respond_to?(method) ? send(method) : "Error DcPiece: Method #{method} doesn't exist!"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
########################################################################
|
|
118
|
+
# render css
|
|
119
|
+
########################################################################
|
|
120
|
+
def render_css
|
|
121
|
+
@piece ? "#{@piece.css}" : ''
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|