enjoy_cms_pages 0.4.0.beta3
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/.gitignore +9 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +40 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/enjoy/pages/init.coffee +2 -0
- data/app/assets/javascripts/enjoy/pages/scrolling.coffee +55 -0
- data/app/assets/javascripts/enjoy/pages.coffee +6 -0
- data/app/controllers/concerns/enjoy/pages/blocksetable.rb +81 -0
- data/app/controllers/concerns/enjoy/pages/decorators/pages_controller.rb +5 -0
- data/app/controllers/concerns/enjoy/pages/nav_menu.rb +91 -0
- data/app/controllers/concerns/enjoy/pages/seo_pages.rb +90 -0
- data/app/controllers/enjoy/pages/pages_controller.rb +7 -0
- data/app/helpers/enjoy/pages/canonical_helper.rb +13 -0
- data/app/helpers/enjoy/pages/pages_helpers.rb +2 -0
- data/app/models/concerns/enjoy/pages/canonicalable.rb +22 -0
- data/app/models/concerns/enjoy/pages/connectable.rb +36 -0
- data/app/models/concerns/enjoy/pages/decorators/block.rb +5 -0
- data/app/models/concerns/enjoy/pages/decorators/blockset.rb +5 -0
- data/app/models/concerns/enjoy/pages/decorators/menu.rb +5 -0
- data/app/models/concerns/enjoy/pages/decorators/page.rb +5 -0
- data/app/models/enjoy/pages/block.rb +13 -0
- data/app/models/enjoy/pages/blockset.rb +13 -0
- data/app/models/enjoy/pages/menu.rb +16 -0
- data/app/models/enjoy/pages/page.rb +16 -0
- data/app/views/enjoy/pages/pages/show.html.slim +1 -0
- data/app/views/rails_admin/main/_enjoy_connectable.html.slim +56 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/config/initializers/enjoy_pages.rb +85 -0
- data/config/locales/ru.enjoy.pages.yml +44 -0
- data/enjoy_cms_pages.gemspec +36 -0
- data/lib/enjoy/pages/admin/block.rb +67 -0
- data/lib/enjoy/pages/admin/blockset.rb +53 -0
- data/lib/enjoy/pages/admin/menu.rb +27 -0
- data/lib/enjoy/pages/admin/page.rb +98 -0
- data/lib/enjoy/pages/admin.rb +4 -0
- data/lib/enjoy/pages/configuration.rb +32 -0
- data/lib/enjoy/pages/controllers/pages.rb +26 -0
- data/lib/enjoy/pages/engine.rb +5 -0
- data/lib/enjoy/pages/models/active_record/block.rb +16 -0
- data/lib/enjoy/pages/models/active_record/blockset.rb +19 -0
- data/lib/enjoy/pages/models/active_record/menu.rb +20 -0
- data/lib/enjoy/pages/models/active_record/page.rb +22 -0
- data/lib/enjoy/pages/models/block.rb +89 -0
- data/lib/enjoy/pages/models/blockset.rb +17 -0
- data/lib/enjoy/pages/models/menu.rb +23 -0
- data/lib/enjoy/pages/models/mongoid/block.rb +32 -0
- data/lib/enjoy/pages/models/mongoid/blockset.rb +16 -0
- data/lib/enjoy/pages/models/mongoid/menu.rb +16 -0
- data/lib/enjoy/pages/models/mongoid/page.rb +43 -0
- data/lib/enjoy/pages/models/page.rb +106 -0
- data/lib/enjoy/pages/rails_admin_ext/enjoy_connectable.rb +33 -0
- data/lib/enjoy/pages/rails_admin_ext/menu.rb +147 -0
- data/lib/enjoy/pages/routes.rb +46 -0
- data/lib/enjoy/pages/version.rb +5 -0
- data/lib/enjoy_cms_pages.rb +70 -0
- data/lib/generators/enjoy/pages/migration_generator.rb +18 -0
- data/lib/generators/enjoy/pages/templates/migration_blocks.rb +42 -0
- data/lib/generators/enjoy/pages/templates/migration_pages.rb +48 -0
- data/release.sh +7 -0
- metadata +164 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Block
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Enjoy::Model
|
6
|
+
include Enjoy::Enableable
|
7
|
+
include ManualSlug
|
8
|
+
|
9
|
+
include Enjoy::Pages.orm_specific('Block')
|
10
|
+
|
11
|
+
included do
|
12
|
+
manual_slug :name
|
13
|
+
|
14
|
+
validates :file_path, format: {
|
15
|
+
# with: /\A(?!layouts\/).*\Z/,
|
16
|
+
without: /\Alayouts\/.*\Z/,
|
17
|
+
message: "Недопустимый путь к файлу"
|
18
|
+
}
|
19
|
+
|
20
|
+
attr_accessor :file_pathname
|
21
|
+
after_initialize do
|
22
|
+
self.file_pathname = Pathname.new(file_path) unless file_path.nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def file_pathname_as_partial
|
27
|
+
self.file_pathname.dirname.join("_#{self.file_pathname.basename}")
|
28
|
+
end
|
29
|
+
|
30
|
+
def file_pathname_for_fs
|
31
|
+
self.partial ? self.file_path_as_partial : self.file_pathname
|
32
|
+
end
|
33
|
+
|
34
|
+
def render_or_content_html(view, opts = {})
|
35
|
+
ret = ""
|
36
|
+
unless self.file_path.blank?
|
37
|
+
opts.merge!(partial: self.file_path)
|
38
|
+
ret = view.render(opts) rescue self.content_html.html_safe
|
39
|
+
else
|
40
|
+
ret = self.content_html.html_safe
|
41
|
+
end
|
42
|
+
ret = content_tag wrapper_tag, ret, class: wrapper_class, id: wrapper_id if use_wrapper
|
43
|
+
ret = yield ret if block_given?
|
44
|
+
return ret
|
45
|
+
end
|
46
|
+
|
47
|
+
def render_or_content(view, opts = {})
|
48
|
+
ret = ""
|
49
|
+
unless self.file_path.blank?
|
50
|
+
opts.merge!(partial: self.file_path)
|
51
|
+
ret = view.render(opts) rescue self.content
|
52
|
+
else
|
53
|
+
ret = self.content
|
54
|
+
end
|
55
|
+
ret = yield ret if block_given?
|
56
|
+
return ret
|
57
|
+
end
|
58
|
+
|
59
|
+
def file_fullpath(with_ext = false, ext = ".html.slim")
|
60
|
+
ret = nil
|
61
|
+
unless self.file_path.blank?
|
62
|
+
res_filename = self.file_pathname_for_fs.to_s
|
63
|
+
res_filename += ext if with_ext
|
64
|
+
ret = Rails.root.join("views", res_filename)
|
65
|
+
end
|
66
|
+
return ret
|
67
|
+
end
|
68
|
+
|
69
|
+
def nav_options
|
70
|
+
nav_options_default.merge(nav_options_additions)
|
71
|
+
end
|
72
|
+
|
73
|
+
def nav_options_default
|
74
|
+
{
|
75
|
+
highlights_on: false,
|
76
|
+
link_html: {
|
77
|
+
data: {
|
78
|
+
pageblock_selector: self.pageblock_selector
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
def nav_options_additions
|
85
|
+
{}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Blockset
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Enjoy::Model
|
6
|
+
include Enjoy::Enableable
|
7
|
+
include ManualSlug
|
8
|
+
|
9
|
+
include Enjoy::Pages.orm_specific('Blockset')
|
10
|
+
|
11
|
+
included do
|
12
|
+
manual_slug :name
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Menu
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Enjoy::Model
|
6
|
+
include Enjoy::Enableable
|
7
|
+
include ManualSlug
|
8
|
+
|
9
|
+
include Enjoy::Pages.orm_specific('Menu')
|
10
|
+
|
11
|
+
included do
|
12
|
+
manual_slug :name
|
13
|
+
|
14
|
+
after_save do
|
15
|
+
Rails.cache.delete 'menus'
|
16
|
+
end
|
17
|
+
after_destroy do
|
18
|
+
Rails.cache.delete 'menus'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Mongoid
|
4
|
+
module Block
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
include Enjoy::HtmlField
|
8
|
+
|
9
|
+
included do
|
10
|
+
field :name, type: String, default: ""
|
11
|
+
|
12
|
+
field :pageblock_selector, type: String, localize: Enjoy::Pages.config.localize, default: ""
|
13
|
+
field :file_path, type: String, localize: Enjoy::Pages.config.localize, default: ""
|
14
|
+
field :partial, type: Boolean, default: true
|
15
|
+
embedded_in :blockset, inverse_of: :blocks, class_name: "Enjoy::Pages::Blockset"
|
16
|
+
|
17
|
+
enjoy_cms_html_field :content, type: String, localize: Enjoy::Pages.config.localize, default: ""
|
18
|
+
|
19
|
+
field :use_wrapper, type: Boolean, default: false
|
20
|
+
field :wrapper_tag, type: String, default: ""
|
21
|
+
field :wrapper_class, type: String, default: ""
|
22
|
+
field :wrapper_id, type: String, default: ""
|
23
|
+
|
24
|
+
field :menu_link_content, type: String
|
25
|
+
field :show_in_menu, type: Boolean, default: true
|
26
|
+
scope :show_in_menu, -> { where(show_in_menu: true) }
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Mongoid
|
4
|
+
module Blockset
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
field :name, type: String, default: ""
|
9
|
+
|
10
|
+
embeds_many :blocks, inverse_of: :blockset, class_name: "Enjoy::Pages::Block"
|
11
|
+
accepts_nested_attributes_for :blocks, allow_destroy: true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Mongoid
|
4
|
+
module Menu
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
has_and_belongs_to_many :pages, inverse_of: :menus, class_name: "Enjoy::Pages::Page"
|
9
|
+
alias_method :items, :pages
|
10
|
+
|
11
|
+
field :name, type: String, default: ""
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Mongoid
|
4
|
+
module Page
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
include Enjoy::HtmlField
|
8
|
+
|
9
|
+
included do
|
10
|
+
scope :connected, -> {
|
11
|
+
where(:connectable_id.ne => nil)
|
12
|
+
}
|
13
|
+
scope :unconnected, -> (except_this = nil) {
|
14
|
+
if except_this
|
15
|
+
where({"$or" =>[
|
16
|
+
{:connectable_id => nil},
|
17
|
+
{"$and" => [
|
18
|
+
{connectable_type: except_this.class.to_param},
|
19
|
+
{connectable_id: except_this._id}
|
20
|
+
]}
|
21
|
+
]})
|
22
|
+
else
|
23
|
+
where(:connectable_id => nil)
|
24
|
+
end
|
25
|
+
}
|
26
|
+
|
27
|
+
field :name, type: String, localize: Enjoy::Seo.config.localize, default: ""
|
28
|
+
|
29
|
+
field :regexp, type: String, default: ""
|
30
|
+
field :redirect, type: String, default: ""
|
31
|
+
enjoy_cms_html_field :excerpt, type: String, localize: Enjoy::Pages.config.localize, default: ""
|
32
|
+
enjoy_cms_html_field :content, type: String, localize: Enjoy::Pages.config.localize, default: ""
|
33
|
+
field :fullpath, type: String, default: ""
|
34
|
+
|
35
|
+
has_and_belongs_to_many :menus, inverse_of: :pages, class_name: "Enjoy::Pages::Menu"
|
36
|
+
|
37
|
+
scope :sorted, -> { order_by([:lft, :asc]) }
|
38
|
+
scope :menu, ->(menu_id) { enabled.sorted.where(menu_ids: menu_id) }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Enjoy::Pages
|
2
|
+
module Models
|
3
|
+
module Page
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Enjoy::Model
|
6
|
+
include Enjoy::Enableable
|
7
|
+
include ManualSlug
|
8
|
+
if Enjoy::Pages.config.seo_support
|
9
|
+
include Enjoy::Seo::Seoable
|
10
|
+
include Enjoy::Seo::SitemapDataField
|
11
|
+
end
|
12
|
+
|
13
|
+
include Enjoy::Pages.orm_specific('Page')
|
14
|
+
|
15
|
+
# if Enjoy.config.search_enabled
|
16
|
+
# include Enjoy::ElasticSearch
|
17
|
+
# end
|
18
|
+
|
19
|
+
included do
|
20
|
+
acts_as_nested_set
|
21
|
+
|
22
|
+
validates_uniqueness_of :fullpath
|
23
|
+
validates_presence_of :name
|
24
|
+
manual_slug :name
|
25
|
+
before_validation do
|
26
|
+
self.fullpath = "/pages/#{slug}" if self.fullpath.blank?
|
27
|
+
end
|
28
|
+
|
29
|
+
belongs_to :connectable, polymorphic: true
|
30
|
+
|
31
|
+
before_save do
|
32
|
+
self.connectable_id = nil if self.connectable_type.nil?
|
33
|
+
self.connectable_type = nil if self.connectable_id.nil?
|
34
|
+
self
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def page_h1
|
39
|
+
_ret = seo ? seo.h1 : nil
|
40
|
+
_ret = name if _ret.blank?
|
41
|
+
_ret = title if _ret.blank?
|
42
|
+
_ret
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_fullpath
|
46
|
+
redirect.blank? ? fullpath : redirect
|
47
|
+
end
|
48
|
+
|
49
|
+
def has_content?
|
50
|
+
@content_used.nil? && !content.blank?
|
51
|
+
end
|
52
|
+
|
53
|
+
def page_content
|
54
|
+
if @content_used.nil?
|
55
|
+
@content_used = true
|
56
|
+
if content.nil?
|
57
|
+
''
|
58
|
+
else
|
59
|
+
content.gsub(/\{\{(.*?)\}\}/) do
|
60
|
+
Settings ? Settings.get($1).val : "" #temp
|
61
|
+
end
|
62
|
+
end
|
63
|
+
else
|
64
|
+
''
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def is_current?(url)
|
69
|
+
if fullpath == '/'
|
70
|
+
url == '/'
|
71
|
+
else
|
72
|
+
url.match(clean_regexp)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def regexp_prefix
|
77
|
+
Enjoy::Pages.config.localize ? "(?:#{I18n.available_locales.map { |l| "\\/#{l}"}.join("|")})?" : ""
|
78
|
+
end
|
79
|
+
|
80
|
+
def clean_regexp
|
81
|
+
if regexp.blank?
|
82
|
+
/^#{regexp_prefix}#{Regexp.escape(fullpath)}$/
|
83
|
+
else
|
84
|
+
begin
|
85
|
+
/#{regexp}/
|
86
|
+
rescue
|
87
|
+
# not a valid regexp - treat as literal search string
|
88
|
+
/#{Regexp.escape(regexp)}/
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def nav_options
|
94
|
+
nav_options_default.merge(nav_options_additions)
|
95
|
+
end
|
96
|
+
|
97
|
+
def nav_options_default
|
98
|
+
{highlights_on: clean_regexp}
|
99
|
+
end
|
100
|
+
|
101
|
+
def nav_options_additions
|
102
|
+
{}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rails_admin/config/fields/types/has_many_association'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
module Config
|
5
|
+
module Fields
|
6
|
+
module Types
|
7
|
+
class EnjoyConnectable < RailsAdmin::Config::Fields::Types::HasManyAssociation
|
8
|
+
RailsAdmin::Config::Fields::Types::register(self)
|
9
|
+
include RailsAdmin::Engine.routes.url_helpers
|
10
|
+
|
11
|
+
register_instance_option :partial do
|
12
|
+
:enjoy_connectable
|
13
|
+
end
|
14
|
+
|
15
|
+
register_instance_option :autocreate_page_attr do
|
16
|
+
:enjoy_connectable_autocreate_page
|
17
|
+
end
|
18
|
+
|
19
|
+
register_instance_option :allowed_methods do
|
20
|
+
[method_name, autocreate_page_attr]
|
21
|
+
end
|
22
|
+
|
23
|
+
register_instance_option :associated_collection_scope do
|
24
|
+
me = bindings[:object]
|
25
|
+
Proc.new do |scope|
|
26
|
+
scope.unconnected(me).enabled.sorted
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'rails_admin/config/fields/base'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
module Config
|
5
|
+
module Fields
|
6
|
+
module Types
|
7
|
+
class Menu < RailsAdmin::Config::Fields::Base
|
8
|
+
# Register field type for the type loader
|
9
|
+
RailsAdmin::Config::Fields::Types::register(self)
|
10
|
+
include RailsAdmin::Engine.routes.url_helpers
|
11
|
+
|
12
|
+
register_instance_option :pretty_value do
|
13
|
+
obj = bindings[:object]
|
14
|
+
ret = []
|
15
|
+
menus = Rails.cache.fetch 'menus', expires_in: 10.minutes do
|
16
|
+
if Enjoy.mongoid?
|
17
|
+
::Enjoy::Pages::Menu.all.map { |m| {id: m.id.to_s, name: m.name } }
|
18
|
+
else
|
19
|
+
::Enjoy::Pages::Menu.all.map { |m| {id: m.id, name: m.name } }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
menus.each do |m|
|
23
|
+
if Enjoy.mongoid?
|
24
|
+
on = obj.menu_ids.include?(BSON::ObjectId.from_string(m[:id]))
|
25
|
+
else
|
26
|
+
on = obj.menu_ids.include?(m[:id].to_i)
|
27
|
+
end
|
28
|
+
ret << bindings[:view].link_to(
|
29
|
+
m[:name],
|
30
|
+
bindings[:view].toggle_menu_path(model_name: @abstract_model, id: obj.id, menu: m[:id], on: !on),
|
31
|
+
#method: :post,
|
32
|
+
title: m[:name],
|
33
|
+
class: "btn btn-mini #{on ? "btn-success" : "btn-danger"}",
|
34
|
+
style: 'margin-bottom: 5px;',
|
35
|
+
onclick: 'var $t = $(this); $.ajax({type: "POST", url: $t.attr("href"), data: {ajax:true}, success: function(r) { $t.attr("href", r.href); $t.attr("class", r.class); }, error: function(e) { alert(e.responseText); }}); return false;'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
|
39
|
+
end
|
40
|
+
|
41
|
+
register_instance_option :formatted_value do
|
42
|
+
pretty_value
|
43
|
+
end
|
44
|
+
|
45
|
+
register_instance_option :export_value do
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
|
49
|
+
register_instance_option :partial do
|
50
|
+
:form_raw
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
module RailsAdmin
|
59
|
+
module Config
|
60
|
+
module Actions
|
61
|
+
class ToggleMenu < Base
|
62
|
+
RailsAdmin::Config::Actions.register(self)
|
63
|
+
|
64
|
+
# Is the action acting on the root level (Example: /admin/contact)
|
65
|
+
register_instance_option :root? do
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
69
|
+
register_instance_option :collection? do
|
70
|
+
false
|
71
|
+
end
|
72
|
+
|
73
|
+
# Is the action on an object scope (Example: /admin/team/1/edit)
|
74
|
+
register_instance_option :member? do
|
75
|
+
true
|
76
|
+
end
|
77
|
+
|
78
|
+
register_instance_option :controller do
|
79
|
+
proc do
|
80
|
+
ajax_link = Proc.new do |am, obj, menu, on|
|
81
|
+
render json: {
|
82
|
+
href: toggle_menu_path(model_name: am, id: obj.id, menu: menu.id, on: !on),
|
83
|
+
class: "btn btn-mini #{on ? "btn-success" : "btn-danger"}",
|
84
|
+
}
|
85
|
+
end
|
86
|
+
if params['id'].present?
|
87
|
+
begin
|
88
|
+
@object = @abstract_model.model.find(params['id'])
|
89
|
+
@menu = ::Enjoy::Pages::Menu.find(params[:menu])
|
90
|
+
if params[:on] == 'true'
|
91
|
+
@object.menus << @menu
|
92
|
+
else
|
93
|
+
@object.menus.delete(@menu)
|
94
|
+
end
|
95
|
+
|
96
|
+
if @object.save
|
97
|
+
if params['ajax'].present?
|
98
|
+
if params[:on] == 'true'
|
99
|
+
ajax_link.call(@abstract_model, @object, @menu, true)
|
100
|
+
else
|
101
|
+
ajax_link.call(@abstract_model, @object, @menu, false)
|
102
|
+
end
|
103
|
+
else
|
104
|
+
if params[:on] == 'true'
|
105
|
+
flash[:success] = I18n.t('enjoy.menu.enabled', menu: @menu.name)
|
106
|
+
else
|
107
|
+
flash[:success] = I18n.t('enjoy.menu.disabled', menu: @menu.name)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
else
|
111
|
+
if params['ajax'].present?
|
112
|
+
render text: @object.errors.full_messages.join(', '), layout: false, status: 422
|
113
|
+
else
|
114
|
+
flash[:error] = @object.errors.full_messages.join(', ')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
rescue Exception => e
|
118
|
+
if params['ajax'].present?
|
119
|
+
render text: I18n.t('enjoy.menu.error', err: e.to_s), status: 422
|
120
|
+
else
|
121
|
+
flash[:error] = I18n.t('enjoy.menu.error', err: e.to_s)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
else
|
125
|
+
if params['ajax'].present?
|
126
|
+
render text: I18n.t('rs.m.no_id'), status: 422
|
127
|
+
else
|
128
|
+
flash[:error] = I18n.t('rs.m.no_id')
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
redirect_to :back unless params['ajax'].present?
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
register_instance_option :link_icon do
|
138
|
+
'icon-move'
|
139
|
+
end
|
140
|
+
|
141
|
+
register_instance_option :http_methods do
|
142
|
+
[:post]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ActionDispatch::Routing
|
2
|
+
class Mapper
|
3
|
+
|
4
|
+
def enjoy_cms_pages_routes(config = {})
|
5
|
+
routes_config = {
|
6
|
+
use_slug_path: true,
|
7
|
+
use_pages_path: true,
|
8
|
+
classes: {
|
9
|
+
pages: :pages
|
10
|
+
},
|
11
|
+
paths: {
|
12
|
+
pages: :pages
|
13
|
+
}
|
14
|
+
}
|
15
|
+
routes_config.deep_merge!(config)
|
16
|
+
|
17
|
+
generate_enjoy_pages_user_routes(routes_config)
|
18
|
+
generate_enjoy_pages_cms_routes(routes_config)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
def generate_enjoy_pages_user_routes(routes_config)
|
25
|
+
if !routes_config[:use_pages_path] and !routes_config[:classes][:pages].nil?
|
26
|
+
resources routes_config[:classes][:pages].to_sym, only: [:show], path: routes_config[:paths][:pages]
|
27
|
+
end
|
28
|
+
if !routes_config[:use_slug_path] and !routes_config[:classes][:pages].nil?
|
29
|
+
get '*slug' => "#{routes_config[:classes][:pages]}#show"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
def generate_enjoy_pages_cms_routes(routes_config)
|
33
|
+
scope module: 'enjoy' do
|
34
|
+
scope module: 'pages' do
|
35
|
+
if routes_config[:use_pages_path] and !routes_config[:classes][:pages].nil?
|
36
|
+
resources routes_config[:classes][:pages].to_sym, only: [:show], path: routes_config[:paths][:pages], as: :enjoy_pages
|
37
|
+
end
|
38
|
+
if routes_config[:use_slug_path] and !routes_config[:classes][:pages].nil?
|
39
|
+
get '*slug' => "#{routes_config[:classes][:pages]}#show"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
unless defined?(Enjoy) && Enjoy.respond_to?(:orm) && [:active_record, :mongoid].include?(Enjoy.orm)
|
2
|
+
puts "please use enjoy_cms_mongoid or enjoy_cms_activerecord"
|
3
|
+
puts "also: please use enjoy_cms_news_mongoid or enjoy_cms_news_activerecord and not enjoy_cms_news directly"
|
4
|
+
exit 1
|
5
|
+
end
|
6
|
+
|
7
|
+
require "enjoy/pages/version"
|
8
|
+
require 'enjoy/pages/engine'
|
9
|
+
require 'enjoy/pages/configuration'
|
10
|
+
|
11
|
+
require "enjoy/pages/routes"
|
12
|
+
|
13
|
+
require 'enjoy/pages/rails_admin_ext/enjoy_connectable'
|
14
|
+
require 'enjoy/pages/rails_admin_ext/menu'
|
15
|
+
|
16
|
+
require 'simple-navigation'
|
17
|
+
|
18
|
+
module Enjoy::Pages
|
19
|
+
class << self
|
20
|
+
def orm
|
21
|
+
Enjoy.orm
|
22
|
+
end
|
23
|
+
def mongoid?
|
24
|
+
Enjoy::Pages.orm == :mongoid
|
25
|
+
end
|
26
|
+
def active_record?
|
27
|
+
Enjoy::Pages.orm == :active_record
|
28
|
+
end
|
29
|
+
def model_namespace
|
30
|
+
"Enjoy::Pages::Models::#{Enjoy::Pages.orm.to_s.camelize}"
|
31
|
+
end
|
32
|
+
def orm_specific(name)
|
33
|
+
"#{model_namespace}::#{name}".constantize
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
autoload :Admin, 'enjoy/pages/admin'
|
38
|
+
module Admin
|
39
|
+
autoload :Page, 'enjoy/pages/admin/page'
|
40
|
+
autoload :Menu, 'enjoy/pages/admin/menu'
|
41
|
+
autoload :Block, 'enjoy/pages/admin/block'
|
42
|
+
autoload :Blockset, 'enjoy/pages/admin/blockset'
|
43
|
+
end
|
44
|
+
|
45
|
+
module Models
|
46
|
+
autoload :Page, 'enjoy/pages/models/page'
|
47
|
+
autoload :Menu, 'enjoy/pages/models/menu'
|
48
|
+
autoload :Block, 'enjoy/pages/models/block'
|
49
|
+
autoload :Blockset, 'enjoy/pages/models/blockset'
|
50
|
+
|
51
|
+
module Mongoid
|
52
|
+
autoload :Page, 'enjoy/pages/models/mongoid/page'
|
53
|
+
autoload :Menu, 'enjoy/pages/models/mongoid/menu'
|
54
|
+
autoload :Block, 'enjoy/pages/models/mongoid/block'
|
55
|
+
autoload :Blockset, 'enjoy/pages/models/mongoid/blockset'
|
56
|
+
end
|
57
|
+
|
58
|
+
module ActiveRecord
|
59
|
+
autoload :Page, 'enjoy/pages/models/active_record/page'
|
60
|
+
autoload :Menu, 'enjoy/pages/models/active_record/menu'
|
61
|
+
autoload :Block, 'enjoy/pages/models/active_record/block'
|
62
|
+
autoload :Blockset, 'enjoy/pages/models/active_record/blockset'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
module Controllers
|
67
|
+
autoload :Pages, 'enjoy/pages/controllers/pages'
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/active_record'
|
3
|
+
|
4
|
+
module Enjoy::Pages
|
5
|
+
class MigrationGenerator < Rails::Generators::Base
|
6
|
+
include ActiveRecord::Generators::Migration
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
desc 'Enjoy Pages migration generator'
|
10
|
+
def install
|
11
|
+
if Enjoy.active_record?
|
12
|
+
%w(pages blocks).each do |table_name|
|
13
|
+
migration_template "migration_#{table_name}.rb", "db/migrate/enjoy_create_#{table_name}.rb"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|